int name_cache_timeout;
int client_signing;
int server_signing;
+ BOOL bResetOnZeroVC;
param_opt_struct *param_opt;
}
global;
{"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, FLAG_ADVANCED},
{"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, FLAG_ADVANCED},
{"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED},
+ {"reset on zero vc", P_BOOL, P_GLOBAL, &Globals.bResetOnZeroVC, NULL, NULL, FLAG_ADVANCED},
{"acl compatibility", P_STRING, P_GLOBAL, &Globals.szAclCompat, handle_acl_compatibility, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
{"defer sharing violations", P_BOOL, P_GLOBAL, &Globals.bDeferSharingViolations, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL},
Globals.bUseMmap = True;
#endif
Globals.bUnixExtensions = True;
+ Globals.bResetOnZeroVC = False;
/* hostname lookups can be very expensive and are broken on
a large number of sites (tridge) */
FN_GLOBAL_LIST(lp_eventlog_list, &Globals.szEventLogs)
FN_GLOBAL_BOOL(lp_disable_netbios, &Globals.bDisableNetbios)
+FN_GLOBAL_BOOL(lp_reset_on_zero_vc, &Globals.bResetOnZeroVC)
FN_GLOBAL_BOOL(lp_ms_add_printer_wizard, &Globals.bMsAddPrinterWizard)
FN_GLOBAL_BOOL(lp_dns_proxy, &Globals.bDNSproxy)
FN_GLOBAL_BOOL(lp_wins_support, &Globals.bWINSsupport)
tdb_delete(tdb, key);
}
-static BOOL session_traverse(int (*fn)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *), void *state)
+BOOL session_traverse(int (*fn)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *),
+ void *state)
{
if (!session_init()) {
DEBUG(3, ("No tdb opened\n"));
a new session setup with VC==0 is ignored.
****************************************************************************/
+static int shutdown_other_smbds(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
+ void *p)
+{
+ struct sessionid *sessionid = (struct sessionid *)dbuf.dptr;
+ const char *ip = (const char *)p;
+
+ if (!process_exists(pid_to_procid(sessionid->pid))) {
+ return 0;
+ }
+
+ if (sessionid->pid == sys_getpid()) {
+ return 0;
+ }
+
+ if (strcmp(ip, sessionid->ip_addr) != 0) {
+ return 0;
+ }
+
+ message_send_pid(pid_to_procid(sessionid->pid), MSG_SHUTDOWN,
+ NULL, 0, True);
+ return 0;
+}
+
static void setup_new_vc_session(void)
{
DEBUG(2,("setup_new_vc_session: New VC == 0, if NT4.x compatible we would close all old resources.\n"));
conn_close_all();
invalidate_all_vuids();
#endif
+ if (lp_reset_on_zero_vc()) {
+ session_traverse(shutdown_other_smbds, client_addr());
+ }
}
/****************************************************************************