Blame


1 1757e76a 2005-02-13 devnull /*
2 1757e76a 2005-02-13 devnull * Copy WEP key to ethernet device.
3 1757e76a 2005-02-13 devnull */
4 1757e76a 2005-02-13 devnull
5 1757e76a 2005-02-13 devnull #include "std.h"
6 1757e76a 2005-02-13 devnull #include "dat.h"
7 1757e76a 2005-02-13 devnull
8 1757e76a 2005-02-13 devnull static int
9 1757e76a 2005-02-13 devnull wepclient(Conv *c)
10 1757e76a 2005-02-13 devnull {
11 1757e76a 2005-02-13 devnull char *dev, buf[128], *p, *kp;
12 1757e76a 2005-02-13 devnull Key *k;
13 1757e76a 2005-02-13 devnull int ret, fd, cfd;
14 1757e76a 2005-02-13 devnull
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;
18 1757e76a 2005-02-13 devnull
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;
24 1757e76a 2005-02-13 devnull }
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;
30 1757e76a 2005-02-13 devnull }
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;
39 1757e76a 2005-02-13 devnull }
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;
47 1757e76a 2005-02-13 devnull ret = 0;
48 1757e76a 2005-02-13 devnull
49 1757e76a 2005-02-13 devnull 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;
57 1757e76a 2005-02-13 devnull }
58 1757e76a 2005-02-13 devnull
59 1757e76a 2005-02-13 devnull static int
60 1757e76a 2005-02-13 devnull wepcheck(Key *k)
61 1757e76a 2005-02-13 devnull {
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;
67 1757e76a 2005-02-13 devnull }
68 1757e76a 2005-02-13 devnull return 0;
69 1757e76a 2005-02-13 devnull }
70 1757e76a 2005-02-13 devnull
71 1757e76a 2005-02-13 devnull static Role weproles[] = {
72 1757e76a 2005-02-13 devnull "client", wepclient,
73 1757e76a 2005-02-13 devnull 0
74 1757e76a 2005-02-13 devnull };
75 1757e76a 2005-02-13 devnull
76 1757e76a 2005-02-13 devnull Proto wep =
77 1757e76a 2005-02-13 devnull {
78 1757e76a 2005-02-13 devnull "wep",
79 1757e76a 2005-02-13 devnull weproles,
80 1757e76a 2005-02-13 devnull nil,
81 1757e76a 2005-02-13 devnull wepcheck,
82 1757e76a 2005-02-13 devnull nil
83 1757e76a 2005-02-13 devnull };