]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:lib/com/dcom: use dcerpc_parse_binding() to create the binding
authorStefan Metzmacher <metze@samba.org>
Thu, 6 Feb 2014 17:58:52 +0000 (18:58 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:17 +0000 (11:54 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
source4/lib/com/dcom/main.c

index b205cb48a886545ee8d596d1fdb7375348d3d544..ea1e4f8b8f1f3cea506492a9e74d4f440eabdd65 100644 (file)
 
 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;