[dovecot-cvs] dovecot/src/auth auth-login-interface.h,1.1,1.2 db-ldap.c,1.1,1.2 db-ldap.h,1.1,1.2 mech-digest-md5.c,1.2,1.3 mech-plain.c,1.3,1.4 mech.c,1.3,1.4 mech.h,1.2,1.3 passdb-pam.c,1.2,1.3 passdb-passwd-file.c,1.3,1.4 passdb-passwd.c,1.2,1.3 Message-Id: <20030202000830.81D21239A7@danu.procontrol.fi>
cras at procontrol.fi
cras at procontrol.fi
Sun Feb 2 02:08:30 EET 2003
- Previous message: [dovecot-cvs] dovecot/src/master master-settings.c,1.3,1.4
- Next message: [dovecot-cvs] dovecot/src/auth mech-digest-md5.c,1.3,1.4 mech-plain.c,1.4,1.5 mech.c,1.4,1.5 mech.h,1.3,1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv8862/src/auth
Modified Files:
auth-login-interface.h db-ldap.c db-ldap.h mech-digest-md5.c
mech-plain.c mech.c mech.h passdb-pam.c passdb-passwd-file.c
passdb-passwd.c passdb-shadow.c passdb-vpopmail.c passdb.h
userdb-ldap.c userdb.c userdb.h
Log Message:
auth process fixes, LDAP seems to be working (with the kludge define or
fixed libldap)
Index: auth-login-interface.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/auth-login-interface.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- auth-login-interface.h 27 Jan 2003 01:33:40 -0000 1.1
+++ auth-login-interface.h 2 Feb 2003 00:08:28 -0000 1.2
@@ -11,6 +11,11 @@
AUTH_MECH_COUNT
};
+enum auth_protocol {
+ AUTH_PROTOCOL_IMAP = 0x01,
+ AUTH_PROTOCOL_POP3 = 0x02
+};
+
enum auth_login_request_type {
AUTH_LOGIN_REQUEST_NEW = 1,
AUTH_LOGIN_REQUEST_CONTINUE
@@ -38,7 +43,8 @@
enum auth_login_request_type type; /* AUTH_LOGIN_REQUEST_NEW */
unsigned int id; /* unique ID for the request */
- enum auth_mech mech;
+ enum auth_mech mech;
+ enum auth_protocol protocol;
};
/* Continue authentication request */
Index: db-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-ldap.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- db-ldap.c 31 Jan 2003 06:56:57 -0000 1.1
+++ db-ldap.c 2 Feb 2003 00:08:28 -0000 1.2
@@ -6,6 +6,7 @@
#if defined(PASSDB_LDAP) || defined(USERDB_LDAP)
#include "common.h"
+#include "network.h"
#include "ioloop.h"
#include "hash.h"
#include "settings.h"
@@ -18,8 +19,8 @@
static struct setting_def setting_defs[] = {
DEF(SET_STR, hosts),
- DEF(SET_STR, user),
- DEF(SET_STR, pass),
+ DEF(SET_STR, dn),
+ DEF(SET_STR, dnpass),
DEF(SET_STR, deref),
DEF(SET_STR, base),
DEF(SET_STR, attrs),
@@ -28,8 +29,8 @@
struct ldap_settings default_ldap_settings = {
MEMBER(hosts) "localhost",
- MEMBER(user) NULL,
- MEMBER(pass) NULL,
+ MEMBER(dn) NULL,
+ MEMBER(dnpass) NULL,
MEMBER(deref) "never",
MEMBER(base) NULL,
MEMBER(attrs) NULL,
@@ -100,6 +101,11 @@
for (;;) {
memset(&timeout, 0, sizeof(timeout));
+#ifdef OPENLDAP_ASYNC_WORKAROUND
+ /* we may block, but at least we work */
+ timeout.tv_sec = 2;
+#endif
+
ret = ldap_result(conn->ld, LDAP_RES_ANY, 1, &timeout, &res);
if (ret <= 0) {
if (ret < 0) {
@@ -156,7 +162,7 @@
/* NOTE: we use blocking connect, we couldn't do anything anyway
until it's done. */
- ret = ldap_simple_bind_s(conn->ld, conn->set.user, conn->set.pass);
+ ret = ldap_simple_bind_s(conn->ld, conn->set.dn, conn->set.dnpass);
if (ret != LDAP_SUCCESS) {
i_error("LDAP: ldap_simple_bind_s() failed: %s",
ldap_err2string(ret));
@@ -172,6 +178,7 @@
ldap_err2string(ret));
}
+ net_set_nonblock(fd, TRUE);
conn->io = io_add(fd, IO_READ, ldap_input, conn);
return TRUE;
}
@@ -239,10 +246,10 @@
conn->set = default_ldap_settings;
settings_read(config_path, parse_setting, conn);
- if (conn->set.user == NULL)
+ /*if (conn->set.dnuser == NULL)
i_fatal("LDAP: No user given");
- if (conn->set.pass == NULL)
- i_fatal("LDAP: No password given");
+ if (conn->set.dnpass == NULL)
+ i_fatal("LDAP: No password given");*/
if (conn->set.base == NULL)
i_fatal("LDAP: No base given");
Index: db-ldap.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-ldap.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- db-ldap.h 31 Jan 2003 06:56:57 -0000 1.1
+++ db-ldap.h 2 Feb 2003 00:08:28 -0000 1.2
@@ -12,8 +12,8 @@
struct ldap_settings {
const char *hosts;
- const char *user;
- const char *pass;
+ const char *dn;
+ const char *dnpass;
const char *deref;
const char *base;
const char *attrs;
Index: mech-digest-md5.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech-digest-md5.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mech-digest-md5.c 27 Jan 2003 08:08:14 -0000 1.2
+++ mech-digest-md5.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -520,11 +520,13 @@
return !failed;
}
-static void credentials_callback(const char *result, void *context)
+static void credentials_callback(const char *result,
+ struct auth_request *request)
{
- struct digest_auth_request *auth = context;
+ struct digest_auth_request *auth =
+ (struct digest_auth_request *) request;
- mech_auth_finish(&auth->auth_request, verify_credentials(auth, result));
+ mech_auth_finish(request, verify_credentials(auth, result));
}
static int
@@ -559,9 +561,14 @@
auth_request->id = request->id;
auth_request->callback = callback;
- passdb->lookup_credentials(auth->username, auth->realm,
+ passdb->lookup_credentials(&auth->auth_request,
PASSDB_CREDENTIALS_DIGEST_MD5,
- credentials_callback, auth);
+ credentials_callback);
+
+ reply.data_size = strlen(auth->rspauth);
+ callback(&reply, auth->rspauth, conn);
+ auth->authenticated = TRUE;
+ return TRUE;
}
if (error == NULL)
Index: mech-plain.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech-plain.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mech-plain.c 27 Jan 2003 08:08:14 -0000 1.3
+++ mech-plain.c 2 Feb 2003 00:08:28 -0000 1.4
@@ -6,11 +6,10 @@
#include "mech.h"
#include "passdb.h"
-static void verify_callback(enum passdb_result result, void *context)
+static void verify_callback(enum passdb_result result,
+ struct auth_request *request)
{
- struct auth_request *auth_request = context;
-
- mech_auth_finish(auth_request, result == PASSDB_RESULT_OK);
+ mech_auth_finish(request, result == PASSDB_RESULT_OK);
}
static int
@@ -52,8 +51,7 @@
if (auth_request->realm != NULL)
auth_request->realm++;
- passdb->verify_plain(auth_request->user, auth_request->realm,
- pass, verify_callback, auth_request);
+ passdb->verify_plain(auth_request, pass, verify_callback);
/* make sure it's cleared */
safe_memset(pass, 0, strlen(pass));
Index: mech.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mech.c 31 Jan 2003 06:56:58 -0000 1.3
+++ mech.c 2 Feb 2003 00:08:28 -0000 1.4
@@ -90,6 +90,7 @@
}
if (auth_request != NULL) {
+ auth_request->protocol = request->protocol;
hash_insert(conn->auth_requests, POINTER_CAST(request->id),
auth_request);
}
Index: mech.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mech.h 27 Jan 2003 08:08:14 -0000 1.2
+++ mech.h 2 Feb 2003 00:08:28 -0000 1.3
@@ -14,6 +14,7 @@
struct login_connection *conn;
unsigned int id;
+ enum auth_protocol protocol;
mech_callback_t *callback;
int (*auth_continue)(struct login_connection *conn,
Index: passdb-pam.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-pam.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- passdb-pam.c 27 Jan 2003 08:08:14 -0000 1.2
+++ passdb-pam.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -195,16 +195,19 @@
}
static void
-pam_verify_plain(const char *user, const char *realm, const char *password,
- verify_plain_callback_t *callback, void *context)
+pam_verify_plain(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback)
{
pam_handle_t *pamh;
+ const char *user;
struct pam_userpass userpass;
struct pam_conv conv;
int status, status2;
- if (realm != NULL)
- user = t_strconcat(user, "@", realm, NULL);
+ if (request->realm == NULL)
+ user = request->user;
+ else
+ user = t_strconcat(request->user, "@", request->realm, NULL);
conv.conv = pam_userpass_conv;
conv.appdata_ptr = &userpass;
@@ -218,7 +221,7 @@
i_info("PAM: pam_start(%s) failed: %s",
user, pam_strerror(pamh, status));
}
- callback(PASSDB_RESULT_INTERNAL_FAILURE, context);
+ callback(PASSDB_RESULT_INTERNAL_FAILURE, request);
return;
}
@@ -226,13 +229,13 @@
if ((status2 = pam_end(pamh, status)) != PAM_SUCCESS) {
i_error("pam_end(%s) failed: %s",
user, pam_strerror(pamh, status2));
- callback(PASSDB_RESULT_INTERNAL_FAILURE, context);
+ callback(PASSDB_RESULT_INTERNAL_FAILURE, request);
return;
}
/* FIXME: check for PASSDB_RESULT_UNKNOWN_USER somehow */
callback(status == PAM_SUCCESS ? PASSDB_RESULT_OK :
- PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ PASSDB_RESULT_PASSWORD_MISMATCH, request);
}
static void pam_init(const char *args)
Index: passdb-passwd-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-passwd-file.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- passdb-passwd-file.c 31 Jan 2003 06:56:58 -0000 1.3
+++ passdb-passwd-file.c 2 Feb 2003 00:08:28 -0000 1.4
@@ -16,29 +16,28 @@
struct passwd_file *passdb_pwf = NULL;
static void
-passwd_file_verify_plain(const char *user, const char *realm,
- const char *password,
- verify_plain_callback_t *callback, void *context)
+passwd_file_verify_plain(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback)
{
struct passwd_user *pu;
unsigned char digest[16];
const char *str;
- pu = db_passwd_file_lookup(passdb_pwf, user, realm);
+ pu = db_passwd_file_lookup(passdb_pwf, request->user, request->realm);
if (pu == NULL) {
- callback(PASSDB_RESULT_USER_UNKNOWN, context);
+ callback(PASSDB_RESULT_USER_UNKNOWN, request);
return;
}
switch (pu->password_type) {
case PASSWORD_NONE:
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
case PASSWORD_DES:
if (strcmp(mycrypt(password, pu->password),
pu->password) == 0) {
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
return;
}
@@ -46,7 +45,7 @@
i_info("passwd-file(%s): DES password mismatch",
pu->user_realm);
}
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
case PASSWORD_MD5:
@@ -54,7 +53,7 @@
str = binary_to_hex(digest, sizeof(digest));
if (strcmp(str, pu->password) == 0) {
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
return;
}
@@ -62,7 +61,7 @@
i_info("passwd-file(%s): MD5 password mismatch",
pu->user_realm);
}
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
case PASSWORD_DIGEST_MD5:
@@ -75,7 +74,7 @@
str = binary_to_hex(digest, sizeof(digest));
if (strcmp(str, pu->password) == 0) {
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
return;
}
@@ -84,7 +83,7 @@
pu->user_realm);
}
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
}
@@ -92,30 +91,29 @@
}
static void
-passwd_file_lookup_credentials(const char *user, const char *realm,
+passwd_file_lookup_credentials(struct auth_request *request,
enum passdb_credentials credentials,
- lookup_credentials_callback_t *callback,
- void *context)
+ lookup_credentials_callback_t *callback)
{
struct passwd_user *pu;
- pu = db_passwd_file_lookup(passdb_pwf, user, realm);
+ pu = db_passwd_file_lookup(passdb_pwf, request->user, request->realm);
if (pu == NULL) {
- callback(NULL, context);
+ callback(NULL, request);
return;
}
if (pu->password_type == PASSWORD_NONE) {
if (verbose)
i_info("passwd-file(%s): No password", pu->user_realm);
- callback(NULL, context);
+ callback(NULL, request);
return;
}
switch (credentials) {
case PASSDB_CREDENTIALS_DIGEST_MD5:
if (pu->password_type == PASSWORD_DIGEST_MD5) {
- callback(pu->password, context);
+ callback(pu->password, request);
return;
}
@@ -123,14 +121,14 @@
i_info("passwd-file(%s): No DIGEST-MD5 password",
pu->user_realm);
}
- callback(NULL, context);
+ callback(NULL, request);
return;
default:
if (verbose) {
i_info("passwd-file(%s): Unsupported credentials %u",
pu->user_realm, (unsigned int)credentials);
}
- callback(NULL, context);
+ callback(NULL, request);
return;
}
}
Index: passdb-passwd.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-passwd.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- passdb-passwd.c 27 Jan 2003 08:08:14 -0000 1.2
+++ passdb-passwd.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -13,21 +13,25 @@
#include <pwd.h>
static void
-passwd_verify_plain(const char *user, const char *realm, const char *password,
- verify_plain_callback_t *callback, void *context)
+passwd_verify_plain(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback)
{
+ const char *user;
struct passwd *pw;
int result;
- if (realm != NULL)
- user = t_strconcat(user, "@", realm, NULL);
+ if (request->realm == NULL)
+ user = request->user;
+ else
+ user = t_strconcat(request->user, "@", request->realm, NULL);
+
pw = getpwnam(user);
if (pw == NULL) {
if (errno != 0)
i_error("getpwnam(%s) failed: %m", user);
else if (verbose)
i_info("passwd(%s): unknown user", user);
- callback(PASSDB_RESULT_USER_UNKNOWN, context);
+ callback(PASSDB_RESULT_USER_UNKNOWN, request);
return;
}
@@ -36,7 +40,7 @@
i_info("passwd(%s): invalid password field '%s'",
user, pw->pw_passwd);
}
- callback(PASSDB_RESULT_USER_DISABLED, context);
+ callback(PASSDB_RESULT_USER_DISABLED, request);
return;
}
@@ -49,11 +53,11 @@
if (!result) {
if (verbose)
i_info("passwd(%s): password mismatch", user);
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
}
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
}
static void passwd_deinit(void)
Index: passdb-shadow.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-shadow.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- passdb-shadow.c 27 Jan 2003 08:08:14 -0000 1.2
+++ passdb-shadow.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -13,21 +13,25 @@
#include <shadow.h>
static void
-shadow_verify_plain(const char *user, const char *realm, const char *password,
- verify_plain_callback_t *callback, void *context)
+shadow_verify_plain(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback)
{
+ const char *user;
struct spwd *spw;
int result;
- if (realm != NULL)
- user = t_strconcat(user, "@", realm, NULL);
+ if (request->realm == NULL)
+ user = request->user;
+ else
+ user = t_strconcat(request->user, "@", request->realm, NULL);
+
spw = getspnam(user);
if (spw == NULL) {
if (errno != 0)
i_error("getspnam(%s) failed: %m", user);
else if (verbose)
i_info("shadow(%s): unknown user", user);
- callback(PASSDB_RESULT_USER_UNKNOWN, context);
+ callback(PASSDB_RESULT_USER_UNKNOWN, request);
return;
}
@@ -36,7 +40,7 @@
i_info("shadow(%s): invalid password field '%s'",
user, spw->sp_pwdp);
}
- callback(PASSDB_RESULT_USER_DISABLED, context);
+ callback(PASSDB_RESULT_USER_DISABLED, request);
return;
}
@@ -49,11 +53,11 @@
if (!result) {
if (verbose)
i_info("shadow(%s): password mismatch", user);
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
}
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
}
static void shadow_deinit(void)
Index: passdb-vpopmail.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-vpopmail.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- passdb-vpopmail.c 27 Jan 2003 08:08:14 -0000 1.2
+++ passdb-vpopmail.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -15,23 +15,31 @@
#include "userdb-vpopmail.h"
static void
-vpopmail_verify_plain(const char *user, const char *realm, const char *password,
- verify_plain_callback_t *callback, void *context)
+vpopmail_verify_plain(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback)
{
char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT];
struct vqpasswd *vpw;
int result;
- vpw = vpopmail_lookup_vqp(user, realm, vpop_user, vpop_domain);
+ vpw = vpopmail_lookup_vqp(request->user, request->realm,
+ vpop_user, vpop_domain);
if (vpw == NULL) {
- callback(PASSDB_RESULT_USER_UNKNOWN, context);
+ callback(PASSDB_RESULT_USER_UNKNOWN, request);
return;
}
- if ((vpw->pw_gid & NO_IMAP) != 0) {
- if (verbose)
- i_info("vpopmail(%s): IMAP disabled", user);
- callback(PASSDB_RESULT_USER_DISABLED, context);
+ if (((vpw->pw_gid & NO_IMAP) != 0 &&
+ request->protocol == AUTH_PROTOCOL_IMAP) ||
+ ((vpw->pw_gid & NO_POP) != 0 &&
+ request->protocol == AUTH_PROTOCOL_POP3)) {
+ if (verbose) {
+ i_info("vpopmail(%s@%s): %s disabled",
+ vpop_user, vpop_domain,
+ request->protocol == AUTH_PROTOCOL_IMAP ?
+ "IMAP" : "POP3");
+ }
+ callback(PASSDB_RESULT_USER_DISABLED, request);
return;
}
@@ -40,13 +48,16 @@
safe_memset(vpw->pw_passwd, 0, strlen(vpw->pw_passwd));
if (!result) {
- if (verbose)
- i_info("vpopmail(%s): password mismatch", user);
- callback(PASSDB_RESULT_PASSWORD_MISMATCH, context);
+ if (verbose) {
+ i_info("vpopmail(%s@%s): password mismatch",
+ vpop_user, vpop_domain);
+ }
+
+ callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
return;
}
- callback(PASSDB_RESULT_OK, context);
+ callback(PASSDB_RESULT_OK, request);
}
static void vpopmail_deinit(void)
Index: passdb.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- passdb.h 27 Jan 2003 08:08:14 -0000 1.2
+++ passdb.h 2 Feb 2003 00:08:28 -0000 1.3
@@ -1,6 +1,8 @@
#ifndef __PASSDB_H
#define __PASSDB_H
+#include "mech.h"
+
#define IS_VALID_PASSWD(pass) \
((pass)[0] != '\0' && (pass)[0] != '*' && (pass)[0] != '!')
@@ -18,24 +20,24 @@
PASSDB_RESULT_OK = 1,
};
-typedef void verify_plain_callback_t(enum passdb_result result, void *context);
-typedef void lookup_credentials_callback_t(const char *result, void *context);
+typedef void verify_plain_callback_t(enum passdb_result result,
+ struct auth_request *request);
+typedef void lookup_credentials_callback_t(const char *result,
+ struct auth_request *request);
struct passdb_module {
void (*init)(const char *args);
void (*deinit)(void);
/* Check if plaintext password matches */
- void (*verify_plain)(const char *user, const char *realm,
- const char *password,
- verify_plain_callback_t *callback, void *context);
+ void (*verify_plain)(struct auth_request *request, const char *password,
+ verify_plain_callback_t *callback);
/* Return authentication credentials. Type is authentication mechanism
specific value that is requested. */
- void (*lookup_credentials)(const char *user, const char *realm,
+ void (*lookup_credentials)(struct auth_request *request,
enum passdb_credentials credentials,
- lookup_credentials_callback_t *callback,
- void *context);
+ lookup_credentials_callback_t *callback);
};
const char *passdb_credentials_to_str(enum passdb_credentials credentials);
Index: userdb-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-ldap.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- userdb-ldap.c 31 Jan 2003 06:56:58 -0000 1.1
+++ userdb-ldap.c 2 Feb 2003 00:08:28 -0000 1.2
@@ -60,7 +60,7 @@
return;
}
- switch (i) {
+ switch (conn->attrs[i]) {
case ATTR_VIRTUAL_USER:
user->virtual_user = t_strdup(value);
break;
@@ -110,11 +110,10 @@
attr = ldap_first_attribute(conn->ld, entry, &ber);
while (attr != NULL) {
vals = ldap_get_values(conn->ld, entry, attr);
- if (vals != NULL && vals[0] != NULL && vals[1] == NULL) {
+ if (vals != NULL && vals[0] != NULL && vals[1] == NULL)
parse_attr(userdb_ldap_conn, &user, attr, vals[0]);
- ldap_value_free(vals);
- ldap_memfree(attr);
- }
+ ldap_value_free(vals);
+ ldap_memfree(attr);
attr = ldap_next_attribute(conn->ld, entry, ber);
}
@@ -144,7 +143,7 @@
user = t_strconcat(user, "@", realm, NULL);
if (conn->set.filter == NULL) {
- filter = t_strdup_printf("(%s=%s)",
+ filter = t_strdup_printf("(&(objectClass=posixAccount)(%s=%s))",
userdb_ldap_conn->attr_names[ATTR_VIRTUAL_USER], user);
} else {
filter = t_strdup_printf("(&%s(%s=%s))", conn->set.filter,
@@ -163,14 +162,15 @@
static void userdb_ldap_init(const char *args)
{
- struct userdb_ldap_connection *conn;
+ struct ldap_connection *conn;
- conn = i_new(struct userdb_ldap_connection, 1);
- conn->conn = db_ldap_init(args);
+ userdb_ldap_conn = i_new(struct userdb_ldap_connection, 1);
+ userdb_ldap_conn->conn = conn = db_ldap_init(args);
- db_ldap_set_attrs(conn->conn, conn->conn->set.attrs ?
- conn->conn->set.attrs : DEFAULT_ATTRIBUTES,
- &conn->attrs, &conn->attr_names);
+ db_ldap_set_attrs(conn, conn->set.attrs ?
+ conn->set.attrs : DEFAULT_ATTRIBUTES,
+ &userdb_ldap_conn->attrs,
+ &userdb_ldap_conn->attr_names);
}
static void userdb_ldap_deinit(void)
Index: userdb.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- userdb.c 31 Jan 2003 06:56:58 -0000 1.2
+++ userdb.c 2 Feb 2003 00:08:28 -0000 1.3
@@ -36,6 +36,10 @@
if (strcasecmp(name, "vpopmail") == 0)
userdb = &userdb_vpopmail;
#endif
+#ifdef USERDB_LDAP
+ if (strcasecmp(name, "ldap") == 0)
+ userdb = &userdb_ldap;
+#endif
if (userdb == NULL)
i_fatal("Unknown userdb type '%s'", name);
Index: userdb.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- userdb.h 31 Jan 2003 06:56:58 -0000 1.3
+++ userdb.h 2 Feb 2003 00:08:28 -0000 1.4
@@ -29,6 +29,7 @@
extern struct userdb_module userdb_passwd;
extern struct userdb_module userdb_passwd_file;
extern struct userdb_module userdb_vpopmail;
+extern struct userdb_module userdb_ldap;
void userdb_init(void);
void userdb_deinit(void);
- Previous message: [dovecot-cvs] dovecot/src/master master-settings.c,1.3,1.4
- Next message: [dovecot-cvs] dovecot/src/auth mech-digest-md5.c,1.3,1.4 mech-plain.c,1.4,1.5 mech.c,1.4,1.5 mech.h,1.3,1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list