return 0;
}
-static int disk_major_minor(const char *path, char **ret) {
- struct stat st;
-
- assert(path);
-
- if (stat(path, &st) < 0)
- return -errno;
-
- if (!S_ISBLK(st.st_mode))
- return -EINVAL;
-
- if (asprintf(ret, "/dev/block/%d:%d", major(st.st_rdev), minor(st.st_rdev)) < 0)
- return -errno;
-
- return 0;
-}
-
static char* disk_description(const char *path) {
static const char name_fields[] =
}
static int get_password(const char *vol, const char *src, usec_t until, bool accept_cached, char ***ret) {
- _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL, *maj_min = NULL, *text = NULL, *escaped_name = NULL;
+ _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL, *text = NULL, *disk_path = NULL;
_cleanup_strv_free_erase_ char **passwords = NULL;
const char *name = NULL;
char **p, *id;
description = disk_description(src);
mount_point = disk_mount_point(vol);
+ disk_path = cescape(src);
+ if (!disk_path)
+ return log_oom();
+
if (description && streq(vol, description))
/* If the description string is simply the
* volume name, then let's not show this
if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0)
return log_oom();
- if (src)
- (void) disk_major_minor(src, &maj_min);
-
- if (maj_min) {
- escaped_name = maj_min;
- maj_min = NULL;
- } else
- escaped_name = cescape(src);
-
- if (!escaped_name)
- return log_oom();
-
- id = strjoina("cryptsetup:", escaped_name);
+ id = strjoina("cryptsetup:", disk_path);
r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", until,
ASK_PASSWORD_PUSH_CACHE | (accept_cached*ASK_PASSWORD_ACCEPT_CACHED),
if (asprintf(&text, "Please enter passphrase for disk %s! (verification)", name) < 0)
return log_oom();
- id = strjoina("cryptsetup-verification:", escaped_name);
+ id = strjoina("cryptsetup-verification:", disk_path);
r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", until, ASK_PASSWORD_PUSH_CACHE, &passwords2);
if (r < 0)