diff options
-rw-r--r-- | docs-xml/smbdotconf/winbind/winbindmaxclients.xml | 14 | ||||
-rw-r--r-- | source3/include/local.h | 3 | ||||
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/param/loadparm.c | 13 | ||||
-rw-r--r-- | source3/winbindd/winbindd.c | 8 |
5 files changed, 30 insertions, 9 deletions
diff --git a/docs-xml/smbdotconf/winbind/winbindmaxclients.xml b/docs-xml/smbdotconf/winbind/winbindmaxclients.xml new file mode 100644 index 00000000000..ae49e45124e --- /dev/null +++ b/docs-xml/smbdotconf/winbind/winbindmaxclients.xml @@ -0,0 +1,14 @@ +<samba:parameter name="winbind max clients" + context="G" + type="integer" + advanced="1" developer="1" + xmlns:samba="http://www.samba.org/samba/DTD/samba-doc"> +<description> + <para>This parameter specifies the maximum number of clients + the <citerefentry><refentrytitle>winbindd</refentrytitle> + <manvolnum>8</manvolnum></citerefentry> daemon can connect with. + </para> +</description> + +<value type="default">200</value> +</samba:parameter> diff --git a/source3/include/local.h b/source3/include/local.h index a3baf64f9aa..93ec4cc9db5 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -239,9 +239,6 @@ /* Number in seconds for winbindd to wait for the mutex. Make this 2 * smbd wait time. */ #define WINBIND_SERVER_MUTEX_WAIT_TIME (( ((NUM_CLI_AUTH_CONNECT_RETRIES) * ((CLI_AUTH_TIMEOUT)/1000)) + 5)*2) -/* Max number of simultaneous winbindd socket connections. */ -#define WINBINDD_MAX_SIMULTANEOUS_CLIENTS 200 - /* Buffer size to use when printing backtraces */ #define BACKTRACE_STACK_SIZE 64 diff --git a/source3/include/proto.h b/source3/include/proto.h index f089c696f0e..e1751e803fc 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -3539,6 +3539,7 @@ int lp_smb_encrypt(int ); char lp_magicchar(const struct share_params *p ); int lp_winbind_cache_time(void); int lp_winbind_reconnect_delay(void); +int lp_winbind_max_clients(void); const char **lp_winbind_nss_info(void); int lp_algorithmic_rid_base(void); int lp_name_cache_timeout(void); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index e3fc2d8b3a9..bb6e1324fe7 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -262,7 +262,7 @@ struct global { int oplock_break_wait_time; int winbind_cache_time; int winbind_reconnect_delay; - int winbind_max_idle_children; + int winbind_max_clients; char **szWinbindNssInfo; int iLockSpinTime; char *szLdapMachineSuffix; @@ -4606,6 +4606,15 @@ static struct parm_struct parm_table[] = { .flags = FLAG_ADVANCED, }, { + .label = "winbind max clients", + .type = P_INTEGER, + .p_class = P_GLOBAL, + .ptr = &Globals.winbind_max_clients, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED, + }, + { .label = "winbind enum users", .type = P_BOOL, .p_class = P_GLOBAL, @@ -5299,6 +5308,7 @@ static void init_globals(bool reinit_globals) Globals.winbind_cache_time = 300; /* 5 minutes */ Globals.winbind_reconnect_delay = 30; /* 30 seconds */ + Globals.winbind_max_clients = 200; Globals.bWinbindEnumUsers = False; Globals.bWinbindEnumGroups = False; Globals.bWinbindUseDefaultDomain = False; @@ -5877,6 +5887,7 @@ FN_LOCAL_INTEGER(lp_smb_encrypt, ismb_encrypt) FN_LOCAL_CHAR(lp_magicchar, magic_char) FN_GLOBAL_INTEGER(lp_winbind_cache_time, &Globals.winbind_cache_time) FN_GLOBAL_INTEGER(lp_winbind_reconnect_delay, &Globals.winbind_reconnect_delay) +FN_GLOBAL_INTEGER(lp_winbind_max_clients, &Globals.winbind_max_clients) FN_GLOBAL_LIST(lp_winbind_nss_info, &Globals.szWinbindNssInfo) FN_GLOBAL_INTEGER(lp_algorithmic_rid_base, &Globals.AlgorithmicRidBase) FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout) diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 7a9ebb8a827..9c0a1fb921a 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -908,17 +908,15 @@ static void winbindd_listen_fde_handler(struct tevent_context *ev, struct winbindd_listen_state *s = talloc_get_type_abort(private_data, struct winbindd_listen_state); - while (winbindd_num_clients() > - WINBINDD_MAX_SIMULTANEOUS_CLIENTS - 1) { + while (winbindd_num_clients() > lp_winbind_max_clients() - 1) { DEBUG(5,("winbindd: Exceeding %d client " "connections, removing idle " - "connection.\n", - WINBINDD_MAX_SIMULTANEOUS_CLIENTS)); + "connection.\n", lp_winbind_max_clients())); if (!remove_idle_client()) { DEBUG(0,("winbindd: Exceeding %d " "client connections, no idle " "connection found\n", - WINBINDD_MAX_SIMULTANEOUS_CLIENTS)); + lp_winbind_max_clients())); break; } } |