svn commit: samba r4394 - in branches/SAMBA_4_0/source/rpc_server/epmapper: .

jelmer at samba.org jelmer at samba.org
Wed Dec 29 15:36:45 GMT 2004


Author: jelmer
Date: 2004-12-29 15:36:45 +0000 (Wed, 29 Dec 2004)
New Revision: 4394

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

Log:
Use 'raw' protocol towers in the lists in the endpoint rather then 
dcerpc_binding structs.

Modified:
   branches/SAMBA_4_0/source/rpc_server/epmapper/rpc_epmapper.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/epmapper/rpc_epmapper.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/epmapper/rpc_epmapper.c	2004-12-29 13:22:00 UTC (rev 4393)
+++ branches/SAMBA_4_0/source/rpc_server/epmapper/rpc_epmapper.c	2004-12-29 15:36:45 UTC (rev 4394)
@@ -34,7 +34,7 @@
 /* a endpoint combined with an interface description */
 struct dcesrv_ep_iface {
 	const char *name;
-	struct dcerpc_binding ep_description;
+	struct epm_tower ep;
 };
 
 /*
@@ -58,11 +58,13 @@
 {
 	struct dcesrv_endpoint *d;
 	uint32_t total = 0;
+	NTSTATUS status;
 
 	*eps = NULL;
 
 	for (d=endpoint_list; d; d=d->next) {
 		struct dcesrv_if_list *iface;
+		struct dcerpc_binding description;
 
 		for (iface=d->interface_list;iface;iface=iface->next) {
 			(*eps) = talloc_realloc_p(mem_ctx, 
@@ -73,9 +75,16 @@
 				return 0;
 			}
 			(*eps)[total].name = iface->iface.name;
-			(*eps)[total].ep_description = d->ep_description;
-			GUID_from_string(iface->iface.uuid, &(*eps)[total].ep_description.object);
-			(*eps)[total].ep_description.object_version = iface->iface.if_version;
+
+			description = d->ep_description;
+			GUID_from_string(iface->iface.uuid, &description.object);
+			description.object_version = iface->iface.if_version;
+
+			status = dcerpc_binding_build_tower(mem_ctx, &description, &(*eps)[total].ep);
+			if (NT_STATUS_IS_ERR(status)) {
+				DEBUG(1, ("Unable to build tower for %s\n", iface->iface.name));
+				continue;
+			}
 			total++;
 		}
 	}
@@ -110,7 +119,6 @@
 		struct dcesrv_ep_iface *e;
 	} *eps;
 	uint32_t num_ents;
-	NTSTATUS status;
 	int i;
 
 	h = dcesrv_handle_fetch(dce_call->conn, r->in.entry_handle, HTYPE_LOOKUP);
@@ -158,11 +166,7 @@
 		if (!r->out.entries[i].tower) {
 			return EPMAPPER_STATUS_NO_MEMORY;
 		}
-
-		status = dcerpc_binding_build_tower(mem_ctx, &eps->e[i].ep_description, &r->out.entries[i].tower->tower);
-		if (NT_STATUS_IS_ERR(status)) {
-			return EPMAPPER_STATUS_NO_MEMORY;
-		}
+		r->out.entries[i].tower->tower = eps->e[i].ep;
 	}
 
 	eps->count -= num_ents;
@@ -184,7 +188,6 @@
 	struct dcesrv_ep_iface *eps;
 	struct epm_floor *floors;
 	enum dcerpc_transport_t transport;
-	NTSTATUS status;
 
 	count = build_ep_list(mem_ctx, dce_call->conn->dce_ctx->endpoint_list, &eps);
 
@@ -206,8 +209,7 @@
 
 	floors = r->in.map_tower->tower.floors;
 
-	if (floors[0].lhs.protocol != EPM_PROTOCOL_UUID ||
-	    floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
+	if (floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
 	    guid_cmp(mem_ctx, &floors[1].lhs.info.uuid.uuid, NDR_GUID) != 0 ||
 	    floors[1].lhs.info.uuid.version != NDR_GUID_VERSION) {
 		goto failed;
@@ -222,26 +224,17 @@
 		}
 		goto failed;
 	}
-	
+
 	for (i=0;i<count;i++) {
-		struct epm_tower t;
-		if (!GUID_equal(&floors[0].lhs.info.uuid.uuid, &eps[i].ep_description.object) ||
-		    floors[0].lhs.info.uuid.version != eps[i].ep_description.object_version) {
+		if (!GUID_equal(&r->in.map_tower->tower.floors[0].lhs.info.uuid.uuid,
+					   &eps[i].ep.floors[0].lhs.info.uuid.uuid) ||
+			r->in.map_tower->tower.floors[0].lhs.info.uuid.version != 
+				eps[i].ep.floors[0].lhs.info.uuid.version ||
+				transport != dcerpc_transport_by_tower(&eps[i].ep)) {
 			continue;
 		}
-
-		if (transport != eps[i].ep_description.transport) {
-			continue;
-		}
 		
-		status = dcerpc_binding_build_tower(mem_ctx, 
-						&eps[i].ep_description, 
-						&t);
-
-		if (NT_STATUS_IS_ERR(status)) {
-			return EPMAPPER_STATUS_NO_MEMORY;
-		}
-		r->out.towers->twr->tower = t;
+		r->out.towers->twr->tower = eps[i].ep;
 		r->out.towers->twr->tower_length = 0;
 		return EPMAPPER_STATUS_OK;
 	}



More information about the samba-cvs mailing list