[dovecot-cvs] dovecot/src/auth auth-request.c, 1.32,
1.33 passdb-bsdauth.c, 1.11, 1.12 passdb-pam.c, 1.27,
1.28 passdb-passwd-file.c, 1.20, 1.21 passdb-passwd.c, 1.14,
1.15 passdb-shadow.c, 1.15, 1.16 passdb-vpopmail.c, 1.21, 1.22
cras at dovecot.org
cras at dovecot.org
Sun Oct 16 15:49:17 EEST 2005
- Previous message: [dovecot-cvs] dovecot/src/auth auth-request.c, 1.31,
1.32 auth-worker-client.c, 1.14, 1.15 passdb-blocking.c, 1.7,
1.8 passdb-cache.c, 1.12, 1.13 passdb-cache.h, 1.4,
1.5 passdb-ldap.c, 1.32, 1.33 passdb-passwd-file.c, 1.19,
1.20 passdb-sql.c, 1.20, 1.21 passdb.c, 1.36, 1.37 passdb.h,
1.27, 1.28
- Next message: [dovecot-cvs]
dovecot/src/auth auth-cache.c, 1.13, 1.14 auth-cache.h,
1.2, 1.3 auth-request.c, 1.33, 1.34 auth-worker-client.c, 1.15,
1.16 auth.c, 1.18, 1.19 db-ldap.c, 1.31, 1.32 db-passwd-file.c,
1.15, 1.16 db-passwd-file.h, 1.6, 1.7 passdb-bsdauth.c, 1.12,
1.13 passdb-checkpassword.c, 1.10, 1.11 passdb-ldap.c, 1.33,
1.34 passdb-pam.c, 1.28, 1.29 passdb-passwd-file.c, 1.21,
1.22 passdb-passwd.c, 1.15, 1.16 passdb-shadow.c, 1.16,
1.17 passdb-sql.c, 1.21, 1.22 passdb-vpopmail.c, 1.22,
1.23 passdb.c, 1.37, 1.38 passdb.h, 1.28,
1.29 userdb-passwd-file.c, 1.16, 1.17
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/auth
In directory talvi:/tmp/cvs-serv2402/src/auth
Modified Files:
auth-request.c passdb-bsdauth.c passdb-pam.c
passdb-passwd-file.c passdb-passwd.c passdb-shadow.c
passdb-vpopmail.c
Log Message:
Make auth caching work with non-sql/ldap passdbs too.
Index: auth-request.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-request.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- auth-request.c 16 Oct 2005 12:03:37 -0000 1.32
+++ auth-request.c 16 Oct 2005 12:49:14 -0000 1.33
@@ -202,8 +202,13 @@
}
if (request->passdb_password == NULL) {
- /* save to cache only if we know the password */
- return;
+ /* passdb didn't provide the correct password */
+ if (result != PASSDB_RESULT_OK ||
+ request->mech_password == NULL)
+ return;
+
+ /* we can still cache valid password lookups though */
+ request->passdb_password = request->mech_password;
}
/* save all except the currently given password in cache */
@@ -323,6 +328,8 @@
if (request->mech_password == NULL)
request->mech_password = p_strdup(request->pool, password);
+ else
+ i_assert(request->mech_password == password);
request->private_callback.verify_plain = callback;
cache_key = passdb_cache == NULL ? NULL : passdb->cache_key;
Index: passdb-bsdauth.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-bsdauth.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- passdb-bsdauth.c 1 Oct 2005 10:52:14 -0000 1.11
+++ passdb-bsdauth.c 16 Oct 2005 12:49:14 -0000 1.12
@@ -12,6 +12,9 @@
#include <bsd_auth.h>
#include <pwd.h>
+extern struct passdb_module passdb_bsdauth;
+static char *bsdauth_cache_key;
+
static void
bsdauth_verify_plain(struct auth_request *request, const char *password,
verify_plain_callback_t *callback)
@@ -52,16 +55,28 @@
callback(PASSDB_RESULT_OK, request);
}
+static void bsdauth_init(const char *args)
+{
+ bsdauth_cache_key = NULL;
+
+ if (strncmp(args, "cache_key=", 10) == 0)
+ bsdauth_cache_key = i_strdup(args + 10);
+
+ passdb_bsdauth.cache_key = bsdauth_cache_key;
+}
+
static void bsdauth_deinit(void)
{
endpwent();
+ i_free(bsdauth_cache_key);
}
struct passdb_module passdb_bsdauth = {
"bsdauth",
- "%u", "CRYPT", FALSE,
+ NULL, NULL, FALSE,
- NULL, NULL,
+ NULL,
+ bsdauth_init,
bsdauth_deinit,
bsdauth_verify_plain,
Index: passdb-pam.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-pam.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- passdb-pam.c 12 Oct 2005 17:14:21 -0000 1.27
+++ passdb-pam.c 16 Oct 2005 12:49:14 -0000 1.28
@@ -71,8 +71,10 @@
const char *pass;
};
+extern struct passdb_module passdb_pam;
+
static int pam_session;
-static char *service_name;
+static char *service_name, *pam_cache_key;
static struct timeout *to_wait;
static int pam_userpass_conv(int num_msg, linux_const struct pam_message **msg,
@@ -409,13 +411,17 @@
pam_session = FALSE;
service_name = i_strdup("dovecot");
+ pam_cache_key = NULL;
t_push();
t_args = t_strsplit(args, " ");
for(i = 0; t_args[i] != NULL; i++) {
if (strcmp(t_args[i], "-session") == 0)
pam_session = TRUE;
- else if (strcmp(t_args[i], "*") == 0) {
+ else if (strncmp(t_args[i], "cache_key=", 10) == 0) {
+ i_free(pam_cache_key);
+ pam_cache_key = i_strdup(t_args[i] + 10);
+ } else if (strcmp(t_args[i], "*") == 0) {
i_free(service_name);
service_name = NULL;
} else {
@@ -428,6 +434,7 @@
t_pop();
to_wait = NULL;
+ passdb_pam.cache_key = pam_cache_key;
}
static void pam_deinit(void)
@@ -435,6 +442,7 @@
if (to_wait != NULL)
timeout_remove(to_wait);
i_free(service_name);
+ i_free(pam_cache_key);
}
struct passdb_module passdb_pam = {
Index: passdb-passwd-file.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-passwd-file.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- passdb-passwd-file.c 16 Oct 2005 12:03:37 -0000 1.20
+++ passdb-passwd-file.c 16 Oct 2005 12:49:14 -0000 1.21
@@ -8,6 +8,9 @@
#include "password-scheme.h"
#include "db-passwd-file.h"
+#define PASSWD_FILE_CACHE_KEY "%u"
+#define PASSWD_FILE_DEFAULT_SCHEME "CRYPT"
+
struct db_passwd_file *passdb_pwf = NULL;
static void
@@ -26,7 +29,10 @@
crypted_pass = pu->password;
scheme = password_get_scheme(&crypted_pass);
- if (scheme == NULL) scheme = "CRYPT";
+ if (scheme == NULL) scheme = PASSWD_FILE_DEFAULT_SCHEME;
+
+ /* save the password so cache can use it */
+ auth_request_set_field(request, "password", crypted_pass, scheme);
ret = password_verify(password, crypted_pass, scheme,
request->user);
@@ -81,7 +87,9 @@
struct passdb_module passdb_passwd_file = {
"passwd-file",
- NULL, NULL, FALSE,
+ PASSWD_FILE_CACHE_KEY,
+ NULL,
+ FALSE,
NULL,
passwd_file_init,
Index: passdb-passwd.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-passwd.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- passdb-passwd.c 1 Oct 2005 10:52:14 -0000 1.14
+++ passdb-passwd.c 16 Oct 2005 12:49:14 -0000 1.15
@@ -10,6 +10,9 @@
#include <pwd.h>
+#define PASSWD_CACHE_KEY "%u"
+#define PASSWD_PASS_SCHEME "CRYPT"
+
static void
passwd_verify_plain(struct auth_request *request, const char *password,
verify_plain_callback_t *callback)
@@ -31,6 +34,10 @@
return;
}
+ /* save the password so cache can use it */
+ auth_request_set_field(request, "password", pw->pw_passwd,
+ PASSWD_PASS_SCHEME);
+
/* check if the password is valid */
result = strcmp(mycrypt(password, pw->pw_passwd), pw->pw_passwd) == 0;
@@ -56,7 +63,9 @@
struct passdb_module passdb_passwd = {
"passwd",
- "%u", "CRYPT", FALSE,
+ PASSWD_CACHE_KEY,
+ PASSWD_PASS_SCHEME,
+ FALSE,
NULL, NULL,
passwd_deinit,
Index: passdb-shadow.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-shadow.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- passdb-shadow.c 1 Oct 2005 10:52:14 -0000 1.15
+++ passdb-shadow.c 16 Oct 2005 12:49:14 -0000 1.16
@@ -10,6 +10,9 @@
#include <shadow.h>
+#define SHADOW_CACHE_KEY "%u"
+#define SHADOW_PASS_SCHEME "CRYPT"
+
static void
shadow_verify_plain(struct auth_request *request, const char *password,
verify_plain_callback_t *callback)
@@ -31,6 +34,10 @@
return;
}
+ /* save the password so cache can use it */
+ auth_request_set_field(request, "password", spw->sp_pwdp,
+ SHADOW_PASS_SCHEME);
+
/* check if the password is valid */
result = strcmp(mycrypt(password, spw->sp_pwdp), spw->sp_pwdp) == 0;
@@ -56,7 +63,9 @@
struct passdb_module passdb_shadow = {
"shadow",
- "%u", "CRYPT", FALSE,
+ SHADOW_CACHE_KEY,
+ SHADOW_PASS_SCHEME,
+ FALSE,
NULL, NULL,
shadow_deinit,
Index: passdb-vpopmail.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/passdb-vpopmail.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- passdb-vpopmail.c 12 Jul 2005 12:58:47 -0000 1.21
+++ passdb-vpopmail.c 16 Oct 2005 12:49:14 -0000 1.22
@@ -14,7 +14,10 @@
#include <stdlib.h>
+#define VPOPMAIL_DEFAULT_PASS_SCHEME "CRYPT"
+
extern struct passdb_module passdb_vpopmail;
+static char *vpopmail_cache_key;
static void
vpopmail_verify_plain(struct auth_request *request, const char *password,
@@ -91,16 +94,30 @@
callback(PASSDB_RESULT_OK, request);
}
+static void vpopmail_init(const char *args)
+{
+ vpopmail_cache_key = NULL;
+
+ if (strncmp(args, "cache_key=", 10) == 0)
+ vpopmail_cache_key = i_strdup(args + 10);
+
+ passdb_vpopmail.cache_key = vpopmail_cache_key;
+}
+
static void vpopmail_deinit(void)
{
vclose();
+ i_free(vpopmail_cache_key);
}
struct passdb_module passdb_vpopmail = {
"vpopmail",
- "%u", "CRYPT", FALSE,
+ NULL,
+ VPOPMAIL_DEFAULT_PASS_SCHEME,
+ FALSE,
- NULL, NULL,
+ NULL,
+ vpopmail_init,
vpopmail_deinit,
vpopmail_verify_plain,
- Previous message: [dovecot-cvs] dovecot/src/auth auth-request.c, 1.31,
1.32 auth-worker-client.c, 1.14, 1.15 passdb-blocking.c, 1.7,
1.8 passdb-cache.c, 1.12, 1.13 passdb-cache.h, 1.4,
1.5 passdb-ldap.c, 1.32, 1.33 passdb-passwd-file.c, 1.19,
1.20 passdb-sql.c, 1.20, 1.21 passdb.c, 1.36, 1.37 passdb.h,
1.27, 1.28
- Next message: [dovecot-cvs]
dovecot/src/auth auth-cache.c, 1.13, 1.14 auth-cache.h,
1.2, 1.3 auth-request.c, 1.33, 1.34 auth-worker-client.c, 1.15,
1.16 auth.c, 1.18, 1.19 db-ldap.c, 1.31, 1.32 db-passwd-file.c,
1.15, 1.16 db-passwd-file.h, 1.6, 1.7 passdb-bsdauth.c, 1.12,
1.13 passdb-checkpassword.c, 1.10, 1.11 passdb-ldap.c, 1.33,
1.34 passdb-pam.c, 1.28, 1.29 passdb-passwd-file.c, 1.21,
1.22 passdb-passwd.c, 1.15, 1.16 passdb-shadow.c, 1.16,
1.17 passdb-sql.c, 1.21, 1.22 passdb-vpopmail.c, 1.22,
1.23 passdb.c, 1.37, 1.38 passdb.h, 1.28,
1.29 userdb-passwd-file.c, 1.16, 1.17
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list