Rev 11211: merge mgmt work in file:///home/jelmer/bzr.samba/SAMBA_4_0/

Jelmer Vernooij jelmer at samba.org
Tue Jan 16 14:41:37 GMT 2007


------------------------------------------------------------
revno: 11211
revision-id: jelmer at samba.org-20070116144126-70rip3bppmvgs3t6
parent: svn-v2:20829 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
parent: jelmer at samba.org-20070116142619-6bvxkq01uug52obt
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: SAMBA_4_0
timestamp: Tue 2007-01-16 15:41:26 +0100
message:
  merge mgmt work
removed:
  source/rpc_server/mgmt/        svn-v2:20785 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fmgmt
renamed:
  source/rpc_server/mgmt/dcesrv_mgmt.c => source/rpc_server/dcesrv_mgmt.c svn-v2:20785 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fmgmt%2fdcesrv_mgmt.c
modified:
  source/librpc/idl/mgmt.idl     svn-v2:6 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flibrpc%2fidl%2fmgmt.idl
  source/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm svn-v2:12463 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fpidl%2flib%2fParse%2fPidl%2fSamba4%2fNDR%2fServer.pm
  source/rpc_server/config.mk    svn-v2:846 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fconfig.mk
  source/rpc_server/dcerpc_server.c svn-v2:6 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fdcerpc_server.c
  source/script/tests/test_rpc.sh svn-v2:3393 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscript%2ftests%2ftest_rpc.sh
  source/torture/rpc/mgmt.c      svn-v2:6 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2ftorture%2frpc%2fmgmt.c
  source/rpc_server/dcesrv_mgmt.c svn-v2:20785 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fmgmt%2fdcesrv_mgmt.c
    ------------------------------------------------------------
    revno: 11208.1.6
    merged: jelmer at samba.org-20070116142619-6bvxkq01uug52obt
    parent: jelmer at samba.org-20070116133625-lv5c7ur8vcpnogxk
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 4.0-mgmt
    timestamp: Tue 2007-01-16 15:26:19 +0100
    message:
      Ignore interfaces that don't exist remotely.
    ------------------------------------------------------------
    revno: 11208.1.5
    merged: jelmer at samba.org-20070116133625-lv5c7ur8vcpnogxk
    parent: jelmer at samba.org-20070116132625-20m48ecr6l8ekg48
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 4.0-mgmt
    timestamp: Tue 2007-01-16 14:36:25 +0100
    message:
      Add stub inq_if_stats implementation.
    ------------------------------------------------------------
    revno: 11208.1.4
    merged: jelmer at samba.org-20070116132625-20m48ecr6l8ekg48
    parent: jelmer at samba.org-20070116125247-4edqesi7i19sqhhn
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 4.0-mgmt
    timestamp: Tue 2007-01-16 14:26:25 +0100
    message:
      Implement inq_if_ids.
    ------------------------------------------------------------
    revno: 11208.1.3
    merged: jelmer at samba.org-20070116125247-4edqesi7i19sqhhn
    parent: jelmer at samba.org-20070116112841-55jk0tfh9ua8cvt0
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: 4.0-mgmt
    timestamp: Tue 2007-01-16 13:52:47 +0100
    message:
      Add mgmt interface to each endpoint.
      Start running mgmt tests.
      Fix is_server_listening() call.
    ------------------------------------------------------------
    revno: 11208.1.2
    merged: jelmer at samba.org-20070116112841-55jk0tfh9ua8cvt0
    parent: jelmer at samba.org-20070116112002-q370cwwegurc2sle
    parent: svn-v2:20826 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: SAMBA_4_0
    timestamp: Tue 2007-01-16 12:28:41 +0100
    message:
      Merge upstream.
    ------------------------------------------------------------
    revno: 11208.1.1
    merged: jelmer at samba.org-20070116112002-q370cwwegurc2sle
    parent: svn-v2:20825 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: SAMBA_4_0
    timestamp: Tue 2007-01-16 12:20:02 +0100
    message:
      Ignore some more files.
=== removed directory 'source/rpc_server/mgmt'
=== renamed file 'source/rpc_server/mgmt/dcesrv_mgmt.c' => 'source/rpc_server/dcesrv_mgmt.c'
--- a/source/rpc_server/mgmt/dcesrv_mgmt.c	2007-01-15 00:42:16 +0000
+++ b/source/rpc_server/dcesrv_mgmt.c	2007-01-16 13:36:25 +0000
@@ -31,7 +31,19 @@
 static WERROR mgmt_inq_if_ids(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct mgmt_inq_if_ids *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	const struct dcesrv_endpoint *ep = dce_call->conn->endpoint;
+	struct dcesrv_if_list *l;
+	struct rpc_if_id_vector_t *vector;
+
+	vector = *r->out.if_id_vector = talloc(mem_ctx, struct rpc_if_id_vector_t);
+	vector->count = 0;
+	vector->if_id = NULL;
+	for (l = ep->interface_list; l; l = l->next) {
+		vector->count++;
+		vector->if_id = talloc_realloc(mem_ctx, vector->if_id, struct dcerpc_syntax_id_p, vector->count);
+		vector->if_id[vector->count-1].id = &l->iface.syntax_id;
+	}
+	return WERR_OK;
 }
 
 
@@ -41,7 +53,18 @@
 static WERROR mgmt_inq_stats(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct mgmt_inq_stats *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	if (r->in.max_count != MGMT_STATS_ARRAY_MAX_SIZE)
+		return WERR_NOT_SUPPORTED;
+
+	r->out.statistics->count = r->in.max_count;
+	r->out.statistics->statistics = talloc_array(mem_ctx, uint32_t, r->in.max_count);
+	/* FIXME */
+	r->out.statistics->statistics[MGMT_STATS_CALLS_IN] = 0;
+	r->out.statistics->statistics[MGMT_STATS_CALLS_OUT] = 0;
+	r->out.statistics->statistics[MGMT_STATS_PKTS_IN] = 0;
+	r->out.statistics->statistics[MGMT_STATS_PKTS_OUT] = 0;
+
+	return WERR_OK;
 }
 
 
@@ -51,8 +74,8 @@
 static uint32_t mgmt_is_server_listening(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct mgmt_is_server_listening *r)
 {
-	*r->out.status = 1;
-	return 0;
+	*r->out.status = 0;
+	return 1;
 }
 
 
@@ -62,7 +85,7 @@
 static WERROR mgmt_stop_server_listening(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct mgmt_stop_server_listening *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	return WERR_ACCESS_DENIED;
 }
 
 

=== modified file 'source/librpc/idl/mgmt.idl'
--- a/source/librpc/idl/mgmt.idl	2007-01-14 22:28:29 +0000
+++ b/source/librpc/idl/mgmt.idl	2007-01-16 13:26:25 +0000
@@ -6,7 +6,6 @@
   uuid("afa8bd80-7d8a-11c9-bef4-08002b102989"), 
   version(1.0),
   pointer_default(unique),
-  endpoint("ncalrpc:[EPMAPPER]", "ncacn_ip_tcp:[135]", "ncacn_np:[\\pipe\\epmapper]"),
   helpstring("DCE/RPC Remote Management")
 ] 
 interface mgmt
@@ -24,7 +23,7 @@
 	/***********************/
 	/* Function 0x00       */
 	WERROR mgmt_inq_if_ids (
-		[out,unique]       rpc_if_id_vector_t      *if_id_vector
+		[out]       rpc_if_id_vector_t      **if_id_vector
 		);
 
 

=== modified file 'source/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm'
--- a/source/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm	2006-08-28 17:12:12 +0000
+++ b/source/pidl/lib/Parse/Pidl/Samba4/NDR/Server.pm	2007-01-16 12:52:47 +0000
@@ -186,7 +186,7 @@
 	return NT_STATUS_OK;
 }
 
-static const struct dcesrv_interface $name\_interface = {
+const struct dcesrv_interface dcesrv\_$name\_interface = {
 	.name		= \"$name\",
 	.syntax_id  = {".print_uuid($uuid).",$if_version},
 	.bind		= $name\__op_bind,
@@ -217,7 +217,7 @@
 		NTSTATUS ret;
 		const char *name = dcerpc_table_$name.endpoints->names[i];
 
-		ret = dcesrv_interface_register(dce_ctx, name, &$name\_interface, NULL);
+		ret = dcesrv_interface_register(dce_ctx, name, &dcesrv_$name\_interface, NULL);
 		if (!NT_STATUS_IS_OK(ret)) {
 			DEBUG(1,(\"$name\_op_init_server: failed to register endpoint \'%s\'\\n\",name));
 			return ret;
@@ -229,9 +229,9 @@
 
 static BOOL $name\__op_interface_by_uuid(struct dcesrv_interface *iface, const struct GUID *uuid, uint32_t if_version)
 {
-	if ($name\_interface.syntax_id.if_version == if_version &&
-		GUID_equal(\&$name\_interface.syntax_id.uuid, uuid)) {
-		memcpy(iface,&$name\_interface, sizeof(*iface));
+	if (dcesrv_$name\_interface.syntax_id.if_version == if_version &&
+		GUID_equal(\&dcesrv\_$name\_interface.syntax_id.uuid, uuid)) {
+		memcpy(iface,&dcesrv\_$name\_interface, sizeof(*iface));
 		return True;
 	}
 
@@ -240,8 +240,8 @@
 
 static BOOL $name\__op_interface_by_name(struct dcesrv_interface *iface, const char *name)
 {
-	if (strcmp($name\_interface.name, name)==0) {
-		memcpy(iface,&$name\_interface, sizeof(*iface));
+	if (strcmp(dcesrv_$name\_interface.name, name)==0) {
+		memcpy(iface, &dcesrv_$name\_interface, sizeof(*iface));
 		return True;
 	}
 

=== modified file 'source/rpc_server/config.mk'
--- a/source/rpc_server/config.mk	2007-01-15 02:23:40 +0000
+++ b/source/rpc_server/config.mk	2007-01-16 12:52:47 +0000
@@ -35,17 +35,6 @@
 ################################################
 
 ################################################
-# Start MODULE dcerpc_mgmt
-[MODULE::dcerpc_mgmt]
-INIT_FUNCTION = dcerpc_server_mgmt_init
-SUBSYSTEM = dcerpc_server
-OBJ_FILES = \
-		mgmt/dcesrv_mgmt.o
-PUBLIC_DEPENDENCIES = NDR_MGMT
-# End MODULE dcerpc_mgmt
-################################################
-
-################################################
 # Start MODULE dcerpc_remote
 [MODULE::dcerpc_remote]
 INIT_FUNCTION = dcerpc_server_remote_init
@@ -197,6 +186,7 @@
 		dcerpc_server.o \
 		dcerpc_sock.o \
 		dcesrv_auth.o \
+		dcesrv_mgmt.o \
 		handles.o
 PUBLIC_DEPENDENCIES = \
 		LIBCLI_AUTH \

=== modified file 'source/rpc_server/dcerpc_server.c'
--- a/source/rpc_server/dcerpc_server.c	2007-01-10 10:52:09 +0000
+++ b/source/rpc_server/dcerpc_server.c	2007-01-16 12:52:47 +0000
@@ -35,6 +35,8 @@
 #include "libcli/security/security.h"
 #include "build.h"
 
+extern const struct dcesrv_interface dcesrv_mgmt_interface;
+
 /*
   see if two endpoints match
 */
@@ -178,6 +180,17 @@
 		ZERO_STRUCTP(ep);
 		ep->ep_description = talloc_reference(ep, binding);
 		add_ep = True;
+
+		/* add mgmt interface */
+		ifl = talloc(dce_ctx, struct dcesrv_if_list);
+		if (!ifl) {
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		memcpy(&(ifl->iface), &dcesrv_mgmt_interface, 
+			   sizeof(struct dcesrv_interface));
+
+		DLIST_ADD(ep->interface_list, ifl);
 	}
 
 	/* see if the interface is already registered on te endpoint */

=== modified file 'source/script/tests/test_rpc.sh'
--- a/source/script/tests/test_rpc.sh	2006-09-11 16:05:27 +0000
+++ b/source/script/tests/test_rpc.sh	2007-01-16 12:52:47 +0000
@@ -2,9 +2,9 @@
 
 # add tests to this list as they start passing, so we test
 # that they stay passing
-ncacn_np_tests="RPC-SPOOLSS RPC-SRVSVC RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON"
-ncalrpc_tests="RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON"
-ncacn_ip_tcp_tests="RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON"
+ncacn_np_tests="RPC-SPOOLSS RPC-SRVSVC RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-MGMT"
+ncalrpc_tests="RPC-MGMT RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON"
+ncacn_ip_tcp_tests="RPC-UNIXINFO RPC-SCHANNEL RPC-JOIN RPC-LSA RPC-ECHO RPC-DSSETUP RPC-ALTERCONTEXT RPC-MULTIBIND RPC-NETLOGON RPC-MGMT"
 slow_ncacn_np_tests="RPC-SAMLOGON RPC-SAMR RPC-SAMR-USERS RPC-SAMR-PASSWORDS"
 slow_ncalrpc_tests="RPC-SAMLOGON RPC-SAMR RPC-SAMR-USERS RPC-SAMR-PASSWORDS"
 slow_ncacn_ip_tcp_tests="RPC-SAMLOGON RPC-SAMR RPC-SAMR-USERS RPC-SAMR-PASSWORDS"

=== modified file 'source/torture/rpc/mgmt.c'
--- a/source/torture/rpc/mgmt.c	2007-01-14 22:28:29 +0000
+++ b/source/torture/rpc/mgmt.c	2007-01-16 14:26:19 +0000
@@ -30,12 +30,15 @@
 /*
   ask the server what interface IDs are available on this endpoint
 */
-static BOOL test_inq_if_ids(struct dcerpc_pipe *p, 
-			    TALLOC_CTX *mem_ctx)
+static BOOL test_inq_if_ids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
 {
 	NTSTATUS status;
 	struct mgmt_inq_if_ids r;
+	struct rpc_if_id_vector_t *vector;
 	int i;
+
+	vector = talloc(mem_ctx, struct rpc_if_id_vector_t);
+	r.out.if_id_vector = &vector;
 	
 	status = dcerpc_mgmt_inq_if_ids(p, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -48,13 +51,13 @@
 		return False;
 	}
 
-	if (!r.out.if_id_vector) {
+	if (!vector) {
 		printf("inq_if_ids gave NULL if_id_vector\n");
 		return False;
 	}
 
-	for (i=0;i<r.out.if_id_vector->count;i++) {
-		struct dcerpc_syntax_id *id = r.out.if_id_vector->if_id[i].id;
+	for (i=0;i<vector->count;i++) {
+		struct dcerpc_syntax_id *id = vector->if_id[i].id;
 		if (!id) continue;
 
 		printf("\tuuid %s  version 0x%08x  '%s'\n",
@@ -70,9 +73,11 @@
 {
 	NTSTATUS status;
 	struct mgmt_inq_stats r;
+	struct mgmt_statistics statistics;
 
 	r.in.max_count = MGMT_STATS_ARRAY_MAX_SIZE;
 	r.in.unknown = 0;
+	r.out.statistics = &statistics;
 
 	status = dcerpc_mgmt_inq_stats(p, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -80,16 +85,16 @@
 		return False;
 	}
 
-	if (r.out.statistics->count != MGMT_STATS_ARRAY_MAX_SIZE) {
-		printf("Unexpected array size %d\n", r.out.statistics->count);
+	if (statistics.count != MGMT_STATS_ARRAY_MAX_SIZE) {
+		printf("Unexpected array size %d\n", statistics.count);
 		return False;
 	}
 
 	printf("\tcalls_in %6d  calls_out %6d\n\tpkts_in  %6d  pkts_out  %6d\n",
-	       r.out.statistics->statistics[MGMT_STATS_CALLS_IN],
-	       r.out.statistics->statistics[MGMT_STATS_CALLS_OUT],
-	       r.out.statistics->statistics[MGMT_STATS_PKTS_IN],
-	       r.out.statistics->statistics[MGMT_STATS_PKTS_OUT]);
+	       statistics.statistics[MGMT_STATS_CALLS_IN],
+	       statistics.statistics[MGMT_STATS_CALLS_OUT],
+	       statistics.statistics[MGMT_STATS_PKTS_IN],
+	       statistics.statistics[MGMT_STATS_PKTS_OUT]);
 
 	return True;
 }
@@ -135,6 +140,7 @@
 {
 	NTSTATUS status;
 	struct mgmt_is_server_listening r;
+	r.out.status = talloc(mem_ctx, uint32_t);
 
 	status = dcerpc_mgmt_is_server_listening(p, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -210,27 +216,29 @@
 
 		printf("\nTesting pipe '%s'\n", l->table->name);
 
-		if (b->transport == NCACN_IP_TCP) {
-			status = dcerpc_epm_map_binding(loop_ctx, b, l->table, NULL);
-			if (!NT_STATUS_IS_OK(status)) {
-				printf("Failed to map port for uuid %s\n", 
-					   GUID_string(loop_ctx, &l->table->syntax_id.uuid));
-				talloc_free(loop_ctx);
-				continue;
-			}
-		} else {
-			b->endpoint = talloc_strdup(b, l->table->name);
+		status = dcerpc_epm_map_binding(loop_ctx, b, l->table, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			printf("Failed to map port for uuid %s\n", 
+				   GUID_string(loop_ctx, &l->table->syntax_id.uuid));
+			talloc_free(loop_ctx);
+			continue;
 		}
 
 		lp_set_cmdline("torture:binding", dcerpc_binding_string(loop_ctx, b));
 
 		status = torture_rpc_connection(loop_ctx, &p, &dcerpc_table_mgmt);
+		if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
+			printf("Interface not available - skipping\n");
+			talloc_free(loop_ctx);
+			continue;
+		}
+
 		if (!NT_STATUS_IS_OK(status)) {
 			talloc_free(loop_ctx);
 			ret = False;
 			continue;
 		}
-	
+
 		if (!test_is_server_listening(p, loop_ctx)) {
 			ret = False;
 		}



More information about the samba-cvs mailing list