diff options
author | John Denker <jsd@av8n.com> | 2015-03-28 22:00:25 -0700 |
---|---|---|
committer | John Denker <jsd@av8n.com> | 2016-01-02 09:08:57 -0800 |
commit | 31af746f8270da9bfe6e16f9cd514c290902846d (patch) | |
tree | a7c2a0887a8b0d6588a38772a65aa133404c255e /qmail-smtpd.c | |
parent | b5b1107ff044f916147495548dfb7bce1c7951ce (diff) |
reason: waitpid is tricky
Diffstat (limited to 'qmail-smtpd.c')
-rw-r--r-- | qmail-smtpd.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/qmail-smtpd.c b/qmail-smtpd.c index aaf65e8..580be77 100644 --- a/qmail-smtpd.c +++ b/qmail-smtpd.c @@ -26,6 +26,12 @@ #include "wait.h" #include "fd.h" +#ifdef NASTY_DEBUG +# include <stdio.h> +#endif /* NASTY_DEBUG */ + +void dummy() {} /* needed to make waitpid() work */ + // AUTHCRAM is not #defined for now, because: // 1) It requires cmd5checkpw (not just checkpassword), and // a) cmd5checkpw requires separate administration of the poppasswed file. @@ -577,7 +583,13 @@ int authenticate(void) close(pi[1]); byte_zero(pass.s,pass.len); byte_zero(upbuf,sizeof upbuf); - if (wait_pid(&wstat,child) == -1) return err_child(); + if (wait_pid(&wstat,child) == -1) { +#ifdef NASTY_DEBUG + fprintf(stderr, "kidpid: %d errno: %d : ", child, errno); + perror(0); +#endif /* NASTY_DEBUG */ + return err_child(); + } if (wait_crashed(wstat)) return err_child(); if (wait_exitcode(wstat)) { sleep(5); return 1; } /* no */ return 0; /* yes */ @@ -993,6 +1005,11 @@ void main(argc,argv) int argc; char **argv; { +/* waitpid() doesn't do what you expect + unless we do something nontrivial with SIGCHLD; + read the manpage. + */ + sig_childcatch(dummy); hostname = ""; if (argc > 1) hostname = argv[1]; childargs = 0; |