From a8693a21f8c140f4d6c4469242677c82669911e3 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Fri, 6 Jun 2014 12:07:31 +0200 Subject: [PATCH] Check return value of chmod() and fcntl() --- reference.c | 8 +++++--- rtc_linux.c | 8 +++++--- util.c | 6 ++++-- util.h | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/reference.c b/reference.c index 0864889..288e10b 100644 --- a/reference.c +++ b/reference.c @@ -359,10 +359,12 @@ update_drift_file(double freq_ppm, double skew) /* Clone the file attributes from the existing file if there is one. */ if (!stat(drift_file,&buf)) { - if (chown(temp_drift_file,buf.st_uid,buf.st_gid)) { - LOG(LOGS_WARN, LOGF_Reference, "Could not change ownership of temporary driftfile %s.tmp", drift_file); + if (chown(temp_drift_file,buf.st_uid,buf.st_gid) || + chmod(temp_drift_file,buf.st_mode & 0777)) { + LOG(LOGS_WARN, LOGF_Reference, + "Could not change ownership or permissions of temporary driftfile %s.tmp", + drift_file); } - chmod(temp_drift_file,buf.st_mode&0777); } /* Rename the temporary file to the correct location (see rename(2) for details). */ diff --git a/rtc_linux.c b/rtc_linux.c index 5100808..b87d8f3 100644 --- a/rtc_linux.c +++ b/rtc_linux.c @@ -508,10 +508,12 @@ write_coefs_to_file(int valid,time_t ref_time,double offset,double rate) /* Clone the file attributes from the existing file if there is one. */ if (!stat(coefs_file_name,&buf)) { - if (chown(temp_coefs_file_name,buf.st_uid,buf.st_gid)) { - LOG(LOGS_WARN, LOGF_RtcLinux, "Could not change ownership of temporary RTC file %s.tmp", coefs_file_name); + if (chown(temp_coefs_file_name,buf.st_uid,buf.st_gid) || + chmod(temp_coefs_file_name,buf.st_mode & 0777)) { + LOG(LOGS_WARN, LOGF_RtcLinux, + "Could not change ownership or permissions of temporary RTC file %s.tmp", + coefs_file_name); } - chmod(temp_coefs_file_name,buf.st_mode&0777); } /* Rename the temporary file to the correct location (see rename(2) for details). */ diff --git a/util.c b/util.c index ec7703e..077456c 100644 --- a/util.c +++ b/util.c @@ -647,7 +647,7 @@ UTI_FloatHostToNetwork(double x) /* ================================================== */ -void +int UTI_FdSetCloexec(int fd) { int flags; @@ -655,8 +655,10 @@ UTI_FdSetCloexec(int fd) flags = fcntl(fd, F_GETFD); if (flags != -1) { flags |= FD_CLOEXEC; - fcntl(fd, F_SETFD, flags); + return !fcntl(fd, F_SETFD, flags); } + + return 0; } /* ================================================== */ diff --git a/util.h b/util.h index 774509c..a0a688d 100644 --- a/util.h +++ b/util.h @@ -108,7 +108,7 @@ extern double UTI_FloatNetworkToHost(Float x); extern Float UTI_FloatHostToNetwork(double x); /* Set FD_CLOEXEC on descriptor */ -extern void UTI_FdSetCloexec(int fd); +extern int UTI_FdSetCloexec(int fd); extern int UTI_GenerateNTPAuth(int hash_id, const unsigned char *key, int key_len, const unsigned char *data, int data_len, unsigned char *auth, int auth_len);