librpc/rpc: remove dcerpc_binding->localaddress and store it in the options array
authorStefan Metzmacher <metze@samba.org>
Thu, 23 Jan 2014 08:45:47 +0000 (09:45 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 13 Feb 2014 10:54:14 +0000 (11:54 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
librpc/rpc/binding.c
librpc/rpc/rpc_common.h
source4/librpc/tests/binding_string.c

index 975ee554f87cf9aea996c9d2b6a6b037692c4b11..aa1f31bbc6abba4bf12c81b715cf4d7d45669b62 100644 (file)
@@ -90,7 +90,6 @@ static const struct {
        {"bigendian", DCERPC_PUSH_BIGENDIAN},
        {"smb2", DCERPC_SMB2},
        {"ndr64", DCERPC_NDR64},
-       {"localaddress", DCERPC_LOCALADDRESS}
 };
 
 const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor)
@@ -244,12 +243,7 @@ _PUBLIC_ char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_bi
                }
 
                o = s;
-               if (ncacn_options[i].flag == DCERPC_LOCALADDRESS && b->localaddress) {
-                       s = talloc_asprintf_append_buffer(s, ",%s=%s", ncacn_options[i].name,
-                                                         b->localaddress);
-               } else {
-                       s = talloc_asprintf_append_buffer(s, ",%s", ncacn_options[i].name);
-               }
+               s = talloc_asprintf_append_buffer(s, ",%s", ncacn_options[i].name);
                if (s == NULL) {
                        talloc_free(o);
                        return NULL;
@@ -358,7 +352,6 @@ _PUBLIC_ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struc
        b->flags = 0;
        b->assoc_group_id = 0;
        b->endpoint = NULL;
-       b->localaddress = NULL;
 
        if (!options) {
                *b_out = b;
@@ -396,9 +389,7 @@ _PUBLIC_ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struc
                                int k;
                                char c = b->options[i][opt_len];
 
-                               if (ncacn_options[j].flag == DCERPC_LOCALADDRESS && c == '=') {
-                                       b->localaddress = talloc_strdup(b, &b->options[i][opt_len+1]);
-                               } else if (c != 0) {
+                               if (c != 0) {
                                        continue;
                                }
 
@@ -441,11 +432,6 @@ _PUBLIC_ const char *dcerpc_binding_get_string_option(const struct dcerpc_bindin
        size_t i;
        int ret;
 
-       ret = strcmp(name, "localaddress");
-       if (ret == 0) {
-               return b->localaddress;
-       }
-
        if (b->options == NULL) {
                return NULL;
        }
@@ -508,28 +494,6 @@ _PUBLIC_ NTSTATUS dcerpc_binding_set_string_option(struct dcerpc_binding *b,
         * value != NULL means add or reset.
         */
 
-       ret = strcmp(name, "localaddress");
-       if (ret == 0) {
-               tmp = discard_const_p(char, b->localaddress);
-
-               if (value == NULL) {
-                       talloc_free(tmp);
-                       b->localaddress = NULL;
-                       b->flags &= ~DCERPC_LOCALADDRESS;
-                       return NT_STATUS_OK;
-               }
-
-               b->localaddress = talloc_strdup(b, value);
-               if (b->localaddress == NULL) {
-                       b->localaddress = tmp;
-                       return NT_STATUS_NO_MEMORY;
-               }
-               talloc_free(tmp);
-
-               b->flags |= DCERPC_LOCALADDRESS;
-               return NT_STATUS_OK;
-       }
-
        for (i=0; b->options && b->options[i]; i++) {
                const char *o = b->options[i];
 
@@ -1001,14 +965,6 @@ _PUBLIC_ struct dcerpc_binding *dcerpc_binding_dup(TALLOC_CTX *mem_ctx,
                }
        }
 
-       if (b->localaddress != NULL) {
-               n->localaddress = talloc_strdup(n, b->localaddress);
-               if (n->localaddress == NULL) {
-                       talloc_free(n);
-                       return NULL;
-               }
-       }
-
        if (b->endpoint != NULL) {
                n->endpoint = talloc_strdup(n, b->endpoint);
                if (n->endpoint == NULL) {
index 98be80eb22637585c8411b349358902ac0cc7b33..0fd9933d230a67c86ebb9e50093a074ec442bef0 100644 (file)
@@ -48,7 +48,6 @@ struct dcerpc_binding {
        const char *target_principal;
        const char *endpoint;
        const char **options;
-       const char *localaddress;
        uint32_t flags;
        uint32_t assoc_group_id;
 };
@@ -104,9 +103,6 @@ struct dcerpc_binding {
 /* use NDR64 transport */
 #define DCERPC_NDR64                   (1<<21)
 
-/* specify binding interface */
-#define        DCERPC_LOCALADDRESS            (1<<22)
-
 /* handle upgrades or downgrades automatically */
 #define DCERPC_SCHANNEL_AUTO           (1<<23)
 
index d3150e217629d619a3b19253929613fca44e8ea4..4ea4633e3653e37c4aa18f3b5af84555acf0a807 100644 (file)
@@ -131,8 +131,9 @@ static bool test_parse_check_results(struct torture_context *tctx)
                "308FB580-1EB2-11CA-923B-08002B1075A7@ncacn_ip_tcp:$SERVER", &b), "parse");
        torture_assert_ntstatus_ok(tctx, dcerpc_parse_binding(tctx, "ncacn_ip_tcp:$SERVER[,sign,localaddress=192.168.1.1]", &b), "parse");
        torture_assert(tctx, b->transport == NCACN_IP_TCP, "ncacn_ip_tcp expected");
-       torture_assert(tctx, b->flags == (DCERPC_SIGN | DCERPC_LOCALADDRESS), "sign flag");
-       torture_assert_str_equal(tctx, b->localaddress, "192.168.1.1", "localaddress");
+       torture_assert(tctx, b->flags == DCERPC_SIGN, "sign flag");
+       torture_assert_str_equal(tctx, dcerpc_binding_get_string_option(b, "localaddress"),
+                                "192.168.1.1", "localaddress");
        torture_assert_str_equal(tctx, "ncacn_ip_tcp:$SERVER[,sign,localaddress=192.168.1.1]",
                                 dcerpc_binding_string(tctx, b), "back to string");