r7493: add a --maximum-runtime option to smbd. If this time is exceeeded then it...
authorAndrew Tridgell <tridge@samba.org>
Sun, 12 Jun 2005 00:17:23 +0000 (00:17 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:17:59 +0000 (13:17 -0500)
This will be used in the build farm
(This used to be commit 3cec5b3c8656efcb00df530071c2badca914126a)

source4/smbd/server.c

index c2646ff8253132349506f115bd798a9d0920ef01..a08202baabf1b41b539c6529fafac10ddda21044 100644 (file)
@@ -137,6 +137,18 @@ static void server_stdin_handler(struct event_context *event_ctx, struct fd_even
        }
 }
 
+
+/*
+  die if the user selected maximum runtime is exceeded
+*/
+static void max_runtime_handler(struct event_context *ev, struct timed_event *te, 
+                               struct timeval t, void *private)
+{
+       DEBUG(0,("smbd maximum runtime exceeded - terminating\n"));
+       exit(0);
+}
+
+
 /*
  main server.
 */
@@ -148,6 +160,7 @@ static int binary_smbd_main(int argc, const char *argv[])
        struct event_context *event_ctx;
        NTSTATUS status;
        const char *model = "standard";
+       int max_runtime = 0;
        struct poptOption long_options[] = {
                POPT_AUTOHELP
                POPT_COMMON_SAMBA
@@ -155,6 +168,8 @@ static int binary_smbd_main(int argc, const char *argv[])
                 "Run interactive (not a daemon)", NULL},
                {"model", 'M', POPT_ARG_STRING, &model, True, 
                 "Select process model", "MODEL"},
+               {"maximum-runtime", 0, POPT_ARG_INT, &max_runtime, True, 
+                "set maximum time for smbd to live", "seconds"},
                POPT_COMMON_VERSION
                POPT_TABLEEND
        };
@@ -222,6 +237,13 @@ static int binary_smbd_main(int argc, const char *argv[])
                             server_stdin_handler, NULL);
        }
 
+
+       if (max_runtime) {
+               event_add_timed(event_ctx, event_ctx, 
+                               timeval_current_ofs(max_runtime, 0), 
+                               max_runtime_handler, NULL);
+       }
+
        DEBUG(0,("Using %s process model\n", model));
        status = server_service_startup(event_ctx, model, lp_server_services());
        if (!NT_STATUS_IS_OK(status)) {