From 46bfcfb367c08f8badb48093b0031cf33fa9d663 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 12 May 2005 10:10:32 +0000 Subject: [PATCH] Added configure check for crypt. --- configure.in | 7 ++- util/passwddb.c | 170 +++++++++++++++++++++++++++---------------------------- 2 files changed, 89 insertions(+), 88 deletions(-) diff --git a/configure.in b/configure.in index 42c973b..746181e 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Zebra, Index Data ApS, 1995-2005 -dnl $Id: configure.in,v 1.122 2005-05-11 12:39:36 adam Exp $ +dnl $Id: configure.in,v 1.123 2005-05-12 10:10:32 adam Exp $ dnl AC_INIT(include/idzebra/version.h) AM_INIT_AUTOMAKE(idzebra,1.4.0) @@ -16,6 +16,11 @@ AM_PROG_LIBTOOL dnl dnl ------ headers AC_CHECK_HEADERS(sys/times.h unistd.h) +dnl ------ crypt +AC_CHECK_LIB(crypt, crypt) +if test "$ac_cv_lib_crypt_crypt" = "yes"; then + AC_CHECK_HEADERS(crypt.h) +fi dnl dnl ------ threads AC_ARG_ENABLE(threads, [ --disable-threads disable threads],[enable_threads=$enableval],[enable_threads=yes]) diff --git a/util/passwddb.c b/util/passwddb.c index e57eb0d..f372728 100644 --- a/util/passwddb.c +++ b/util/passwddb.c @@ -1,4 +1,4 @@ -/* $Id: passwddb.c,v 1.10 2005-01-15 19:38:42 adam Exp $ +/* $Id: passwddb.c,v 1.11 2005-05-12 10:10:32 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -21,18 +21,14 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA */ -#ifdef WIN32 -#else +#if HAVE_UNISTD_H #include #endif + #include #include -#ifndef USE_CRYPT -#define USE_CRYPT 0 -#endif - -#if USE_CRYPT +#if HAVE_CRYPT_H #include #endif @@ -42,115 +38,115 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include struct passwd_entry { - char *name; - char *des; - struct passwd_entry *next; + char *name; + char *des; + struct passwd_entry *next; }; struct passwd_db { - struct passwd_entry *entries; + struct passwd_entry *entries; }; Passwd_db passwd_db_open (void) { - struct passwd_db *p = (struct passwd_db *) xmalloc (sizeof(*p)); - p->entries = 0; - return p; + struct passwd_db *p = (struct passwd_db *) xmalloc (sizeof(*p)); + p->entries = 0; + return p; } static int get_entry (const char **p, char *dst, int max) { - int i = 0; - while ((*p)[i] != ':' && (*p)[i]) - i++; - if (i >= max) - i = max-1; - if (i) - memcpy (dst, *p, i); - dst[i] = '\0'; - *p += i; - if (*p) - (*p)++; - return i; + int i = 0; + while ((*p)[i] != ':' && (*p)[i]) + i++; + if (i >= max) + i = max-1; + if (i) + memcpy (dst, *p, i); + dst[i] = '\0'; + *p += i; + if (*p) + (*p)++; + return i; } int passwd_db_file (Passwd_db db, const char *fname) { - FILE *f; - char buf[1024]; - f = fopen (fname, "r"); - if (!f) - return -1; - while (fgets (buf, sizeof(buf)-1, f)) - { - struct passwd_entry *pe; - char name[128]; - char des[128]; - char *p; - const char *cp = buf; - if ((p = strchr (buf, '\n'))) - *p = '\0'; - get_entry (&cp, name, 128); - get_entry (&cp, des, 128); - - pe = (struct passwd_entry *) xmalloc (sizeof(*pe)); - pe->name = xstrdup (name); - pe->des = xstrdup (des); - pe->next = db->entries; - db->entries = pe; - } - fclose (f); - return 0; + FILE *f; + char buf[1024]; + f = fopen (fname, "r"); + if (!f) + return -1; + while (fgets (buf, sizeof(buf)-1, f)) + { + struct passwd_entry *pe; + char name[128]; + char des[128]; + char *p; + const char *cp = buf; + if ((p = strchr (buf, '\n'))) + *p = '\0'; + get_entry (&cp, name, 128); + get_entry (&cp, des, 128); + + pe = (struct passwd_entry *) xmalloc (sizeof(*pe)); + pe->name = xstrdup (name); + pe->des = xstrdup (des); + pe->next = db->entries; + db->entries = pe; + } + fclose (f); + return 0; } void passwd_db_close (Passwd_db db) { - struct passwd_entry *pe = db->entries; - while (pe) - { - struct passwd_entry *pe_next = pe->next; + struct passwd_entry *pe = db->entries; + while (pe) + { + struct passwd_entry *pe_next = pe->next; - xfree (pe->name); - xfree (pe->des); - xfree (pe); - pe = pe_next; - } - xfree (db); + xfree (pe->name); + xfree (pe->des); + xfree (pe); + pe = pe_next; + } + xfree (db); } void passwd_db_show (Passwd_db db) { - struct passwd_entry *pe; - for (pe = db->entries; pe; pe = pe->next) - yaz_log (YLOG_LOG,"%s:%s", pe->name, pe->des); + struct passwd_entry *pe; + for (pe = db->entries; pe; pe = pe->next) + yaz_log (YLOG_LOG,"%s:%s", pe->name, pe->des); } int passwd_db_auth (Passwd_db db, const char *user, const char *pass) { - struct passwd_entry *pe; -#if USE_CRYPT - char salt[3]; - const char *des_try; + struct passwd_entry *pe; +#if HAVE_CRYPT_H + char salt[3]; + const char *des_try; #endif - for (pe = db->entries; pe; pe = pe->next) - if (user && !strcmp (user, pe->name)) - break; - if (!pe) - return -1; -#if USE_CRYPT - if (strlen (pe->des) < 3) - return -3; - if (!pass) - return -2; - memcpy (salt, pe->des, 2); - salt[2] = '\0'; - des_try = crypt (pass, salt); - if (strcmp (des_try, pe->des)) - return -2; + for (pe = db->entries; pe; pe = pe->next) + if (user && !strcmp (user, pe->name)) + break; + if (!pe) + return -1; +#if HAVE_CRYPT_H + if (strlen (pe->des) < 3) + return -3; + if (!pass) + return -2; + memcpy (salt, pe->des, 2); + salt[2] = '\0'; + des_try = crypt (pass, salt); + if (strcmp (des_try, pe->des)) + return -2; #else - if (strcmp (pe->des, pass)) - return -2; + if (strcmp (pe->des, pass)) + return -2; #endif - return 0; + return 0; } -- 1.7.10.4