diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2012-02-17 11:50:27 -0500 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-02-17 14:27:32 -0500 |
commit | 1a63155b0797c2b1963424e5c0f5d3a62f8cc7cc (patch) | |
tree | 3e2293986461fd191b07b8e2892ed45914d554de /src/responder/common | |
parent | 3ae9dd80a23168a0451f0d090bd74eaf01fdd951 (diff) | |
download | sssd-1a63155b0797c2b1963424e5c0f5d3a62f8cc7cc.tar.gz sssd-1a63155b0797c2b1963424e5c0f5d3a62f8cc7cc.tar.xz sssd-1a63155b0797c2b1963424e5c0f5d3a62f8cc7cc.zip |
RESPONDERS: Allow increasing the file-descriptor limit
This patch will increase the file descriptor limit to 8k or the
limits.conf maximum, whichever is lesser.
https://fedorahosted.org/sssd/ticket/1197
Diffstat (limited to 'src/responder/common')
-rw-r--r-- | src/responder/common/responder.h | 3 | ||||
-rw-r--r-- | src/responder/common/responder_common.c | 36 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h index 48678ff92..619ae46ef 100644 --- a/src/responder/common/responder.h +++ b/src/responder/common/responder.h @@ -25,6 +25,7 @@ #include <stdint.h> #include <sys/un.h> #include <pcre.h> +#include <sys/resource.h> #include "config.h" #include "talloc.h" #include "tevent.h" @@ -266,4 +267,6 @@ sss_dp_get_account_recv(TALLOC_CTX *mem_ctx, bool sss_utf8_check(const uint8_t *s, size_t n); +void responder_set_fd_limit(rlim_t fd_limit); + #endif /* __SSS_RESPONDER_H__ */ diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c index a48ac556a..94a9fdb63 100644 --- a/src/responder/common/responder_common.c +++ b/src/responder/common/responder_common.c @@ -648,3 +648,39 @@ int responder_logrotate(DBusMessage *message, return monitor_common_pong(message, conn); } + +void responder_set_fd_limit(rlim_t fd_limit) +{ + struct rlimit current_limit, new_limit; + int limret; + + /* First determine the maximum hard limit */ + limret = getrlimit(RLIMIT_NOFILE, ¤t_limit); + if (limret == 0) { + DEBUG(SSSDBG_TRACE_INTERNAL, + ("Current fd limit: [%d]\n", + current_limit.rlim_cur)); + /* Choose the lesser of the requested and the hard limit */ + if (current_limit.rlim_max < fd_limit) { + new_limit.rlim_cur = current_limit.rlim_max; + } else { + new_limit.rlim_cur = fd_limit; + } + new_limit.rlim_max = current_limit.rlim_max; + + limret = setrlimit(RLIMIT_NOFILE, &new_limit); + if (limret == 0) { + DEBUG(SSSDBG_CONF_SETTINGS, + ("Maximum file descriptors set to [%d]\n", + new_limit.rlim_cur)); + } else { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not set new fd limits. Proceeding with [%d]\n", + current_limit.rlim_cur)); + } + } else { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not determine fd limits. " + "Proceeding with system values\n")); + } +} |