Use task-provided loadparm context in nbt and rpc servers.
authorjelmer <jelmer@0c0555d6-39d7-0310-84fc-f1cc0bd64818>
Mon, 3 Dec 2007 18:47:42 +0000 (18:47 +0000)
committerjelmer <jelmer@0c0555d6-39d7-0310-84fc-f1cc0bd64818>
Mon, 3 Dec 2007 18:47:42 +0000 (18:47 +0000)
git-svn-id: svn+ssh://svn.samba.org/data/svn/samba/branches/SAMBA_4_0@26265 0c0555d6-39d7-0310-84fc-f1cc0bd64818

source/nbt_server/interfaces.c
source/nbt_server/nbt_server.c
source/rpc_server/service_rpc.c

index 2f51cc3dec5fb4ea75c5164be6259e09a6eba07a..c40cd6322c1bee02fff0ac97241e062e4067c9e1 100644 (file)
@@ -98,6 +98,7 @@ struct nbtd_iface_name *nbtd_find_iname(struct nbtd_interface *iface,
   start listening on the given address
 */
 static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv, 
+                               struct loadparm_context *lp_ctx,
                                const char *bind_address, 
                                const char *address, 
                                const char *bcast, 
@@ -136,7 +137,7 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
                }
 
                bcast_address = socket_address_from_strings(bcast_nbtsock, bcast_nbtsock->sock->backend_name, 
-                                                           bcast, lp_nbt_port(global_loadparm));
+                                                           bcast, lp_nbt_port(lp_ctx));
                if (!bcast_address) {
                        talloc_free(iface);
                        return NT_STATUS_NO_MEMORY;
@@ -145,7 +146,7 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
                status = socket_listen(bcast_nbtsock->sock, bcast_address, 0, 0);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0,("Failed to bind to %s:%d - %s\n", 
-                                bcast, lp_nbt_port(global_loadparm), nt_errstr(status)));
+                                bcast, lp_nbt_port(lp_ctx), nt_errstr(status)));
                        talloc_free(iface);
                        return status;
                }
@@ -163,12 +164,12 @@ static NTSTATUS nbtd_add_socket(struct nbtd_server *nbtsrv,
 
        unicast_address = socket_address_from_strings(iface->nbtsock, 
                                                      iface->nbtsock->sock->backend_name, 
-                                                     bind_address, lp_nbt_port(global_loadparm));
+                                                     bind_address, lp_nbt_port(lp_ctx));
 
        status = socket_listen(iface->nbtsock->sock, unicast_address, 0, 0);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0,("Failed to bind to %s:%d - %s\n", 
-                        bind_address, lp_nbt_port(global_loadparm), nt_errstr(status)));
+                        bind_address, lp_nbt_port(lp_ctx), nt_errstr(status)));
                talloc_free(iface);
                return status;
        }
@@ -215,7 +216,7 @@ static NTSTATUS nbtd_add_wins_socket(struct nbtd_server *nbtsrv)
 /*
   setup our listening sockets on the configured network interfaces
 */
-NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
+NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv, struct loadparm_context *lp_ctx)
 {
        int num_interfaces = iface_count();
        int i;
@@ -224,7 +225,7 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
 
        /* if we are allowing incoming packets from any address, then
           we also need to bind to the wildcard address */
-       if (!lp_bind_interfaces_only(global_loadparm)) {
+       if (!lp_bind_interfaces_only(lp_ctx)) {
                const char *primary_address;
 
                /* the primary address is the address we will return
@@ -234,12 +235,13 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
                        primary_address = iface_n_ip(0);
                } else {
                        primary_address = inet_ntoa(interpret_addr2(
-                                                       lp_netbios_name(global_loadparm)));
+                                                       lp_netbios_name(lp_ctx)));
                }
                primary_address = talloc_strdup(tmp_ctx, primary_address);
                NT_STATUS_HAVE_NO_MEMORY(primary_address);
 
                status = nbtd_add_socket(nbtsrv, 
+                                        lp_ctx,
                                         "0.0.0.0",
                                         primary_address,
                                         talloc_strdup(tmp_ctx, "255.255.255.255"),
@@ -258,11 +260,12 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
                bcast   = talloc_strdup(tmp_ctx, bcast);
                netmask = talloc_strdup(tmp_ctx, iface_n_netmask(i));
 
-               status = nbtd_add_socket(nbtsrv, address, address, bcast, netmask);
+               status = nbtd_add_socket(nbtsrv, lp_ctx, 
+                                        address, address, bcast, netmask);
                NT_STATUS_NOT_OK_RETURN(status);
        }
 
-       if (lp_wins_server_list(global_loadparm)) {
+       if (lp_wins_server_list(lp_ctx)) {
                status = nbtd_add_wins_socket(nbtsrv);
                NT_STATUS_NOT_OK_RETURN(status);
        }
index 30c64db129542df5d04f10771311bee0cb2ef31e..e06457f47fb0f0a75d7426fc16fe673ae0ab8133 100644 (file)
@@ -57,7 +57,7 @@ static void nbtd_task_init(struct task_server *task)
        nbtsrv->wins_interface  = NULL;
 
        /* start listening on the configured network interfaces */
-       status = nbtd_startup_interfaces(nbtsrv);
+       status = nbtd_startup_interfaces(nbtsrv, task->lp_ctx);
        if (!NT_STATUS_IS_OK(status)) {
                task_server_terminate(task, "nbtd failed to setup interfaces");
                return;
index f06a7dce8ff7bb1f3ee9a4c7a14a036e67e4959d..e327a3e4b4aef0de1a51c792b652456c7f0a72d7 100644 (file)
@@ -216,7 +216,9 @@ static const struct stream_server_ops dcesrv_stream_ops = {
 
 
 
-static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
+static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx, 
+                                  struct loadparm_context *lp_ctx,
+                                  struct dcesrv_endpoint *e,
                            struct event_context *event_ctx, const struct model_ops *model_ops)
 {
        struct dcesrv_socket_context *dcesrv_sock;
@@ -241,8 +243,10 @@ static NTSTATUS dcesrv_add_ep_unix(struct dcesrv_context *dce_ctx, struct dcesrv
        return status;
 }
 
-static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
-                              struct event_context *event_ctx, const struct model_ops *model_ops)
+static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, 
+                                     struct loadparm_context *lp_ctx,
+                                     struct dcesrv_endpoint *e,
+                                     struct event_context *event_ctx, const struct model_ops *model_ops)
 {
        struct dcesrv_socket_context *dcesrv_sock;
        uint16_t port = 1;
@@ -256,7 +260,7 @@ static NTSTATUS dcesrv_add_ep_ncalrpc(struct dcesrv_context *dce_ctx, struct dce
                e->ep_description->endpoint = talloc_strdup(dce_ctx, "DEFAULT");
        }
 
-       full_path = talloc_asprintf(dce_ctx, "%s/%s", lp_ncalrpc_dir(global_loadparm), 
+       full_path = talloc_asprintf(dce_ctx, "%s/%s", lp_ncalrpc_dir(lp_ctx), 
                                    e->ep_description->endpoint);
 
        dcesrv_sock = talloc(event_ctx, struct dcesrv_socket_context);
@@ -310,8 +314,10 @@ static NTSTATUS add_socket_rpc_pipe_iface(struct dcesrv_context *dce_ctx, struct
        return status;
 }
 
-static NTSTATUS dcesrv_add_ep_np(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
-                                  struct event_context *event_ctx, const struct model_ops *model_ops)
+static NTSTATUS dcesrv_add_ep_np(struct dcesrv_context *dce_ctx, 
+                                struct loadparm_context *lp_ctx,
+                                struct dcesrv_endpoint *e,
+                                struct event_context *event_ctx, const struct model_ops *model_ops)
 {
        NTSTATUS status;
 
@@ -357,13 +363,15 @@ static NTSTATUS add_socket_rpc_tcp_iface(struct dcesrv_context *dce_ctx, struct
        return status;
 }
 
-static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
-                                  struct event_context *event_ctx, const struct model_ops *model_ops)
+static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, 
+                                 struct loadparm_context *lp_ctx,
+                                 struct dcesrv_endpoint *e,
+                                 struct event_context *event_ctx, const struct model_ops *model_ops)
 {
        NTSTATUS status;
 
        /* Add TCP/IP sockets */
-       if (lp_interfaces(global_loadparm) && lp_bind_interfaces_only(global_loadparm)) {
+       if (lp_interfaces(lp_ctx) && lp_bind_interfaces_only(lp_ctx)) {
                int num_interfaces = iface_count();
                int i;
                for(i = 0; i < num_interfaces; i++) {
@@ -373,7 +381,7 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_
                }
        } else {
                status = add_socket_rpc_tcp_iface(dce_ctx, e, event_ctx, model_ops, 
-                                                 lp_socket_address(global_loadparm));
+                                                 lp_socket_address(lp_ctx));
                NT_STATUS_NOT_OK_RETURN(status);
        }
 
@@ -381,21 +389,23 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, struct dcesrv_
 }
 
 
-static NTSTATUS dcesrv_add_ep(struct dcesrv_context *dce_ctx, struct dcesrv_endpoint *e,
+static NTSTATUS dcesrv_add_ep(struct dcesrv_context *dce_ctx, 
+                             struct loadparm_context *lp_ctx,
+                             struct dcesrv_endpoint *e,
                          struct event_context *event_ctx, const struct model_ops *model_ops)
 {
        switch (e->ep_description->transport) {
        case NCACN_UNIX_STREAM:
-               return dcesrv_add_ep_unix(dce_ctx, e, event_ctx, model_ops);
+               return dcesrv_add_ep_unix(dce_ctx, lp_ctx, e, event_ctx, model_ops);
 
        case NCALRPC:
-               return dcesrv_add_ep_ncalrpc(dce_ctx, e, event_ctx, model_ops);
+               return dcesrv_add_ep_ncalrpc(dce_ctx, lp_ctx, e, event_ctx, model_ops);
 
        case NCACN_IP_TCP:
-               return dcesrv_add_ep_tcp(dce_ctx, e, event_ctx, model_ops);
+               return dcesrv_add_ep_tcp(dce_ctx, lp_ctx, e, event_ctx, model_ops);
 
        case NCACN_NP:
-               return dcesrv_add_ep_np(dce_ctx, e, event_ctx, model_ops);
+               return dcesrv_add_ep_np(dce_ctx, lp_ctx, e, event_ctx, model_ops);
 
        default:
                return NT_STATUS_NOT_SUPPORTED;
@@ -424,7 +434,7 @@ static void dcesrv_task_init(struct task_server *task)
        }
 
        for (e=dce_ctx->endpoint_list;e;e=e->next) {
-               status = dcesrv_add_ep(dce_ctx, e, task->event_ctx, task->model_ops);
+               status = dcesrv_add_ep(dce_ctx, task->lp_ctx, e, task->event_ctx, task->model_ops);
                if (!NT_STATUS_IS_OK(status)) goto failed;
        }