From 0ad7b308a1c602ddab73668952cdf3837623b877 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 27 Dec 2005 17:15:48 +0000 Subject: r12514: Move DCE/RPC interface table to a seperate file Be a bit more strict when checking for duplicate interfaces (This used to be commit b1286a6d27e2b5aa26f288f6aff70601b0d8ae74) --- source4/librpc/rpc/dcerpc.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'source4/librpc/rpc/dcerpc.c') diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c index 14305c3449..9e585f9612 100644 --- a/source4/librpc/rpc/dcerpc.c +++ b/source4/librpc/rpc/dcerpc.c @@ -31,20 +31,25 @@ static void dcerpc_ship_next_request(struct dcerpc_connection *c); -static struct dcerpc_interface_list *dcerpc_pipes = NULL; +struct dcerpc_interface_list *dcerpc_pipes = NULL; /* register a dcerpc client interface */ NTSTATUS librpc_register_interface(const struct dcerpc_interface_table *interface) { - struct dcerpc_interface_list *l = talloc(talloc_autofree_context(), - struct dcerpc_interface_list); - - if (idl_iface_by_name (interface->name) != NULL) { - DEBUG(0, ("Attempt to register interface %s twice\n", interface->name)); - return NT_STATUS_OBJECT_NAME_COLLISION; + struct dcerpc_interface_list *l; + + for (l = dcerpc_pipes; l; l = l->next) { + if (GUID_equal(&interface->uuid, &l->table->uuid)) { + DEBUG(0, ("Attempt to register interface %s which has the " + "same UUID as already registered interface %s\n", + interface->name, l->table->name)); + return NT_STATUS_OBJECT_NAME_COLLISION; + } } + + l = talloc(talloc_autofree_context(), struct dcerpc_interface_list); l->table = interface; DLIST_ADD(dcerpc_pipes, l); @@ -52,14 +57,6 @@ NTSTATUS librpc_register_interface(const struct dcerpc_interface_table *interfac return NT_STATUS_OK; } -/* - return the list of registered dcerpc_pipes -*/ -const struct dcerpc_interface_list *librpc_dcerpc_pipes(void) -{ - return dcerpc_pipes; -} - /* destroy a dcerpc connection */ static int dcerpc_connection_destructor(void *ptr) { -- cgit