X-Git-Url: http://andersk.mit.edu/gitweb/gssapi-openssh.git/blobdiff_plain/30460aeb3d3c027b85eba1e4d45de75fb4b9d356..48eb121209c8235fd433f2d941654bde9f5b427f:/openssh/auth2-gss.c diff --git a/openssh/auth2-gss.c b/openssh/auth2-gss.c index fab7cc2..2cf6929 100644 --- a/openssh/auth2-gss.c +++ b/openssh/auth2-gss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-gss.c,v 1.15 2006/08/03 03:34:41 deraadt Exp $ */ +/* $OpenBSD: auth2-gss.c,v 1.16 2007/10/29 00:52:45 dtucker Exp $ */ /* * Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved. @@ -287,29 +287,28 @@ input_gssapi_errtok(int type, u_int32_t plen, void *ctxt) } static void -gssapi_set_implicit_username(Authctxt *authctxt) +gssapi_set_username(Authctxt *authctxt) { + char *lname = NULL; + if ((authctxt->user == NULL) || (authctxt->user[0] == '\0')) { - char *lname = NULL; - PRIVSEP(ssh_gssapi_localname(&lname)); - if (lname && lname[0] != '\0') { - if (authctxt->user) xfree(authctxt->user); - authctxt->user = lname; - debug("set username to %s from gssapi context", lname); - authctxt->pw = PRIVSEP(getpwnamallow(authctxt->user)); - if (authctxt->pw) { - authctxt->valid = 1; - } - } else { - debug("failed to set username from gssapi context"); - packet_send_debug("failed to set username from gssapi context"); - } - } - if (authctxt->pw) { + PRIVSEP(ssh_gssapi_localname(&lname)); + if (lname && lname[0] != '\0') { + if (authctxt->user) xfree(authctxt->user); + authctxt->user = lname; + debug("set username to %s from gssapi context", lname); + authctxt->pw = PRIVSEP(getpwnamallow(authctxt->user)); + if (authctxt->pw) { + authctxt->valid = 1; #ifdef USE_PAM - if (options.use_pam) - PRIVSEP(start_pam(authctxt)); + if (options.use_pam) + PRIVSEP(start_pam(authctxt)); #endif + } + } else { + debug("failed to set username from gssapi context"); + packet_send_debug("failed to set username from gssapi context"); + } } } @@ -329,7 +328,7 @@ input_gssapi_exchange_complete(int type, u_int32_t plen, void *ctxt) if (authctxt == NULL || (authctxt->methoddata == NULL && !use_privsep)) fatal("No authentication or GSSAPI context"); - gssapi_set_implicit_username(authctxt); + gssapi_set_username(authctxt); gssctxt = authctxt->methoddata; @@ -383,8 +382,6 @@ input_gssapi_mic(int type, u_int32_t plen, void *ctxt) if (authctxt == NULL || (authctxt->methoddata == NULL && !use_privsep)) fatal("No authentication or GSSAPI context"); - gssapi_set_implicit_username(authctxt); - gssctxt = authctxt->methoddata; mic.value = packet_get_string(&len); @@ -396,6 +393,8 @@ input_gssapi_mic(int type, u_int32_t plen, void *ctxt) gssbuf.value = buffer_ptr(&b); gssbuf.length = buffer_len(&b); + gssapi_set_username(authctxt); + if (!GSS_ERROR(PRIVSEP(ssh_gssapi_checkmic(gssctxt, &gssbuf, &mic)))) if (authctxt->valid && authctxt->user && authctxt->user[0]) { authenticated = PRIVSEP(ssh_gssapi_userok(authctxt->user));