librpc/rpc: fix dcerpc_floor_set_rhs_data() with NULL data.
authorStefan Metzmacher <metze@samba.org>
Thu, 30 Jan 2014 22:03:03 +0000 (23:03 +0100)
committerGünther Deschner <gd@samba.org>
Tue, 11 Feb 2014 15:20:31 +0000 (16:20 +0100)
For EPM_PROTOCOL_IP we can only marshal ipv4 addresses,
everything else gets '0.0.0.0' (4 zero bytes on the wire).

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

index 8f85854008d95008ea28299d3d622b17328107fb..ee9f13d1b7e88ac84d81b9ab4a3235ba91dcddca 100644 (file)
@@ -541,6 +541,10 @@ static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX *mem_ctx,
                                          struct epm_floor *epm_floor,  
                                          const char *data)
 {
+       if (data == NULL) {
+               data = "";
+       }
+
        switch (epm_floor->lhs.protocol) {
        case EPM_PROTOCOL_TCP:
                epm_floor->rhs.tcp.port = atoi(data);
@@ -555,6 +559,9 @@ static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX *mem_ctx,
                return NT_STATUS_OK;
 
        case EPM_PROTOCOL_IP:
+               if (!is_ipaddress_v4(data)) {
+                       data = "0.0.0.0";
+               }
                epm_floor->rhs.ip.ipaddr = talloc_strdup(mem_ctx, data);
                NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.ip.ipaddr);
                return NT_STATUS_OK;