s4: Add TALLOC_CTX * to register_server_service().
[garming/samba-autobuild/.git] / source4 / smb_server / service_smb.c
index 54feccbe0536d5f0ef3ebc4900163a1819a0b85e..a607861d6e3fb751d5ecfc09d27ed337d68def21 100644 (file)
@@ -33,7 +33,9 @@
 #include "param/share.h"
 #include "dsdb/samdb/samdb.h"
 #include "param/param.h"
-
+#include "file_server/file_server.h"
+#include "ntvfs/ntvfs.h"
+#include "lib/cmdline/popt_common.h"
 /*
   open the smb server sockets
 */
@@ -48,34 +50,44 @@ static void smbsrv_task_init(struct task_server *task)
                int i;
                struct interface *ifaces;
 
-               load_interfaces(task, lpcfg_interfaces(task->lp_ctx), &ifaces);
+               load_interface_list(task, task->lp_ctx, &ifaces);
 
-               num_interfaces = iface_count(ifaces);
+               num_interfaces = iface_list_count(ifaces);
 
                /* We have been given an interfaces line, and been 
                   told to only bind to those interfaces. Create a
                   socket per interface and bind to only these.
                */
                for(i = 0; i < num_interfaces; i++) {
-                       const char *address = iface_n_ip(ifaces, i);
-                       status = smbsrv_add_socket(task->event_ctx, task->lp_ctx, task->model_ops, address);
+                       const char *address = iface_list_n_ip(ifaces, i);
+                       status = smbsrv_add_socket(task, task->event_ctx, task->lp_ctx, task->model_ops, address);
                        if (!NT_STATUS_IS_OK(status)) goto failed;
                }
        } else {
-               /* Just bind to lpcfg_socket_address() (usually 0.0.0.0) */
-               status = smbsrv_add_socket(task->event_ctx, task->lp_ctx, task->model_ops,
-                                          lpcfg_socket_address(task->lp_ctx));
-               if (!NT_STATUS_IS_OK(status)) goto failed;
+               char **wcard;
+               int i;
+               wcard = iface_list_wildcard(task);
+               if (wcard == NULL) {
+                       DEBUG(0,("No wildcard addresses available\n"));
+                       goto failed;
+               }
+               for (i=0; wcard[i]; i++) {
+                       status = smbsrv_add_socket(task, task->event_ctx, task->lp_ctx, task->model_ops, wcard[i]);
+                       if (!NT_STATUS_IS_OK(status)) goto failed;
+               }
+               talloc_free(wcard);
        }
 
+       irpc_add_name(task->msg_ctx, "smb_server");
        return;
 failed:
        task_server_terminate(task, "Failed to startup smb server task", true); 
 }
 
 /* called at smbd startup - register ourselves as a server service */
-NTSTATUS server_service_smb_init(void)
+NTSTATUS server_service_smb_init(TALLOC_CTX *ctx)
 {
+       ntvfs_init(cmdline_lp_ctx);
        share_init();
-       return register_server_service("smb", smbsrv_task_init);
+       return register_server_service(ctx, "smb", smbsrv_task_init);
 }