masqmail-0.2

changeset 72:ad034b57f3b2

fixed Debian bug 536060 (log files are closed after SIGHUP receival) Explanation: When run in daemon mode, first the log files are opened. They get assigned to the file descriptors 3 and 4 usually. Then std{in,out,err} are closed. When SIGHUP comes in, all open files are closes and masqmail reexecutes itself. The new masqmail instance opens the log files at fd 0 and 1 now, but std{in,out,err} are closed afterwards, thus the log files are closed. The fix is to close the log files before std{in,out,err} are closed, in case the log files have higher fds. After std{in,out,err} were closed, the log files get opened again, now. See also: http://bugs.debian.org/536060
author meillo@marmaro.de
date Wed, 16 Jun 2010 10:32:20 +0200
parents 98cda87105a7
children 9db75b801dc4
files src/masqmail.c
diffstat 1 files changed, 12 insertions(+), 0 deletions(-) [+]
line diff
     1.1 --- a/src/masqmail.c	Wed Jun 16 10:14:50 2010 +0200
     1.2 +++ b/src/masqmail.c	Wed Jun 16 10:32:20 2010 +0200
     1.3 @@ -161,9 +161,15 @@
     1.4  
     1.5  	conf.do_verbose = FALSE;
     1.6  
     1.7 +	/* closing and reopening the log ensures that it is open afterwards
     1.8 +	   because it is possible that the log is assigned to fd 1 and gets
     1.9 +	   thus closes by fclose(stdout). Similar for the debugfile.
    1.10 +	*/
    1.11 +	logclose();
    1.12  	fclose(stdin);
    1.13  	fclose(stdout);
    1.14  	fclose(stderr);
    1.15 +	logopen();
    1.16  
    1.17  	listen_port(do_listen ? conf.listen_addresses : NULL, queue_interval, argv);
    1.18  }
    1.19 @@ -194,9 +200,15 @@
    1.20  
    1.21  	conf.do_verbose = FALSE;
    1.22  
    1.23 +	/* closing and reopening the log ensures that it is open afterwards
    1.24 +	   because it is possible that the log is assigned to fd 1 and gets
    1.25 +	   thus closes by fclose(stdout). Similar for the debugfile.
    1.26 +	*/
    1.27 +	logclose();
    1.28  	fclose(stdin);
    1.29  	fclose(stdout);
    1.30  	fclose(stderr);
    1.31 +	logopen();
    1.32  
    1.33  	get_daemon(get_interval, argv);
    1.34  }