xref: /plan9-contrib/sys/src/cmd/auth/lib/readwrite.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <u.h>
2*219b2ee8SDavid du Colombier #include <libc.h>
3*219b2ee8SDavid du Colombier #include <auth.h>
4*219b2ee8SDavid du Colombier #include "authsrv.h"
5*219b2ee8SDavid du Colombier 
6*219b2ee8SDavid du Colombier int
7*219b2ee8SDavid du Colombier readfile(char *file, char *buf, int n)
8*219b2ee8SDavid du Colombier {
9*219b2ee8SDavid du Colombier 	int fd;
10*219b2ee8SDavid du Colombier 
11*219b2ee8SDavid du Colombier 	fd = open(file, OREAD);
12*219b2ee8SDavid du Colombier 	if(fd < 0){
13*219b2ee8SDavid du Colombier 		werrstr("%s: %r", file);
14*219b2ee8SDavid du Colombier 		return -1;
15*219b2ee8SDavid du Colombier 	}
16*219b2ee8SDavid du Colombier 	n = read(fd, buf, n);
17*219b2ee8SDavid du Colombier 	close(fd);
18*219b2ee8SDavid du Colombier 	return n;
19*219b2ee8SDavid du Colombier }
20*219b2ee8SDavid du Colombier 
21*219b2ee8SDavid du Colombier int
22*219b2ee8SDavid du Colombier writefile(char *file, char *buf, int n)
23*219b2ee8SDavid du Colombier {
24*219b2ee8SDavid du Colombier 	int fd;
25*219b2ee8SDavid du Colombier 
26*219b2ee8SDavid du Colombier 	fd = open(file, OWRITE);
27*219b2ee8SDavid du Colombier 	if(fd < 0)
28*219b2ee8SDavid du Colombier 		return -1;
29*219b2ee8SDavid du Colombier 	n = write(fd, buf, n);
30*219b2ee8SDavid du Colombier 	close(fd);
31*219b2ee8SDavid du Colombier 	return n;
32*219b2ee8SDavid du Colombier }
33*219b2ee8SDavid du Colombier 
34*219b2ee8SDavid du Colombier char*
35*219b2ee8SDavid du Colombier findkey(char *db, char *user, char *key)
36*219b2ee8SDavid du Colombier {
37*219b2ee8SDavid du Colombier 	int n;
38*219b2ee8SDavid du Colombier 	char filename[3*NAMELEN];
39*219b2ee8SDavid du Colombier 
40*219b2ee8SDavid du Colombier 	sprint(filename, "%s/%s/key", db, user);
41*219b2ee8SDavid du Colombier 	n = readfile(filename, key, DESKEYLEN);
42*219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
43*219b2ee8SDavid du Colombier 		return 0;
44*219b2ee8SDavid du Colombier 	else
45*219b2ee8SDavid du Colombier 		return key;
46*219b2ee8SDavid du Colombier }
47*219b2ee8SDavid du Colombier 
48*219b2ee8SDavid du Colombier char*
49*219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key)
50*219b2ee8SDavid du Colombier {
51*219b2ee8SDavid du Colombier 	int n;
52*219b2ee8SDavid du Colombier 	char filename[3*NAMELEN];
53*219b2ee8SDavid du Colombier 
54*219b2ee8SDavid du Colombier 	sprint(filename, "%s/%s/key", db, user);
55*219b2ee8SDavid du Colombier 	n = writefile(filename, key, DESKEYLEN);
56*219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
57*219b2ee8SDavid du Colombier 		return 0;
58*219b2ee8SDavid du Colombier 	else
59*219b2ee8SDavid du Colombier 		return key;
60*219b2ee8SDavid du Colombier }
61