librpc/rpc: simplify dcerpc_binding_build_tower()
authorStefan Metzmacher <metze@samba.org>
Thu, 30 Jan 2014 22:05:48 +0000 (23:05 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 11 Feb 2014 15:20:31 +0000 (16:20 +0100)
dcerpc_floor_set_rhs_data() handles the special cases now
and we keep the 'host' part unmodified except
EPM_PROTOCOL_IP addresses. No special '\\' handling anymore.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
librpc/rpc/binding.c

index ee9f13d1b7e88ac84d81b9ab4a3235ba91dcddca..cd896b0d71aa1b666e8cbd4355a551aea7067a57 100644 (file)
@@ -875,35 +875,32 @@ _PUBLIC_ NTSTATUS dcerpc_binding_build_tower(TALLOC_CTX *mem_ctx,
        /* Floor 2 to num_protocols */
        for (i = 0; i < num_protocols; i++) {
                tower->floors[2 + i].lhs.protocol = protseq[i];
-               tower->floors[2 + i].lhs.lhs_data = data_blob_talloc(tower->floors, NULL, 0);
+               tower->floors[2 + i].lhs.lhs_data = data_blob_null;
                ZERO_STRUCT(tower->floors[2 + i].rhs);
-               dcerpc_floor_set_rhs_data(tower->floors, &tower->floors[2 + i], "");
+               status = dcerpc_floor_set_rhs_data(tower->floors,
+                                                  &tower->floors[2 + i],
+                                                  NULL);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
        }
 
        /* The 4th floor contains the endpoint */
        if (num_protocols >= 2 && binding->endpoint) {
-               status = dcerpc_floor_set_rhs_data(tower->floors, &tower->floors[3], binding->endpoint);
-               if (NT_STATUS_IS_ERR(status)) {
+               status = dcerpc_floor_set_rhs_data(tower->floors,
+                                                  &tower->floors[3],
+                                                  binding->endpoint);
+               if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
        }
 
        /* The 5th contains the network address */
        if (num_protocols >= 3 && binding->host) {
-               if (is_ipaddress(binding->host) ||
-                   (binding->host[0] == '\\' && binding->host[1] == '\\')) {
-                       status = dcerpc_floor_set_rhs_data(tower->floors, &tower->floors[4], 
-                                                          binding->host);
-               } else {
-                       /* note that we don't attempt to resolve the
-                          name here - when we get a hostname here we
-                          are in the client code, and want to put in
-                          a wildcard all-zeros IP for the server to
-                          fill in */
-                       status = dcerpc_floor_set_rhs_data(tower->floors, &tower->floors[4], 
-                                                          "0.0.0.0");
-               }
-               if (NT_STATUS_IS_ERR(status)) {
+               status = dcerpc_floor_set_rhs_data(tower->floors,
+                                                  &tower->floors[4],
+                                                  binding->host);
+               if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
        }