add a function to verify a password against an in-core md5 sum
This commit is contained in:
parent
9bebdb616f
commit
9b5129f15a
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.33 1999/08/18 20:04:39 cgd Exp $
|
||||
# $NetBSD: Makefile,v 1.34 1999/09/09 15:52:37 drochner Exp $
|
||||
|
||||
LIB= sa
|
||||
MKPIC= no
|
||||
|
@ -19,7 +19,8 @@ CPPFLAGS= -I${SADIR} ${SACPPFLAGS} ${SAMISCCPPFLAGS} \
|
|||
# stand routines
|
||||
SRCS+= alloc.c bcmp.c bcopy.c bzero.c errno.c exit.c exec.c getfile.c gets.c \
|
||||
globals.c memcmp.c memcpy.c memset.c panic.c printf.c \
|
||||
snprintf.c sprintf.c strerror.c subr_prf.c twiddle.c vsprintf.c
|
||||
snprintf.c sprintf.c strerror.c subr_prf.c twiddle.c vsprintf.c \
|
||||
checkpasswd.c
|
||||
|
||||
# io routines
|
||||
SRCS+= closeall.c dev.c disklabel.c dkcksum.c ioctl.c nullfs.c stat.c fstat.c
|
||||
|
|
|
@ -0,0 +1,124 @@
|
|||
/* $NetBSD: checkpasswd.c,v 1.1 1999/09/09 15:52:38 drochner Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)gets.c 8.1 (Berkeley) 6/11/93
|
||||
*/
|
||||
|
||||
#ifdef _STANDALONE
|
||||
#include <lib/libkern/libkern.h>
|
||||
#else
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include "stand.h"
|
||||
|
||||
char *
|
||||
getpass(prompt)
|
||||
const char *prompt;
|
||||
{
|
||||
register int c;
|
||||
register char *lp;
|
||||
static char buf[128]; /* == _PASSWORD_LEN */
|
||||
|
||||
printf(prompt);
|
||||
|
||||
for (lp = buf;;)
|
||||
switch (c = getchar() & 0177) {
|
||||
case '\n':
|
||||
case '\r':
|
||||
*lp = '\0';
|
||||
putchar('\n');
|
||||
return (buf);
|
||||
case '\b':
|
||||
case '\177':
|
||||
if (lp > buf) {
|
||||
lp--;
|
||||
putchar('\b');
|
||||
putchar(' ');
|
||||
putchar('\b');
|
||||
}
|
||||
break;
|
||||
#if HASH_ERASE
|
||||
case '#':
|
||||
if (lp > buf)
|
||||
--lp;
|
||||
break;
|
||||
#endif
|
||||
case 'r'&037: {
|
||||
register char *p;
|
||||
|
||||
putchar('\n');
|
||||
for (p = buf; p < lp; ++p)
|
||||
putchar('*');
|
||||
break;
|
||||
}
|
||||
#if AT_ERASE
|
||||
case '@':
|
||||
#endif
|
||||
case 'u'&037:
|
||||
case 'w'&037:
|
||||
lp = buf;
|
||||
putchar('\n');
|
||||
break;
|
||||
default:
|
||||
*lp++ = c;
|
||||
putchar('*');
|
||||
}
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
#include <sys/md5.h>
|
||||
|
||||
char bootpasswd[16] = {'\0'}; /* into data segment! */
|
||||
|
||||
int
|
||||
checkpasswd()
|
||||
{
|
||||
int i;
|
||||
char *passwd;
|
||||
MD5_CTX md5ctx;
|
||||
char pwdigest[16];
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
if (bootpasswd[i])
|
||||
break;
|
||||
if (i == 16)
|
||||
return (1); /* no password set */
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
passwd = getpass("Password: ");
|
||||
MD5Init(&md5ctx);
|
||||
MD5Update(&md5ctx, passwd, strlen(passwd));
|
||||
MD5Final(pwdigest, &md5ctx);
|
||||
if (bcmp(pwdigest, bootpasswd, 16) == 0)
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* failed */
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: stand.h,v 1.32 1999/04/14 15:23:27 christos Exp $ */
|
||||
/* $NetBSD: stand.h,v 1.33 1999/09/09 15:52:40 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
|
||||
|
@ -241,7 +241,10 @@ int ioctl __P((int, u_long, char *));
|
|||
extern int opterr, optind, optopt, optreset;
|
||||
extern char *optarg;
|
||||
int getopt __P((int, char * const *, const char *));
|
||||
|
||||
|
||||
char *getpass __P((const char *));
|
||||
int checkpasswd __P((void));
|
||||
|
||||
int nodev __P((void));
|
||||
int noioctl __P((struct open_file *, u_long, void *));
|
||||
void nullsys __P((void));
|
||||
|
|
Loading…
Reference in New Issue