2 1757e76a 2005-02-13 devnull * Copy WEP key to ethernet device.
5 1757e76a 2005-02-13 devnull #include "std.h"
6 1757e76a 2005-02-13 devnull #include "dat.h"
8 1757e76a 2005-02-13 devnull static int
9 1757e76a 2005-02-13 devnull wepclient(Conv *c)
11 1757e76a 2005-02-13 devnull char *dev, buf[128], *p, *kp;
13 1757e76a 2005-02-13 devnull int ret, fd, cfd;
15 1757e76a 2005-02-13 devnull fd = cfd = -1;
16 1757e76a 2005-02-13 devnull ret = -1;
17 1757e76a 2005-02-13 devnull dev = nil;
19 1757e76a 2005-02-13 devnull if((k = keylookup("%A !key1?", c->attr)) == nil
20 1757e76a 2005-02-13 devnull && (k = keylookup("%A !key2?", c->attr)) == nil
21 1757e76a 2005-02-13 devnull && (k = keylookup("%A !key3?", c->attr)) == nil){
22 1757e76a 2005-02-13 devnull werrstr("cannot find wep keys");
23 1757e76a 2005-02-13 devnull goto out;
25 1757e76a 2005-02-13 devnull if(convreadm(c, &dev) < 0)
26 1757e76a 2005-02-13 devnull return -1;
27 1757e76a 2005-02-13 devnull if(dev[0] != '#' || dev[1] != 'l'){
28 1757e76a 2005-02-13 devnull werrstr("not an ethernet device: %s", dev);
29 1757e76a 2005-02-13 devnull goto out;
31 1757e76a 2005-02-13 devnull snprint(buf, sizeof buf, "%s!0", dev);
32 1757e76a 2005-02-13 devnull if((fd = dial(buf, 0, 0, &cfd)) < 0)
33 1757e76a 2005-02-13 devnull goto out;
34 1757e76a 2005-02-13 devnull if(!(p = strfindattr(k->privattr, kp="!key1"))
35 1757e76a 2005-02-13 devnull && !(p = strfindattr(k->privattr, kp="key2"))
36 1757e76a 2005-02-13 devnull && !(p = strfindattr(k->privattr, kp="key3"))){
37 1757e76a 2005-02-13 devnull werrstr("lost key");
38 1757e76a 2005-02-13 devnull goto out;
40 1757e76a 2005-02-13 devnull if(fprint(cfd, "%s %q", kp+1, p) < 0)
41 1757e76a 2005-02-13 devnull goto out;
42 1757e76a 2005-02-13 devnull if((p = strfindattr(k->attr, "essid")) != nil
43 1757e76a 2005-02-13 devnull && fprint(cfd, "essid %q", p) < 0)
44 1757e76a 2005-02-13 devnull goto out;
45 1757e76a 2005-02-13 devnull if(fprint(cfd, "crypt on") < 0)
46 1757e76a 2005-02-13 devnull goto out;
50 1757e76a 2005-02-13 devnull free(dev);
51 1757e76a 2005-02-13 devnull if(cfd >= 0)
52 1757e76a 2005-02-13 devnull close(cfd);
53 1757e76a 2005-02-13 devnull if(fd >= 0)
54 1757e76a 2005-02-13 devnull close(fd);
55 1757e76a 2005-02-13 devnull keyclose(k);
56 1757e76a 2005-02-13 devnull return ret;
59 1757e76a 2005-02-13 devnull static int
60 1757e76a 2005-02-13 devnull wepcheck(Key *k)
62 1757e76a 2005-02-13 devnull if(strfindattr(k->privattr, "!key1") == nil
63 1757e76a 2005-02-13 devnull && strfindattr(k->privattr, "!key2") == nil
64 1757e76a 2005-02-13 devnull && strfindattr(k->privattr, "!key3") == nil){
65 1757e76a 2005-02-13 devnull werrstr("need !key1, !key2, or !key3 attribute");
66 1757e76a 2005-02-13 devnull return -1;
68 1757e76a 2005-02-13 devnull return 0;
71 1757e76a 2005-02-13 devnull static Role weproles[] = {
72 1757e76a 2005-02-13 devnull "client", wepclient,
76 1757e76a 2005-02-13 devnull Proto wep =
79 1757e76a 2005-02-13 devnull weproles,
81 1757e76a 2005-02-13 devnull wepcheck,