1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
3 #include "cryptsetup-keyfile.h"
13 size_t *ret_key_size
) {
22 if (strv_isempty(search_path
) || path_is_absolute(key_file
)) {
24 r
= read_full_file_full(
25 AT_FDCWD
, key_file
, UINT64_MAX
, SIZE_MAX
,
26 READ_FULL_FILE_SECURE
|READ_FULL_FILE_WARN_WORLD_READABLE
|READ_FULL_FILE_CONNECT_SOCKET
,
28 (char**) ret_key
, ret_key_size
);
30 return log_error_errno(r
, "Key file '%s' too large.", key_file
);
32 return log_error_errno(r
, "Failed to load key file '%s': %m", key_file
);
37 STRV_FOREACH(i
, search_path
) {
38 _cleanup_free_
char *joined
= NULL
;
40 joined
= path_join(*i
, key_file
);
44 r
= read_full_file_full(
45 AT_FDCWD
, joined
, UINT64_MAX
, SIZE_MAX
,
46 READ_FULL_FILE_SECURE
|READ_FULL_FILE_WARN_WORLD_READABLE
|READ_FULL_FILE_CONNECT_SOCKET
,
48 (char**) ret_key
, ret_key_size
);
52 log_warning_errno(r
, "Key file '%s' too large, ignoring.", key_file
);
56 return log_error_errno(r
, "Failed to load key file '%s': %m", key_file
);
59 /* Search path supplied, but file not found, report by returning NULL, but not failing */