libiwinfo: fix encryption info on station interfaces in mac80211 AP-STA setups
This commit is contained in:
parent
86c32d917c
commit
2a287a2049
1 changed files with 72 additions and 72 deletions
|
@ -896,79 +896,9 @@ int nl80211_get_encryption(const char *ifname, char *buf)
|
||||||
char *val, *res;
|
char *val, *res;
|
||||||
struct iwinfo_crypto_entry *c = (struct iwinfo_crypto_entry *)buf;
|
struct iwinfo_crypto_entry *c = (struct iwinfo_crypto_entry *)buf;
|
||||||
|
|
||||||
/* Hostapd */
|
|
||||||
if( (res = nl80211_hostapd_info(ifname)) )
|
|
||||||
{
|
|
||||||
if( (val = nl80211_getval(ifname, res, "wpa")) != NULL )
|
|
||||||
c->wpa_version = atoi(val);
|
|
||||||
|
|
||||||
val = nl80211_getval(ifname, res, "wpa_key_mgmt");
|
|
||||||
|
|
||||||
if( !val || strstr(val, "PSK") )
|
|
||||||
c->auth_suites |= IWINFO_KMGMT_PSK;
|
|
||||||
|
|
||||||
if( val && strstr(val, "EAP") )
|
|
||||||
c->auth_suites |= IWINFO_KMGMT_8021x;
|
|
||||||
|
|
||||||
if( val && strstr(val, "NONE") )
|
|
||||||
c->auth_suites |= IWINFO_KMGMT_NONE;
|
|
||||||
|
|
||||||
if( (val = nl80211_getval(ifname, res, "wpa_pairwise")) != NULL )
|
|
||||||
{
|
|
||||||
if( strstr(val, "TKIP") )
|
|
||||||
c->pair_ciphers |= IWINFO_CIPHER_TKIP;
|
|
||||||
|
|
||||||
if( strstr(val, "CCMP") )
|
|
||||||
c->pair_ciphers |= IWINFO_CIPHER_CCMP;
|
|
||||||
|
|
||||||
if( strstr(val, "NONE") )
|
|
||||||
c->pair_ciphers |= IWINFO_CIPHER_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( (val = nl80211_getval(ifname, res, "auth_algs")) != NULL )
|
|
||||||
{
|
|
||||||
switch(atoi(val)) {
|
|
||||||
case 1:
|
|
||||||
c->auth_algs |= IWINFO_AUTH_OPEN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
c->auth_algs |= IWINFO_AUTH_SHARED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
c->auth_algs |= IWINFO_AUTH_OPEN;
|
|
||||||
c->auth_algs |= IWINFO_AUTH_SHARED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( i = 0; i < 4; i++ )
|
|
||||||
{
|
|
||||||
snprintf(k, sizeof(k), "wep_key%d", i);
|
|
||||||
|
|
||||||
if( (val = nl80211_getval(ifname, res, k)) )
|
|
||||||
{
|
|
||||||
if( (strlen(val) == 5) || (strlen(val) == 10) )
|
|
||||||
c->pair_ciphers |= IWINFO_CIPHER_WEP40;
|
|
||||||
|
|
||||||
else if( (strlen(val) == 13) || (strlen(val) == 26) )
|
|
||||||
c->pair_ciphers |= IWINFO_CIPHER_WEP104;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
c->group_ciphers = c->pair_ciphers;
|
|
||||||
c->enabled = (c->auth_algs || c->auth_suites) ? 1 : 0;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WPA supplicant */
|
/* WPA supplicant */
|
||||||
else if( (res = nl80211_wpactl_info(ifname, "STATUS", NULL)) &&
|
if( (res = nl80211_wpactl_info(ifname, "STATUS", NULL)) &&
|
||||||
(val = nl80211_getval(NULL, res, "pairwise_cipher")) )
|
(val = nl80211_getval(NULL, res, "pairwise_cipher")) )
|
||||||
{
|
{
|
||||||
/* WEP */
|
/* WEP */
|
||||||
if( strstr(val, "WEP") )
|
if( strstr(val, "WEP") )
|
||||||
|
@ -1049,6 +979,76 @@ int nl80211_get_encryption(const char *ifname, char *buf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hostapd */
|
||||||
|
else if( (res = nl80211_hostapd_info(ifname)) )
|
||||||
|
{
|
||||||
|
if( (val = nl80211_getval(ifname, res, "wpa")) != NULL )
|
||||||
|
c->wpa_version = atoi(val);
|
||||||
|
|
||||||
|
val = nl80211_getval(ifname, res, "wpa_key_mgmt");
|
||||||
|
|
||||||
|
if( !val || strstr(val, "PSK") )
|
||||||
|
c->auth_suites |= IWINFO_KMGMT_PSK;
|
||||||
|
|
||||||
|
if( val && strstr(val, "EAP") )
|
||||||
|
c->auth_suites |= IWINFO_KMGMT_8021x;
|
||||||
|
|
||||||
|
if( val && strstr(val, "NONE") )
|
||||||
|
c->auth_suites |= IWINFO_KMGMT_NONE;
|
||||||
|
|
||||||
|
if( (val = nl80211_getval(ifname, res, "wpa_pairwise")) != NULL )
|
||||||
|
{
|
||||||
|
if( strstr(val, "TKIP") )
|
||||||
|
c->pair_ciphers |= IWINFO_CIPHER_TKIP;
|
||||||
|
|
||||||
|
if( strstr(val, "CCMP") )
|
||||||
|
c->pair_ciphers |= IWINFO_CIPHER_CCMP;
|
||||||
|
|
||||||
|
if( strstr(val, "NONE") )
|
||||||
|
c->pair_ciphers |= IWINFO_CIPHER_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( (val = nl80211_getval(ifname, res, "auth_algs")) != NULL )
|
||||||
|
{
|
||||||
|
switch(atoi(val)) {
|
||||||
|
case 1:
|
||||||
|
c->auth_algs |= IWINFO_AUTH_OPEN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
c->auth_algs |= IWINFO_AUTH_SHARED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
c->auth_algs |= IWINFO_AUTH_OPEN;
|
||||||
|
c->auth_algs |= IWINFO_AUTH_SHARED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0; i < 4; i++ )
|
||||||
|
{
|
||||||
|
snprintf(k, sizeof(k), "wep_key%d", i);
|
||||||
|
|
||||||
|
if( (val = nl80211_getval(ifname, res, k)) )
|
||||||
|
{
|
||||||
|
if( (strlen(val) == 5) || (strlen(val) == 10) )
|
||||||
|
c->pair_ciphers |= IWINFO_CIPHER_WEP40;
|
||||||
|
|
||||||
|
else if( (strlen(val) == 13) || (strlen(val) == 26) )
|
||||||
|
c->pair_ciphers |= IWINFO_CIPHER_WEP104;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c->group_ciphers = c->pair_ciphers;
|
||||||
|
c->enabled = (c->auth_algs || c->auth_suites) ? 1 : 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue