[BACK]Return to auth-skey.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/Attic/auth-skey.c between version 1.9.2.3 and 1.10

version 1.9.2.3, 2002/03/08 17:04:41 version 1.10, 2001/01/18 16:59:59
Line 1 
Line 1 
 /*  /*
  * Copyright (c) 2001 Markus Friedl.  All rights reserved.   * Copyright (c) 2001 Markus Friedl. All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions   * modification, are permitted provided that the following conditions
Line 21 
Line 21 
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */   */
   
 #include "includes.h"  #include "includes.h"
 RCSID("$OpenBSD$");  RCSID("$OpenBSD$");
   
 #ifdef SKEY  #include "ssh.h"
   
 #include <skey.h>  
   
 #include "xmalloc.h"  
 #include "auth.h"  #include "auth.h"
   
 static void *  #ifdef SKEY
 skey_init_ctx(Authctxt *authctxt)  char *
   get_challenge(Authctxt *authctxt, char *devs)
 {  {
         return authctxt;          static char challenge[1024];
 }          struct skey skey;
   
 #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], *p;  
         int len;  
         struct skey skey;  
   
         if (skeychallenge(&skey, authctxt->user, challenge) == -1)          if (skeychallenge(&skey, authctxt->user, challenge) == -1)
                 return -1;                  return NULL;
           strlcat(challenge, "\nS/Key Password: ", sizeof challenge);
         *name       = xstrdup("");          return challenge;
         *infotxt    = xstrdup("");  
         *numprompts = 1;  
         *prompts = xmalloc(*numprompts * sizeof(char*));  
         *echo_on = xmalloc(*numprompts * sizeof(u_int));  
         (*echo_on)[0] = 0;  
   
         len = strlen(challenge) + strlen(PROMPT) + 1;  
         p = xmalloc(len);  
         strlcpy(p, challenge, len);  
         strlcat(p, PROMPT, len);  
         (*prompts)[0] = p;  
   
         return 0;  
 }  }
   int
 static int  verify_response(Authctxt *authctxt, char *response)
 skey_respond(void *ctx, u_int numresponses, char **responses)  
 {  {
         Authctxt *authctxt = ctx;          return (authctxt->valid &&
   
         if (authctxt->valid &&  
             numresponses == 1 &&  
             skey_haskey(authctxt->pw->pw_name) == 0 &&              skey_haskey(authctxt->pw->pw_name) == 0 &&
             skey_passcheck(authctxt->pw->pw_name, responses[0]) != -1)              skey_passcheck(authctxt->pw->pw_name, response) != -1);
             return 0;  
         return -1;  
 }  }
   #else
 static void  /* not available */
 skey_free_ctx(void *ctx)  char *
   get_challenge(Authctxt *authctxt, char *devs)
 {  {
         /* we don't have a special context */          return NULL;
 }  }
   int
 KbdintDevice skey_device = {  verify_response(Authctxt *authctxt, char *response)
         "skey",  {
         skey_init_ctx,          return 0;
         skey_query,  }
         skey_respond,  #endif
         skey_free_ctx  
 };  
 #endif /* SKEY */  

Legend:
Removed from v.1.9.2.3  
changed lines
  Added in v.1.10