s4:lib/tevent: rename structs
[kamenim/samba.git] / source4 / smbd / server.c
index e86ddc910b5eb94707e9ae47e5139f817125525c..c1683a48dcf77eca25bc89ca63ab2043c358dad2 100644 (file)
@@ -28,7 +28,6 @@
 #include "lib/cmdline/popt_common.h"
 #include "system/dir.h"
 #include "system/filesys.h"
-#include "build.h"
 #include "ldb/include/ldb.h"
 #include "registry/registry.h"
 #include "ntvfs/ntvfs.h"
@@ -38,7 +37,6 @@
 #include "smbd/service.h"
 #include "param/secrets.h"
 #include "smbd/pidfile.h"
-#include "cluster/ctdb/ctdb_cluster.h"
 #include "param/param.h"
 
 /*
@@ -88,12 +86,12 @@ static void recursive_delete(const char *path)
   range locking system. So instead of putting the burden on tdb to
   cleanup tmp files, this function deletes them. 
 */
-static void cleanup_tmp_files(void)
+static void cleanup_tmp_files(struct loadparm_context *lp_ctx)
 {
        char *path;
        TALLOC_CTX *mem_ctx = talloc_new(NULL);
 
-       path = smbd_tmp_path(mem_ctx, global_loadparm, NULL);
+       path = smbd_tmp_path(mem_ctx, lp_ctx, NULL);
 
        recursive_delete(path);
        talloc_free(mem_ctx);
@@ -123,25 +121,25 @@ static void sig_term(int sig)
 static void setup_signals(void)
 {
        /* we are never interested in SIGPIPE */
-       BlockSignals(True,SIGPIPE);
+       BlockSignals(true,SIGPIPE);
 
 #if defined(SIGFPE)
        /* we are never interested in SIGFPE */
-       BlockSignals(True,SIGFPE);
+       BlockSignals(true,SIGFPE);
 #endif
 
        /* We are no longer interested in USR1 */
-       BlockSignals(True, SIGUSR1);
+       BlockSignals(true, SIGUSR1);
 
 #if defined(SIGUSR2)
        /* We are no longer interested in USR2 */
-       BlockSignals(True,SIGUSR2);
+       BlockSignals(true,SIGUSR2);
 #endif
 
        /* POSIX demands that signals are inherited. If the invoking process has
         * these signals masked, we will have problems, as we won't recieve them. */
-       BlockSignals(False, SIGHUP);
-       BlockSignals(False, SIGTERM);
+       BlockSignals(false, SIGHUP);
+       BlockSignals(false, SIGTERM);
 
        CatchSignal(SIGHUP, sig_hup);
        CatchSignal(SIGTERM, sig_term);
@@ -150,7 +148,7 @@ static void setup_signals(void)
 /*
   handle io on stdin
 */
-static void server_stdin_handler(struct event_context *event_ctx, struct fd_event *fde, 
+static void server_stdin_handler(struct tevent_context *event_ctx, struct tevent_fd *fde, 
                                 uint16_t flags, void *private)
 {
        const char *binary_name = (const char *)private;
@@ -169,8 +167,8 @@ static void server_stdin_handler(struct event_context *event_ctx, struct fd_even
 /*
   die if the user selected maximum runtime is exceeded
 */
-_NORETURN_ static void max_runtime_handler(struct event_context *ev, 
-                                          struct timed_event *te, 
+_NORETURN_ static void max_runtime_handler(struct tevent_context *ev, 
+                                          struct tevent_timer *te, 
                                           struct timeval t, void *private)
 {
        const char *binary_name = (const char *)private;
@@ -187,9 +185,24 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        bool opt_interactive = false;
        int opt;
        poptContext pc;
-       init_module_fn static_init[] = STATIC_service_MODULES;
+       extern NTSTATUS server_service_wrepl_init(void);
+       extern NTSTATUS server_service_kdc_init(void);
+       extern NTSTATUS server_service_ldap_init(void);
+       extern NTSTATUS server_service_web_init(void);
+       extern NTSTATUS server_service_ldap_init(void);
+       extern NTSTATUS server_service_winbind_init(void);
+       extern NTSTATUS server_service_nbtd_init(void);
+       extern NTSTATUS server_service_auth_init(void);
+       extern NTSTATUS server_service_cldapd_init(void);
+       extern NTSTATUS server_service_smb_init(void);
+       extern NTSTATUS server_service_drepl_init(void);
+       extern NTSTATUS server_service_rpc_init(void);
+       extern NTSTATUS server_service_ntp_signd_init(void);
+       extern NTSTATUS server_service_samba3_smb_init(void);
+       init_module_fn static_init[] = { STATIC_service_MODULES };
        init_module_fn *shared_init;
-       struct event_context *event_ctx;
+       struct tevent_context *event_ctx;
+       uint16_t stdin_event_flags;
        NTSTATUS status;
        const char *model = "standard";
        int max_runtime = 0;
@@ -226,7 +239,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
                        model = poptGetOptArg(pc);
                        break;
                default:
-                       d_fprintf(stderr, "\nInvalid option %s: %s\n\n",
+                       fprintf(stderr, "\nInvalid option %s: %s\n\n",
                                  poptBadOption(pc, 0), poptStrerror(opt));
                        poptPrintUsage(pc, stderr, 0);
                        exit(1);
@@ -234,7 +247,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        }
 
        if (opt_daemon && opt_interactive) {
-               d_fprintf(stderr,"\nERROR: "
+               fprintf(stderr,"\nERROR: "
                          "Option -i|--interactive is not allowed together with -D|--daemon\n\n");
                poptPrintUsage(pc, stderr, 0);
                exit(1);
@@ -253,7 +266,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        umask(0);
 
        DEBUG(0,("%s version %s started.\n", binary_name, SAMBA_VERSION_STRING));
-       DEBUGADD(0,("Copyright Andrew Tridgell and the Samba Team 1992-2007\n"));
+       DEBUGADD(0,("Copyright Andrew Tridgell and the Samba Team 1992-2008\n"));
 
        if (sizeof(uint16_t) < 2 || sizeof(uint32_t) < 4 || sizeof(uint64_t) < 8) {
                DEBUG(0,("ERROR: Samba is not configured correctly for the word size on your machine\n"));
@@ -267,36 +280,32 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
                become_daemon(true);
        }
 
-       cleanup_tmp_files();
+       cleanup_tmp_files(cmdline_lp_ctx);
 
-       if (!directory_exist(lp_lockdir(global_loadparm))) {
-               mkdir(lp_lockdir(global_loadparm), 0755);
+       if (!directory_exist(lp_lockdir(cmdline_lp_ctx))) {
+               mkdir(lp_lockdir(cmdline_lp_ctx), 0755);
        }
 
-       pidfile_create(binary_name);
+       pidfile_create(lp_piddir(cmdline_lp_ctx), binary_name);
 
        /* Do *not* remove this, until you have removed
         * passdb/secrets.c, and proved that Samba still builds... */
        /* Setup the SECRETS subsystem */
-       if (!secrets_init()) {
+       if (secrets_init(talloc_autofree_context(), cmdline_lp_ctx) == NULL) {
                exit(1);
        }
 
-       ldb_global_init(); /* FIXME: */
+       gensec_init(cmdline_lp_ctx); /* FIXME: */
 
-       share_init();
-
-       gensec_init(); /* FIXME: */
-
-       ntptr_init();   /* FIXME: maybe run this in the initialization function 
+       ntptr_init(cmdline_lp_ctx);     /* FIXME: maybe run this in the initialization function 
                                                of the spoolss RPC server instead? */
 
-       ntvfs_init();   /* FIXME: maybe run this in the initialization functions 
+       ntvfs_init(cmdline_lp_ctx);     /* FIXME: maybe run this in the initialization functions 
                                                of the SMB[,2] server instead? */
 
-       process_model_init(); 
+       process_model_init(cmdline_lp_ctx); 
 
-       shared_init = load_samba_modules(NULL, global_loadparm, "service");
+       shared_init = load_samba_modules(NULL, cmdline_lp_ctx, "service");
 
        run_init_functions(static_init);
        run_init_functions(shared_init);
@@ -305,21 +314,28 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        
        /* the event context is the top level structure in smbd. Everything else
           should hang off that */
-       event_ctx = event_context_init(talloc_autofree_context());
+       event_ctx = s4_event_context_init(talloc_autofree_context());
 
-       /* initialise clustering if needed */
-       cluster_ctdb_init(event_ctx, model);
+       if (event_ctx == NULL) {
+               DEBUG(0,("Initializing event context failed\n"));
+               return 1;
+       }
 
        if (opt_interactive) {
-               /* catch EOF on stdin */
-#ifdef SIGTTIN
-               signal(SIGTTIN, SIG_IGN);
-#endif
-               event_add_fd(event_ctx, event_ctx, 0, EVENT_FD_READ, 
-                            server_stdin_handler,
-                            discard_const(binary_name));
+               /* terminate when stdin goes away */
+               stdin_event_flags = EVENT_FD_READ;
+       } else {
+               /* stay alive forever */
+               stdin_event_flags = 0;
        }
 
+       /* catch EOF on stdin */
+#ifdef SIGTTIN
+       signal(SIGTTIN, SIG_IGN);
+#endif
+       event_add_fd(event_ctx, event_ctx, 0, stdin_event_flags,
+                    server_stdin_handler,
+                    discard_const(binary_name));
 
        if (max_runtime) {
                event_add_timed(event_ctx, event_ctx, 
@@ -329,7 +345,8 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        }
 
        DEBUG(0,("%s: using '%s' process model\n", binary_name, model));
-       status = server_service_startup(event_ctx, model, lp_server_services(global_loadparm));
+       status = server_service_startup(event_ctx, cmdline_lp_ctx, model, 
+                                       lp_server_services(cmdline_lp_ctx));
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0,("Starting Services failed - %s\n", nt_errstr(status)));
                return 1;