From 87fd7b5484b10ccdece6152f2a2a9adb4ea5fc78 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Dec 2005 16:04:34 +0000 Subject: r12574: Bring tables.pl back to life and move registration of interfaces now completely to a new subsystem. (This used to be commit bbacfaaea5819e0ecadf81e8fbb424916284c809) --- source4/librpc/rpc/table.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'source4/librpc/rpc/table.c') diff --git a/source4/librpc/rpc/table.c b/source4/librpc/rpc/table.c index 5450edb003..9b5cf8ff80 100644 --- a/source4/librpc/rpc/table.c +++ b/source4/librpc/rpc/table.c @@ -22,6 +22,33 @@ */ #include "includes.h" +#include "dlinklist.h" + +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; + + 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); + + return NT_STATUS_OK; +} /* find the pipe name for a local IDL interface @@ -82,7 +109,6 @@ const struct dcerpc_interface_table *idl_iface_by_uuid(const struct GUID *uuid) return NULL; } -extern struct dcerpc_interface_list *dcerpc_pipes; /* return the list of registered dcerpc_pipes */ -- cgit