1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
3 #include "cryptsetup-keyfile.h"
13 size_t *ret_key_size
) {
21 if (strv_isempty(search_path
) || path_is_absolute(key_file
)) {
23 r
= read_full_file_full(
24 AT_FDCWD
, key_file
, UINT64_MAX
, SIZE_MAX
,
25 READ_FULL_FILE_SECURE
|READ_FULL_FILE_WARN_WORLD_READABLE
|READ_FULL_FILE_CONNECT_SOCKET
,
27 (char**) ret_key
, ret_key_size
);
29 return log_error_errno(r
, "Key file '%s' too large.", key_file
);
31 return log_error_errno(r
, "Failed to load key file '%s': %m", key_file
);
36 STRV_FOREACH(i
, search_path
) {
37 _cleanup_free_
char *joined
= NULL
;
39 joined
= path_join(*i
, key_file
);
43 r
= read_full_file_full(
44 AT_FDCWD
, joined
, UINT64_MAX
, SIZE_MAX
,
45 READ_FULL_FILE_SECURE
|READ_FULL_FILE_WARN_WORLD_READABLE
|READ_FULL_FILE_CONNECT_SOCKET
,
47 (char**) ret_key
, ret_key_size
);
51 log_warning_errno(r
, "Key file '%s' too large, ignoring.", key_file
);
55 return log_error_errno(r
, "Failed to load key file '%s': %m", key_file
);
58 /* Search path supplied, but file not found, report by returning NULL, but not failing */