h_addr is a define in in netdb.h
[oweals/gnunet.git] / src / transport / gnunet-helper-transport-wlan.c
index 1b599d1ce332255284cf61f79bc23545775c2978..b23f43dde368ddfa4a6711ae1be32a6aa411aeef 100644 (file)
@@ -1482,7 +1482,7 @@ linux_read (struct HardwareInfos *dev,
            if (PRISM_STATUS_OK == pv.status)
            {
              ri->ri_noise = pv.data;
-             got_noise = 1;
+             /* got_noise = 1; */
            }
            break;
          case PRISM_DID_RATE:
@@ -1504,7 +1504,7 @@ linux_read (struct HardwareInfos *dev,
            if (PRISM_STATUS_OK == pv.status)
            {
              ri->ri_power = pv.data;
-             got_signal = 1;
+             /* got_signal = 1; */
            }
            break;
          }
@@ -1798,6 +1798,12 @@ static int
 mac_test (const struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame *taIeeeHeader,
           const struct HardwareInfos *dev)
 {
+  static struct GNUNET_TRANSPORT_WLAN_MacAddress all_zeros;
+
+  if ( (0 == memcmp (&taIeeeHeader->addr3, &all_zeros, MAC_ADDR_SIZE)) ||
+       (0 == memcmp (&taIeeeHeader->addr1, &all_zeros, MAC_ADDR_SIZE)) )
+    return 0; /* some drivers set no Macs, then assume it is all for us! */
+
   if (0 != memcmp (&taIeeeHeader->addr3, &mac_bssid_gnunet, MAC_ADDR_SIZE))
     return 1; /* not a GNUnet ad-hoc package */
   if ( (0 == memcmp (&taIeeeHeader->addr1, &dev->pl_mac, MAC_ADDR_SIZE)) ||
@@ -1879,7 +1885,8 @@ stdin_send_hw (void *cls, const struct GNUNET_MessageHeader *hdr)
     break;
   case ARPHRD_ETHER:
     etheader.dst = header->frame.addr1;
-    etheader.src = header->frame.addr2;
+    /* etheader.src = header->frame.addr2; --- untrusted input */
+    etheader.src = dev->pl_mac;
     etheader.type = htons (ETH_P_IP);
     memcpy (write_pout.buf, &etheader, sizeof (etheader));
     memcpy (&write_pout.buf[sizeof (etheader)], &header[1], sendsize - sizeof (struct GNUNET_TRANSPORT_WLAN_Ieee80211Frame));