dovecot-2.0: *-login: Disconnect from auth server after idling f...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Feb 19 05:11:00 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/fc77d1cd1201
changeset: 10760:fc77d1cd1201
user: Timo Sirainen <tss at iki.fi>
date: Fri Feb 19 05:10:48 2010 +0200
description:
*-login: Disconnect from auth server after idling for a minute.
diffstat:
src/login-common/client-common.c | 4 ++--
src/login-common/login-common.h | 2 ++
src/login-common/main.c | 28 +++++++++++++++++++++++++---
3 files changed, 29 insertions(+), 5 deletions(-)
diffs (103 lines):
diff -r 7a7b2cbc6f91 -r fc77d1cd1201 src/login-common/client-common.c
--- a/src/login-common/client-common.c Fri Feb 19 05:10:06 2010 +0200
+++ b/src/login-common/client-common.c Fri Feb 19 05:10:48 2010 +0200
@@ -156,9 +156,9 @@
/* as soon as this connection is done with proxying
(or whatever), the process will die. there's no need for
authentication anymore, so close the connection. */
- if (auth_client != NULL)
- auth_client_deinit(&auth_client);
+ auth_client_disconnect(auth_client);
}
+ login_client_destroyed();
login_refresh_proctitle();
}
diff -r 7a7b2cbc6f91 -r fc77d1cd1201 src/login-common/login-common.h
--- a/src/login-common/login-common.h Fri Feb 19 05:10:06 2010 +0200
+++ b/src/login-common/login-common.h Fri Feb 19 05:10:48 2010 +0200
@@ -24,6 +24,8 @@
extern void **global_other_settings;
void login_refresh_proctitle(void);
+void login_client_destroyed(void);
+
void login_process_preinit(void);
#endif
diff -r 7a7b2cbc6f91 -r fc77d1cd1201 src/login-common/main.c
--- a/src/login-common/main.c Fri Feb 19 05:10:06 2010 +0200
+++ b/src/login-common/main.c Fri Feb 19 05:10:48 2010 +0200
@@ -20,6 +20,8 @@
#include <unistd.h>
#include <syslog.h>
+#define AUTH_CLIENT_IDLE_TIMEOUT_MSECS (1000*60)
+
struct login_access_lookup {
struct master_service_connection conn;
struct io *io;
@@ -36,6 +38,7 @@
const struct login_settings *global_login_settings;
void **global_other_settings;
+static struct timeout *auth_client_to;
static bool shutting_down = FALSE;
static bool ssl_connections = FALSE;
@@ -62,12 +65,27 @@
}
}
+static void auth_client_idle_timeout(struct auth_client *auth_client)
+{
+ auth_client_disconnect(auth_client);
+ timeout_remove(&auth_client_to);
+}
+
+void login_client_destroyed(void)
+{
+ if (clients == NULL && auth_client_to == NULL) {
+ auth_client_to = timeout_add(AUTH_CLIENT_IDLE_TIMEOUT_MSECS,
+ auth_client_idle_timeout,
+ auth_client);
+ }
+}
+
static void login_die(void)
{
shutting_down = TRUE;
login_proxy_kill_idle();
- if (auth_client == NULL || !auth_client_is_connected(auth_client)) {
+ if (!auth_client_is_connected(auth_client)) {
/* we don't have auth client, and we might never get one */
clients_destroy_all();
}
@@ -116,6 +134,9 @@
client->remote_port = conn->remote_port;
client->local_port = local_port;
+
+ if (auth_client_to != NULL)
+ timeout_remove(&auth_client_to);
}
static void login_access_lookup_free(struct login_access_lookup *lookup)
@@ -286,13 +307,14 @@
ssl_proxy_deinit();
login_proxy_deinit();
- if (auth_client != NULL)
- auth_client_deinit(&auth_client);
+ auth_client_deinit(&auth_client);
clients_deinit();
master_auth_deinit(&master_auth);
if (anvil != NULL)
anvil_client_deinit(&anvil);
+ if (auth_client_to != NULL)
+ timeout_remove(&auth_client_to);
}
int main(int argc, char *argv[])
More information about the dovecot-cvs
mailing list