From 6b945d7031f34a1652d2e6808bfffbd3761e642e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 2 Nov 2021 23:03:17 +0100 Subject: [PATCH] homework: split out password cache logic into its own .c/.h file Preparation for extending it further down the line. --- src/home/homework-password-cache.c | 11 +++++++++++ src/home/homework-password-cache.h | 21 +++++++++++++++++++++ src/home/homework.c | 8 -------- src/home/homework.h | 18 +----------------- src/home/meson.build | 2 ++ 5 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 src/home/homework-password-cache.c create mode 100644 src/home/homework-password-cache.h diff --git a/src/home/homework-password-cache.c b/src/home/homework-password-cache.c new file mode 100644 index 00000000000..87d90c9184c --- /dev/null +++ b/src/home/homework-password-cache.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "homework-password-cache.h" + +void password_cache_free(PasswordCache *cache) { + if (!cache) + return; + + cache->pkcs11_passwords = strv_free_erase(cache->pkcs11_passwords); + cache->fido2_passwords = strv_free_erase(cache->fido2_passwords); +} diff --git a/src/home/homework-password-cache.h b/src/home/homework-password-cache.h new file mode 100644 index 00000000000..6b4de15724e --- /dev/null +++ b/src/home/homework-password-cache.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include "strv.h" +#include "user-record.h" + +typedef struct PasswordCache { + /* Decoding passwords from security tokens is expensive and typically requires user interaction, + * hence cache any we already figured out. */ + char **pkcs11_passwords; + char **fido2_passwords; +} PasswordCache; + +void password_cache_free(PasswordCache *cache); + +static inline bool password_cache_contains(const PasswordCache *cache, const char *p) { + if (!cache) + return false; + + return strv_contains(cache->pkcs11_passwords, p) || strv_contains(cache->fido2_passwords, p); +} diff --git a/src/home/homework.c b/src/home/homework.c index c9b1734492c..65066a5156b 100644 --- a/src/home/homework.c +++ b/src/home/homework.c @@ -36,14 +36,6 @@ /* Make sure a bad password always results in a 3s delay, no matter what */ #define BAD_PASSWORD_DELAY_USEC (3 * USEC_PER_SEC) -void password_cache_free(PasswordCache *cache) { - if (!cache) - return; - - cache->pkcs11_passwords = strv_free_erase(cache->pkcs11_passwords); - cache->fido2_passwords = strv_free_erase(cache->fido2_passwords); -} - int user_record_authenticate( UserRecord *h, UserRecord *secret, diff --git a/src/home/homework.h b/src/home/homework.h index d7ad6fbdfaa..053def63600 100644 --- a/src/home/homework.h +++ b/src/home/homework.h @@ -6,8 +6,8 @@ #include "sd-id128.h" +#include "homework-password-cache.h" #include "loop-util.h" -#include "strv.h" #include "user-record.h" #include "user-record-util.h" @@ -43,22 +43,6 @@ typedef struct HomeSetup { char *temporary_image_path; } HomeSetup; -typedef struct PasswordCache { - /* Decoding passwords from security tokens is expensive and typically requires user interaction, - * hence cache any we already figured out. */ - char **pkcs11_passwords; - char **fido2_passwords; -} PasswordCache; - -void password_cache_free(PasswordCache *cache); - -static inline bool password_cache_contains(const PasswordCache *cache, const char *p) { - if (!cache) - return false; - - return strv_contains(cache->pkcs11_passwords, p) || strv_contains(cache->fido2_passwords, p); -} - #define HOME_SETUP_INIT \ { \ .root_fd = -1, \ diff --git a/src/home/meson.build b/src/home/meson.build index 53a387fd973..439eabc9bf1 100644 --- a/src/home/meson.build +++ b/src/home/meson.build @@ -16,6 +16,8 @@ systemd_homework_sources = files(''' homework-luks.h homework-mount.c homework-mount.h + homework-password-cache.c + homework-password-cache.h homework-pkcs11.h homework-quota.c homework-quota.h