summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkus <markus@openbsd.org>2001-12-09 18:45:56 +0000
committermarkus <markus@openbsd.org>2001-12-09 18:45:56 +0000
commit2cf81c5b605a9e908449bacead882663a5c3e22f (patch)
tree551e8b1d4c994a0c5586982aef210bfe97a2e353
parentFix an incorrect example, reported by Gaƫl Queri <gqueri@mail.dotcom.fr> (diff)
downloadwireguard-openbsd-2cf81c5b605a9e908449bacead882663a5c3e22f.tar.xz
wireguard-openbsd-2cf81c5b605a9e908449bacead882663a5c3e22f.zip
add auth2_challenge_stop(), simplifies cleanup of kbd-int sessions,
fixes memleak.
-rw-r--r--usr.bin/ssh/auth.h3
-rw-r--r--usr.bin/ssh/auth2-chall.c35
-rw-r--r--usr.bin/ssh/auth2.c10
3 files changed, 23 insertions, 25 deletions
diff --git a/usr.bin/ssh/auth.h b/usr.bin/ssh/auth.h
index ffc9a004083..120213bab25 100644
--- a/usr.bin/ssh/auth.h
+++ b/usr.bin/ssh/auth.h
@@ -21,7 +21,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $OpenBSD: auth.h,v 1.22 2001/06/26 17:27:22 markus Exp $
+ * $OpenBSD: auth.h,v 1.23 2001/12/09 18:45:56 markus Exp $
*/
#ifndef AUTH_H
#define AUTH_H
@@ -127,6 +127,7 @@ void userauth_finish(Authctxt *, int, char *);
int auth_root_allowed(char *);
int auth2_challenge(Authctxt *, char *);
+void auth2_challenge_stop(Authctxt *);
int allowed_user(struct passwd *);
diff --git a/usr.bin/ssh/auth2-chall.c b/usr.bin/ssh/auth2-chall.c
index 5e6a691f808..4b97e47bddb 100644
--- a/usr.bin/ssh/auth2-chall.c
+++ b/usr.bin/ssh/auth2-chall.c
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "includes.h"
-RCSID("$OpenBSD: auth2-chall.c,v 1.8 2001/09/27 15:31:17 markus Exp $");
+RCSID("$OpenBSD: auth2-chall.c,v 1.9 2001/12/09 18:45:56 markus Exp $");
#include "ssh2.h"
#include "auth.h"
@@ -156,6 +156,18 @@ auth2_challenge(Authctxt *authctxt, char *devs)
return auth2_challenge_start(authctxt);
}
+/* unregister kbd-int callbacks and context */
+void
+auth2_challenge_stop(Authctxt *authctxt)
+{
+ /* unregister callback */
+ dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL);
+ if (authctxt->kbdintctxt != NULL) {
+ kbdint_free(authctxt->kbdintctxt);
+ authctxt->kbdintctxt = NULL;
+ }
+}
+
/* side effect: sets authctxt->postponed if a reply was sent*/
static int
auth2_challenge_start(Authctxt *authctxt)
@@ -166,21 +178,18 @@ auth2_challenge_start(Authctxt *authctxt)
kbdintctxt->devices ? kbdintctxt->devices : "<empty>");
if (kbdint_next_device(kbdintctxt) == 0) {
- kbdint_free(kbdintctxt);
- authctxt->kbdintctxt = NULL;
+ auth2_challenge_stop(authctxt);
return 0;
}
debug("auth2_challenge_start: trying authentication method '%s'",
kbdintctxt->device->name);
if ((kbdintctxt->ctxt = kbdintctxt->device->init_ctx(authctxt)) == NULL) {
- kbdint_free(kbdintctxt);
- authctxt->kbdintctxt = NULL;
+ auth2_challenge_stop(authctxt);
return 0;
}
if (send_userauth_info_request(authctxt) == 0) {
- kbdint_free(kbdintctxt);
- authctxt->kbdintctxt = NULL;
+ auth2_challenge_stop(authctxt);
return 0;
}
dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE,
@@ -271,10 +280,8 @@ input_userauth_info_response(int type, int plen, void *ctxt)
break;
case 1:
/* Authentication needs further interaction */
- authctxt->postponed = 1;
- if (send_userauth_info_request(authctxt) == 0) {
- authctxt->postponed = 0;
- }
+ if (send_userauth_info_request(authctxt) == 1)
+ authctxt->postponed = 1;
break;
default:
/* Failure! */
@@ -290,12 +297,8 @@ input_userauth_info_response(int type, int plen, void *ctxt)
strlcat(method, kbdintctxt->device->name, len);
if (!authctxt->postponed) {
- /* unregister callback */
- dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL);
-
if (authenticated) {
- kbdint_free(kbdintctxt);
- authctxt->kbdintctxt = NULL;
+ auth2_challenge_stop(authctxt);
} else {
/* start next device */
/* may set authctxt->postponed */
diff --git a/usr.bin/ssh/auth2.c b/usr.bin/ssh/auth2.c
index 079fa141015..59acf87c445 100644
--- a/usr.bin/ssh/auth2.c
+++ b/usr.bin/ssh/auth2.c
@@ -23,7 +23,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: auth2.c,v 1.74 2001/12/05 03:56:39 itojun Exp $");
+RCSID("$OpenBSD: auth2.c,v 1.75 2001/12/09 18:45:56 markus Exp $");
#include <openssl/evp.h>
@@ -212,14 +212,8 @@ input_userauth_request(int type, int plen, void *ctxt)
authctxt->user, authctxt->service, user, service);
}
/* reset state */
- dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, &protocol_error);
+ auth2_challenge_stop(authctxt);
authctxt->postponed = 0;
-#ifdef BSD_AUTH
- if (authctxt->as) {
- auth_close(authctxt->as);
- authctxt->as = NULL;
- }
-#endif
/* try to authenticate user */
m = authmethod_lookup(method);