opieextra.c revision 60572
160572Skris/*
260572Skris * This file contains routines modified from OpenBSD. Parts are contributed
360572Skris * by Todd Miller <millert@openbsd.org>, Theo De Raadt <deraadt@openbsd.org>
460572Skris * and possibly others.
560572Skris *
660572Skris * $FreeBSD: head/lib/libopie/opieextra.c 60572 2000-05-15 04:20:54Z kris $
760572Skris */
860572Skris
960572Skris#include <stdio.h>
1060572Skris#include <opie.h>
1160572Skris
1260572Skris/*
1360572Skris * opie_haopie()
1460572Skris *
1560572Skris * Returns: 1 user doesnt exist, -1 file error, 0 user exists.
1660572Skris *
1760572Skris */
1860572Skrisint
1960572Skrisopie_haskey(username)
2060572Skrischar *username;
2160572Skris{
2260572Skris	struct opie opie;
2360572Skris
2460572Skris	return opielookup(&opie, username);
2560572Skris}
2660572Skris
2760572Skris/*
2860572Skris * opie_keyinfo()
2960572Skris *
3060572Skris * Returns the current sequence number and
3160572Skris * seed for the passed user.
3260572Skris *
3360572Skris */
3460572Skrischar *
3560572Skrisopie_keyinfo(username)
3660572Skrischar *username;
3760572Skris{
3860572Skris	int i;
3960572Skris	static char str[OPIE_CHALLENGE_MAX];
4060572Skris	struct opie opie;
4160572Skris
4260572Skris	i = opiechallenge(&opie, username, str);
4360572Skris	if (i == -1)
4460572Skris		return(0);
4560572Skris
4660572Skris	return(str);
4760572Skris}
4860572Skris
4960572Skris/*
5060572Skris * opie_passverify()
5160572Skris *
5260572Skris * Check to see if answer is the correct one to the current
5360572Skris * challenge.
5460572Skris *
5560572Skris * Returns: 0 success, -1 failure
5660572Skris *
5760572Skris */
5860572Skrisint
5960572Skrisopie_passverify(username, passwd)
6060572Skrischar *username;
6160572Skrischar *passwd;
6260572Skris{
6360572Skris	int i;
6460572Skris	struct opie opie;
6560572Skris
6660572Skris	i = opielookup(&opie, username);
6760572Skris	if (i == -1 || i == 1)
6860572Skris		return(-1);
6960572Skris
7060572Skris	if (opieverify(&opie, passwd) == 0)
7160572Skris		return(opie.opie_n);
7260572Skris
7360572Skris	return(-1);
7460572Skris}
7560572Skris
7660572Skris#define OPIE_HASH_DEFAULT	1
7760572Skris
7860572Skris/* Current hash type (index into opie_hash_types array) */
7960572Skrisstatic int opie_hash_type = OPIE_HASH_DEFAULT;
8060572Skris
8160572Skrisstruct opie_algorithm_table {
8260572Skris	const char *name;
8360572Skris};
8460572Skris
8560572Skrisstatic struct opie_algorithm_table opie_algorithm_table[] = {
8660572Skris	"md4", "md5"
8760572Skris};
8860572Skris
8960572Skris/* Get current hash type */
9060572Skrisconst char *
9160572Skrisopie_get_algorithm()
9260572Skris{
9360572Skris	return(opie_algorithm_table[opie_hash_type].name);
9460572Skris}
9560572Skris
9660572Skris
97