libiwinfo: properly detect wep and unencrypted wifi iface state on madwifi
[project/luci.git] / contrib / package / iwinfo / src / iwinfo_madwifi.c
index 59c42db..be89978 100644 (file)
@@ -560,9 +560,11 @@ int madwifi_get_encryption(const char *ifname, char *buf)
        if( madwifi_wrq(&wrq, ifname, SIOCGIWENCODE, keybuf, sizeof(keybuf)) < 0 )
                return -1;
 
+#if 0
        /* Have any encryption? */
        if( (wrq.u.data.flags & IW_ENCODE_DISABLED) || (wrq.u.data.length == 0) )
                return 0;
+#endif
 
        /* Save key len */
        key_len = wrq.u.data.length;
@@ -628,7 +630,7 @@ int madwifi_get_encryption(const char *ifname, char *buf)
                if( c->wpa_version && ciphers & (1 << IEEE80211_CIPHER_CKIP) )
                        c->pair_ciphers |= IWINFO_CIPHER_CKIP;
 
-               if( ciphers & (1 << IEEE80211_CIPHER_WEP) )
+               if( !c->pair_ciphers && ciphers & (1 << IEEE80211_CIPHER_WEP) )
                {
                        switch(key_len) {
                                case 13:
@@ -639,6 +641,9 @@ int madwifi_get_encryption(const char *ifname, char *buf)
                                        c->pair_ciphers |= IWINFO_CIPHER_WEP40;
                                        break;
 
+                               case 0:
+                                       break;
+
                                default:
                                        c->pair_ciphers = IWINFO_CIPHER_WEP40 |
                                                IWINFO_CIPHER_WEP104;
@@ -697,7 +702,7 @@ int madwifi_get_encryption(const char *ifname, char *buf)
                }
        }
 
-       c->enabled = (c->wpa_version || c->auth_algs) ? 1 : 0;
+       c->enabled = (c->wpa_version || (c->auth_algs && c->pair_ciphers)) ? 1 : 0;
 
        return 0;
 }