Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/lib/libsa add a function to verify a password against an...
details: https://anonhg.NetBSD.org/src/rev/339e55f3e873
branches: trunk
changeset: 476201:339e55f3e873
user: drochner <drochner%NetBSD.org@localhost>
date: Thu Sep 09 15:52:37 1999 +0000
description:
add a function to verify a password against an in-core md5 sum
diffstat:
sys/lib/libsa/Makefile | 5 +-
sys/lib/libsa/checkpasswd.c | 124 ++++++++++++++++++++++++++++++++++++++++++++
sys/lib/libsa/stand.h | 7 +-
3 files changed, 132 insertions(+), 4 deletions(-)
diffs (168 lines):
diff -r 55f72dd37baf -r 339e55f3e873 sys/lib/libsa/Makefile
--- a/sys/lib/libsa/Makefile Thu Sep 09 13:05:05 1999 +0000
+++ b/sys/lib/libsa/Makefile Thu Sep 09 15:52:37 1999 +0000
@@ -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 @@
# 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
diff -r 55f72dd37baf -r 339e55f3e873 sys/lib/libsa/checkpasswd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/lib/libsa/checkpasswd.c Thu Sep 09 15:52:37 1999 +0000
@@ -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);
+}
+
diff -r 55f72dd37baf -r 339e55f3e873 sys/lib/libsa/stand.h
--- a/sys/lib/libsa/stand.h Thu Sep 09 13:05:05 1999 +0000
+++ b/sys/lib/libsa/stand.h Thu Sep 09 15:52:37 1999 +0000
@@ -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 @@
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));
Home |
Main Index |
Thread Index |
Old Index