r3630: More work on DCOM server side
authorJelmer Vernooij <jelmer@samba.org>
Tue, 9 Nov 2004 01:04:29 +0000 (01:04 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:40 +0000 (13:05 -0500)
source/libcli/auth/gensec_ntlmssp.c
source/param/loadparm.c
source/rpc_server/dcerpc_server.c
source/rpc_server/dcom/remact.c
source/rpc_server/dcom/rot.c

index 8ab90ebcfb252f3216904dc18801818be35d3aee..c033705f10f9d839aa91a6c7dd7b3dfc9b6aaaf8 100644 (file)
@@ -442,8 +442,5 @@ NTSTATUS gensec_ntlmssp_init(void)
                return ret;
        }
 
-       /* ugly cludge, but we need the auth subsystem for this to work */
-       auth_init();
-
        return ret;
 }
index bbdf835e95358635d97709d739a304401e6342f1..f823c320916ce73e8a73aac23e2fa9aed90bba7c 100644 (file)
@@ -928,7 +928,7 @@ static void init_globals(void)
        do_parameter("fstype", FSTYPE_STRING);
        do_parameter("ntvfs handler", "unixuid default");
 
-       do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg");
+       do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg IOXIDResolver IRemoteActivation");
        do_parameter("server services", "smb rpc");
        do_parameter("auth methods", "guest sam_ignoredomain");
        do_parameter("smb passwd file", dyn_SMB_PASSWD_FILE);
index 70b7d18f3982885b57a78606c754a2efefcfebae..83c0872ba77acf03a570a8f1c444074ddfa463bd 100644 (file)
@@ -595,6 +595,10 @@ static NTSTATUS dcesrv_request(struct dcesrv_call_state *call)
                return NT_STATUS_NO_MEMORY;
        }
 
+       if (call->pkt.pfc_flags & DCERPC_PFC_FLAG_ORPC) {
+               pull->flags |= LIBNDR_FLAG_OBJECT_PRESENT;
+       }
+
        r = talloc(call, call->conn->iface->ndr->calls[opnum].struct_size);
        if (!r) {
                return NT_STATUS_NO_MEMORY;
index 086d32a82f3b1adcd5032385bcf2891e593699e6..0ec1ea5a5122f197314bc73a1c491ff0c028ef5b 100644 (file)
@@ -38,6 +38,7 @@ struct dcom_interface_pointer *dcom_interface_pointer_by_ipid(struct GUID *ipid)
 */
 static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct RemoteActivation *r)
 {
+       int i;
        /* FIXME: CoGetClassObject() */
        /* FIXME: IClassFactory::CreateInstance() */
        /* FIXME: Register newly created object with dcerpc subsystem */
@@ -47,16 +48,35 @@ static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
        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;
+       r->out.AuthnHint = DCERPC_AUTH_LEVEL_DEFAULT;
+       r->out.pdsaOxidBindings = dcom_server_generate_dual_string(mem_ctx, dce_call);
+       
        /* FIXME: Loop thru given interfaces and set r->out.results and 
         * r->out.interfaces */
+       r->out.ifaces = talloc_array_p(mem_ctx, struct pMInterfacePointer, r->in.Interfaces);
+       r->out.results = talloc_array_p(mem_ctx, WERROR, r->in.Interfaces);
+       for (i = 0; i < r->in.Interfaces; i++) {
+                       ZERO_STRUCT(r->out.ifaces[i]);  
+                       r->out.results[i] = WERR_NOT_SUPPORTED;
+       }
+
+       /* FIXME: */
+       r->out.pOxid = 0;
+       ZERO_STRUCT(r->out.ipidRemUnknown);
+       r->out.hr = WERR_NOT_SUPPORTED;
        
        return WERR_NOT_SUPPORTED;
 }
 
+
+static NTSTATUS register_dcom_class(const void *_c)
+{
+       const struct dcom_class *class = _c;
+       /* FIXME */
+
+       return NT_STATUS_NOT_SUPPORTED;
+}
+
 NTSTATUS dcerpc_server_dcom_init(void)
 {
        NTSTATUS status;
@@ -70,6 +90,11 @@ NTSTATUS dcerpc_server_dcom_init(void)
                return status;
        }
 
+       status = register_subsystem("dcom", register_dcom_class);
+       if (NT_STATUS_IS_ERR(status)) {
+               return status;
+       }
+
        return NT_STATUS_OK;
 }
 
index f55ff59af44f7fe975da0eb98a1e8a2b51ed13a1..eb19aa0501409eefe861759aa046265d5425baa5 100644 (file)
 #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 */
@@ -44,3 +37,15 @@ struct dcom_class *dcom_class_by_clsid(struct GUID *clsid)
        return NULL;
 }
 
+struct dcom_object *dcom_call_get_object(struct dcesrv_call_state *call)
+{
+       struct GUID *object;
+
+       if (! (call->pkt.pfc_flags & DCERPC_PFC_FLAG_ORPC) ) {
+               return NULL;
+       }
+       
+       object = &call->pkt.u.request.object.object;
+       /* FIXME */
+       return NULL; 
+}