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