diff options
-rw-r--r-- | source4/rpc_server/config.m4 | 1 | ||||
-rw-r--r-- | source4/rpc_server/config.mk | 10 | ||||
-rw-r--r-- | source4/rpc_server/dcom/oxidresolver.c | 30 | ||||
-rw-r--r-- | source4/rpc_server/dcom/remact.c | 42 |
4 files changed, 81 insertions, 2 deletions
diff --git a/source4/rpc_server/config.m4 b/source4/rpc_server/config.m4 index 609bd28fc2c..52559aa12f2 100644 --- a/source4/rpc_server/config.m4 +++ b/source4/rpc_server/config.m4 @@ -16,6 +16,7 @@ SMB_MODULE_MK(dcerpc_netlogon,DCERPC,STATIC,rpc_server/config.mk) SMB_MODULE_MK(dcerpc_lsarpc,DCERPC,STATIC,rpc_server/config.mk) SMB_MODULE_MK(dcerpc_spoolss,DCERPC,STATIC,rpc_server/config.mk) SMB_MODULE_MK(dcerpc_IOXIDResolver,DCERPC,STATIC,rpc_server/config.mk) +SMB_MODULE_MK(dcerpc_IRemoteActivation,DCERPC,STATIC,rpc_server/config.mk) SMB_MODULE_MK(dcerpc_drsuapi,DCERPC,STATIC,rpc_server/config.mk) SMB_SUBSYSTEM_MK(DCERPC,rpc_server/config.mk) diff --git a/source4/rpc_server/config.mk b/source4/rpc_server/config.mk index 4e08181ab0a..784665c80b5 100644 --- a/source4/rpc_server/config.mk +++ b/source4/rpc_server/config.mk @@ -21,6 +21,16 @@ REQUIRED_SUBSYSTEMS = \ # End MODULE dcerpc_IOXIDResolver ################################################ +################################################ +# Start MODULE dcerpc_IRemoteActivation +[MODULE::dcerpc_IRemoteActivation] +INIT_OBJ_FILES = \ + rpc_server/dcom/remact.o +REQUIRED_SUBSYSTEMS = \ + DCERPC_COMMON +# End MODULE dcerpc_IRemoteActivation +################################################ + ################################################ diff --git a/source4/rpc_server/dcom/oxidresolver.c b/source4/rpc_server/dcom/oxidresolver.c index 2ccf136cadb..76fa6a760ee 100644 --- a/source4/rpc_server/dcom/oxidresolver.c +++ b/source4/rpc_server/dcom/oxidresolver.c @@ -24,6 +24,24 @@ #include "librpc/gen_ndr/ndr_oxidresolver.h" #include "rpc_server/dcerpc_server.h" +struct OXIDObject +{ + struct GUID OID; +}; + +struct PingSet +{ + HYPER_T id; + struct OXIDObject *objects; + struct PingSet *prev, *next; +}; + +/* Maximum number of missed ping calls before a client is presumed + * gone */ +#define MAX_MISSED_PINGS 3 + +/* Maximum number of seconds between two ping calls */ +#define MAX_PING_TIME 60 /* ResolveOxid @@ -44,13 +62,18 @@ static WERROR SimplePing(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx return WERR_NOT_SUPPORTED; } - /* ComplexPing */ static WERROR ComplexPing(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ComplexPing *r) { + struct PingSet *ps; + + /* If r->in.SetId == 0, create new PingSet */ + + /* Otherwise, look up pingset by id */ + return WERR_NOT_SUPPORTED; } @@ -61,7 +84,7 @@ static WERROR ComplexPing(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ct static WERROR ServerAlive(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ServerAlive *r) { - return WERR_NOT_SUPPORTED; + return WERR_OK; } @@ -84,6 +107,9 @@ static WERROR ServerAlive2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_c return WERR_NOT_SUPPORTED; } +/* FIXME: Regularly ping objects in use by local programs on + * remote servers */ + /* include the generated boilerplate */ #include "librpc/gen_ndr/ndr_oxidresolver_s.c" diff --git a/source4/rpc_server/dcom/remact.c b/source4/rpc_server/dcom/remact.c new file mode 100644 index 00000000000..605422d750c --- /dev/null +++ b/source4/rpc_server/dcom/remact.c @@ -0,0 +1,42 @@ +/* + Unix SMB/CIFS implementation. + + endpoint server for the IRemoteActivation pipe + + Copyright (C) Jelmer Vernooij 2004 + + 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 "rpc_server/dcerpc_server.h" +#include "rpc_server/common/common.h" +#include "librpc/gen_ndr/ndr_remact.h" + +/* + RemoteActivation +*/ +static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct RemoteActivation *r) +{ + /* FIXME: CoGetClassObject() */ + /* FIXME: IClassFactory::CreateInstance() */ + /* FIXME: IClassFactory::ReleaseInstance() */ + return WERR_NOT_SUPPORTED; +} + + +/* include the generated boilerplate */ +#include "librpc/gen_ndr/ndr_remact_s.c" |