home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / des / read_password.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-22  |  1.7 KB  |  88 lines

  1. /*
  2.  * $Source: /usr/src/kerberosIV/des/RCS/read_password.c,v $
  3.  * $Author: kfall $
  4.  *
  5.  * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
  6.  * of Technology.
  7.  *
  8.  * For copying and distribution information, please see the file
  9.  * <mit-copyright.h>.
  10.  *
  11.  * This routine prints the supplied string to standard
  12.  * output as a prompt, and reads a password string without
  13.  * echoing.
  14.  */
  15.  
  16. #ifndef    lint
  17. static char rcsid_read_password_c[] =
  18. "$Header: /usr/src/kerberosIV/des/RCS/read_password.c,v 4.13 90/06/23 03:09:35 kfall Exp $";
  19. #endif    lint
  20.  
  21. #include <sys/param.h>
  22. #include <stdio.h>
  23. #include <string.h>
  24. #include <setjmp.h>
  25. #include <pwd.h>
  26. #include <mit-copyright.h>
  27. #include <des.h>
  28. #include "conf.h"
  29.  
  30. extern char    *getpass();
  31.  
  32. #ifdef    BSDUNIX
  33. static jmp_buf env;
  34. #endif
  35.  
  36. int
  37. des_read_password(k, prompt, verify)
  38.     des_cblock *k;
  39.     char *prompt;
  40.     int verify;
  41. {
  42.     int ok;
  43.     char key_string[_PASSWORD_LEN];
  44.  
  45. #ifdef BSDUNIX
  46.     if (setjmp(env)) {
  47.         ok = -1;
  48.         goto lose;
  49.         }
  50. #endif
  51.  
  52.         ok = des_read_pw_string(key_string, _PASSWORD_LEN, prompt, verify);
  53.         if (ok == 0)
  54.         des_string_to_key(key_string, k);
  55.  
  56. lose:
  57.         bzero(key_string, sizeof (key_string));
  58.         return ok;
  59. }
  60.  
  61. /*
  62.  * This version just returns the string, doesn't map to key.
  63.  *
  64.  * Returns 0 on success, non-zero on failure.
  65.  */
  66.  
  67. int
  68. des_read_pw_string(s, max, prompt, verify)
  69.     char *s;
  70.     int max;
  71.     char *prompt;
  72.     int verify;
  73. {
  74.     register int len = MIN(_PASSWORD_LEN, max);
  75.     char    *ptr = getpass(prompt);
  76.  
  77.     (void)strncpy(s, ptr, len);
  78.     if (verify) {
  79.         while (strncmp(getpass(prompt), s, len) != 0) {
  80.             printf("\n\07\07Mismatch - try again\n");
  81.             (void)fflush(stdout);
  82.             continue;
  83.         }
  84.     }
  85.     s[len-1] = '\0';    /* just in case */
  86.     return 0;
  87. }
  88.