diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-02-06 18:58:52 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2014-02-13 11:54:17 +0100 |
commit | 9632f92cc13aed2683f69ee85b4048ee4ef252eb (patch) | |
tree | 607a4609ab040e22d48634d983e201c3ba480081 /source4/lib | |
parent | 549001fb736559355f2caa2f4201097e2cd3fcde (diff) | |
download | samba-9632f92cc13aed2683f69ee85b4048ee4ef252eb.tar.gz samba-9632f92cc13aed2683f69ee85b4048ee4ef252eb.tar.xz samba-9632f92cc13aed2683f69ee85b4048ee4ef252eb.zip |
s4:lib/com/dcom: use dcerpc_parse_binding() to create the binding
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
Diffstat (limited to 'source4/lib')
-rw-r--r-- | source4/lib/com/dcom/main.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/source4/lib/com/dcom/main.c b/source4/lib/com/dcom/main.c index b205cb48a88..ea1e4f8b8f1 100644 --- a/source4/lib/com/dcom/main.c +++ b/source4/lib/com/dcom/main.c @@ -36,34 +36,28 @@ static NTSTATUS dcerpc_binding_from_STRINGBINDING(TALLOC_CTX *mem_ctx, struct dcerpc_binding **b_out, struct STRINGBINDING *bd) { - char *host, *endpoint; + char *tstr; + char *bstr; + enum dcerpc_transport_t transport; struct dcerpc_binding *b; - b = talloc_zero(mem_ctx, struct dcerpc_binding); - if (!b) { - return NT_STATUS_NO_MEMORY; - } - - b->transport = dcerpc_transport_by_endpoint_protocol(bd->wTowerId); - - if (b->transport == -1) { + transport = dcerpc_transport_by_endpoint_protocol(bd->wTowerId); + if (transport == NCA_UNKNOWN) { DEBUG(1, ("Can't find transport match endpoint protocol %d\n", bd->wTowerId)); - talloc_free(b); return NT_STATUS_NOT_SUPPORTED; } - host = talloc_strdup(b, bd->NetworkAddr); - endpoint = strchr(host, '['); - - if (endpoint) { - *endpoint = '\0'; - endpoint++; - - endpoint[strlen(endpoint)-1] = '\0'; + tstr = derpc_transport_string_by_transport(transport); + bstr = talloc_asprintf(mem_ctx, "%s:%s", tstr, bd->NetworkAddr); + if (bstr == NULL) { + return NT_STATUS_NO_MEMORY; } - b->host = host; - b->endpoint = talloc_strdup(b, endpoint); + status = dcerpc_parse_binding(mem_ctx, bstr, &b); + TALLOC_FREE(bstr); + if (!NT_STATUS_IS_OK(status)) { + return status; + } *b_out = b; return NT_STATUS_OK; |