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