diff options
-rw-r--r-- | src/basic/copy.c | 16 | ||||
-rw-r--r-- | src/basic/copy.h | 1 | ||||
-rw-r--r-- | src/basic/fileio.c | 9 | ||||
-rw-r--r-- | src/basic/fileio.h | 2 | ||||
-rw-r--r-- | src/firstboot/firstboot.c | 4 | ||||
-rw-r--r-- | src/sysusers/sysusers.c | 8 |
6 files changed, 23 insertions, 17 deletions
diff --git a/src/basic/copy.c b/src/basic/copy.c index b77a1769c6..109f44c32d 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -1232,6 +1232,8 @@ int copy_access(int fdf, int fdt) { assert(fdf >= 0); assert(fdt >= 0); + /* Copies just the access mode (and not the ownership) from fdf to fdt */ + if (fstat(fdf, &st) < 0) return -errno; @@ -1241,6 +1243,20 @@ int copy_access(int fdf, int fdt) { return 0; } +int copy_rights(int fdf, int fdt) { + struct stat st; + + assert(fdf >= 0); + assert(fdt >= 0); + + /* Copies both access mode and ownership from fdf to fdt */ + + if (fstat(fdf, &st) < 0) + return -errno; + + return fchmod_and_chown(fdt, st.st_mode & 07777, st.st_uid, st.st_gid); +} + int copy_xattr(int fdf, int fdt) { _cleanup_free_ char *names = NULL; int ret = 0, r; diff --git a/src/basic/copy.h b/src/basic/copy.h index b583dff2c0..da3ba07ad2 100644 --- a/src/basic/copy.h +++ b/src/basic/copy.h @@ -64,4 +64,5 @@ static inline int copy_bytes(int fdf, int fdt, uint64_t max_bytes, CopyFlags cop int copy_times(int fdf, int fdt, CopyFlags flags); int copy_access(int fdf, int fdt); +int copy_rights(int fdf, int fdt); int copy_xattr(int fdf, int fdt); diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 596946ccf4..8560982aab 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -1327,15 +1327,6 @@ int warn_file_is_world_accessible(const char *filename, struct stat *st, const c return 0; } -int sync_rights(int from, int to) { - struct stat st; - - if (fstat(from, &st) < 0) - return -errno; - - return fchmod_and_chown(to, st.st_mode & 07777, st.st_uid, st.st_gid); -} - int rename_and_apply_smack_floor_label(const char *from, const char *to) { int r = 0; if (rename(from, to) < 0) diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 498e880354..64a30ab7bb 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -118,6 +118,4 @@ int safe_fgetc(FILE *f, char *ret); int warn_file_is_world_accessible(const char *filename, struct stat *st, const char *unit, unsigned line); -int sync_rights(int from, int to); - int rename_and_apply_smack_floor_label(const char *temp_path, const char *dest_path); diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index c0e88e7915..8cd5e28532 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -675,7 +675,7 @@ static int write_root_passwd(const char *passwd_path, const char *password, cons if (original) { struct passwd *i; - r = sync_rights(fileno(original), fileno(passwd)); + r = copy_rights(fileno(original), fileno(passwd)); if (r < 0) return r; @@ -743,7 +743,7 @@ static int write_root_shadow(const char *shadow_path, const char *hashed_passwor if (original) { struct spwd *i; - r = sync_rights(fileno(original), fileno(shadow)); + r = copy_rights(fileno(original), fileno(shadow)); if (r < 0) return r; diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 4e231be856..88e365c662 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -393,7 +393,7 @@ static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char original = fopen(passwd_path, "re"); if (original) { - r = sync_rights(fileno(original), fileno(passwd)); + r = copy_rights(fileno(original), fileno(passwd)); if (r < 0) return r; @@ -494,7 +494,7 @@ static int write_temporary_shadow(const char *shadow_path, FILE **tmpfile, char original = fopen(shadow_path, "re"); if (original) { - r = sync_rights(fileno(original), fileno(shadow)); + r = copy_rights(fileno(original), fileno(shadow)); if (r < 0) return r; @@ -590,7 +590,7 @@ static int write_temporary_group(const char *group_path, FILE **tmpfile, char ** original = fopen(group_path, "re"); if (original) { - r = sync_rights(fileno(original), fileno(group)); + r = copy_rights(fileno(original), fileno(group)); if (r < 0) return r; @@ -688,7 +688,7 @@ static int write_temporary_gshadow(const char * gshadow_path, FILE **tmpfile, ch if (original) { struct sgrp *sg; - r = sync_rights(fileno(original), fileno(gshadow)); + r = copy_rights(fileno(original), fileno(gshadow)); if (r < 0) return r; |