[dovecot-cvs] dovecot/src/auth passdb-bsdauth.c,NONE,1.1 Makefile.am,1.21,1.22 passdb.c,1.10,1.11 passdb.h,1.6,1.7

cras at procontrol.fi cras at procontrol.fi
Wed Oct 29 16:10:23 EET 2003


Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv13740/src/auth

Modified Files:
	Makefile.am passdb.c passdb.h 
Added Files:
	passdb-bsdauth.c 
Log Message:
Added bsdauth support, patch by Dan Cross



--- NEW FILE: passdb-bsdauth.c ---
/* Copyright (C) 2002-2003 Timo Sirainen */

#include "config.h"
#undef HAVE_CONFIG_H

#ifdef PASSDB_BSDAUTH

#include "common.h"
#include "safe-memset.h"
#include "passdb.h"
#include "mycrypt.h"

#include <login_cap.h>
#include <bsd_auth.h>
#include <pwd.h>

static void
bsdauth_verify_plain(struct auth_request *request, const char *password,
		    verify_plain_callback_t *callback)
{
	struct passwd *pw;
	int result;

	pw = getpwnam(request->user);
	if (pw == NULL) {
		if (verbose)
			i_info("passwd(%s): unknown user", request->user);
		callback(PASSDB_RESULT_USER_UNKNOWN, request);
		return;
	}

	if (!IS_VALID_PASSWD(pw->pw_passwd)) {
		if (verbose) {
			i_info("passwd(%s): invalid password field '%s'",
			       request->user, pw->pw_passwd);
		}
		callback(PASSDB_RESULT_USER_DISABLED, request);
		return;
	}

	/* check if the password is valid */
	result = auth_userokay(request->user, NULL, NULL, password);

	/* clear the passwords from memory */
	safe_memset(pw->pw_passwd, 0, strlen(pw->pw_passwd));

	if (!result) {
		if (verbose)
			i_info("passwd(%s): password mismatch", request->user);
		callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
		return;
	}

	callback(PASSDB_RESULT_OK, request);
}

static void bsdauth_deinit(void)
{
	endpwent();
}

struct passdb_module passdb_bsdauth = {
	NULL,
	bsdauth_deinit,

	bsdauth_verify_plain,
	NULL
};

#endif

Index: Makefile.am
===================================================================
RCS file: /home/cvs/dovecot/src/auth/Makefile.am,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- Makefile.am	22 Aug 2003 02:42:13 -0000	1.21
+++ Makefile.am	29 Oct 2003 14:10:20 -0000	1.22
@@ -31,6 +31,7 @@
 	mech-digest-md5.c \
 	mycrypt.c \
 	passdb.c \
+	passdb-bsdauth.c \
 	passdb-ldap.c \
 	passdb-passwd.c \
 	passdb-passwd-file.c \

Index: passdb.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- passdb.c	14 May 2003 18:31:02 -0000	1.10
+++ passdb.c	29 Oct 2003 14:10:20 -0000	1.11
@@ -86,6 +86,10 @@
 	if (strcasecmp(name, "passwd") == 0)
 		passdb = &passdb_passwd;
 #endif
+#ifdef PASSDB_BSDAUTH
+	if (strcasecmp(name, "bsdauth") == 0)
+		passdb = &passdb_bsdauth;
+#endif
 #ifdef PASSDB_PASSWD_FILE
 	if (strcasecmp(name, "passwd-file") == 0)
 		passdb = &passdb_passwd_file;

Index: passdb.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- passdb.h	6 Mar 2003 23:20:16 -0000	1.6
+++ passdb.h	29 Oct 2003 14:10:20 -0000	1.7
@@ -52,6 +52,7 @@
 extern struct passdb_module *passdb;
 
 extern struct passdb_module passdb_passwd;
+extern struct passdb_module passdb_bsdauth;
 extern struct passdb_module passdb_shadow;
 extern struct passdb_module passdb_passwd_file;
 extern struct passdb_module passdb_pam;



More information about the dovecot-cvs mailing list