http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm
*/
-#define IPID GUID
-
[
uuid("4d9f4ab8-7d1c-11cf-861e-0020af6e7c57"),
pointer_default(unique),
[in, size_is(num_protseqs)] uint16 protseq[],
[out] HYPER_T pOxid,
[out] DUALSTRINGARRAY *pdsaOxidBindings,
- [out] IPID ipidRemUnknown,
+ [out] GUID ipidRemUnknown,
[out] uint32 AuthnHint,
[out] COMVERSION ServerVersion,
[out] WERROR hr,
SMB_MODULE_MK(dcerpc_netlogon,DCERPC,STATIC,rpc_server/config.mk)
SMB_MODULE_MK(dcerpc_lsarpc,DCERPC,STATIC,rpc_server/config.mk)
SMB_MODULE_MK(dcerpc_spoolss,DCERPC,STATIC,rpc_server/config.mk)
-SMB_MODULE_MK(dcerpc_IOXIDResolver,DCERPC,STATIC,rpc_server/config.mk)
-SMB_MODULE_MK(dcerpc_IRemoteActivation,DCERPC,STATIC,rpc_server/config.mk)
+SMB_MODULE_MK(dcerpc_dcom,DCERPC,STATIC,rpc_server/config.mk)
SMB_MODULE_MK(dcerpc_drsuapi,DCERPC,STATIC,rpc_server/config.mk)
SMB_SUBSYSTEM_MK(DCERPC,rpc_server/config.mk)
################################################
################################################
-# Start MODULE dcerpc_IOXIDResolver
-[MODULE::dcerpc_IOXIDResolver]
-INIT_FUNCTION = dcerpc_server_IOXIDResolver_init
-INIT_OBJ_FILES = \
- rpc_server/dcom/oxidresolver.o
-REQUIRED_SUBSYSTEMS = \
- DCERPC_COMMON
-# End MODULE dcerpc_IOXIDResolver
-################################################
-
-################################################
-# Start MODULE dcerpc_IRemoteActivation
-[MODULE::dcerpc_IRemoteActivation]
-INIT_FUNCTION = dcerpc_server_IRemoteActivation_init
+# Start MODULE dcerpc_DCOM
+[MODULE::dcerpc_dcom]
+INIT_FUNCTION = dcerpc_server_dcom_init
INIT_OBJ_FILES = \
+ rpc_server/dcom/oxidresolver.o \
+ rpc_server/dcom/rot.o \
rpc_server/dcom/remact.o
REQUIRED_SUBSYSTEMS = \
DCERPC_COMMON
*/
static WERROR ResolveOxid2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ResolveOxid2 *r)
{
+ ZERO_STRUCT(r->out);
+ r->out.ComVersion.MajorVersion = COM_MAJOR_VERSION;
+ r->out.ComVersion.MinorVersion = COM_MINOR_VERSION;
return WERR_NOT_SUPPORTED;
}
+struct DUALSTRINGARRAY *dcom_server_generate_dual_string(TALLOC_CTX *mem_ctx, struct dcesrv_call_state *state)
+{
+ return NULL; /* FIXME */
+}
/*
ServerAlive2
*/
static WERROR ServerAlive2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ServerAlive2 *r)
{
- return WERR_NOT_SUPPORTED;
+ ZERO_STRUCT(r->out);
+ r->out.info.version.MajorVersion = COM_MAJOR_VERSION;
+ r->out.info.version.MinorVersion = COM_MINOR_VERSION;
+ r->out.dualstring = *dcom_server_generate_dual_string(mem_ctx, dce_call);
+ return WERR_OK;
}
-/* FIXME: Regularly ping objects in use by local programs on
- * remote servers */
-
+/* FIXME: Garbage collect objects that haven't been pinged */
/* include the generated boilerplate */
#include "librpc/gen_ndr/ndr_oxidresolver_s.c"
#include "rpc_server/dcerpc_server.h"
#include "rpc_server/common/common.h"
#include "librpc/gen_ndr/ndr_remact.h"
+#include "librpc/gen_ndr/ndr_oxidresolver.h"
#include "rpc_server/dcom/dcom.h"
-static void register_dcom_class(void *_c)
-{
- struct dcom_class *class = _c;
- /* FIXME */
-}
-
-struct dcom_object *dcom_object_by_oid(struct GUID *oid)
-{
- /* FIXME */
- return NULL;
-}
-
-struct dcom_class *dcom_class_by_clsid(struct GUID *clsid)
-{
- /* FIXME */
- return NULL;
-}
-
struct dcom_interface_pointer *dcom_interface_pointer_by_ipid(struct GUID *ipid)
{
/* FIXME */
{
/* FIXME: CoGetClassObject() */
/* FIXME: IClassFactory::CreateInstance() */
+ /* FIXME: Register newly created object with dcerpc subsystem */
/* FIXME: IClassFactory::Release() */
+
+ ZERO_STRUCT(r->out);
+ r->out.ServerVersion.MajorVersion = COM_MAJOR_VERSION;
+ r->out.ServerVersion.MinorVersion = COM_MINOR_VERSION;
+
+ /* FIXME: */
+ r->out.hr = WERR_NOT_SUPPORTED;
+ r->out.pOxid = 0;
+ r->out.AuthnHint = 0;
+ /* FIXME: Loop thru given interfaces and set r->out.results and
+ * r->out.interfaces */
+
return WERR_NOT_SUPPORTED;
}
+NTSTATUS dcerpc_server_dcom_init(void)
+{
+ NTSTATUS status;
+ status = dcerpc_server_IOXIDResolver_init();
+ if (NT_STATUS_IS_ERR(status)) {
+ return status;
+ }
+
+ status = dcerpc_server_IRemoteActivation_init();
+ if (NT_STATUS_IS_ERR(status)) {
+ return status;
+ }
+
+ return NT_STATUS_OK;
+}
/* include the generated boilerplate */
#include "librpc/gen_ndr/ndr_remact_s.c"
--- /dev/null
+/*
+ Unix SMB/CIFS implementation.
+
+ Running object table functions
+
+ 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 "rpc_server/dcerpc_server.h"
+#include "rpc_server/common/common.h"
+#include "rpc_server/dcom/dcom.h"
+
+
+static void register_dcom_class(void *_c)
+{
+ struct dcom_class *class = _c;
+ /* FIXME */
+}
+
+struct dcom_object *dcom_object_by_oid(struct GUID *oid)
+{
+ /* FIXME */
+ return NULL;
+}
+
+struct dcom_class *dcom_class_by_clsid(struct GUID *clsid)
+{
+ /* FIXME */
+ return NULL;
+}
+