summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs-xml/smbdotconf/winbind/winbindmaxclients.xml14
-rw-r--r--source3/include/local.h3
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/param/loadparm.c13
-rw-r--r--source3/winbindd/winbindd.c8
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 0000000000..ae49e45124
--- /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 a3baf64f9a..93ec4cc9db 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 f089c696f0..e1751e803f 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 e3fc2d8b3a..bb6e1324fe 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 7a9ebb8a82..9c0a1fb921 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;
}
}