diff options
Diffstat (limited to 'source4/rpc_server/dcom/remact.c')
-rw-r--r-- | source4/rpc_server/dcom/remact.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/source4/rpc_server/dcom/remact.c b/source4/rpc_server/dcom/remact.c index 086d32a82f..0ec1ea5a51 100644 --- a/source4/rpc_server/dcom/remact.c +++ b/source4/rpc_server/dcom/remact.c @@ -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; } |