From: Daan De Meyer Date: Tue, 26 May 2020 18:00:45 +0000 (+0200) Subject: fileio: Refactor sync_rights to take fds as arguments X-Git-Tag: v246-rc1~264^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90c81688fffde5b1d7bf9fa972db145096fae010;p=thirdparty%2Fsystemd.git fileio: Refactor sync_rights to take fds as arguments --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index ccdbfe895f7..6abe5417a6d 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -1188,13 +1188,13 @@ int warn_file_is_world_accessible(const char *filename, struct stat *st, const c return 0; } -int sync_rights(FILE *from, const char *to) { +int sync_rights(int from, int to) { struct stat st; - if (fstat(fileno(from), &st) < 0) + if (fstat(from, &st) < 0) return -errno; - return chmod_and_chown_unsafe(to, st.st_mode & 07777, st.st_uid, st.st_gid); + return fchmod_and_chown(to, st.st_mode & 07777, st.st_uid, st.st_gid); } int rename_and_apply_smack(const char *from, const char *to) { diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 9dc3f187968..03678d827a7 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -107,6 +107,6 @@ 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(FILE *from, const char *to); +int sync_rights(int from, int to); int rename_and_apply_smack(const char *temp_path, const char *dest_path); diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 3d68dc2e0fa..2cb81721033 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -367,7 +367,7 @@ static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char original = fopen(passwd_path, "re"); if (original) { - r = sync_rights(original, passwd_tmp); + r = sync_rights(fileno(original), fileno(passwd)); if (r < 0) return r; @@ -469,7 +469,7 @@ static int write_temporary_shadow(const char *shadow_path, FILE **tmpfile, char original = fopen(shadow_path, "re"); if (original) { - r = sync_rights(original, shadow_tmp); + r = sync_rights(fileno(original), fileno(shadow)); if (r < 0) return r; @@ -566,7 +566,7 @@ static int write_temporary_group(const char *group_path, FILE **tmpfile, char ** original = fopen(group_path, "re"); if (original) { - r = sync_rights(original, group_tmp); + r = sync_rights(fileno(original), fileno(group)); if (r < 0) return r; @@ -665,7 +665,7 @@ static int write_temporary_gshadow(const char * gshadow_path, FILE **tmpfile, ch if (original) { struct sgrp *sg; - r = sync_rights(original, gshadow_tmp); + r = sync_rights(fileno(original), fileno(gshadow)); if (r < 0) return r;