summaryrefslogtreecommitdiffstats
path: root/source4/lib
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-02-06 18:58:52 +0100
committerGünther Deschner <gd@samba.org>2014-02-13 11:54:17 +0100
commit9632f92cc13aed2683f69ee85b4048ee4ef252eb (patch)
tree607a4609ab040e22d48634d983e201c3ba480081 /source4/lib
parent549001fb736559355f2caa2f4201097e2cd3fcde (diff)
downloadsamba-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.c34
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;