From ab9ca559269f9ef921eb3e6ec3007d2e249c6cfe Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 9 Jan 2005 09:38:16 +0000 Subject: r4617: basic alter_context requests now work in our client library. The test just does a simple LSA/DSSETUP combo, which is what w2k does in the ACL editor rpc calls that triggered this work (This used to be commit 0129ec947aa1fa5a7104dc3a666af3cb9bd104f1) --- source4/librpc/rpc/dcerpc_util.c | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'source4/librpc/rpc/dcerpc_util.c') diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c index 67b0c530bf..702a1f6ecf 100644 --- a/source4/librpc/rpc/dcerpc_util.c +++ b/source4/librpc/rpc/dcerpc_util.c @@ -1265,3 +1265,50 @@ void dcerpc_log_packet(const struct dcerpc_interface_table *ndr, } } + + +/* + create a secondary context from a primary connection + + this uses dcerpc_alter_context() to create a new dcerpc context_id +*/ +NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p, struct dcerpc_pipe **pp2, + uint32_t context_id, + const char *pipe_uuid, + uint32_t pipe_version) +{ + NTSTATUS status; + struct dcerpc_pipe *p2; + + p2 = talloc_zero(p, struct dcerpc_pipe); + if (p2 == NULL) { + return NT_STATUS_NO_MEMORY; + } + p2->conn = talloc_reference(p2, p->conn); + + p2->context_id = context_id; + + status = GUID_from_string(pipe_uuid, &p2->syntax.uuid); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(p2); + return status; + } + p2->syntax.if_version = pipe_version; + + status = GUID_from_string(NDR_GUID, &p2->transfer_syntax.uuid); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(p2); + return status; + } + p2->transfer_syntax.if_version = NDR_GUID_VERSION; + + status = dcerpc_alter_context(p2, p2, &p2->syntax, &p2->transfer_syntax); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(p2); + return status; + } + + *pp2 = p2; + + return status; +} -- cgit