summaryrefslogtreecommitdiff
path: root/source4/librpc/rpc/dcerpc.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-12-27 17:15:48 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:47:49 -0500
commit0ad7b308a1c602ddab73668952cdf3837623b877 (patch)
tree45e44464d978c4f313274239d8e9d98dfc5fab43 /source4/librpc/rpc/dcerpc.c
parente748b53e4343fbac00a19e8fc76b42624eb5af02 (diff)
downloadsamba-0ad7b308a1c602ddab73668952cdf3837623b877.tar.gz
samba-0ad7b308a1c602ddab73668952cdf3837623b877.tar.bz2
samba-0ad7b308a1c602ddab73668952cdf3837623b877.zip
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)
Diffstat (limited to 'source4/librpc/rpc/dcerpc.c')
-rw-r--r--source4/librpc/rpc/dcerpc.c27
1 files changed, 12 insertions, 15 deletions
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)
{