diff options
author | des <des@FreeBSD.org> | 2002-07-17 17:44:02 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2002-07-17 17:44:02 +0000 |
commit | 5aaa4a883f866b9fdf3c36f3aca4d1c2adbcba63 (patch) | |
tree | 4ffad1d05b9ac329c76f8b01e710cf9ababe97bf /crypto | |
parent | 398acd90da16449fc33e8a2c282875f81c47bceb (diff) | |
download | FreeBSD-src-5aaa4a883f866b9fdf3c36f3aca4d1c2adbcba63.zip FreeBSD-src-5aaa4a883f866b9fdf3c36f3aca4d1c2adbcba63.tar.gz |
In pam_init_ctx(), register a cleanup function that will kill the child
process if a fatal error occurs. Deregister it in pam_free_ctx().
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/openssh/auth2-pam-freebsd.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/crypto/openssh/auth2-pam-freebsd.c b/crypto/openssh/auth2-pam-freebsd.c index 9ce5988..8ae8ee2 100644 --- a/crypto/openssh/auth2-pam-freebsd.c +++ b/crypto/openssh/auth2-pam-freebsd.c @@ -154,6 +154,17 @@ pam_child(struct pam_ctxt *ctxt) exit(0); } +static void +pam_cleanup(void *ctxtp) +{ + struct pam_ctxt *ctxt = ctxtp; + int status; + + close(ctxt->pam_sock); + kill(ctxt->pam_pid, SIGHUP); + waitpid(ctxt->pam_pid, &status, 0); +} + static void * pam_init_ctx(Authctxt *authctxt) { @@ -190,6 +201,7 @@ pam_init_ctx(Authctxt *authctxt) } ctxt->pam_sock = socks[0]; close(socks[1]); + fatal_add_cleanup(pam_cleanup, ctxt); return (ctxt); } @@ -295,6 +307,7 @@ pam_free_ctx(void *ctxtp) struct pam_ctxt *ctxt = ctxtp; int status; + fatal_remove_cleanup(pam_cleanup, ctxt); close(ctxt->pam_sock); kill(ctxt->pam_pid, SIGHUP); waitpid(ctxt->pam_pid, &status, 0); |