xref: /plan9/sys/src/libauth/auth_wep.c (revision 39734e7ed1eb944f5e7b41936007d0d38b560d7f)
1*39734e7eSDavid du Colombier #include <u.h>
2*39734e7eSDavid du Colombier #include <libc.h>
3*39734e7eSDavid du Colombier #include <auth.h>
4*39734e7eSDavid du Colombier #include "authlocal.h"
5*39734e7eSDavid du Colombier 
6*39734e7eSDavid du Colombier /*
7*39734e7eSDavid du Colombier  *  make factotum add wep keys to an 802.11 device
8*39734e7eSDavid du Colombier  */
9*39734e7eSDavid du Colombier int
auth_wep(char * dev,char * fmt,...)10*39734e7eSDavid du Colombier auth_wep(char *dev, char *fmt, ...)
11*39734e7eSDavid du Colombier {
12*39734e7eSDavid du Colombier 	AuthRpc *rpc;
13*39734e7eSDavid du Colombier 	char *params, *p;
14*39734e7eSDavid du Colombier 	int fd;
15*39734e7eSDavid du Colombier 	va_list arg;
16*39734e7eSDavid du Colombier 	int rv;
17*39734e7eSDavid du Colombier 
18*39734e7eSDavid du Colombier 	rv = -1;
19*39734e7eSDavid du Colombier 
20*39734e7eSDavid du Colombier 	if(dev == nil){
21*39734e7eSDavid du Colombier 		werrstr("no device specified");
22*39734e7eSDavid du Colombier 		return rv;
23*39734e7eSDavid du Colombier 	}
24*39734e7eSDavid du Colombier 
25*39734e7eSDavid du Colombier 	fd = open("/mnt/factotum/rpc", ORDWR);
26*39734e7eSDavid du Colombier 	if(fd < 0)
27*39734e7eSDavid du Colombier 		return rv;
28*39734e7eSDavid du Colombier 
29*39734e7eSDavid du Colombier 	rpc = auth_allocrpc(fd);
30*39734e7eSDavid du Colombier 	if(rpc != nil){
31*39734e7eSDavid du Colombier 		quotefmtinstall();	/* just in case */
32*39734e7eSDavid du Colombier 		va_start(arg, fmt);
33*39734e7eSDavid du Colombier 		params = vsmprint(fmt, arg);
34*39734e7eSDavid du Colombier 		va_end(arg);
35*39734e7eSDavid du Colombier 		if(params != nil){
36*39734e7eSDavid du Colombier 			p = smprint("proto=wep %s", params);
37*39734e7eSDavid du Colombier 			if(p != nil){
38*39734e7eSDavid du Colombier 				if(auth_rpc(rpc, "start", p, strlen(p)) == ARok
39*39734e7eSDavid du Colombier 				&& auth_rpc(rpc, "write", dev, strlen(dev)) == ARok)
40*39734e7eSDavid du Colombier 					rv = 0;
41*39734e7eSDavid du Colombier 				free(p);
42*39734e7eSDavid du Colombier 			}
43*39734e7eSDavid du Colombier 			free(params);
44*39734e7eSDavid du Colombier 		}
45*39734e7eSDavid du Colombier 		auth_freerpc(rpc);
46*39734e7eSDavid du Colombier 	}
47*39734e7eSDavid du Colombier 	close(fd);
48*39734e7eSDavid du Colombier 
49*39734e7eSDavid du Colombier 	return rv;
50*39734e7eSDavid du Colombier }
51