X-Git-Url: http://andersk.mit.edu/gitweb/gssapi-openssh.git/blobdiff_plain/9108f8d92b8e2b4b5fe61eb8e419bf94ba216d44..6dc60241a6a563c6e5c214c7dae931aa452bb4b2:/openssh/auth-skey.c diff --git a/openssh/auth-skey.c b/openssh/auth-skey.c index 25073db..f921fc1 100644 --- a/openssh/auth-skey.c +++ b/openssh/auth-skey.c @@ -1,4 +1,3 @@ -/* $OpenBSD: auth-skey.c,v 1.26 2006/08/05 08:28:24 dtucker Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -22,24 +21,15 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #include "includes.h" +RCSID("$OpenBSD: auth-skey.c,v 1.12 2001/05/18 14:13:28 markus Exp $"); #ifdef SKEY -#include - -#include -#include - #include #include "xmalloc.h" -#include "key.h" -#include "hostfile.h" #include "auth.h" -#include "ssh-gss.h" -#include "monitor_wrap.h" static void * skey_init_ctx(Authctxt *authctxt) @@ -47,36 +37,44 @@ skey_init_ctx(Authctxt *authctxt) return authctxt; } -int -skey_query(void *ctx, char **name, char **infotxt, +#define PROMPT "\nS/Key Password: " + +static int +skey_query(void *ctx, char **name, char **infotxt, u_int* numprompts, char ***prompts, u_int **echo_on) { Authctxt *authctxt = ctx; - char challenge[1024]; + char challenge[1024], *p; + int len; struct skey skey; - if (_compat_skeychallenge(&skey, authctxt->user, challenge, - sizeof(challenge)) == -1) + if (skeychallenge(&skey, authctxt->user, challenge) == -1) return -1; - *name = xstrdup(""); - *infotxt = xstrdup(""); + *name = xstrdup(""); + *infotxt = xstrdup(""); *numprompts = 1; - *prompts = xcalloc(*numprompts, sizeof(char *)); - *echo_on = xcalloc(*numprompts, sizeof(u_int)); + *prompts = xmalloc(*numprompts * sizeof(char*)); + *echo_on = xmalloc(*numprompts * sizeof(u_int)); + (*echo_on)[0] = 0; - xasprintf(*prompts, "%s%s", challenge, SKEY_PROMPT); + len = strlen(challenge) + strlen(PROMPT) + 1; + p = xmalloc(len); + p[0] = '\0'; + strlcat(p, challenge, len); + strlcat(p, PROMPT, len); + (*prompts)[0] = p; return 0; } -int +static int skey_respond(void *ctx, u_int numresponses, char **responses) { Authctxt *authctxt = ctx; - + if (authctxt->valid && - numresponses == 1 && + numresponses == 1 && skey_haskey(authctxt->pw->pw_name) == 0 && skey_passcheck(authctxt->pw->pw_name, responses[0]) != -1) return 0; @@ -96,12 +94,4 @@ KbdintDevice skey_device = { skey_respond, skey_free_ctx }; - -KbdintDevice mm_skey_device = { - "skey", - skey_init_ctx, - mm_skey_query, - mm_skey_respond, - skey_free_ctx -}; #endif /* SKEY */