changeset 8071:f39a6be7d42a HEAD

login processes set their fd limit too low, causing "too many open files" errors
author Timo Sirainen <tss@iki.fi>
date Wed, 06 Aug 2008 12:44:14 -0400
parents 7e3590da43a9
children f6cff15160d4
files src/login-common/main.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/login-common/main.c	Tue Aug 05 11:24:29 2008 -0400
+++ b/src/login-common/main.c	Wed Aug 06 12:44:14 2008 -0400
@@ -252,6 +252,7 @@
 static void drop_privileges(void)
 {
 	const char *value;
+	unsigned int max_fd_per_conn;
 
 	if (!is_inetd)
 		i_set_failure_internal();
@@ -281,10 +282,14 @@
 	value = getenv("MAX_CONNECTIONS");
 	max_connections = value == NULL ? 1 : strtoul(value, NULL, 10);
 
+	/* max fds: connection itself, SSL socketpair, login proxy socketpair */
+	max_fd_per_conn = 1 + (ssl_initialized ? 2 : 0) + 2;
+
 	/* set the number of fds we want to use. it may get increased or
 	   decreased. leave a couple of extra fds for auth sockets and such */
 	restrict_fd_limit(LOGIN_MASTER_SOCKET_FD + 16 +
-			  listen_count + ssl_listen_count + max_connections);
+			  listen_count + ssl_listen_count +
+			  max_connections * max_fd_per_conn);
 
 	/* Refuse to run as root - we should never need it and it's
 	   dangerous with SSL. */