homework: split out password cache logic into its own .c/.h file

Preparation for extending it further down the line.
This commit is contained in:
Lennart Poettering
2021-11-13 00:22:16 +01:00
parent 0881991c32
commit 6b945d7031
5 changed files with 35 additions and 25 deletions
+11
View File
@@ -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);
}
+21
View File
@@ -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);
}
-8
View File
@@ -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,
+1 -17
View File
@@ -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, \
+2
View File
@@ -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