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);
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;
*/
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 */
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;
return status;
}
+ status = register_subsystem("dcom", register_dcom_class);
+ if (NT_STATUS_IS_ERR(status)) {
+ return status;
+ }
+
return NT_STATUS_OK;
}
#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_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;
+}