From: Timo Sirainen Date: Mon, 14 Dec 2009 01:47:38 +0000 (-0500) Subject: script: Close extra fds before executing post-login script. X-Git-Tag: 2.0.beta1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8dc72049a01ea8e500372b28cb74afa2a47e77d;p=thirdparty%2Fdovecot%2Fcore.git script: Close extra fds before executing post-login script. --HG-- branch : HEAD --- diff --git a/src/util/script.c b/src/util/script.c index 4dac4b92c1..ad88962cbf 100644 --- a/src/util/script.c +++ b/src/util/script.c @@ -30,7 +30,7 @@ static void client_connected(const struct master_service_connection *conn) struct mail_storage_service_input input; struct mail_storage_service_user *user; char buf[1024]; - unsigned int i; + unsigned int i, socket_count; int fd = -1; ssize_t ret; @@ -107,6 +107,15 @@ static void client_connected(const struct master_service_connection *conn) i_fatal("dup2() failed: %m"); } + /* close all listener sockets */ + socket_count = master_service_get_socket_count(master_service); + for (i = 0; i < socket_count; i++) { + if (close(MASTER_LISTEN_FD_FIRST + i) < 0) + i_error("close(listener) failed: %m"); + } + if (close(MASTER_STATUS_FD) < 0) + i_error("close(status) failed: %m"); + (void)execvp(exec_args[0], exec_args); i_fatal("execvp(%s) failed: %m", exec_args[0]); }