dovecot-2.2-pigeonhole: lib-sieve: Addressed race condition writ...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Tue Oct 7 22:32:39 UTC 2014


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/fe7ce895158b
changeset: 1918:fe7ce895158b
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Wed Oct 08 00:32:28 2014 +0200
description:
lib-sieve: Addressed race condition writing to user error log file.

diffstat:

 src/lib-sieve/sieve-error.c |  18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diffs (31 lines):

diff -r 54c54979eb5b -r fe7ce895158b src/lib-sieve/sieve-error.c
--- a/src/lib-sieve/sieve-error.c	Tue Oct 07 23:12:20 2014 +0200
+++ b/src/lib-sieve/sieve-error.c	Wed Oct 08 00:32:28 2014 +0200
@@ -1032,14 +1032,22 @@
 
 			/* Rotate logfile */
 			rotated = t_strconcat(ehandler->logfile, ".0", NULL);
-			if ( rename(ehandler->logfile, rotated) < 0 ) {
-				sieve_sys_error(svinst,
-					"failed to rotate logfile: rename(%s, %s) failed: %m",
-					ehandler->logfile, rotated);
+			if ( rename(ehandler->logfile, rotated) < 0 && errno != ENOENT ) {
+				if ( errno == EACCES ) {
+					sieve_sys_error(svinst,
+						"failed to rotate logfile: %s",
+						eacces_error_get_creating("rename",
+							t_strconcat(ehandler->logfile, ", ", rotated, NULL)));
+				} else {
+					sieve_sys_error(svinst,
+						"failed to rotate logfile: rename(%s, %s) failed: %m",
+						ehandler->logfile, rotated);
+				}
 			}
 
 			/* Open clean logfile (overwrites existing if rename() failed earlier) */
-			fd = open(ehandler->logfile, O_CREAT | O_WRONLY | O_TRUNC, 0600);
+			fd = open(ehandler->logfile,
+				O_CREAT | O_APPEND | O_WRONLY | O_TRUNC, 0600);
 			if (fd == -1) {
 				if ( errno == EACCES ) {
 					sieve_sys_error(svinst,


More information about the dovecot-cvs mailing list