From bd93ed4680b3a86348b0d84a93d20f3daafbe8ad Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 21 Aug 2007 19:35:43 +0000 Subject: r24606: move librpc/rpc/table.c -> librpc/ndr/ndr_table.c and rename the containing functions to have a ndr_ prefix metze (This used to be commit cb234d43ae693af5d8a921a15c9bcac3c6f0359a) --- source4/librpc/config.mk | 4 +- source4/librpc/ndr/ndr_table.c | 134 ++++++++++++++++++++++++++++++ source4/librpc/rpc/table.c | 134 ------------------------------ source4/librpc/tables.pl | 10 +-- source4/librpc/tools/ndrdump.c | 10 +-- source4/rpc_server/remote/dcesrv_remote.c | 8 +- source4/scripting/ejs/smbcalls_rpc.c | 4 +- source4/torture/rpc/autoidl.c | 4 +- source4/torture/rpc/countcalls.c | 8 +- source4/torture/rpc/epmapper.c | 4 +- source4/torture/rpc/mgmt.c | 7 +- source4/torture/rpc/rpc.c | 2 +- source4/torture/rpc/scanner.c | 6 +- 13 files changed, 168 insertions(+), 167 deletions(-) create mode 100644 source4/librpc/ndr/ndr_table.c delete mode 100644 source4/librpc/rpc/table.c (limited to 'source4') diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 5cec7e1f67..01f7b80490 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -287,8 +287,8 @@ librpc/gen_ndr/tables.c: $(IDL_NDR_PARSE_H_FILES) mv librpc/gen_ndr/tables.x librpc/gen_ndr/tables.c [SUBSYSTEM::NDR_TABLE] -OBJ_FILES = rpc/table.o gen_ndr/tables.o -PRIVATE_PROTO_HEADER = rpc/dcerpc_table.h +OBJ_FILES = ndr/ndr_table.o gen_ndr/tables.o +PRIVATE_PROTO_HEADER = ndr/ndr_table.h PUBLIC_DEPENDENCIES = \ NDR_AUDIOSRV NDR_ECHO NDR_DCERPC \ NDR_DSBACKUP NDR_EFS NDR_MISC NDR_LSA NDR_DFS NDR_DRSUAPI \ diff --git a/source4/librpc/ndr/ndr_table.c b/source4/librpc/ndr/ndr_table.c new file mode 100644 index 0000000000..9b43f8836d --- /dev/null +++ b/source4/librpc/ndr/ndr_table.c @@ -0,0 +1,134 @@ +/* + Unix SMB/CIFS implementation. + + dcerpc utility functions + + Copyright (C) Andrew Tridgell 2003 + Copyright (C) Jelmer Vernooij 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "includes.h" +#include "lib/util/dlinklist.h" +#include "librpc/ndr/libndr.h" +#include "librpc/ndr/ndr_table.h" + +static struct ndr_interface_list *ndr_interfaces; + +/* + register a ndr interface table +*/ +NTSTATUS ndr_table_register(const struct ndr_interface_table *table) +{ + struct ndr_interface_list *l; + + for (l = ndr_interfaces; l; l = l->next) { + if (GUID_equal(&table->syntax_id.uuid, &l->table->syntax_id.uuid)) { + DEBUG(0, ("Attempt to register interface %s which has the " + "same UUID as already registered interface %s\n", + table->name, l->table->name)); + return NT_STATUS_OBJECT_NAME_COLLISION; + } + } + + l = talloc(talloc_autofree_context(), struct ndr_interface_list); + l->table = table; + + DLIST_ADD(ndr_interfaces, l); + + return NT_STATUS_OK; +} + +/* + find the pipe name for a local IDL interface +*/ +const char *ndr_interface_name(const struct GUID *uuid, uint32_t if_version) +{ + const struct ndr_interface_list *l; + for (l=ndr_table_list();l;l=l->next) { + if (GUID_equal(&l->table->syntax_id.uuid, uuid) && + l->table->syntax_id.if_version == if_version) { + return l->table->name; + } + } + return "UNKNOWN"; +} + +/* + find the number of calls defined by local IDL +*/ +int ndr_interface_num_calls(const struct GUID *uuid, uint32_t if_version) +{ + const struct ndr_interface_list *l; + for (l=ndr_interfaces;l;l=l->next){ + if (GUID_equal(&l->table->syntax_id.uuid, uuid) && + l->table->syntax_id.if_version == if_version) { + return l->table->num_calls; + } + } + return -1; +} + + +/* + find a dcerpc interface by name +*/ +const struct ndr_interface_table *ndr_table_by_name(const char *name) +{ + const struct ndr_interface_list *l; + for (l=ndr_interfaces;l;l=l->next) { + if (strcasecmp(l->table->name, name) == 0) { + return l->table; + } + } + return NULL; +} + +/* + find a dcerpc interface by uuid +*/ +const struct ndr_interface_table *ndr_table_by_uuid(const struct GUID *uuid) +{ + const struct ndr_interface_list *l; + for (l=ndr_interfaces;l;l=l->next) { + if (GUID_equal(&l->table->syntax_id.uuid, uuid)) { + return l->table; + } + } + return NULL; +} + +/* + return the list of registered dcerpc_pipes +*/ +const struct ndr_interface_list *ndr_table_list(void) +{ + return ndr_interfaces; +} + + +NTSTATUS ndr_table_register_builtin_tables(void); + +NTSTATUS ndr_table_init(void) +{ + static BOOL initialized = False; + + if (initialized) return NT_STATUS_OK; + initialized = True; + + ndr_table_register_builtin_tables(); + + return NT_STATUS_OK; +} diff --git a/source4/librpc/rpc/table.c b/source4/librpc/rpc/table.c deleted file mode 100644 index eddc6c4a20..0000000000 --- a/source4/librpc/rpc/table.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - dcerpc utility functions - - Copyright (C) Andrew Tridgell 2003 - Copyright (C) Jelmer Vernooij 2004 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "includes.h" -#include "lib/util/dlinklist.h" -#include "librpc/rpc/dcerpc.h" -#include "librpc/rpc/dcerpc_table.h" - -struct ndr_interface_list *dcerpc_pipes = NULL; - -/* - register a dcerpc client interface -*/ -NTSTATUS librpc_register_interface(const struct ndr_interface_table *interface) -{ - struct ndr_interface_list *l; - - for (l = dcerpc_pipes; l; l = l->next) { - if (GUID_equal(&interface->syntax_id.uuid, &l->table->syntax_id.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 ndr_interface_list); - l->table = interface; - - DLIST_ADD(dcerpc_pipes, l); - - return NT_STATUS_OK; -} - -/* - find the pipe name for a local IDL interface -*/ -const char *idl_pipe_name(const struct GUID *uuid, uint32_t if_version) -{ - const struct ndr_interface_list *l; - for (l=librpc_dcerpc_pipes();l;l=l->next) { - if (GUID_equal(&l->table->syntax_id.uuid, uuid) && - l->table->syntax_id.if_version == if_version) { - return l->table->name; - } - } - return "UNKNOWN"; -} - -/* - find the number of calls defined by local IDL -*/ -int idl_num_calls(const struct GUID *uuid, uint32_t if_version) -{ - const struct ndr_interface_list *l; - for (l=librpc_dcerpc_pipes();l;l=l->next){ - if (GUID_equal(&l->table->syntax_id.uuid, uuid) && - l->table->syntax_id.if_version == if_version) { - return l->table->num_calls; - } - } - return -1; -} - - -/* - find a dcerpc interface by name -*/ -const struct ndr_interface_table *idl_iface_by_name(const char *name) -{ - const struct ndr_interface_list *l; - for (l=librpc_dcerpc_pipes();l;l=l->next) { - if (strcasecmp(l->table->name, name) == 0) { - return l->table; - } - } - return NULL; -} - -/* - find a dcerpc interface by uuid -*/ -const struct ndr_interface_table *idl_iface_by_uuid(const struct GUID *uuid) -{ - const struct ndr_interface_list *l; - for (l=librpc_dcerpc_pipes();l;l=l->next) { - if (GUID_equal(&l->table->syntax_id.uuid, uuid)) { - return l->table; - } - } - return NULL; -} - -/* - return the list of registered dcerpc_pipes -*/ -const struct ndr_interface_list *librpc_dcerpc_pipes(void) -{ - return dcerpc_pipes; -} - - -NTSTATUS dcerpc_register_builtin_interfaces(void); - -NTSTATUS ndr_table_init(void) -{ - static BOOL initialized = False; - - if (initialized) return NT_STATUS_OK; - initialized = True; - - dcerpc_register_builtin_interfaces(); - - return NT_STATUS_OK; -} diff --git a/source4/librpc/tables.pl b/source4/librpc/tables.pl index 946159c6f0..04764f5fa0 100644 --- a/source4/librpc/tables.pl +++ b/source4/librpc/tables.pl @@ -20,7 +20,7 @@ my $opt_help = 0; sub ShowHelp() { print " - perl DCE/RPC interface table generator + perl NDR interface table generator Copyright (C) tridge\@samba.org Usage: tables.pl [options] @@ -53,7 +53,7 @@ sub process_file($) while (my $line = ) { if ($line =~ /extern const struct ndr_interface_table (\w+);/) { $found = 1; - $init_fns.="\tstatus = librpc_register_interface(&$1);\n"; + $init_fns.="\tstatus = ndr_table_register(&$1);\n"; $init_fns.="\tif (NT_STATUS_IS_ERR(status)) return status;\n\n"; } } @@ -70,15 +70,15 @@ print <next) { + for (l=ndr_table_list();l;l=l->next) { if(l->table->helpstring) { printf("\t%s - %s\n", l->table->name, l->table->helpstring); } else { @@ -218,7 +218,7 @@ const struct ndr_interface_table *load_iface_from_plugin(const char *plugin, con } #else if (!p) { - p = idl_iface_by_name(pipe_name); + p = ndr_table_by_name(pipe_name); } if (!p) { @@ -227,7 +227,7 @@ const struct ndr_interface_table *load_iface_from_plugin(const char *plugin, con status = GUID_from_string(pipe_name, &uuid); if (NT_STATUS_IS_OK(status)) { - p = idl_iface_by_uuid(&uuid); + p = ndr_table_by_uuid(&uuid); } } #endif diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c index e494c3644a..6ddffa1d6c 100644 --- a/source4/rpc_server/remote/dcesrv_remote.c +++ b/source4/rpc_server/remote/dcesrv_remote.c @@ -22,7 +22,7 @@ #include "rpc_server/dcerpc_server.h" #include "auth/auth.h" #include "auth/credentials/credentials.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" struct dcesrv_remote_private { @@ -63,7 +63,7 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct pass = lp_parm_string(-1, "dcerpc_remote", "password"); domain = lp_parm_string(-1, "dceprc_remote", "domain"); - table = idl_iface_by_uuid(&iface->syntax_id.uuid); /* FIXME: What about if_version ? */ + table = ndr_table_by_uuid(&iface->syntax_id.uuid); /* FIXME: What about if_version ? */ if (!table) { dce_call->fault_code = DCERPC_FAULT_UNK_IF; return NT_STATUS_NET_WRITE_FAULT; @@ -274,7 +274,7 @@ static BOOL remote_op_interface_by_uuid(struct dcesrv_interface *iface, const st { const struct ndr_interface_list *l; - for (l=librpc_dcerpc_pipes();l;l=l->next) { + for (l=ndr_table_list();l;l=l->next) { if (l->table->syntax_id.if_version == if_version && GUID_equal(&l->table->syntax_id.uuid, uuid)==0) { return remote_fill_interface(iface, l->table); @@ -286,7 +286,7 @@ static BOOL remote_op_interface_by_uuid(struct dcesrv_interface *iface, const st static BOOL remote_op_interface_by_name(struct dcesrv_interface *iface, const char *name) { - const struct ndr_interface_table *tbl = idl_iface_by_name(name); + const struct ndr_interface_table *tbl = ndr_table_by_name(name); if (tbl) return remote_fill_interface(iface, tbl); diff --git a/source4/scripting/ejs/smbcalls_rpc.c b/source4/scripting/ejs/smbcalls_rpc.c index aa4be7aa4a..4addd473da 100644 --- a/source4/scripting/ejs/smbcalls_rpc.c +++ b/source4/scripting/ejs/smbcalls_rpc.c @@ -28,7 +28,7 @@ #include "scripting/ejs/ejsrpc.h" #include "lib/util/dlinklist.h" #include "lib/events/events.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "auth/credentials/credentials.h" #include "librpc/rpc/dcerpc.h" #include "cluster/cluster.h" @@ -136,7 +136,7 @@ static int ejs_rpc_connect(MprVarHandle eid, int argc, char **argv) pipe_name = mprToString(mprGetProperty(this, "pipe_name", NULL)); } - iface = idl_iface_by_name(pipe_name); + iface = ndr_table_by_name(pipe_name); if (iface == NULL) { status = NT_STATUS_OBJECT_NAME_INVALID; goto done; diff --git a/source4/torture/rpc/autoidl.c b/source4/torture/rpc/autoidl.c index d6011265e7..76d838517c 100644 --- a/source4/torture/rpc/autoidl.c +++ b/source4/torture/rpc/autoidl.c @@ -23,7 +23,7 @@ #include "torture/torture.h" #include "librpc/gen_ndr/ndr_drsuapi_c.h" #include "librpc/gen_ndr/ndr_misc.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "torture/rpc/rpc.h" @@ -264,7 +264,7 @@ BOOL torture_rpc_autoidl(struct torture_context *torture) TALLOC_CTX *mem_ctx; const struct ndr_interface_table *iface; - iface = idl_iface_by_name("drsuapi"); + iface = ndr_table_by_name("drsuapi"); if (!iface) { printf("Unknown interface!\n"); return False; diff --git a/source4/torture/rpc/countcalls.c b/source4/torture/rpc/countcalls.c index e400fcdbe3..e2e222d2ec 100644 --- a/source4/torture/rpc/countcalls.c +++ b/source4/torture/rpc/countcalls.c @@ -22,8 +22,8 @@ #include "includes.h" #include "torture/torture.h" -#include "librpc/rpc/dcerpc.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/libndr.h" +#include "librpc/ndr/ndr_table.h" #include "torture/rpc/rpc.h" @@ -112,7 +112,7 @@ BOOL torture_rpc_countcalls(struct torture_context *torture) } iface_name = lp_parm_string(-1, "countcalls", "interface"); if (iface_name != NULL) { - iface = idl_iface_by_name(iface_name); + iface = ndr_table_by_name(iface_name); if (!iface) { printf("Unknown interface '%s'\n", iface_name); return False; @@ -120,7 +120,7 @@ BOOL torture_rpc_countcalls(struct torture_context *torture) return count_calls(mem_ctx, iface, False); } - for (l=librpc_dcerpc_pipes();l;l=l->next) { + for (l=ndr_table_list();l;l=l->next) { TALLOC_CTX *loop_ctx; loop_ctx = talloc_named(mem_ctx, 0, "torture_rpc_councalls loop context"); ret &= count_calls(loop_ctx, l->table, True); diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c index ca4520e856..b4e5b97679 100644 --- a/source4/torture/rpc/epmapper.c +++ b/source4/torture/rpc/epmapper.c @@ -21,7 +21,7 @@ #include "includes.h" #include "torture/torture.h" #include "librpc/gen_ndr/ndr_epmapper_c.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "torture/rpc/rpc.h" @@ -63,7 +63,7 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, dcerpc_floor_get_lhs_data(&twr->tower.floors[0], &syntax); printf("epm_Map results for '%s':\n", - idl_pipe_name(&syntax.uuid, syntax.if_version)); + ndr_interface_name(&syntax.uuid, syntax.if_version)); twr->tower.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN; twr->tower.floors[2].lhs.lhs_data = data_blob(NULL, 0); diff --git a/source4/torture/rpc/mgmt.c b/source4/torture/rpc/mgmt.c index 475e933bd2..5604b87c6e 100644 --- a/source4/torture/rpc/mgmt.c +++ b/source4/torture/rpc/mgmt.c @@ -22,7 +22,7 @@ #include "torture/torture.h" #include "librpc/gen_ndr/ndr_mgmt_c.h" #include "auth/gensec/gensec.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "torture/rpc/rpc.h" @@ -65,7 +65,8 @@ BOOL test_inq_if_ids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, printf("\tuuid %s version 0x%08x '%s'\n", GUID_string(mem_ctx, &id->uuid), - id->if_version, idl_pipe_name(&id->uuid, id->if_version)); + id->if_version, + ndr_interface_name(&id->uuid, id->if_version)); if (per_id_test) { per_id_test(priv, mem_ctx, id); @@ -211,7 +212,7 @@ BOOL torture_rpc_mgmt(struct torture_context *torture) return False; } - for (l=librpc_dcerpc_pipes();l;l=l->next) { + for (l=ndr_table_list();l;l=l->next) { loop_ctx = talloc_named(mem_ctx, 0, "torture_rpc_mgmt loop context"); /* some interfaces are not mappable */ diff --git a/source4/torture/rpc/rpc.c b/source4/torture/rpc/rpc.c index 92baca7ee0..250945a8a2 100644 --- a/source4/torture/rpc/rpc.c +++ b/source4/torture/rpc/rpc.c @@ -24,7 +24,7 @@ #include "librpc/rpc/dcerpc.h" #include "torture/rpc/rpc.h" #include "torture/torture.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "lib/util/dlinklist.h" /* open a rpc connection to the chosen binding string */ diff --git a/source4/torture/rpc/scanner.c b/source4/torture/rpc/scanner.c index b60d325c7c..1f74b8b1cf 100644 --- a/source4/torture/rpc/scanner.c +++ b/source4/torture/rpc/scanner.c @@ -22,7 +22,7 @@ #include "includes.h" #include "torture/torture.h" #include "librpc/gen_ndr/ndr_mgmt_c.h" -#include "librpc/rpc/dcerpc_table.h" +#include "librpc/ndr/ndr_table.h" #include "torture/rpc/rpc.h" /* @@ -76,7 +76,7 @@ static BOOL test_num_calls(const struct ndr_interface_table *iface, } printf("\t%d calls available\n", i); - idl_calls = idl_num_calls(&id->uuid, id->if_version); + idl_calls = ndr_interface_num_calls(&id->uuid, id->if_version); if (idl_calls == -1) { printf("\tinterface not known in local IDL\n"); } else if (i != idl_calls) { @@ -117,7 +117,7 @@ BOOL torture_rpc_scanner(struct torture_context *torture) return False; } - for (l=librpc_dcerpc_pipes();l;l=l->next) { + for (l=ndr_table_list();l;l=l->next) { loop_ctx = talloc_named(mem_ctx, 0, "torture_rpc_scanner loop context"); /* some interfaces are not mappable */ if (l->table->num_calls == 0 || -- cgit