summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-11-02 17:09:06 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:21 -0500
commit7573366629ce719471729587b918ccff71f5413d (patch)
tree088208f32bd19888fd0843d7fff39ea6397cecad
parentc1f9a94eba2b77dee91aa10997f117b31af12c38 (diff)
downloadsamba-7573366629ce719471729587b918ccff71f5413d.tar.gz
samba-7573366629ce719471729587b918ccff71f5413d.tar.bz2
samba-7573366629ce719471729587b918ccff71f5413d.zip
r3488: Start using RemoteActivation
(This used to be commit b4e81ffc648d30c4c501b168d5e2e562941648ac)
-rw-r--r--source4/lib/dcom/common/main.c92
-rw-r--r--source4/lib/dcom/config.mk2
-rw-r--r--source4/lib/dcom/main.c65
-rw-r--r--source4/lib/dcom/procedure8
4 files changed, 93 insertions, 74 deletions
diff --git a/source4/lib/dcom/common/main.c b/source4/lib/dcom/common/main.c
new file mode 100644
index 0000000000..a490c32c14
--- /dev/null
+++ b/source4/lib/dcom/common/main.c
@@ -0,0 +1,92 @@
+/*
+ Unix SMB/CIFS implementation.
+ Main DCOM functionality
+ Copyright (C) 2004 Jelmer Vernooij <jelmer@samba.org>
+
+ 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_epmapper.h"
+#include "librpc/gen_ndr/ndr_remact.h"
+
+static WERROR dcom_binding_from_oxid(TALLOC_CTX *mem_ctx, HYPER_T oxid, struct dcerpc_binding *bd)
+{
+ /* FIXME */
+ return WERR_NOT_SUPPORTED;
+}
+
+static WERROR dcom_tower_from_oxid(TALLOC_CTX *mem_ctx, HYPER_T oxid, struct epm_tower *bd)
+{
+ /* FIXME */
+ return WERR_NOT_SUPPORTED;
+}
+
+static WERROR dcom_get_class_object (struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct GUID clsid)
+{
+ struct RemoteActivation r;
+ NTSTATUS status;
+ struct GUID iids[2];
+ uint16 protseq[3] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_UUID };
+
+ ZERO_STRUCT(r.in);
+ r.in.this.version.MajorVersion = 5;
+ r.in.this.version.MinorVersion = 1;
+ uuid_generate_random(&r.in.this.cid);
+ r.in.Clsid = clsid;
+ r.in.ClientImpLevel = RPC_C_IMP_LEVEL_IDENTIFY;
+ r.in.num_protseqs = 3;
+ r.in.protseq = protseq;
+ r.in.Interfaces = 1;
+ GUID_from_string(DCERPC_IUNKNOWN_UUID, &iids[0]);
+ r.in.pIIDs = iids;
+ r.in.Mode = MODE_GET_CLASS_OBJECT;
+
+ status = dcerpc_RemoteActivation(p, mem_ctx, &r);
+ if(NT_STATUS_IS_ERR(status)) {
+ fprintf(stderr, "RemoteActivation: %s\n", nt_errstr(status));
+ return ntstatus_to_werror(status);
+ }
+
+ if(!W_ERROR_IS_OK(r.out.result)) { return r.out.result; }
+ if(!W_ERROR_IS_OK(r.out.hr)) { return r.out.hr; }
+ if(!W_ERROR_IS_OK(r.out.results[0])) { return r.out.results[0]; }
+
+ return WERR_OK;
+}
+
+static WERROR dcom_create_instance (struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct GUID clsid)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
+static uint32 IUnknown_AddRef(void)
+{
+ /* FIXME: Tell local server we're adding a reference to this interface on this object. Local server can then call RemAddRef() if necessary */
+ return 0;
+}
+
+static uint32 IUnknown_Release(void)
+{
+ /* FIXME: Tell local server we're releasing a reference to this interface on this object. Local server can then call RemRelease() if necessary */
+ return 0;
+}
+
+static WERROR IUnknown_QueryInterface(struct GUID *riid, void **data)
+{
+ /* FIXME: Ask local server for interface pointer. Local server can then
+ * call RemQueryInterface if necessary */
+ return WERR_NOT_SUPPORTED;
+}
diff --git a/source4/lib/dcom/config.mk b/source4/lib/dcom/config.mk
index ef7cbf40c8..98b7031407 100644
--- a/source4/lib/dcom/config.mk
+++ b/source4/lib/dcom/config.mk
@@ -2,7 +2,7 @@
# Start SUBSYSTEM LIBDCOM
[SUBSYSTEM::LIBDCOM]
INIT_OBJ_FILES = \
- lib/dcom/main.o
+ lib/dcom/common/main.o
#
# End SUBSYSTEM LIBDCOM
################################################
diff --git a/source4/lib/dcom/main.c b/source4/lib/dcom/main.c
deleted file mode 100644
index 515322e27a..0000000000
--- a/source4/lib/dcom/main.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- Main DCOM functionality
- Copyright (C) 2004 Jelmer Vernooij <jelmer@samba.org>
-
- 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"
-
-void CoInitializeEx(void *reserved, uint32 thread_options)
-{
- /* FIXME */
-}
-
-void CoInitialize(void *reserved)
-{
- CoInitializeEx(reserved, 0);
-}
-
-void CoUnitialize(void)
-{
- /* FIXME */
-}
-
-void CoRegisterClassObject(void)
-{
- /* FIXME */
-}
-
-void CoUnregisterClassObject(void)
-{
- /* FIXME */
-}
-
-void CoCreateInstanceEx(struct GUID *clsid, void *iface, uint32 context, struct COSERVERINFO *pcsi, uint32 num, struct MULTI_QI *results)
-{
- /* FIXME: Connect to remote server and :*/
-
- /* FIXME: Call RemoteActivation() */
- /* FIXME: Call ServerAlive() on IOXIDResolver */
-
-}
-
-void CoCreateInstance(void)
-{
- CoCreateInstanceEx(/*FIXME*/);
-}
-
-void CoRegisterClassObject(void)
-{
- /* FIXME */
-}
diff --git a/source4/lib/dcom/procedure b/source4/lib/dcom/procedure
deleted file mode 100644
index dc89d00bb2..0000000000
--- a/source4/lib/dcom/procedure
+++ /dev/null
@@ -1,8 +0,0 @@
-Required infrastructure:
- - CoCreateInstance function
- - Proxy and Stub (class ?)
-
-
- - Bind to IOXIDResolver
- - ServerAlive2()
- - Bind to ISystemActivator