diff options
author | Damien Miller <djm@mindrot.org> | 1999-12-07 14:56:27 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 1999-12-07 14:56:27 +1100 |
commit | eabf3417bc73ca9546a3ed489cd809ffdf303853 (patch) | |
tree | a3dd5286d2790bdb8e586f9a8e272633251c31e4 | |
parent | 3bc14dde057f5d1faee1df1d29a6520063102b77 (diff) |
- Fix PAM account and session being called multiple times. Problem
reported by Adrian Baugh <adrian@merlin.keble.ox.ac.uk>
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | sshd.c | 43 |
2 files changed, 32 insertions, 13 deletions
@@ -2,6 +2,8 @@ - sshd Redhat init script patch from Jim Knoble <jmknoble@pobox.com> fixes compatability with 4.x and 5.x - Fixed default SSH_ASKPASS + - Fix PAM account and session being called multiple times. Problem + reported by Adrian Baugh <adrian@merlin.keble.ox.ac.uk> 19991204 - Small cleanup of PAM code in sshd.c @@ -11,7 +11,7 @@ */ #include "includes.h" -RCSID("$Id: sshd.c,v 1.33 1999/12/04 09:24:48 damien Exp $"); +RCSID("$Id: sshd.c,v 1.34 1999/12/07 03:56:27 damien Exp $"); #include "xmalloc.h" #include "rsa.h" @@ -1551,24 +1551,41 @@ do_authloop(struct passwd * pw) get_remote_port(), user); -#ifdef HAVE_LIBPAM - do_pam_account_and_session(pw->pw_name, client_user); +#ifndef HAVE_LIBPAM + if (authenticated) + return; - /* Clean up */ - if (client_user != NULL) - xfree(client_user); + if (attempt > AUTH_FAIL_MAX) + packet_disconnect(AUTH_FAIL_MSG, pw->pw_name); +#else /* HAVE_LIBPAM */ + if (authenticated) { + do_pam_account_and_session(pw->pw_name, client_user); - if (password != NULL) { - memset(password, 0, strlen(password)); - xfree(password); - } -#endif /* HAVE_LIBPAM */ + /* Clean up */ + if (client_user != NULL) + xfree(client_user); - if (authenticated) + if (password != NULL) { + memset(password, 0, strlen(password)); + xfree(password); + } + return; + } - if (attempt > AUTH_FAIL_MAX) + if (attempt > AUTH_FAIL_MAX) { + /* Clean up */ + if (client_user != NULL) + xfree(client_user); + + if (password != NULL) { + memset(password, 0, strlen(password)); + xfree(password); + } + packet_disconnect(AUTH_FAIL_MSG, pw->pw_name); + } +#endif /* HAVE_LIBPAM */ /* Send a message indicating that the authentication attempt failed. */ packet_start(SSH_SMSG_FAILURE); |