wifi: have to check for both, bssid/essid in wifictl too

This commit is contained in:
cinap_lenrek 2013-06-23 00:32:16 +02:00
parent 6ea8d97438
commit 677746244d

View file

@ -644,31 +644,38 @@ wifictl(Wifi *wifi, void *buf, long n)
print("#l%d: debug: %d\n", wifi->ether->ctlrno, wifi->debug); print("#l%d: debug: %d\n", wifi->ether->ctlrno, wifi->debug);
break; break;
case CMessid: case CMessid:
if(cb->f[1] == nil){ if(cb->f[1] != nil){
wifi->essid[0] = 0;
wifi->bss = nil;
setstatus(wifi, Snone);
} else {
strncpy(wifi->essid, cb->f[1], Essidlen); strncpy(wifi->essid, cb->f[1], Essidlen);
for(wn = wifi->node; wn != &wifi->node[nelem(wifi->node)]; wn++) for(wn = wifi->node; wn != &wifi->node[nelem(wifi->node)]; wn++)
if(strcmp(wifi->essid, wn->ssid) == 0){ if(strcmp(wifi->essid, wn->ssid) == 0){
/* both must match if specifid */
if(memcmp(wifi->bssid, wifi->ether->bcast, Eaddrlen) != 0
&& memcmp(wifi->bssid, wn->bssid, Eaddrlen) != 0)
continue;
wifi->bss = wn; wifi->bss = wn;
setstatus(wifi, Sconn); setstatus(wifi, Sconn);
sendauth(wifi, wn); sendauth(wifi, wn);
break; goto done;
} }
} } else
wifi->essid[0] = 0;
wifi->bss = nil;
setstatus(wifi, Snone);
break; break;
case CMbssid: case CMbssid:
memmove(wifi->bssid, addr, Eaddrlen); memmove(wifi->bssid, addr, Eaddrlen);
if(wn == nil){ if(wn != nil){
wifi->bss = nil; /* both must match if specifid */
setstatus(wifi, Snone); if(wifi->essid[0] == 0 || strcmp(wifi->essid, wn->ssid) == 0){
} else { wifi->bss = wn;
wifi->bss = wn; setstatus(wifi, Sconn);
setstatus(wifi, Sconn); sendauth(wifi, wn);
sendauth(wifi, wn); goto done;
}
} }
wifi->bss = nil;
setstatus(wifi, Snone);
break; break;
case CMauth: case CMauth:
setstatus(wifi, Sauth); setstatus(wifi, Sauth);
@ -692,6 +699,7 @@ wifictl(Wifi *wifi, void *buf, long n)
setstatus(wifi, Sassoc); setstatus(wifi, Sassoc);
break; break;
} }
done:
poperror(); poperror();
free(cb); free(cb);
return n; return n;