xref: /freebsd-13-stable/lib/libopie/opieextra.c (revision 3d497e17ebd33fe0f58d773e35ab994d750258d6)
1 /*
2  * This file contains routines modified from OpenBSD. Parts are contributed
3  * by Todd Miller <millert@openbsd.org>, Theo De Raadt <deraadt@openbsd.org>
4  * and possibly others.
5  */
6 
7 #include <sys/cdefs.h>
8 #include <sys/types.h>
9 #include <stdio.h>
10 #include <opie.h>
11 
12 /*
13  * opie_haopie()
14  *
15  * Returns: 1 user doesnt exist, -1 file error, 0 user exists.
16  *
17  */
18 int
opie_haskey(username)19 opie_haskey(username)
20 char *username;
21 {
22 	struct opie opie;
23 
24 	return opielookup(&opie, username);
25 }
26 
27 /*
28  * opie_keyinfo()
29  *
30  * Returns the current sequence number and
31  * seed for the passed user.
32  *
33  */
34 char *
opie_keyinfo(username)35 opie_keyinfo(username)
36 char *username;
37 {
38 	int i;
39 	static char str[OPIE_CHALLENGE_MAX];
40 	struct opie opie;
41 
42 	i = opiechallenge(&opie, username, str);
43 	if (i == -1)
44 		return(0);
45 
46 	return(str);
47 }
48 
49 /*
50  * opie_passverify()
51  *
52  * Check to see if answer is the correct one to the current
53  * challenge.
54  *
55  * Returns: 0 success, -1 failure
56  *
57  */
58 int
opie_passverify(username,passwd)59 opie_passverify(username, passwd)
60 char *username;
61 char *passwd;
62 {
63 	int i;
64 	struct opie opie;
65 
66 	i = opielookup(&opie, username);
67 	if (i == -1 || i == 1)
68 		return(-1);
69 
70 	if (opieverify(&opie, passwd) == 0)
71 		return(opie.opie_n);
72 
73 	return(-1);
74 }
75 
76 #define OPIE_HASH_DEFAULT	1
77 
78 /* Current hash type (index into opie_hash_types array) */
79 static int opie_hash_type = OPIE_HASH_DEFAULT;
80 
81 struct opie_algorithm_table {
82 	const char *name;
83 };
84 
85 static struct opie_algorithm_table opie_algorithm_table[] = {
86 	"md4", "md5"
87 };
88 
89 /* Get current hash type */
90 const char *
opie_get_algorithm()91 opie_get_algorithm()
92 {
93 	return(opie_algorithm_table[opie_hash_type].name);
94 }
95 
96 
97