summaryrefslogtreecommitdiffstats
path: root/crypto/openssh
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-07-17 17:44:02 +0000
committerdes <des@FreeBSD.org>2002-07-17 17:44:02 +0000
commit5aaa4a883f866b9fdf3c36f3aca4d1c2adbcba63 (patch)
tree4ffad1d05b9ac329c76f8b01e710cf9ababe97bf /crypto/openssh
parent398acd90da16449fc33e8a2c282875f81c47bceb (diff)
downloadFreeBSD-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/openssh')
-rw-r--r--crypto/openssh/auth2-pam-freebsd.c13
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);
OpenPOWER on IntegriCloud