]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fileio: read_full_file_full() also warns when file is world readable and secure flag...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 8 Apr 2019 05:15:10 +0000 (14:15 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 9 Apr 2019 06:50:22 +0000 (15:50 +0900)
src/basic/fileio.c
src/basic/fileio.h

index 7196516b9e4012d30680e6c6c1a1fcd3ce43d4ca..78928979e9a78e9ccf17283b0883a5c4853cebe2 100644 (file)
@@ -266,6 +266,7 @@ int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
 
 int read_full_stream_full(
                 FILE *f,
+                const char *filename,
                 ReadFullFileFlags flags,
                 char **ret_contents,
                 size_t *ret_size) {
@@ -298,6 +299,9 @@ int read_full_stream_full(
                          * already makes us notice the EOF. */
                         if (st.st_size > 0)
                                 n_next = st.st_size + 1;
+
+                        if (flags & READ_FULL_FILE_SECURE)
+                                (void) warn_file_is_world_accessible(filename, &st, NULL, 0);
                 }
         }
 
@@ -388,7 +392,7 @@ int read_full_file_full(const char *filename, ReadFullFileFlags flags, char **co
 
         (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
 
-        return read_full_stream_full(f, flags, contents, size);
+        return read_full_stream_full(f, filename, flags, contents, size);
 }
 
 int executable_is_script(const char *path, char **interpreter) {
index 93e972c2eea9a2e5be223e685224115f9e2e8ce4..6add67750a7e678f79317a73299ae935075998aa 100644 (file)
@@ -48,9 +48,9 @@ int read_full_file_full(const char *filename, ReadFullFileFlags flags, char **co
 static inline int read_full_file(const char *filename, char **contents, size_t *size) {
         return read_full_file_full(filename, 0, contents, size);
 }
-int read_full_stream_full(FILE *f, ReadFullFileFlags flags, char **contents, size_t *size);
+int read_full_stream_full(FILE *f, const char *filename, ReadFullFileFlags flags, char **contents, size_t *size);
 static inline int read_full_stream(FILE *f, char **contents, size_t *size) {
-        return read_full_stream_full(f, 0, contents, size);
+        return read_full_stream_full(f, NULL, 0, contents, size);
 }
 
 int verify_file(const char *fn, const char *blob, bool accept_extra_nl);