dovecot-2.0-sslstream: auth: Connect to anvil-auth-penalty befor...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:56:21 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/9bec70f26637
changeset: 10311:9bec70f26637
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Nov 11 13:55:49 2009 -0500
description:
auth: Connect to anvil-auth-penalty before dropping root privileges.

diffstat:

3 files changed, 11 insertions(+), 7 deletions(-)
src/auth/auth-request-handler.c |   11 ++++-------
src/auth/auth.c                 |    6 ++++++
src/auth/auth.h                 |    1 +

diffs (105 lines):

diff -r 49d92c3fa17a -r 9bec70f26637 src/auth/auth-request-handler.c
--- a/src/auth/auth-request-handler.c	Wed Nov 11 12:51:10 2009 -0500
+++ b/src/auth/auth-request-handler.c	Wed Nov 11 13:55:49 2009 -0500
@@ -16,13 +16,11 @@
 #include <stdlib.h>
 
 #define AUTH_FAILURE_DELAY_CHECK_MSECS 500
-#define AUTH_PENALTY_ANVIL_PATH "anvil-auth-penalty"
 
 struct auth_request_handler {
 	int refcount;
 	pool_t pool;
 	struct hash_table *requests;
-	struct auth_penalty *penalty;
 
         struct auth *auth;
         unsigned int connect_uid, client_pid;
@@ -58,7 +56,6 @@ auth_request_handler_create(struct auth 
 	handler->callback = callback;
 	handler->context = context;
 	handler->master_callback = master_callback;
-	handler->penalty = auth_penalty_init(AUTH_PENALTY_ANVIL_PATH);
 	return handler;
 }
 
@@ -84,7 +81,6 @@ void auth_request_handler_unref(struct a
 	/* notify parent that we're done with all requests */
 	handler->callback(NULL, handler->context);
 
-	auth_penalty_deinit(&handler->penalty);
 	hash_table_destroy(&handler->requests);
 	pool_unref(&handler->pool);
 }
@@ -193,7 +189,7 @@ auth_request_handle_failure(struct auth_
 	request->delayed_failure = TRUE;
 	handler->refcount++;
 
-	auth_penalty_update(handler->penalty, request,
+	auth_penalty_update(request->auth->penalty, request,
 			    request->last_penalty + 1);
 
 	request->last_access = ioloop_time;
@@ -231,7 +227,7 @@ static void auth_callback(struct auth_re
 
 		if (request->last_penalty != 0) {
 			/* reset penalty */
-			auth_penalty_update(handler->penalty, request, 0);
+			auth_penalty_update(request->auth->penalty, request, 0);
 		}
 
 		auth_stream_reply_add(reply, "OK", NULL);
@@ -421,7 +417,8 @@ bool auth_request_handler_auth_begin(str
 	handler->refcount++;
 
 	/* before we start authenticating, see if we need to wait first */
-	auth_penalty_lookup(handler->penalty, request, auth_penalty_callback);
+	auth_penalty_lookup(request->auth->penalty, request,
+			    auth_penalty_callback);
 	return TRUE;
 }
 
diff -r 49d92c3fa17a -r 9bec70f26637 src/auth/auth.c
--- a/src/auth/auth.c	Wed Nov 11 12:51:10 2009 -0500
+++ b/src/auth/auth.c	Wed Nov 11 13:55:49 2009 -0500
@@ -10,10 +10,13 @@
 #include "passdb.h"
 #include "passdb-cache.h"
 #include "auth.h"
+#include "auth-penalty.h"
 #include "auth-request-handler.h"
 
 #include <stdlib.h>
 #include <unistd.h>
+
+#define AUTH_PENALTY_ANVIL_PATH "anvil-auth-penalty"
 
 struct auth_userdb_settings userdb_dummy_set = {
 	MEMBER(driver) "static",
@@ -255,6 +258,8 @@ void auth_init(struct auth *auth)
 		for (; *p != '\0' && p[1] != '\0'; p += 2)
 			auth->username_translation[(int)(uint8_t)*p] = p[1];
 	}
+
+	auth->penalty = auth_penalty_init(AUTH_PENALTY_ANVIL_PATH);
 }
 
 void auth_deinit(struct auth **_auth)
@@ -275,5 +280,6 @@ void auth_deinit(struct auth **_auth)
 	auth_request_handler_deinit();
 	passdb_cache_deinit();
 
+	auth_penalty_deinit(&auth->penalty);
 	pool_unref(&auth->pool);
 }
diff -r 49d92c3fa17a -r 9bec70f26637 src/auth/auth.h
--- a/src/auth/auth.h	Wed Nov 11 12:51:10 2009 -0500
+++ b/src/auth/auth.h	Wed Nov 11 13:55:49 2009 -0500
@@ -39,6 +39,7 @@ struct auth {
 	struct auth_passdb *masterdbs;
 	struct auth_passdb *passdbs;
 	struct auth_userdb *userdbs;
+	struct auth_penalty *penalty;
 
 	const char *const *auth_realms;
 	char username_chars[256];


More information about the dovecot-cvs mailing list