summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamen Mazdrashki <kamenim@samba.org>2010-09-15 16:41:47 +0300
committerKamen Mazdrashki <kamenim@samba.org>2010-09-16 00:15:38 +0300
commitee169d73479a5e8672d56617f2ad9cfac254f8bf (patch)
treedb3b4c120825e2a1f09713df037d7202874f7ee9
parent839ed051fc4fe62b9b2ce008898b538509769f88 (diff)
downloadsamba-ee169d73479a5e8672d56617f2ad9cfac254f8bf.tar.gz
samba-ee169d73479a5e8672d56617f2ad9cfac254f8bf.tar.bz2
samba-ee169d73479a5e8672d56617f2ad9cfac254f8bf.zip
s4-irpc: Add 'timeout' param for dcesrv_irpc_forward_rpc_call() call
It is to be used when caller wants to explicitly specify the timeout for the call
-rw-r--r--source4/rpc_server/common/forward.c10
-rw-r--r--source4/rpc_server/drsuapi/dcesrv_drsuapi.c10
2 files changed, 14 insertions, 6 deletions
diff --git a/source4/rpc_server/common/forward.c b/source4/rpc_server/common/forward.c
index 51e7507d18..c983ac361e 100644
--- a/source4/rpc_server/common/forward.c
+++ b/source4/rpc_server/common/forward.c
@@ -57,13 +57,14 @@ static void dcesrv_irpc_forward_callback(struct tevent_req *subreq)
-/*
- forward a RPC call using IRPC to another task
+/**
+ * Forward a RPC call using IRPC to another task
*/
void dcesrv_irpc_forward_rpc_call(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
void *r, uint32_t callid,
const struct ndr_interface_table *ndr_table,
- const char *dest_task, const char *opname)
+ const char *dest_task, const char *opname,
+ uint32_t timeout)
{
struct dcesrv_forward_state *st;
struct dcerpc_binding_handle *binding_handle;
@@ -96,6 +97,9 @@ void dcesrv_irpc_forward_rpc_call(struct dcesrv_call_state *dce_call, TALLOC_CTX
return;
}
+ /* reset timeout for the handle */
+ dcerpc_binding_handle_set_timeout(binding_handle, timeout);
+
/* forward the call */
subreq = dcerpc_binding_handle_call_send(st, dce_call->event_ctx,
binding_handle,
diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
index 95113dd18d..4a6c37005c 100644
--- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
+++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
@@ -29,6 +29,7 @@
#include "libcli/security/security.h"
#include "auth/auth.h"
#include "param/param.h"
+#include "lib/messaging/irpc.h"
#define DRSUAPI_UNSUPPORTED(fname) do { \
DEBUG(1,(__location__ ": Unsupported DRS call %s\n", #fname)); \
@@ -273,7 +274,8 @@ static WERROR dcesrv_drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, T
dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICASYNC,
&ndr_table_drsuapi,
- "dreplsrv", "DsReplicaSync");
+ "dreplsrv", "DsReplicaSync",
+ IRPC_CALL_TIMEOUT);
return WERR_OK;
}
@@ -751,7 +753,8 @@ static WERROR dcesrv_drsuapi_DsExecuteKCC(struct dcesrv_call_state *dce_call, TA
}
dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSEXECUTEKCC,
- &ndr_table_drsuapi, "kccsrv", "DsExecuteKCC");
+ &ndr_table_drsuapi, "kccsrv", "DsExecuteKCC",
+ IRPC_CALL_TIMEOUT);
return WERR_OK;
}
@@ -775,7 +778,8 @@ static WERROR dcesrv_drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call
}
dcesrv_irpc_forward_rpc_call(dce_call, mem_ctx, r, NDR_DRSUAPI_DSREPLICAGETINFO,
- &ndr_table_drsuapi, "kccsrv", "DsReplicaGetInfo");
+ &ndr_table_drsuapi, "kccsrv", "DsReplicaGetInfo",
+ IRPC_CALL_TIMEOUT);
return WERR_OK;
}