method = packet_get_string(NULL);
#ifdef GSSAPI
- if (strcmp(user, "") == 0) {
+ if (user[0] == '\0') {
debug("received empty username for %s", method);
if (strcmp(method, "external-keyx") == 0) {
char *lname = NULL;
xfree(user);
user = lname;
debug("set username to %s from gssapi context", user);
- } else if (authctxt->valid) {
+ } else {
debug("failed to set username from gssapi context");
}
}
#endif
debug("userauth-request for user %s service %s method %s",
- (user && user[0]) ? user : "<implicit>", service, method);
+ user[0] ? user : "<implicit>", service, method);
debug("attempt %d failures %d", authctxt->attempt, authctxt->failures);
if ((style = strchr(user, ':')) != NULL)
*style++ = 0;
- ;
/* If first time or username changed or implicit username,
setup/reset authentication context. */
if ((authctxt->attempt++ == 0) ||
(strcmp(user, authctxt->user) != 0) ||
(strcmp(user, "") == 0)) {
- /* setup auth context */
if (authctxt->user) {
xfree(authctxt->user);
authctxt->user = NULL;
xfree(authctxt->style);
authctxt->style = NULL;
}
+ authctxt->valid = 0;
#ifdef GSSAPI
- /* We'll verify the username after we set it from the
- GSSAPI context. */
+ /* If we're going to set the username based on the
+ GSSAPI context later, then wait until then to
+ verify it. Just put in placeholders for now. */
if ((strcmp(user, "") == 0) &&
((strcmp(method, "gssapi") == 0) ||
- (strcmp(method, "external-keyx") == 0))) {
- authctxt->pw = NULL;
- authctxt->valid = 1;
+ (strcmp(method, "gssapi-with-mic") == 0))) {
+ authctxt->pw = fakepw();
+ authctxt->user = xstrdup(user);
} else {
#endif
authctxt->pw = PRIVSEP(getpwnamallow(user));
+ authctxt->user = xstrdup(user);
if (authctxt->pw && strcmp(service, "ssh-connection")==0) {
authctxt->valid = 1;
debug2("input_userauth_request: setting up authctxt for %s", user);
#ifdef USE_PAM
if (options.use_pam)
- PRIVSEP(start_pam(authctxt->pw->pw_name));
+ PRIVSEP(start_pam(authctxt));
#endif
} else {
logit("input_userauth_request: illegal user %s", user);
authctxt->pw = fakepw();
#ifdef USE_PAM
if (options.use_pam)
- PRIVSEP(start_pam(user));
+ PRIVSEP(start_pam(authctxt));
#endif
}
#ifdef GSSAPI
- }
+ } /* endif for setting username based on GSSAPI context */
#endif
setproctitle("%s%s", authctxt->pw ? user : "unknown",
use_privsep ? " [net]" : "");
- authctxt->user = xstrdup(user);
authctxt->service = xstrdup(service);
authctxt->style = style ? xstrdup(style) : NULL;
if (use_privsep && (authctxt->attempt == 1))