BSD 4_4_Lite1 development
[unix-history] / usr / src / kerberosIV / des / read_password.c
CommitLineData
81b3355c
C
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
17static 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
30extern char *getpass();
31
32#ifdef BSDUNIX
33static jmp_buf env;
34#endif
35
36int
37des_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
56lose:
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
67int
68des_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}