diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-04-05 06:22:21 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-04-05 06:24:42 +0000 |
commit | e30653b7a5011b09138e547bd80561ccba16f0c4 (patch) | |
tree | d5d4be0a5527e4024d7b3a65d6147c28ce850993 /main/logrotate/logrotate-3.7.9-atomic-create.patch | |
parent | da893fac83b4b4ca362dad2dd6da74022ebc6cfc (diff) | |
download | aports-e30653b7a5011b09138e547bd80561ccba16f0c4.tar.bz2 aports-e30653b7a5011b09138e547bd80561ccba16f0c4.tar.xz |
main/logrotate: security fixes
Diffstat (limited to 'main/logrotate/logrotate-3.7.9-atomic-create.patch')
-rw-r--r-- | main/logrotate/logrotate-3.7.9-atomic-create.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/main/logrotate/logrotate-3.7.9-atomic-create.patch b/main/logrotate/logrotate-3.7.9-atomic-create.patch new file mode 100644 index 0000000000..b888dc0231 --- /dev/null +++ b/main/logrotate/logrotate-3.7.9-atomic-create.patch @@ -0,0 +1,70 @@ +diff --git a/logrotate.c b/logrotate.c +index 3748918..fbe232a 100644 +--- a/logrotate.c ++++ b/logrotate.c +@@ -194,31 +194,41 @@ static int runScript(char *logfn, char *script) + int createOutputFile(char *fileName, int flags, struct stat *sb) + { + int fd; ++ char template[PATH_MAX + 1]; ++ mode_t umask_value; ++ snprintf(template, PATH_MAX, "%s/logrotate_temp.XXXXXX", ourDirName(fileName)); ++ ++ umask_value = umask(0000); ++ fd = mkstemp(template); ++ umask(umask_value); ++ ++ if (fd < 0) { ++ message(MESS_ERROR, "error creating unique temp file: %s\n", ++ strerror(errno)); ++ return -1; ++ } ++ ++ if (fchown(fd, sb->st_uid, sb->st_gid)) { ++ message(MESS_ERROR, "error setting owner of %s: %s\n", ++ fileName, strerror(errno)); ++ close(fd); ++ return -1; ++ } ++ ++ if (fchmod(fd, sb->st_mode)) { ++ message(MESS_ERROR, "error setting mode of %s: %s\n", ++ fileName, strerror(errno)); ++ close(fd); ++ return -1; ++ } ++ ++ if (rename(template, fileName)) { ++ message(MESS_ERROR, "error renaming temp file to %s: %s\n", ++ fileName, strerror(errno)); ++ close(fd); ++ return -1; ++ } + +- fd = open(fileName, flags, sb->st_mode); +- if (fd < 0) { +- message(MESS_ERROR, "error creating output file %s: %s\n", +- fileName, strerror(errno)); +- return -1; +- } +- if (fchmod(fd, (S_IRUSR | S_IWUSR) & sb->st_mode)) { +- message(MESS_ERROR, "error setting mode of %s: %s\n", +- fileName, strerror(errno)); +- close(fd); +- return -1; +- } +- if (fchown(fd, sb->st_uid, sb->st_gid)) { +- message(MESS_ERROR, "error setting owner of %s: %s\n", +- fileName, strerror(errno)); +- close(fd); +- return -1; +- } +- if (fchmod(fd, sb->st_mode)) { +- message(MESS_ERROR, "error setting mode of %s: %s\n", +- fileName, strerror(errno)); +- close(fd); +- return -1; +- } + return fd; + } + |