fileio: add new flag READ_FULL_FILE_VERIFY_REGULAR() that checks if file we operate on is regular

This commit is contained in:
Lennart Poettering
2025-11-02 21:14:35 +01:00
parent 1acec1c890
commit 7ecc69c33b
2 changed files with 9 additions and 1 deletions
+8 -1
View File
@@ -664,6 +664,12 @@ int read_full_stream_full(
if (fstat(fd, &st) < 0)
return -errno;
if (FLAGS_SET(flags, READ_FULL_FILE_VERIFY_REGULAR)) {
r = stat_verify_regular(&st);
if (r < 0)
return r;
}
if (S_ISREG(st.st_mode)) {
/* Try to start with the right file size if we shall read the file in full. Note
@@ -685,7 +691,8 @@ int read_full_stream_full(
if (flags & READ_FULL_FILE_WARN_WORLD_READABLE)
(void) warn_file_is_world_accessible(filename, &st, NULL, 0);
}
}
} else if (FLAGS_SET(flags, READ_FULL_FILE_VERIFY_REGULAR))
return -EBADFD;
/* If we don't know how much to read, figure it out now. If we shall read a part of the file, then
* allocate the requested size. If we shall load the full file start with LINE_MAX. Note that if
+1
View File
@@ -30,6 +30,7 @@ typedef enum {
READ_FULL_FILE_WARN_WORLD_READABLE = 1 << 3, /* if regular file, log at LOG_WARNING level if access mode above 0700 */
READ_FULL_FILE_CONNECT_SOCKET = 1 << 4, /* if socket inode, connect to it and read off it */
READ_FULL_FILE_FAIL_WHEN_LARGER = 1 << 5, /* fail loading if file is larger than specified size */
READ_FULL_FILE_VERIFY_REGULAR = 1 << 6, /* before reading, verify this is a regular file */
} ReadFullFileFlags;
int fdopen_unlocked(int fd, const char *options, FILE **ret);