svn commit: samba r3516 - in branches/SAMBA_4_0/source: build/pidl librpc/idl librpc/rpc

jelmer at samba.org jelmer at samba.org
Thu Nov 4 01:25:56 GMT 2004


Author: jelmer
Date: 2004-11-04 01:25:56 +0000 (Thu, 04 Nov 2004)
New Revision: 3516

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3516

Log:
dcerpc_epm_map_binding now checks the endpoints it nows first 
and then possibly does a epm_Map call().
ncacn_np now also uses dcerpc_epm_map_binding()

Modified:
   branches/SAMBA_4_0/source/build/pidl/util.pm
   branches/SAMBA_4_0/source/librpc/idl/epmapper.idl
   branches/SAMBA_4_0/source/librpc/idl/mgmt.idl
   branches/SAMBA_4_0/source/librpc/idl/remact.idl
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/util.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/util.pm	2004-11-04 01:09:43 UTC (rev 3515)
+++ branches/SAMBA_4_0/source/build/pidl/util.pm	2004-11-04 01:25:56 UTC (rev 3516)
@@ -239,7 +239,6 @@
     return 4, if ($type eq "DATA_BLOB");
     return 4, if ($type eq "int32");
 
-	print STDERR "Had to guess align width for type $type\n";
     # it must be an external type - all we can do is guess 
     return 4;
 }

Modified: branches/SAMBA_4_0/source/librpc/idl/epmapper.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/epmapper.idl	2004-11-04 01:09:43 UTC (rev 3515)
+++ branches/SAMBA_4_0/source/librpc/idl/epmapper.idl	2004-11-04 01:25:56 UTC (rev 3516)
@@ -36,9 +36,6 @@
 	const string NDR_GUID = "8a885d04-1ceb-11c9-9fe8-08002b104860";
 	const string NDR_GUID_VERSION = 2;
 
-	const uint32 EPMAPPER_PORT = 135;
-	const string EPMAPPER_IDENTIFIER = "EPMAPPER";
-
 	typedef struct {
 		GUID uuid;
 		uint16 version;

Modified: branches/SAMBA_4_0/source/librpc/idl/mgmt.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/mgmt.idl	2004-11-04 01:09:43 UTC (rev 3515)
+++ branches/SAMBA_4_0/source/librpc/idl/mgmt.idl	2004-11-04 01:25:56 UTC (rev 3516)
@@ -7,6 +7,7 @@
 [
   uuid("afa8bd80-7d8a-11c9-bef4-08002b102989"), 
   version(1.0),
+  endpoint("ncalrpc:", "ncacn_ip_tcp:[135]", "ncacn_np:[\\pipe\\epmapper]"),
   helpstring("DCE/RPC Remote Management")
 ] 
 interface mgmt

Modified: branches/SAMBA_4_0/source/librpc/idl/remact.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/remact.idl	2004-11-04 01:09:43 UTC (rev 3515)
+++ branches/SAMBA_4_0/source/librpc/idl/remact.idl	2004-11-04 01:25:56 UTC (rev 3516)
@@ -10,7 +10,7 @@
 [
 	uuid("4d9f4ab8-7d1c-11cf-861e-0020af6e7c57"),
 	pointer_default(unique),
-	endpoint("ncalrpc:", "ncacn_ip_tcp:[135]"),
+	endpoint("ncalrpc:", "ncacn_ip_tcp:[135]", "ncacn_np:[\\pipe\\epmapper]"),
 	depends(dcom)
 ]
 interface IRemoteActivation

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c	2004-11-04 01:09:43 UTC (rev 3515)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_util.c	2004-11-04 01:25:56 UTC (rev 3516)
@@ -24,9 +24,6 @@
 #include "includes.h"
 #include "system/network.h"
 #include "librpc/gen_ndr/ndr_epmapper.h"
-#include "librpc/gen_ndr/ndr_remact.h"
-#include "librpc/gen_ndr/ndr_oxidresolver.h"
-#include "librpc/gen_ndr/ndr_mgmt.h"
 #include "librpc/gen_ndr/tables.h"
 
 /*
@@ -660,20 +657,26 @@
 	struct GUID guid;
 	struct epm_twr_t twr, *twr_r;
 	struct dcerpc_binding epmapper_binding;
+	const struct dcerpc_interface_table *table = idl_iface_by_uuid(uuid);
+	int i;
 
+	/* First, check if there is a default endpoint specified in the IDL */
 
-	if (!strcmp(uuid, DCERPC_EPMAPPER_UUID) ||
-		!strcmp(uuid, DCERPC_MGMT_UUID) ||
-		!strcmp(uuid, DCERPC_IREMOTEACTIVATION_UUID) ||
-		!strcmp(uuid, DCERPC_IOXIDRESOLVER_UUID)) {
-		switch(binding->transport) {
-			case NCACN_IP_TCP: binding->endpoint = talloc_asprintf(mem_ctx, "%d", EPMAPPER_PORT); return NT_STATUS_OK;
-			case NCALRPC: binding->endpoint = EPMAPPER_IDENTIFIER; return NT_STATUS_OK;
-			default: return NT_STATUS_NOT_SUPPORTED;
+	if (table) {
+		struct dcerpc_binding default_binding;
+		
+		/* Find one of the default pipes for this interface */
+		for (i = 0; i < table->endpoints->count; i++) {
+			status = dcerpc_parse_binding(mem_ctx, table->endpoints->names[i], &default_binding);
+
+			if (NT_STATUS_IS_OK(status) && default_binding.transport == binding->transport && default_binding.endpoint) {
+				binding->endpoint = talloc_strdup(mem_ctx, default_binding.endpoint);	
+				return NT_STATUS_OK;
+			}
 		}
 	}
-	
 
+
 	ZERO_STRUCT(epmapper_binding);
 	epmapper_binding.transport = binding->transport;
 	epmapper_binding.host = binding->host;
@@ -759,36 +762,20 @@
 	const char *pipe_name = NULL;
 	TALLOC_CTX *mem_ctx = talloc_init("dcerpc_pipe_connect_ncacn_np");
 	
+	/* Look up identifier using the epmapper */
 	if (!binding->endpoint) {
-		const struct dcerpc_interface_table *table = idl_iface_by_uuid(pipe_uuid);
-		struct dcerpc_binding default_binding;
-		int i;
-
-		if (!table) {
-			DEBUG(0,("Unknown interface endpoint '%s'\n", pipe_uuid));
+		status = dcerpc_epm_map_binding(mem_ctx, binding, pipe_uuid, pipe_version);
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(0,("Failed to map DCERPC/TCP NCACN_NP pipe for '%s' - %s\n", 
+				 pipe_uuid, nt_errstr(status)));
 			talloc_destroy(mem_ctx);
-			return NT_STATUS_INVALID_PARAMETER;
+			return status;
 		}
-
-		/* Find one of the default pipes for this interface */
-		for (i = 0; i < table->endpoints->count; i++) {
-			status = dcerpc_parse_binding(mem_ctx, table->endpoints->names[i], &default_binding);
-
-			if (NT_STATUS_IS_OK(status) && default_binding.transport == NCACN_NP) {
-				pipe_name = default_binding.endpoint;	
-				break;
-				
-			}
-		}
-
-		if (pipe_name == NULL) {
-			DEBUG(0, ("No default named pipe specified for interface with UUID %s\n", pipe_uuid));
-			return NT_STATUS_OBJECT_NAME_NOT_FOUND;
-		}
-	} else {
-		pipe_name = binding->endpoint;
+		DEBUG(1,("Mapped to DCERPC/TCP pipe %s\n", binding->endpoint));
 	}
 
+	pipe_name = binding->endpoint;
+
 	if (!strncasecmp(pipe_name, "/pipe/", 6) || 
 		!strncasecmp(pipe_name, "\\pipe\\", 6)) {
 		pipe_name+=6;



More information about the samba-cvs mailing list