[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Mon Feb 21 16:08:02 MST 2011


The branch, master has been updated
       via  8fce373 s3-rpc_server: Let enpoint mapper listen on port 135.
       via  0abe7c6 s3-rpc_server: Added event and msg ctx to _rpc_ep_register.
       via  df5d265 s3-rpc_server: Added port option to _rpc_ep_register.
       via  a99e670 s3-rpc_server: Added function to setup tcpip listener!
       via  fc46ea9 s3-rpc_server: Rename srv_rpc_register.c.
       via  116144a s3-rpc_server: Rename srv_rpc_register.
       via  184702a s3-rpc_server: Pass tevent_context to dcerpc endpoints.
       via  02b356d s3-rpc_server: Create a common ncacn listen state.
       via  98fcbd0 s3-rpc_server: Rename named_pipe_read_packet().
       via  59f7bcb s3-librpc: Only register NCACN_NP.
      from  debd6da s3-lsa: fix some uninitialized variables in our lsa server.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 8fce37331ed713ddfa40ed791bf43b904c426423
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 21 09:58:26 2011 +0100

    s3-rpc_server: Let enpoint mapper listen on port 135.
    
    *** This is my commit #500 ***
    
    Endpoint Mapper is disabled by default. The next steps are to setup a
    tcpip and ncalrpc listener for each service and register it at epm.
    
    Autobuild-User: Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date: Tue Feb 22 00:07:45 CET 2011 on sn-devel-104

commit 0abe7c68c5623d4468609654dfde72c5ccce396e
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 21 16:28:38 2011 +0100

    s3-rpc_server: Added event and msg ctx to _rpc_ep_register.

commit df5d26521a9b0d2bbbe474ead03d1a0b0c7fabf2
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 21 09:08:47 2011 +0100

    s3-rpc_server: Added port option to _rpc_ep_register.

commit a99e670cd228e2a0d9070aa6541d29b63913fc8d
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 14 10:29:14 2011 +0100

    s3-rpc_server: Added function to setup tcpip listener!

commit fc46ea981f4953f4ec4850ac613635bde077c7d7
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Feb 17 12:24:41 2011 +0100

    s3-rpc_server: Rename srv_rpc_register.c.

commit 116144a4d0f89c8a08fa21bae92d5f25b66282c5
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Feb 17 12:21:09 2011 +0100

    s3-rpc_server: Rename srv_rpc_register.

commit 184702a43d7976041aaaf721b25c8eaca627259e
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Feb 17 12:18:45 2011 +0100

    s3-rpc_server: Pass tevent_context to dcerpc endpoints.

commit 02b356d7a8f75e5ea431a29e33845df089ff7446
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Feb 15 12:57:26 2011 +0100

    s3-rpc_server: Create a common ncacn listen state.

commit 98fcbd09757b7e9a59a554b4ce1b1097a6ad288a
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 14 15:58:14 2011 +0100

    s3-rpc_server: Rename named_pipe_read_packet().
    
    This is not named pipe specific.

commit 59f7bcbc39cc412137b63b743ac19f11d4639b26
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Feb 21 17:55:52 2011 +0100

    s3-librpc: Only register NCACN_NP.
    
    This is the only transport we support at the moment.

-----------------------------------------------------------------------

Summary of changes:
 source3/Makefile.in                                |    2 +-
 source3/librpc/rpc/dcerpc_ep.c                     |   31 +-
 .../{srv_rpc_register.c => rpc_ep_setup.c}         |  288 ++++++++--
 .../{srv_rpc_register.h => rpc_ep_setup.h}         |    3 +-
 source3/rpc_server/rpc_server.c                    |  625 +++++++++++++++++++-
 source3/rpc_server/rpc_server.h                    |    6 +
 source3/rpc_server/wscript_build                   |    2 +-
 source3/smbd/server.c                              |    4 +-
 8 files changed, 876 insertions(+), 85 deletions(-)
 rename source3/rpc_server/{srv_rpc_register.c => rpc_ep_setup.c} (57%)
 rename source3/rpc_server/{srv_rpc_register.h => rpc_ep_setup.h} (90%)


Changeset truncated at 500 lines:

diff --git a/source3/Makefile.in b/source3/Makefile.in
index 686d04c..2f3575f 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -729,7 +729,7 @@ RPC_RPCECHO_OBJ = rpc_server/echo/srv_echo_nt.o librpc/gen_ndr/srv_echo.o
 
 RPC_EPMAPPER_OBJ = rpc_server/epmapper/srv_epmapper.o librpc/gen_ndr/srv_epmapper.o
 
-RPC_SERVER_REGISTER_OBJ = rpc_server/srv_rpc_register.o $(DCE_RPC_EP_OBJ)
+RPC_SERVER_REGISTER_OBJ = rpc_server/rpc_ep_setup.o $(DCE_RPC_EP_OBJ)
 
 RPC_SERVER_OBJ = $(RPC_LSARPC_OBJ) $(RPC_WINREG_OBJ) $(RPC_INITSHUTDOWN_OBJ) \
 		 $(RPC_DSSETUP_OBJ) $(RPC_WKSSVC_OBJ) $(RPC_SVCCTL_OBJ) \
diff --git a/source3/librpc/rpc/dcerpc_ep.c b/source3/librpc/rpc/dcerpc_ep.c
index cfbe0ab..37d69b0 100644
--- a/source3/librpc/rpc/dcerpc_ep.c
+++ b/source3/librpc/rpc/dcerpc_ep.c
@@ -29,7 +29,9 @@ NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
 				      struct dcerpc_binding_vector **pbvec)
 {
 	struct dcerpc_binding_vector *bvec;
-	uint32_t ep_count, i;
+	uint32_t ep_count;
+	uint32_t count = 0;
+	uint32_t i;
 	NTSTATUS status;
 	TALLOC_CTX *tmp_ctx;
 
@@ -68,17 +70,28 @@ NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
 		}
 
 		b->object = iface->syntax_id;
-		if (b->transport == NCACN_NP) {
-			b->host = talloc_asprintf(b, "\\\\%s", global_myname());
-			if (b->host == NULL) {
-				status = NT_STATUS_NO_MEMORY;
-				goto done;
-			}
+
+		switch (b->transport) {
+			case NCACN_NP:
+				b->host = talloc_asprintf(b, "\\\\%s", global_myname());
+				if (b->host == NULL) {
+					status = NT_STATUS_NO_MEMORY;
+					goto done;
+				}
+				break;
+			case NCACN_IP_TCP:
+				/* TODO */
+			case NCALRPC:
+				/* TODO */
+			default:
+				continue;
 		}
 
-		bvec->bindings[i] = *b;
+		bvec->bindings[count] = *b;
+		count++;
 	}
-	bvec->count = ep_count;
+
+	bvec->count = count;
 
 	*pbvec = talloc_move(mem_ctx, &bvec);
 
diff --git a/source3/rpc_server/srv_rpc_register.c b/source3/rpc_server/rpc_ep_setup.c
similarity index 57%
rename from source3/rpc_server/srv_rpc_register.c
rename to source3/rpc_server/rpc_ep_setup.c
index 9d213ec..e8640fa 100644
--- a/source3/rpc_server/srv_rpc_register.c
+++ b/source3/rpc_server/rpc_ep_setup.c
@@ -43,10 +43,82 @@
 
 #include "librpc/rpc/dcerpc_ep.h"
 
-#include "rpc_server/srv_rpc_register.h"
+#include "rpc_server/rpc_ep_setup.h"
+#include "rpc_server/rpc_server.h"
+
+struct dcesrv_ep_context {
+	struct tevent_context *ev_ctx;
+	struct messaging_context *msg_ctx;
+};
+
+static uint16_t _open_sockets(struct tevent_context *ev_ctx,
+			      struct messaging_context *msg_ctx,
+			      struct ndr_syntax_id syntax_id,
+			      uint16_t port)
+{
+	uint32_t num_ifs = iface_count();
+	uint32_t i;
+	uint16_t p = 0;
+
+	if (lp_interfaces() && lp_bind_interfaces_only()) {
+		/*
+		 * 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.
+		 */
+
+		/* Now open a listen socket for each of the interfaces. */
+		for(i = 0; i < num_ifs; i++) {
+			const struct sockaddr_storage *ifss =
+					iface_n_sockaddr_storage(i);
+
+			p = setup_dcerpc_ncacn_tcpip_socket(ev_ctx,
+							    msg_ctx,
+							    syntax_id,
+							    ifss,
+							    port);
+			if (p == 0) {
+				return 0;
+			}
+			port = p;
+		}
+	} else {
+		const char *sock_addr = lp_socket_address();
+		const char *sock_ptr;
+		char *sock_tok;
+
+		for (sock_ptr = sock_addr;
+		     next_token_talloc(talloc_tos(), &sock_ptr, &sock_tok, " \t,");
+		    ) {
+			struct sockaddr_storage ss;
+
+			/* open an incoming socket */
+			if (!interpret_string_addr(&ss,
+						   sock_tok,
+						   AI_NUMERICHOST|AI_PASSIVE)) {
+				continue;
+			}
+
+			p = setup_dcerpc_ncacn_tcpip_socket(ev_ctx,
+							    msg_ctx,
+							    syntax_id,
+							    &ss,
+							    port);
+			if (p == 0) {
+				return 0;
+			}
+			port = p;
+		}
+	}
+
+	return p;
+}
 
-static NTSTATUS _rpc_ep_register(const struct ndr_interface_table *iface,
-				 const char *name)
+static NTSTATUS _rpc_ep_register(struct tevent_context *ev_ctx,
+				 struct messaging_context *msg_ctx,
+				 const struct ndr_interface_table *iface,
+				 const char *name,
+				 uint16_t port)
 {
 	struct dcerpc_binding_vector *v = NULL;
 	NTSTATUS status;
@@ -109,9 +181,33 @@ static NTSTATUS _rpc_ep_unregister(const struct ndr_interface_table *iface)
 	return status;
 }
 
+static bool epmapper_init_cb(void *ptr)
+{
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+	uint16_t port;
+
+	port = _open_sockets(ep_ctx->ev_ctx,
+			     ep_ctx->msg_ctx,
+			     ndr_table_epmapper.syntax_id,
+			     135);
+	if (port == 135) {
+		return true;
+	}
+
+	return false;
+}
+
 static bool winreg_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_winreg, "winreg"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_winreg,
+						"winreg",
+						0));
 }
 
 static bool winreg_shutdown_cb(void *ptr)
@@ -121,7 +217,14 @@ static bool winreg_shutdown_cb(void *ptr)
 
 static bool srvsvc_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_srvsvc, "srvsvc"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_srvsvc,
+						"srvsvc",
+						0));
 }
 
 static bool srvsvc_shutdown_cb(void *ptr)
@@ -131,7 +234,14 @@ static bool srvsvc_shutdown_cb(void *ptr)
 
 static bool lsarpc_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_lsarpc, "lsarpc"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_lsarpc,
+						"lsarpc",
+						0));
 }
 
 static bool lsarpc_shutdown_cb(void *ptr)
@@ -141,7 +251,14 @@ static bool lsarpc_shutdown_cb(void *ptr)
 
 static bool samr_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_samr, "samr"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_samr,
+						"samr",
+						0));
 }
 
 static bool samr_shutdown_cb(void *ptr)
@@ -151,7 +268,14 @@ static bool samr_shutdown_cb(void *ptr)
 
 static bool netlogon_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_netlogon, "netlogon"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_netlogon,
+						"netlogon",
+						0));
 }
 
 static bool netlogon_shutdown_cb(void *ptr)
@@ -161,20 +285,24 @@ static bool netlogon_shutdown_cb(void *ptr)
 
 static bool spoolss_init_cb(void *ptr)
 {
-	struct messaging_context *msg_ctx = talloc_get_type_abort(
-		ptr, struct messaging_context);
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
 	NTSTATUS status;
 	bool ok;
 
 	/*
 	 * Migrate the printers first.
 	 */
-	ok = nt_printing_tdb_migrate(msg_ctx);
+	ok = nt_printing_tdb_migrate(ep_ctx->msg_ctx);
 	if (!ok) {
 		return false;
 	}
 
-	status =_rpc_ep_register(&ndr_table_spoolss, "spoolss");
+	status =_rpc_ep_register(ep_ctx->ev_ctx,
+				 ep_ctx->msg_ctx,
+				 &ndr_table_spoolss,
+				 "spoolss",
+				 0);
 	if (!NT_STATUS_IS_OK(status)) {
 		return false;
 	}
@@ -193,11 +321,11 @@ static bool spoolss_shutdown_cb(void *ptr)
 
 static bool svcctl_init_cb(void *ptr)
 {
-	struct messaging_context *msg_ctx = talloc_get_type_abort(
-		ptr, struct messaging_context);
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
 	bool ok;
 
-	ok = svcctl_init_winreg(msg_ctx);
+	ok = svcctl_init_winreg(ep_ctx->msg_ctx);
 	if (!ok) {
 		return false;
 	}
@@ -205,7 +333,11 @@ static bool svcctl_init_cb(void *ptr)
 	/* initialize the control hooks */
 	init_service_op_table();
 
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_svcctl, "svcctl"));
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_svcctl,
+						"svcctl",
+						0));
 }
 
 static bool svcctl_shutdown_cb(void *ptr)
@@ -217,7 +349,14 @@ static bool svcctl_shutdown_cb(void *ptr)
 
 static bool ntsvcs_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_ntsvcs, "ntsvcs"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_ntsvcs,
+						"ntsvcs",
+						0));
 }
 
 static bool ntsvcs_shutdown_cb(void *ptr)
@@ -227,17 +366,20 @@ static bool ntsvcs_shutdown_cb(void *ptr)
 
 static bool eventlog_init_cb(void *ptr)
 {
-	struct messaging_context *msg_ctx = talloc_get_type_abort(
-		ptr, struct messaging_context);
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
 	NTSTATUS status;
 
-	status =_rpc_ep_register(&ndr_table_eventlog,
-				 "eventlog");
+	status =_rpc_ep_register(ep_ctx->ev_ctx,
+				 ep_ctx->msg_ctx,
+				 &ndr_table_eventlog,
+				 "eventlog",
+				 0);
 	if (!NT_STATUS_IS_OK(status)) {
 		return false;
 	}
 
-	return eventlog_init_winreg(msg_ctx);
+	return eventlog_init_winreg(ep_ctx->msg_ctx);
 }
 
 static bool eventlog_shutdown_cb(void *ptr)
@@ -247,8 +389,14 @@ static bool eventlog_shutdown_cb(void *ptr)
 
 static bool initshutdown_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_initshutdown,
-						"initshutdown"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_initshutdown,
+						"initshutdown",
+						0));
 }
 
 static bool initshutdown_shutdown_cb(void *ptr)
@@ -257,7 +405,14 @@ static bool initshutdown_shutdown_cb(void *ptr)
 }
 #ifdef DEVELOPER
 static bool rpcecho_init_cb(void *ptr) {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_rpcecho, "rpcecho"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_rpcecho,
+						"rpcecho",
+						0));
 }
 
 static bool rpcecho_shutdown_cb(void *ptr)
@@ -267,30 +422,59 @@ static bool rpcecho_shutdown_cb(void *ptr)
 #endif
 static bool netdfs_init_cb(void *ptr)
 {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_netdfs, "netdfs"));
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_netdfs,
+						"netdfs",
+						0));
 }
 
 static bool netdfs_shutdown_cb(void *ptr) {
 	return NT_STATUS_IS_OK(_rpc_ep_unregister(&ndr_table_netdfs));
 }
 
-static bool dssetup_init_cb(void *ptr) {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_dssetup, "dssetup"));
+static bool dssetup_init_cb(void *ptr)
+{
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_dssetup,
+						"dssetup",
+						0));
 }
 
 static bool dssetup_shutdown_cb(void *ptr) {
 	return NT_STATUS_IS_OK(_rpc_ep_unregister(&ndr_table_dssetup));
 }
 
-static bool wkssvc_init_cb(void *ptr) {
-	return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_wkssvc, "wkssvc"));
+static bool wkssvc_init_cb(void *ptr)
+{
+	struct dcesrv_ep_context *ep_ctx =
+		talloc_get_type_abort(ptr, struct dcesrv_ep_context);
+
+	return NT_STATUS_IS_OK(_rpc_ep_register(ep_ctx->ev_ctx,
+						ep_ctx->msg_ctx,
+						&ndr_table_wkssvc,
+						"wkssvc",
+						0));
 }
 
 static bool wkssvc_shutdown_cb(void *ptr) {
 	return NT_STATUS_IS_OK(_rpc_ep_unregister(&ndr_table_wkssvc));
 }
 
-bool srv_rpc_register(struct messaging_context *msg_ctx) {
+bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
+		     struct messaging_context *msg_ctx)
+{
+	struct dcesrv_ep_context *ep_ctx;
+
+	struct rpc_srv_callbacks epmapper_cb;
+
 	struct rpc_srv_callbacks winreg_cb;
 	struct rpc_srv_callbacks srvsvc_cb;
 
@@ -312,26 +496,38 @@ bool srv_rpc_register(struct messaging_context *msg_ctx) {
 
 	const char *rpcsrv_type;
 
+	ep_ctx = talloc(ev_ctx, struct dcesrv_ep_context);
+	if (ep_ctx == NULL) {
+		return false;
+	}
+
+	ep_ctx->ev_ctx = ev_ctx;
+	ep_ctx->msg_ctx = msg_ctx;
+
 	/* start endpoint mapper only if enabled */
 	rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
 					   "rpc_server", "epmapper",
 					   "none");
 	if (StrCaseCmp(rpcsrv_type, "embedded") == 0) {
-		if (!NT_STATUS_IS_OK(rpc_epmapper_init(NULL))) {
+		epmapper_cb.init         = epmapper_init_cb;
+		epmapper_cb.shutdown     = NULL;
+		epmapper_cb.private_data = ep_ctx;
+
+		if (!NT_STATUS_IS_OK(rpc_epmapper_init(&epmapper_cb))) {
 			return false;
 		}
 	}
 
 	winreg_cb.init         = winreg_init_cb;
 	winreg_cb.shutdown     = winreg_shutdown_cb;
-	winreg_cb.private_data = NULL;
+	winreg_cb.private_data = ep_ctx;
 	if (!NT_STATUS_IS_OK(rpc_winreg_init(&winreg_cb))) {
 		return false;
 	}
 
 	srvsvc_cb.init         = srvsvc_init_cb;
 	srvsvc_cb.shutdown     = srvsvc_shutdown_cb;
-	srvsvc_cb.private_data = NULL;
+	srvsvc_cb.private_data = ep_ctx;
 	if (!NT_STATUS_IS_OK(rpc_srvsvc_init(&srvsvc_cb))) {
 		return false;
 	}
@@ -339,28 +535,28 @@ bool srv_rpc_register(struct messaging_context *msg_ctx) {
 
 	lsarpc_cb.init         = lsarpc_init_cb;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list