s3-param: Move the options needed for running smbd in the AD DC to loadparm
authorAndrew Bartlett <abartlet@samba.org>
Thu, 1 Nov 2012 00:26:16 +0000 (11:26 +1100)
committerMichael Adam <obnox@samba.org>
Thu, 1 Nov 2012 10:47:22 +0000 (11:47 +0100)
This avoids the whole fileserver.conf thing, and simply handles everything in C.

The main challenge is that if s3fs is enabled in a member server
configuration (unlikely) then these options will not be set, and it
overrides any other attempt to set these as globals.  (The previous
approach essentially just changed defaults, because the include =
of smb.conf was after the values were set in fileserver.conf).

Andrew Bartlett

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
Autobuild-User(master): Michael Adam <obnox@samba.org>
Autobuild-Date(master): Thu Nov  1 11:47:22 CET 2012 on sn-devel-104

file_server/file_server.c
source3/param/loadparm.c

index b78495dd015a8563352fb8b95c782635bb30219e..430782c60324563e67e41706fa3a8f734efe0358 100644 (file)
 #include "file_server/file_server.h"
 #include "dynconfig.h"
 
-/*
-  generate a smbd config file for the file server
- */
-static const char *generate_smb_conf(struct task_server *task)
-{
-       int fd;
-       struct loadparm_context *lp_ctx = task->lp_ctx;
-       const char *path = smbd_tmp_path(task, lp_ctx, "fileserver.conf");
-
-       if (path == NULL) {
-               return NULL;
-       }
-
-       fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
-       if (fd == -1) {
-               DEBUG(0,("Failed to create %s", path));
-               return NULL;
-       }
-
-       fdprintf(fd, "[globals]\n");
-       fdprintf(fd, "# auto-generated config for fileserver\n");
-       fdprintf(fd, "server role check:inhibit=yes\n");
-        fdprintf(fd, "rpc_server:default = external\n");
-       fdprintf(fd, "rpc_server:svcctl = embedded\n");
-       fdprintf(fd, "rpc_server:srvsvc = embedded\n");
-       fdprintf(fd, "rpc_server:eventlog = embedded\n");
-       fdprintf(fd, "rpc_server:ntsvcs = embedded\n");
-       fdprintf(fd, "rpc_server:winreg = embedded\n");
-       fdprintf(fd, "rpc_server:spoolss = embedded\n");
-       fdprintf(fd, "rpc_daemon:spoolssd = embedded\n");
-       fdprintf(fd, "rpc_server:tcpip = no\n");
-
-       fdprintf(fd, "map hidden = no\n");
-       fdprintf(fd, "map system = no\n");
-       fdprintf(fd, "map readonly = no\n");
-       fdprintf(fd, "store dos attributes = yes\n");
-       fdprintf(fd, "create mask = 0777\n");
-       fdprintf(fd, "directory mask = 0777\n");
-
-       fdprintf(fd, "include = %s\n", lpcfg_configfile(lp_ctx));
-
-       close(fd);
-       return path;
-}
-
 /*
   called if smbd exits
  */
@@ -100,23 +55,19 @@ static void file_server_smbd_done(struct tevent_req *subreq)
 */
 static void s3fs_task_init(struct task_server *task)
 {
-       const char *fileserver_conf;
        struct tevent_req *subreq;
        const char *smbd_path;
        const char *smbd_cmd[2] = { NULL, NULL };
 
        task_server_set_title(task, "task[s3fs_parent]");
 
-       /* create a smb.conf for smbd to use */
-       fileserver_conf = generate_smb_conf(task);
-
        smbd_path = talloc_asprintf(task, "%s/smbd", dyn_SBINDIR);
        smbd_cmd[0] = smbd_path;
 
        /* start it as a child process */
        subreq = samba_runcmd_send(task, task->event_ctx, timeval_zero(), 1, 0,
                                smbd_cmd,
-                               "--configfile", fileserver_conf,
+                               "--option=server role check:inhibit=yes",
                                "--foreground",
                                debug_get_output_is_stdout()?"--log-stdout":NULL,
                                NULL);
@@ -128,7 +79,7 @@ static void s3fs_task_init(struct task_server *task)
 
        tevent_req_set_callback(subreq, file_server_smbd_done, task);
 
-       DEBUG(1,("Started file server smbd with config %s\n", fileserver_conf));
+       DEBUG(5,("Started file server child smbd\n"));
 }
 
 /* called at smbd startup - register ourselves as a server service */
index 42bf11d4bcee6d4b5986e2d731720a8277e49fcb..12cb8db1d5cfcf898dbffb0bcef30be285aaf987 100644 (file)
@@ -4899,6 +4899,23 @@ static bool lp_load_ex(const char *pszFname,
                        }
                }
                lp_do_parameter(-1, "passdb backend", "samba_dsdb");
+
+               lp_do_parameter(-1, "rpc_server:default", "external");
+               lp_do_parameter(-1, "rpc_server:svcctl", "embedded");
+               lp_do_parameter(-1, "rpc_server:srvsvc", "embedded");
+               lp_do_parameter(-1, "rpc_server:eventlog", "embedded");
+               lp_do_parameter(-1, "rpc_server:ntsvcs", "embedded");
+               lp_do_parameter(-1, "rpc_server:winreg", "embedded");
+               lp_do_parameter(-1, "rpc_server:spoolss", "embedded");
+               lp_do_parameter(-1, "rpc_daemon:spoolssd", "embedded");
+               lp_do_parameter(-1, "rpc_server:tcpip", "no");
+
+               lp_do_parameter(-1, "map hidden", "no");
+               lp_do_parameter(-1, "map system", "no");
+               lp_do_parameter(-1, "map readonly", "no");
+               lp_do_parameter(-1, "store dos attributes", "yes");
+               lp_do_parameter(-1, "create mask", "0777");
+               lp_do_parameter(-1, "directory mask", "0777");
        }
 
        bAllowIncludeRegistry = true;