-/* $Id: passwddb.c,v 1.11 2005-05-12 10:10:32 adam Exp $
- Copyright (C) 1995-2005
+/* $Id: passwddb.c,v 1.14 2006-08-14 10:40:34 adam Exp $
+ Copyright (C) 1995-2006
Index Data ApS
This file is part of the Zebra server.
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
*/
#include <passwddb.h>
struct passwd_entry {
+ int encrypt_flag;
char *name;
char *des;
struct passwd_entry *next;
return i;
}
-int passwd_db_file (Passwd_db db, const char *fname)
+static int passwd_db_file_int(Passwd_db db, const char *fname,
+ int encrypt_flag)
{
FILE *f;
char buf[1024];
pe = (struct passwd_entry *) xmalloc (sizeof(*pe));
pe->name = xstrdup (name);
pe->des = xstrdup (des);
+ pe->encrypt_flag = encrypt_flag;
pe->next = db->entries;
db->entries = pe;
}
return 0;
}
-void passwd_db_close (Passwd_db db)
+void passwd_db_close(Passwd_db db)
{
struct passwd_entry *pe = db->entries;
while (pe)
xfree (db);
}
-void passwd_db_show (Passwd_db 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);
}
-int passwd_db_auth (Passwd_db db, const char *user, const char *pass)
+int passwd_db_auth(Passwd_db db, const char *user, const char *pass)
{
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 (pe->encrypt_flag)
+ {
#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;
+ char salt[3];
+ const char *des_try;
+ 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;
#endif
+ }
+ else
+ {
+ if (strcmp (pe->des, pass))
+ return -2;
+ }
return 0;
}
+int passwd_db_file_crypt(Passwd_db db, const char *fname)
+{
+#if HAVE_CRYPT_H
+ return passwd_db_file_int(db, fname, 1);
+#else
+ return -1;
+#endif
+}
+
+int passwd_db_file_plain(Passwd_db db, const char *fname)
+{
+ return passwd_db_file_int(db, fname, 0);
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+