From d53fd3d8d5c99ae22a4d74065dc45e2f4e36a382 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 20 Nov 2004 18:51:58 +0000 Subject: r3891: Add rot (Running Object Table) interface (This used to be commit 4840eaeed3cfd72026babb382f26929c29702713) --- source4/lib/dcom/common/rot.c | 1 + source4/librpc/config.mk | 13 +++++++++++- source4/librpc/idl/rot.idl | 43 ++++++++++++++++++++++++++++++++++++++++ source4/rpc_server/config.mk | 3 ++- source4/torture/config.mk | 3 ++- source4/torture/rpc/rot.c | 46 +++++++++++++++++++++++++++++++++++++++++++ source4/torture/torture.c | 1 + source4/utils/ndrdump.c | 5 +++++ 8 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 source4/librpc/idl/rot.idl create mode 100644 source4/torture/rpc/rot.c diff --git a/source4/lib/dcom/common/rot.c b/source4/lib/dcom/common/rot.c index 291022f925..95f83d000c 100644 --- a/source4/lib/dcom/common/rot.c +++ b/source4/lib/dcom/common/rot.c @@ -22,6 +22,7 @@ #include "includes.h" + struct dcom_interface_p *dcom_get_iface_p(struct GUID *ipid) { /* FIXME */ diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 276a146a94..82df55275e 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -72,6 +72,12 @@ INIT_OBJ_FILES = librpc/gen_ndr/ndr_misc.o NOPROTO = YES REQUIRED_SUBSYSTEMS = LIBNDR +[SUBSYSTEM::NDR_ROT] +INIT_FUNCTION = dcerpc_rot_init +INIT_OBJ_FILES = librpc/gen_ndr/ndr_rot.o +NOPROTO = YES +REQUIRED_SUBSYSTEMS = LIBNDR + [SUBSYSTEM::NDR_LSA] INIT_FUNCTION = dcerpc_lsa_init INIT_OBJ_FILES = librpc/gen_ndr/ndr_lsa.o @@ -289,8 +295,13 @@ REQUIRED_SUBSYSTEMS = NDR_AUDIOSRV NDR_ECHO NDR_DCERPC NDR_EXCHANGE \ NDR_EVENTLOG NDR_EPMAPPER NDR_DBGIDL NDR_DSSETUP NDR_MSGSVC NDR_WINS \ NDR_WINREG NDR_MGMT NDR_PROTECTED_STORAGE NDR_DCOM NDR_OXIDRESOLVER \ NDR_REMACT NDR_WZCSVC NDR_BROWSER NDR_W32TIME NDR_SCERPC NDR_NTSVCS \ - NDR_NETLOGON NDR_TRKWKS NDR_KEYSVC NDR_KRB5PAC NDR_XATTR NDR_SCHANNEL + NDR_NETLOGON NDR_TRKWKS NDR_KEYSVC NDR_KRB5PAC NDR_XATTR NDR_SCHANNEL \ + NDR_ROT +[SUBSYSTEM::RPC_NDR_ROT] +ADD_OBJ_FILES = librpc/gen_ndr/ndr_rot_c.o +REQUIRED_SUBSYSTEMS = NDR_ROT LIBRPC +NOPROTO = YES [SUBSYSTEM::RPC_NDR_AUDIOSRV] ADD_OBJ_FILES = librpc/gen_ndr/ndr_audiosrv_c.o diff --git a/source4/librpc/idl/rot.idl b/source4/librpc/idl/rot.idl new file mode 100644 index 0000000000..d9a67ecbe1 --- /dev/null +++ b/source4/librpc/idl/rot.idl @@ -0,0 +1,43 @@ +#include "idl_types.h" + +[ + uuid("b9e79e60-3d52-11ce-aaa1-00006901293f"), + version(0.2), + endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", + "ncalrpc:[EPMAPPER]", "ncacn_unix_stream:[/tmp/epmapper]") +] interface rot +{ + WERROR rot_add ( + [in] uint32 flags, + [in] MInterfacePointer *unk, + [in] MInterfacePointer *moniker, + [out] uint32 rotid + ); + + WERROR rot_remove ( + [in] uint32 rotid + ); + + WERROR rot_is_listed ( + [in] MInterfacePointer *moniker + ); + + WERROR rot_get_interface_pointer ( + [in] MInterfacePointer *moniker, + [out] MInterfacePointer *ip + ); + + WERROR rot_set_modification_time ( + [in] uint32 rotid, + [in] NTTIME *t + ); + + WERROR rot_get_modification_time ( + [in] MInterfacePointer *moniker, + [out] NTTIME t + ); + + WERROR rot_enum ( + [out] MInterfacePointer *EnumMoniker + ); +} diff --git a/source4/rpc_server/config.mk b/source4/rpc_server/config.mk index 34e1f4c62c..58f842add0 100644 --- a/source4/rpc_server/config.mk +++ b/source4/rpc_server/config.mk @@ -19,7 +19,8 @@ SUBSYSTEM = DCERPC INIT_OBJ_FILES = \ rpc_server/dcom/oxidresolver.o \ rpc_server/dcom/rot.o \ - rpc_server/dcom/remact.o + rpc_server/dcom/remact.o \ + librpc/gen_ndr/ndr_dcom_d.o REQUIRED_SUBSYSTEMS = \ DCERPC_COMMON \ NDR_OXIDRESOLVER \ diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 17e8556ff1..41f394a67c 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -95,13 +95,14 @@ ADD_OBJ_FILES = \ torture/rpc/netlogon.o \ torture/rpc/samlogon.o \ torture/rpc/samsync.o \ + torture/rpc/rot.o \ torture/rpc/bind.o REQUIRED_SUBSYSTEMS = \ NDR_ALL RPC_NDR_SAMR RPC_NDR_WINREG RPC_NDR_OXIDRESOLVER \ RPC_NDR_EVENTLOG RPC_NDR_ECHO RPC_NDR_SVCCTL \ RPC_NDR_MGMT RPC_NDR_NETLOGON RPC_NDR_ATSVC RPC_NDR_DRSUAPI \ RPC_NDR_LSA RPC_NDR_EPMAPPER RPC_NDR_DFS RPC_NDR_SPOOLSS \ - RPC_NDR_SRVSVC RPC_NDR_WKSSVC + RPC_NDR_SRVSVC RPC_NDR_WKSSVC RPC_NDR_ROT # End SUBSYSTEM TORTURE_RPC ################################# diff --git a/source4/torture/rpc/rot.c b/source4/torture/rpc/rot.c new file mode 100644 index 0000000000..d2e3742cf0 --- /dev/null +++ b/source4/torture/rpc/rot.c @@ -0,0 +1,46 @@ +/* + Unix SMB/CIFS implementation. + test suite for the running object table + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "librpc/gen_ndr/ndr_rot.h" + +BOOL torture_rpc_rot(void) +{ + NTSTATUS status; + struct dcerpc_pipe *p; + TALLOC_CTX *mem_ctx; + BOOL ret = True; + + mem_ctx = talloc_init("torture_rpc_rot"); + + status = torture_rpc_connection(&p, + DCERPC_ROT_NAME, + DCERPC_ROT_UUID, + DCERPC_ROT_VERSION); + + if (!NT_STATUS_IS_OK(status)) { + return False; + } + + torture_rpc_close(p); + + return ret; +} diff --git a/source4/torture/torture.c b/source4/torture/torture.c index 09f7c65f04..7d309f3741 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -2461,6 +2461,7 @@ static struct { {"RPC-MULTIBIND", torture_multi_bind, 0}, {"RPC-DRSUAPI", torture_rpc_drsuapi, 0}, {"RPC-LOGIN", torture_rpc_login, 0}, + {"RPC-ROT", torture_rpc_rot, 0}, /* Distributed COM testers */ {"DCOM-SIMPLE", torture_dcom_simple, 0}, diff --git a/source4/utils/ndrdump.c b/source4/utils/ndrdump.c index 809e6729cc..86513e4efb 100644 --- a/source4/utils/ndrdump.c +++ b/source4/utils/ndrdump.c @@ -116,6 +116,11 @@ static void show_functions(const struct dcerpc_interface_table *p) p = idl_iface_by_name(pipe_name); + if (!p) { + printf("Unknown pipe '%s'\n", pipe_name); + exit(1); + } + function = poptGetArg(pc); inout = poptGetArg(pc); filename = poptGetArg(pc); -- cgit