summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/basic/copy.c16
-rw-r--r--src/basic/copy.h1
-rw-r--r--src/basic/fileio.c9
-rw-r--r--src/basic/fileio.h2
-rw-r--r--src/firstboot/firstboot.c4
-rw-r--r--src/sysusers/sysusers.c8
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;