]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: add new helper write_base64_file_at() which encodes a binary object into...
authorLennart Poettering <lennart@poettering.net>
Mon, 10 Jun 2024 12:50:18 +0000 (14:50 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 14 Jun 2024 21:50:33 +0000 (22:50 +0100)
src/basic/fileio.c
src/basic/fileio.h
src/pcrlock/pcrlock.c

index 977fdd294c3d511b7999100abb4715b423128897..24357c1ef86faaf365ffe723eee353f35354bead 100644 (file)
@@ -355,6 +355,22 @@ int write_string_filef(
         return write_string_file(fn, p, flags);
 }
 
+int write_base64_file_at(
+                int dir_fd,
+                const char *fn,
+                const struct iovec *data,
+                WriteStringFileFlags flags) {
+
+        _cleanup_free_ char *encoded = NULL;
+        ssize_t n;
+
+        n = base64mem_full(data ? data->iov_base : NULL, data ? data->iov_len : 0, 79, &encoded);
+        if (n < 0)
+                return n;
+
+        return write_string_file_at(dir_fd, fn, encoded, flags);
+}
+
 int read_one_line_file_at(int dir_fd, const char *filename, char **ret) {
         _cleanup_fclose_ FILE *f = NULL;
         int r;
index e9fba1658024ecc034e924021c3b3975ab48665b..6986ed327665ee4f85467846387a8b61f6c2c9df 100644 (file)
@@ -66,6 +66,8 @@ static inline int write_string_file(const char *fn, const char *line, WriteStrin
         return write_string_file_ts(fn, line, flags, NULL);
 }
 
+int write_base64_file_at(int dir_fd, const char *fn, const struct iovec *data, WriteStringFileFlags flags);
+
 int write_string_filef(const char *fn, WriteStringFileFlags flags, const char *format, ...) _printf_(3, 4);
 
 int read_one_line_file_at(int dir_fd, const char *filename, char **ret);
index c07132c135085a75b5499117ec9ba19c4f57c215..a40d23a347bd3c4e248efac64afea732fa20dc3d 100644 (file)
@@ -4391,15 +4391,10 @@ static int write_boot_policy_file(const char *json_text) {
         if (r < 0)
                 return log_error_errno(r, "Failed to encode policy as credential: %m");
 
-        _cleanup_free_ char *base64_buf = NULL;
-        ssize_t base64_size;
-        base64_size = base64mem_full(encoded.iov_base, encoded.iov_len, 79, &base64_buf);
-        if (base64_size < 0)
-                return base64_size;
-
-        r = write_string_file(
+        r = write_base64_file_at(
+                        AT_FDCWD,
                         boot_policy_file,
-                        base64_buf,
+                        &encoded,
                         WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_SYNC|WRITE_STRING_FILE_MKDIR_0755);
         if (r < 0)
                 return log_error_errno(r, "Failed to write boot policy file to '%s': %m", boot_policy_file);