1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r3630: More work on DCOM server side

This commit is contained in:
Jelmer Vernooij 2004-11-09 01:04:29 +00:00 committed by Gerald (Jerry) Carter
parent e7b67ff22f
commit e995a1c0e5
5 changed files with 46 additions and 15 deletions

View 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;
}

View 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);

View 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;

View 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;
}

View File

@ -25,13 +25,6 @@
#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;
}