-/* $OpenBSD: auth2.c,v 1.113 2006/08/03 03:34:41 deraadt Exp $ */
+/* $OpenBSD: auth2.c,v 1.115 2007/04/14 22:01:58 stevesk Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
*
#include "dispatch.h"
#include "pathnames.h"
#include "buffer.h"
+#include "canohost.h"
#ifdef GSSAPI
#include "ssh-gss.h"
extern Authmethod method_gssapi_compat;
#endif
+static int log_flag = 0;
+
+
Authmethod *authmethods[] = {
&method_none,
&method_pubkey,
void
do_authentication2(Authctxt *authctxt)
{
- /* challenge-response is implemented via keyboard interactive */
- if (options.challenge_response_authentication)
- options.kbd_interactive_authentication = 1;
-
dispatch_init(&dispatch_protocol_error);
dispatch_set(SSH2_MSG_SERVICE_REQUEST, &input_service_request);
dispatch_run(DISPATCH_BLOCK, &authctxt->success, authctxt);
debug("userauth-request for user %s service %s method %s",
user[0] ? user : "<implicit>", service, method);
+ if (!log_flag) {
+ logit("SSH: Server;Ltype: Authname;Remote: %s-%d;Name: %s",
+ get_remote_ipaddr(), get_remote_port(), user);
+ log_flag = 1;
+ }
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,
+ /* If first time or username changed or empty username,
setup/reset authentication context. */
if ((authctxt->attempt++ == 0) ||
(strcmp(user, authctxt->user) != 0) ||
authctxt->user = NULL;
}
authctxt->valid = 0;
+ authctxt->user = xstrdup(user);
+ if (strcmp(service, "ssh-connection") != 0) {
+ packet_disconnect("Unsupported service %s", service);
+ }
#ifdef GSSAPI
/* If we're going to set the username based on the
GSSAPI context later, then wait until then to
((strcmp(method, "gssapi") == 0) ||
(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) {
+ if (authctxt->pw) {
authctxt->valid = 1;
debug2("input_userauth_request: setting up authctxt for %s", user);
} else {
#endif
setproctitle("%s%s", authctxt->valid ? user : "unknown",
use_privsep ? " [net]" : "");
-#ifdef GSSAPI
if (authctxt->attempt == 1) {
-#endif
- authctxt->service = xstrdup(service);
- authctxt->style = style ? xstrdup(style) : NULL;
- if (use_privsep)
- mm_inform_authserv(service, style);
-#ifdef GSSAPI
- } /* if (authctxt->attempt == 1) */
-#endif
+ authctxt->service = xstrdup(service);
+ authctxt->style = style ? xstrdup(style) : NULL;
+ if (use_privsep)
+ mm_inform_authserv(service, style);
+ }
}
if (strcmp(service, authctxt->service) != 0) {
packet_disconnect("Change of service not allowed: "
}
}
-#define DELIM ","
-
static char *
authmethods_get(void)
{