Skip to content

Commit

Permalink
- (dtucker) [auth-pam.c auth-pam.h session.c] Make PAM use the new s…
Browse files Browse the repository at this point in the history
…tatic

   cleanup functions.  With & ok djm@
  • Loading branch information
daztucker committed Oct 7, 2003
1 parent 6f1f611 commit 8846a07
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 22 deletions.
4 changes: 3 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
20031007
- (djm) Delete autom4te.cache after autoreconf
- (dtucker) [auth-pam.c auth-pam.h session.c] Make PAM use the new static
cleanup functions. With & ok djm@

20031003
- OpenBSD CVS Sync
Expand Down Expand Up @@ -1282,4 +1284,4 @@
- Fix sshd BindAddress and -b options for systems using fake-getaddrinfo.
Report from [email protected], diagnosis from [email protected]

$Id: ChangeLog,v 1.3057 2003/10/07 00:18:22 djm Exp $
$Id: ChangeLog,v 1.3058 2003/10/07 01:30:15 dtucker Exp $
40 changes: 20 additions & 20 deletions auth-pam.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

/* Based on $FreeBSD: src/crypto/openssh/auth2-pam-freebsd.c,v 1.11 2003/03/31 13:48:18 des Exp $ */
#include "includes.h"
RCSID("$Id: auth-pam.c,v 1.74 2003/09/23 12:12:38 djm Exp $");
RCSID("$Id: auth-pam.c,v 1.75 2003/10/07 01:30:16 dtucker Exp $");

#ifdef USE_PAM
#include <security/pam_appl.h>
Expand Down Expand Up @@ -126,6 +126,7 @@ struct pam_ctxt {
};

static void sshpam_free_ctx(void *);
static struct pam_ctxt *cleanup_ctxt;

/*
* Conversation function for authentication thread.
Expand Down Expand Up @@ -245,15 +246,19 @@ sshpam_thread(void *ctxtp)
return (NULL); /* Avoid warning for non-pthread case */
}

static void
sshpam_thread_cleanup(void *ctxtp)
void
sshpam_thread_cleanup(void)
{
struct pam_ctxt *ctxt = ctxtp;

pthread_cancel(ctxt->pam_thread);
pthread_join(ctxt->pam_thread, NULL);
close(ctxt->pam_psock);
close(ctxt->pam_csock);
struct pam_ctxt *ctxt = cleanup_ctxt;

if (ctxt != NULL && ctxt->pam_thread != 0) {
pthread_cancel(ctxt->pam_thread);
pthread_join(ctxt->pam_thread, NULL);
close(ctxt->pam_psock);
close(ctxt->pam_csock);
memset(ctxt, 0, sizeof(*ctxt));
cleanup_ctxt = NULL;
}
}

static int
Expand All @@ -265,10 +270,9 @@ sshpam_null_conv(int n, const struct pam_message **msg,

static struct pam_conv null_conv = { sshpam_null_conv, NULL };

static void
sshpam_cleanup(void *arg)
void
sshpam_cleanup(void)
{
(void)arg;
debug("PAM: cleanup");
if (sshpam_handle == NULL)
return;
Expand Down Expand Up @@ -299,7 +303,6 @@ sshpam_init(const char *user)
PAM_USER, (const void **)&pam_user);
if (sshpam_err == PAM_SUCCESS && strcmp(user, pam_user) == 0)
return (0);
fatal_remove_cleanup(sshpam_cleanup, NULL);
pam_end(sshpam_handle, sshpam_err);
sshpam_handle = NULL;
}
Expand Down Expand Up @@ -333,7 +336,6 @@ sshpam_init(const char *user)
return (-1);
}
#endif
fatal_add_cleanup(sshpam_cleanup, NULL);
return (0);
}

Expand All @@ -354,7 +356,7 @@ sshpam_init_ctx(Authctxt *authctxt)
}

ctxt = xmalloc(sizeof *ctxt);
ctxt->pam_done = 0;
memset(ctxt, 0, sizeof(*ctxt));

/* Start the authentication thread */
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, socks) == -1) {
Expand All @@ -372,7 +374,7 @@ sshpam_init_ctx(Authctxt *authctxt)
xfree(ctxt);
return (NULL);
}
fatal_add_cleanup(sshpam_thread_cleanup, ctxt);
cleanup_ctxt = ctxt;
return (ctxt);
}

Expand Down Expand Up @@ -481,8 +483,7 @@ sshpam_free_ctx(void *ctxtp)
{
struct pam_ctxt *ctxt = ctxtp;

fatal_remove_cleanup(sshpam_thread_cleanup, ctxt);
sshpam_thread_cleanup(ctxtp);
sshpam_thread_cleanup();
xfree(ctxt);
/*
* We don't call sshpam_cleanup() here because we may need the PAM
Expand Down Expand Up @@ -524,8 +525,7 @@ start_pam(const char *user)
void
finish_pam(void)
{
fatal_remove_cleanup(sshpam_cleanup, NULL);
sshpam_cleanup(NULL);
sshpam_cleanup();
}

u_int
Expand Down
4 changes: 3 additions & 1 deletion auth-pam.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $Id: auth-pam.h,v 1.21 2003/09/02 13:18:53 djm Exp $ */
/* $Id: auth-pam.h,v 1.22 2003/10/07 01:30:16 dtucker Exp $ */

/*
* Copyright (c) 2000 Damien Miller. All rights reserved.
Expand Down Expand Up @@ -43,5 +43,7 @@ int do_pam_putenv(char *, char *);
void print_pam_messages(void);
char ** fetch_pam_environment(void);
void free_pam_environment(char **);
void sshpam_thread_cleanup(void);
void sshpam_cleanup(void);

#endif /* USE_PAM */
7 changes: 7 additions & 0 deletions session.c
Original file line number Diff line number Diff line change
Expand Up @@ -2165,6 +2165,13 @@ do_cleanup(Authctxt *authctxt)
ssh_gssapi_cleanup_creds();
#endif

#ifdef USE_PAM
if (options.use_pam) {
sshpam_cleanup();
sshpam_thread_cleanup();
}
#endif

/* remove agent socket */
auth_sock_cleanup_proc(authctxt->pw);

Expand Down

0 comments on commit 8846a07

Please sign in to comment.