Changeset 42285


Ignore:
Timestamp:
2014-08-25T14:46:27+02:00 (3 years ago)
Author:
jow
Message:

BB: iwinfo: properly decode SSIDs when scanning through wpa_supplicant

Signed-off-by: Jo-Philipp Wich <jow@…>

Backport of r42273

Location:
branches/barrier_breaker/package/network/utils/iwinfo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/barrier_breaker/package/network/utils/iwinfo/Makefile

    r41826 r42285  
    88 
    99PKG_NAME:=libiwinfo 
    10 PKG_RELEASE:=50 
     10PKG_RELEASE:=51 
    1111 
    1212PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 
  • branches/barrier_breaker/package/network/utils/iwinfo/src/iwinfo_nl80211.c

    r42152 r42285  
    18821882} 
    18831883 
     1884static int wpasupp_ssid_decode(const char *in, char *out, int outlen) 
     1885{ 
     1886#define hex(x) \ 
     1887        (((x) >= 'a') ? ((x) - 'a' + 10) : \ 
     1888                (((x) >= 'A') ? ((x) - 'A' + 10) : ((x) - '0'))) 
     1889 
     1890        int len = 0; 
     1891 
     1892        while (*in) 
     1893        { 
     1894                if (len + 1 >= outlen) 
     1895                        break; 
     1896 
     1897                switch (*in) 
     1898                { 
     1899                case '\\': 
     1900                        in++; 
     1901                        switch (*in) 
     1902                        { 
     1903                        case 'n': 
     1904                                out[len++] = '\n'; in++; 
     1905                                break; 
     1906 
     1907                        case 'r': 
     1908                                out[len++] = '\r'; in++; 
     1909                                break; 
     1910 
     1911                        case 't': 
     1912                                out[len++] = '\t'; in++; 
     1913                                break; 
     1914 
     1915                        case 'e': 
     1916                                out[len++] = '\e'; in++; 
     1917                                break; 
     1918 
     1919                        case 'x': 
     1920                                if (isxdigit(*(in+1)) && isxdigit(*(in+2))) 
     1921                                        out[len++] = hex(*(in+1)) * 16 + hex(*(in+2)); 
     1922                                in += 3; 
     1923                                break; 
     1924 
     1925                        default: 
     1926                                out[len++] = *in++; 
     1927                                break; 
     1928                        } 
     1929                        break; 
     1930 
     1931                default: 
     1932                        out[len++] = *in++; 
     1933                        break; 
     1934                } 
     1935        } 
     1936 
     1937        if (outlen > len) 
     1938                out[len] = '\0'; 
     1939 
     1940        return len; 
     1941} 
     1942 
    18841943static int nl80211_get_scanlist(const char *ifname, char *buf, int *len) 
    18851944{ 
    18861945        int freq, rssi, qmax, count, mode; 
    18871946        char *res; 
    1888         char ssid[128] = { 0 }; 
     1947        char ssid[129] = { 0 }; 
    18891948        char bssid[18] = { 0 }; 
    18901949        char cipher[256] = { 0 }; 
     
    19311990                                        goto nextline; 
    19321991                                } 
    1933                                 if (sscanf(res, "%17s %d %d %255s%*[ \t]%127[^\n]\n", 
     1992                                if (sscanf(res, "%17s %d %d %255s%*[ \t]%128[^\n]\n", 
    19341993                                              bssid, &freq, &rssi, cipher, ssid) < 5) 
    19351994                                { 
     
    19462005 
    19472006                                /* SSID */ 
    1948                                 memcpy(e->ssid, ssid, min(strlen(ssid), sizeof(e->ssid) - 1)); 
     2007                                wpasupp_ssid_decode(ssid, e->ssid, sizeof(e->ssid)); 
    19492008 
    19502009                                /* Mode (assume master) */ 
Note: See TracChangeset for help on using the changeset viewer.