1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
10 #include "user-record.h"
11 #include "user-record-util.h"
13 typedef struct HomeSetup
{
18 struct crypt_device
*crypt_device
;
21 sd_id128_t found_partition_uuid
;
22 sd_id128_t found_luks_uuid
;
23 sd_id128_t found_fs_uuid
;
25 uint8_t fscrypt_key_descriptor
[FS_KEY_DESCRIPTOR_SIZE
];
28 size_t volume_key_size
;
32 bool do_offline_fitrim
;
33 bool do_offline_fallocate
;
37 uint64_t partition_offset
;
38 uint64_t partition_size
;
41 typedef struct PasswordCache
{
42 /* Decoding passwords from security tokens is expensive and typically requires user interaction, hence cache any we already figured out. */
43 char **pkcs11_passwords
;
44 char **fido2_passwords
;
47 void password_cache_free(PasswordCache
*cache
);
49 #define HOME_SETUP_INIT \
53 .partition_offset = UINT64_MAX, \
54 .partition_size = UINT64_MAX, \
57 int home_setup_undo(HomeSetup
*setup
);
59 int home_prepare(UserRecord
*h
, bool already_activated
, PasswordCache
*cache
, HomeSetup
*setup
, UserRecord
**ret_header_home
);
61 int home_refresh(UserRecord
*h
, HomeSetup
*setup
, UserRecord
*header_home
, PasswordCache
*cache
, struct statfs
*ret_statfs
, UserRecord
**ret_new_home
);
63 int home_populate(UserRecord
*h
, int dir_fd
);
65 int home_load_embedded_identity(UserRecord
*h
, int root_fd
, UserRecord
*header_home
, UserReconcileMode mode
, PasswordCache
*cache
, UserRecord
**ret_embedded_home
, UserRecord
**ret_new_home
);
66 int home_store_embedded_identity(UserRecord
*h
, int root_fd
, uid_t uid
, UserRecord
*old_home
);
67 int home_extend_embedded_identity(UserRecord
*h
, UserRecord
*used
, HomeSetup
*setup
);
69 int user_record_authenticate(UserRecord
*h
, UserRecord
*secret
, PasswordCache
*cache
, bool strict_verify
);
71 int home_sync_and_statfs(int root_fd
, struct statfs
*ret
);