diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-08-24 13:31:20 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-08-24 13:31:20 +0000 |
commit | 335e519dd64bbc8b0c938945745a92d86c2ff9fc (patch) | |
tree | f1b784f41d1d18c5abd8d47cf6d2c7c212a43525 /libs/iwinfo | |
parent | 12f582bcc7dc8ab447c01e2cfa939caa7dfa321b (diff) |
libs/iwinfo: fixes for wpa/wep detection in wifi scan
Diffstat (limited to 'libs/iwinfo')
-rw-r--r-- | libs/iwinfo/src/iwinfo.h | 6 | ||||
-rw-r--r-- | libs/iwinfo/src/iwinfo_lualib.c | 19 | ||||
-rw-r--r-- | libs/iwinfo/src/iwinfo_wext_scan.c | 29 |
3 files changed, 30 insertions, 24 deletions
diff --git a/libs/iwinfo/src/iwinfo.h b/libs/iwinfo/src/iwinfo.h index 29398831c..c1b5b7a12 100644 --- a/libs/iwinfo/src/iwinfo.h +++ b/libs/iwinfo/src/iwinfo.h @@ -37,9 +37,9 @@ struct iwinfo_txpwrlist_entry { struct iwinfo_crypto_entry { uint8_t enabled; uint8_t wpa_version; - uint8_t group_ciphers[8]; - uint8_t pair_ciphers[8]; - uint8_t auth_suites[8]; + uint8_t group_ciphers; + uint8_t pair_ciphers; + uint8_t auth_suites; }; struct iwinfo_scanlist_entry { diff --git a/libs/iwinfo/src/iwinfo_lualib.c b/libs/iwinfo/src/iwinfo_lualib.c index 1a0d71b99..d9c82b1ec 100644 --- a/libs/iwinfo/src/iwinfo_lualib.c +++ b/libs/iwinfo/src/iwinfo_lualib.c @@ -133,7 +133,7 @@ static int iwinfo_L_scanlist(lua_State *L, int (*func)(const char *, char *, int e->mac[3], e->mac[4], e->mac[5]); lua_pushstring(L, macstr); - lua_setfield(L, -2, "mac"); + lua_setfield(L, -2, "bssid"); /* ESSID */ if( e->ssid[0] ) @@ -152,12 +152,15 @@ static int iwinfo_L_scanlist(lua_State *L, int (*func)(const char *, char *, int /* Crypto */ lua_pushinteger(L, e->crypto.wpa_version); - lua_setfield(L, -2, "wpa_version"); + lua_setfield(L, -2, "wpa"); + + lua_pushboolean(L, (!e->crypto.wpa_version && e->crypto.enabled)); + lua_setfield(L, -2, "wep"); lua_newtable(L); - for( j = 0, y = 1; j < sizeof(e->crypto.group_ciphers); j++ ) + for( j = 0, y = 1; j < 8; j++ ) { - if( e->crypto.group_ciphers[j] ) + if( e->crypto.group_ciphers & (1<<j) ) { lua_pushstring(L, (j < IW_IE_CYPHER_NUM) ? iw_ie_cypher_name[j] : "Proprietary"); @@ -168,9 +171,9 @@ static int iwinfo_L_scanlist(lua_State *L, int (*func)(const char *, char *, int lua_setfield(L, -2, "group_ciphers"); lua_newtable(L); - for( j = 0, y = 1; j < sizeof(e->crypto.pair_ciphers); j++ ) + for( j = 0, y = 1; j < 8; j++ ) { - if( e->crypto.pair_ciphers[j] ) + if( e->crypto.pair_ciphers & (1<<j) ) { lua_pushstring(L, (j < IW_IE_CYPHER_NUM) ? iw_ie_cypher_name[j] : "Proprietary"); @@ -181,9 +184,9 @@ static int iwinfo_L_scanlist(lua_State *L, int (*func)(const char *, char *, int lua_setfield(L, -2, "pair_ciphers"); lua_newtable(L); - for( j = 0, y = 1; j < sizeof(e->crypto.auth_suites); j++ ) + for( j = 0, y = 1; j < 8; j++ ) { - if( e->crypto.auth_suites[j] ) + if( e->crypto.auth_suites & (1<<j) ) { lua_pushstring(L, (j < IW_IE_KEY_MGMT_NUM) ? iw_ie_key_mgmt_name[j] : "Proprietary"); diff --git a/libs/iwinfo/src/iwinfo_wext_scan.c b/libs/iwinfo/src/iwinfo_wext_scan.c index 63231b86b..1c15a1dd0 100644 --- a/libs/iwinfo/src/iwinfo_wext_scan.c +++ b/libs/iwinfo/src/iwinfo_wext_scan.c @@ -284,20 +284,23 @@ static inline void wext_fill_wpa(unsigned char *iebuf, int buflen, struct iwinfo if(ielen < (offset + 4)) { - ce->group_ciphers[2] = 1; /* TKIP */ + ce->group_ciphers |= (1<<2); /* TKIP */ + ce->pair_ciphers |= (1<<2); /* TKIP */ + ce->auth_suites |= (1<<2); /* PSK */ return; } if(memcmp(&iebuf[offset], wpa_oui, 3) != 0) - ce->group_ciphers[7] = 1; /* Proprietary */ + ce->group_ciphers |= (1<<7); /* Proprietary */ else - ce->group_ciphers[iebuf[offset+3]] = 1; + ce->group_ciphers |= (1<<iebuf[offset+3]); offset += 4; if(ielen < (offset + 2)) { - ce->pair_ciphers[2] = 1; /* TKIP */ + ce->pair_ciphers |= (1<<2); /* TKIP */ + ce->auth_suites |= (1<<2); /* PSK */ return; } @@ -312,9 +315,9 @@ static inline void wext_fill_wpa(unsigned char *iebuf, int buflen, struct iwinfo for(i = 0; i < cnt; i++) { if(memcmp(&iebuf[offset], wpa_oui, 3) != 0) - ce->pair_ciphers[7] = 1; /* Proprietary */ + ce->pair_ciphers |= (1<<7); /* Proprietary */ else if(iebuf[offset+3] <= IW_IE_CYPHER_NUM) - ce->pair_ciphers[iebuf[offset+3]] = 1; + ce->pair_ciphers |= (1<<iebuf[offset+3]); //else // ce->pair_ciphers[ce->pair_cipher_num++] = 255; /* Unknown */ @@ -336,9 +339,9 @@ static inline void wext_fill_wpa(unsigned char *iebuf, int buflen, struct iwinfo for(i = 0; i < cnt; i++) { if(memcmp(&iebuf[offset], wpa_oui, 3) != 0) - ce->auth_suites[7] = 1; /* Proprietary */ + ce->auth_suites |= (1<<7); /* Proprietary */ else if(iebuf[offset+3] <= IW_IE_KEY_MGMT_NUM) - ce->auth_suites[iebuf[offset+3]] = 1; + ce->auth_suites |= (1<<iebuf[offset+3]); //else // ce->auth_suites[ce->auth_suite_num++] = 255; /* Unknown */ @@ -467,7 +470,7 @@ int wext_get_scanlist(const char *ifname, char *buf, int *len) struct timeval tv; /* Select timeout */ int timeout = 15000000; /* 15s */ - int _len = 0; + int entrylen = 0; struct iwinfo_scanlist_entry e; //IWINFO_BUFSIZE @@ -610,10 +613,10 @@ int wext_get_scanlist(const char *ifname, char *buf, int *len) { first = 0; } - else if( (_len + sizeof(struct iwinfo_scanlist_entry)) <= IWINFO_BUFSIZE ) + else if( (entrylen + sizeof(struct iwinfo_scanlist_entry)) <= IWINFO_BUFSIZE ) { - memcpy(&buf[_len], &e, sizeof(struct iwinfo_scanlist_entry)); - _len += sizeof(struct iwinfo_scanlist_entry); + memcpy(&buf[entrylen], &e, sizeof(struct iwinfo_scanlist_entry)); + entrylen += sizeof(struct iwinfo_scanlist_entry); } else { @@ -630,7 +633,7 @@ int wext_get_scanlist(const char *ifname, char *buf, int *len) } while(ret > 0); free(buffer); - *len = _len; + *len = entrylen; return 0; } |