aboutsummaryrefslogtreecommitdiffstats
path: root/main/logrotate/logrotate-3.7.9-atomic-create.patch
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-04-05 06:22:21 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2011-04-05 06:24:42 +0000
commite30653b7a5011b09138e547bd80561ccba16f0c4 (patch)
treed5d4be0a5527e4024d7b3a65d6147c28ce850993 /main/logrotate/logrotate-3.7.9-atomic-create.patch
parentda893fac83b4b4ca362dad2dd6da74022ebc6cfc (diff)
downloadaports-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.patch70
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;
+ }
+