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