diff options
author | Andrew Bartlett <abartlet@samba.org> | 2010-02-19 18:02:46 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2010-02-20 02:55:29 +1100 |
commit | f74ce57cb584d9e9d99b26e0467cc0c4b541f84d (patch) | |
tree | b29c48fa0065acdc2c5c9213c09b65993e353882 /source4/rpc_server | |
parent | 9f222841fedd3796c238146081c20591ae72747b (diff) | |
download | samba-f74ce57cb584d9e9d99b26e0467cc0c4b541f84d.tar.gz samba-f74ce57cb584d9e9d99b26e0467cc0c4b541f84d.tar.bz2 samba-f74ce57cb584d9e9d99b26e0467cc0c4b541f84d.zip |
s4:rpc_server Add a 'if_version' parameter to the bind operation.
This allows the interface version to be forwarded to the remote server
in the RPC proxy, both in the endpoint lookup and the subsequent bind.
Andrew Bartlett
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 4 | ||||
-rw-r--r-- | source4/rpc_server/dcerpc_server.h | 2 | ||||
-rw-r--r-- | source4/rpc_server/remote/dcesrv_remote.c | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index 918646ff06..bc06c065da 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -648,7 +648,7 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call) call->context = context; talloc_set_destructor(context, dcesrv_connection_context_destructor); - status = iface->bind(call, iface); + status = iface->bind(call, iface, if_version); if (!NT_STATUS_IS_OK(status)) { char *uuid_str = GUID_string(call, &uuid); DEBUG(2,("Request for dcerpc interface %s/%d rejected: %s\n", @@ -827,7 +827,7 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_ call->context = context; talloc_set_destructor(context, dcesrv_connection_context_destructor); - status = iface->bind(call, iface); + status = iface->bind(call, iface, if_version); if (!NT_STATUS_IS_OK(status)) { /* we don't want to trigger the iface->unbind() hook */ context->iface = NULL; diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h index 3a9c8feb75..0628730f26 100644 --- a/source4/rpc_server/dcerpc_server.h +++ b/source4/rpc_server/dcerpc_server.h @@ -44,7 +44,7 @@ struct dcesrv_interface { struct ndr_syntax_id syntax_id; /* this function is called when the client binds to this interface */ - NTSTATUS (*bind)(struct dcesrv_call_state *, const struct dcesrv_interface *); + NTSTATUS (*bind)(struct dcesrv_call_state *, const struct dcesrv_interface *, uint32_t if_version); /* this function is called when the client disconnects the endpoint */ void (*unbind)(struct dcesrv_connection_context *, const struct dcesrv_interface *); diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c index 9c4174be96..45944bc227 100644 --- a/source4/rpc_server/remote/dcesrv_remote.c +++ b/source4/rpc_server/remote/dcesrv_remote.c @@ -37,7 +37,7 @@ static NTSTATUS remote_op_reply(struct dcesrv_call_state *dce_call, TALLOC_CTX * return NT_STATUS_OK; } -static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct dcesrv_interface *iface) +static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct dcesrv_interface *iface, uint32_t if_version) { NTSTATUS status; const struct ndr_interface_table *table; @@ -121,6 +121,8 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct b->assoc_group_id = dce_call->context->assoc_group->proxied_id; } + b->object.if_version = if_version; + pipe_conn_req = dcerpc_pipe_connect_b_send(dce_call->context, b, table, credentials, dce_call->event_ctx, dce_call->conn->dce_ctx->lp_ctx); status = dcerpc_pipe_connect_b_recv(pipe_conn_req, dce_call->context, &(priv->c_pipe)); |