X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source4%2Flibrpc%2Frpc%2Ftable.c;h=9b5cf8ff80801d36f2ca3d3313da05be9d45a3b7;hp=5450edb003e1f2409e5b60c6d4b4e21be673d46a;hb=87fd7b5484b10ccdece6152f2a2a9adb4ea5fc78;hpb=1690ae449a6189d38a1d63dba22bf0ec774201f8 diff --git a/source4/librpc/rpc/table.c b/source4/librpc/rpc/table.c index 5450edb003e..9b5cf8ff808 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 */