[dovecot-cvs] dovecot/src/auth auth-cache.c, 1.17.2.2, 1.17.2.3 auth-request.c, 1.58.2.10, 1.58.2.11
tss at dovecot.org
tss at dovecot.org
Sun Oct 15 17:43:45 UTC 2006
Update of /var/lib/cvs/dovecot/src/auth
In directory talvi:/tmp/cvs-serv23648
Modified Files:
Tag: branch_1_0
auth-cache.c auth-request.c
Log Message:
auth cache didn't work properly with multiple passdbs.
Index: auth-cache.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-cache.c,v
retrieving revision 1.17.2.2
retrieving revision 1.17.2.3
diff -u -d -r1.17.2.2 -r1.17.2.3
--- auth-cache.c 13 Oct 2006 16:37:10 -0000 1.17.2.2
+++ auth-cache.c 15 Oct 2006 16:43:13 -0000 1.17.2.3
@@ -157,8 +157,9 @@
*expired_r = FALSE;
+ /* %! is prepended automatically. it contains the passdb ID number. */
str = t_str_new(256);
- var_expand(str, key,
+ var_expand(str, t_strconcat("%!/", key, NULL),
auth_request_get_var_expand_table(request,
auth_request_str_escape));
@@ -194,8 +195,9 @@
struct auth_cache_node *node;
size_t data_size, alloc_size, value_len = strlen(value);
+ /* %! is prepended automatically. it contains the passdb ID number. */
str = t_str_new(256);
- var_expand(str, key,
+ var_expand(str, t_strconcat("%!/", key, NULL),
auth_request_get_var_expand_table(request,
auth_request_str_escape));
Index: auth-request.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-request.c,v
retrieving revision 1.58.2.10
retrieving revision 1.58.2.11
diff -u -d -r1.58.2.10 -r1.58.2.11
--- auth-request.c 15 Oct 2006 16:19:59 -0000 1.58.2.10
+++ auth-request.c 15 Oct 2006 16:43:13 -0000 1.58.2.11
@@ -353,6 +353,23 @@
return TRUE;
}
+static void
+auth_request_verify_plain_callback_finish(enum passdb_result result,
+ struct auth_request *request)
+{
+ if (!auth_request_handle_passdb_callback(&result, request)) {
+ /* try next passdb */
+ auth_request_verify_plain(request, request->mech_password,
+ request->private_callback.verify_plain);
+ } else {
+ auth_request_ref(request);
+ request->private_callback.verify_plain(result, request);
+ safe_memset(request->mech_password, 0,
+ strlen(request->mech_password));
+ auth_request_unref(&request);
+ }
+}
+
void auth_request_verify_plain_callback(enum passdb_result result,
struct auth_request *request)
{
@@ -376,17 +393,7 @@
}
}
- if (!auth_request_handle_passdb_callback(&result, request)) {
- /* try next passdb */
- auth_request_verify_plain(request, request->mech_password,
- request->private_callback.verify_plain);
- } else {
- auth_request_ref(request);
- request->private_callback.verify_plain(result, request);
- safe_memset(request->mech_password, 0,
- strlen(request->mech_password));
- auth_request_unref(&request);
- }
+ auth_request_verify_plain_callback_finish(result, request);
}
void auth_request_verify_plain(struct auth_request *request,
@@ -418,7 +425,7 @@
cache_key = passdb_cache == NULL ? NULL : passdb->cache_key;
if (passdb_cache_verify_plain(request, cache_key, password,
&result, FALSE)) {
- callback(result, request);
+ auth_request_verify_plain_callback_finish(result, request);
return;
}
@@ -433,6 +440,26 @@
}
}
+static void
+auth_request_lookup_credentials_callback_finish(enum passdb_result result,
+ const char *password,
+ struct auth_request *request)
+{
+ if (!auth_request_handle_passdb_callback(&result, request)) {
+ /* try next passdb */
+ auth_request_lookup_credentials(request, request->credentials,
+ request->private_callback.lookup_credentials);
+ } else {
+ if (request->auth->verbose_debug_passwords &&
+ result == PASSDB_RESULT_OK) {
+ auth_request_log_debug(request, "password",
+ "Credentials: %s", password);
+ }
+ request->private_callback.
+ lookup_credentials(result, password, request);
+ }
+}
+
void auth_request_lookup_credentials_callback(enum passdb_result result,
const char *password,
struct auth_request *request)
@@ -464,19 +491,8 @@
}
}
- if (!auth_request_handle_passdb_callback(&result, request)) {
- /* try next passdb */
- auth_request_lookup_credentials(request, request->credentials,
- request->private_callback.lookup_credentials);
- } else {
- if (request->auth->verbose_debug_passwords &&
- result == PASSDB_RESULT_OK) {
- auth_request_log_debug(request, "password",
- "Credentials: %s", password);
- }
- request->private_callback.
- lookup_credentials(result, password, request);
- }
+ auth_request_lookup_credentials_callback_finish(result, password,
+ request);
}
void auth_request_lookup_credentials(struct auth_request *request,
@@ -496,8 +512,11 @@
if (passdb_cache_lookup_credentials(request, cache_key,
&password, &scheme,
&result, FALSE)) {
- passdb_handle_credentials(result, password, scheme,
- callback, request);
+ password = result != PASSDB_RESULT_OK ? NULL :
+ passdb_get_credentials(request, password,
+ scheme);
+ auth_request_lookup_credentials_callback_finish(
+ result, password, request);
return;
}
}
@@ -894,6 +913,7 @@
{ 'r', NULL },
{ 'p', NULL },
{ 'w', NULL },
+ { '!', NULL },
{ '\0', NULL }
};
struct var_expand_table *tab;
@@ -921,6 +941,8 @@
tab[8].value = escape_func(auth_request->mech_password,
auth_request);
}
+ tab[9].value = auth_request->passdb == NULL ? "" :
+ dec2str(auth_request->passdb->id);
return tab;
}
More information about the dovecot-cvs
mailing list