ask-password: add support for caching passwords in the kernel keyring
This adds support for caching harddisk passwords in the kernel keyring if it is available, thus supporting caching without Plymouth being around. This is also useful for hooking up "gdm-auto-login" with the collected boot-time harddisk password, in order to support gnome keyring passphrase unlocking via the HDD password, if it is the same. Any passwords added to the kernel keyring this way have a timeout of 2.5min at which time they are purged from the kernel.
This commit is contained in:
@@ -313,14 +313,10 @@ static char *disk_mount_point(const char *label) {
|
||||
}
|
||||
|
||||
static int get_password(const char *vol, const char *src, usec_t until, bool accept_cached, char ***passwords) {
|
||||
int r = 0;
|
||||
char **p;
|
||||
_cleanup_free_ char *text = NULL;
|
||||
_cleanup_free_ char *escaped_name = NULL;
|
||||
char *id;
|
||||
_cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL, *maj_min = NULL, *text = NULL, *escaped_name = NULL;
|
||||
const char *name = NULL;
|
||||
_cleanup_free_ char *description = NULL, *name_buffer = NULL,
|
||||
*mount_point = NULL, *maj_min = NULL;
|
||||
char **p, *id;
|
||||
int r = 0;
|
||||
|
||||
assert(vol);
|
||||
assert(src);
|
||||
@@ -364,7 +360,7 @@ static int get_password(const char *vol, const char *src, usec_t until, bool acc
|
||||
|
||||
id = strjoina("cryptsetup:", escaped_name);
|
||||
|
||||
r = ask_password_auto(text, "drive-harddisk", id, until, accept_cached, passwords);
|
||||
r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", until, ASK_PASSWORD_PUSH_CACHE|(accept_cached ? ASK_PASSWORD_ACCEPT_CACHED : 0), passwords);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to query password: %m");
|
||||
|
||||
@@ -378,7 +374,7 @@ static int get_password(const char *vol, const char *src, usec_t until, bool acc
|
||||
|
||||
id = strjoina("cryptsetup-verification:", escaped_name);
|
||||
|
||||
r = ask_password_auto(text, "drive-harddisk", id, until, false, &passwords2);
|
||||
r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", until, ASK_PASSWORD_PUSH_CACHE, &passwords2);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to query verification password: %m");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user