masqmail

diff src/masqmail.c @ 74:0a5b2e96ade3

do not reparent the daemon to init if init is already the parent
author meillo@marmaro.de
date Wed, 16 Jun 2010 10:39:44 +0200
parents 9db75b801dc4
children 3b344bf57162
line diff
     1.1 --- a/src/masqmail.c	Wed Jun 16 10:35:13 2010 +0200
     1.2 +++ b/src/masqmail.c	Wed Jun 16 10:39:44 2010 +0200
     1.3 @@ -149,11 +149,14 @@
     1.4  		}
     1.5  	}
     1.6  
     1.7 -	if ((pid = fork()) > 0) {
     1.8 -		exit(EXIT_SUCCESS);
     1.9 -	} else if (pid < 0) {
    1.10 -		logwrite(LOG_ALERT, "could not fork!");
    1.11 -		exit(EXIT_FAILURE);
    1.12 +	/* reparent to init only if init is not already the parent */
    1.13 +	if (getppid() != 1) {
    1.14 +		if ((pid = fork()) > 0) {
    1.15 +			exit(EXIT_SUCCESS);
    1.16 +		} else if (pid < 0) {
    1.17 +			logwrite(LOG_ALERT, "could not fork!");
    1.18 +			exit(EXIT_FAILURE);
    1.19 +		}
    1.20  	}
    1.21  
    1.22  	signal(SIGTERM, sigterm_handler);
    1.23 @@ -188,11 +191,14 @@
    1.24  		}
    1.25  	}
    1.26  
    1.27 -	if ((pid = fork()) > 0) {
    1.28 -		exit(EXIT_SUCCESS);
    1.29 -	} else if (pid < 0) {
    1.30 -		logwrite(LOG_ALERT, "could not fork!");
    1.31 -		exit(EXIT_FAILURE);
    1.32 +	/* reparent to init only if init is not already the parent */
    1.33 +	if (getppid() != 1) {
    1.34 +		if ((pid = fork()) > 0) {
    1.35 +			exit(EXIT_SUCCESS);
    1.36 +		} else if (pid < 0) {
    1.37 +			logwrite(LOG_ALERT, "could not fork!");
    1.38 +			exit(EXIT_FAILURE);
    1.39 +		}
    1.40  	}
    1.41  
    1.42  	signal(SIGTERM, sigterm_handler);