xref: /plan9/sys/src/cmd/auth/lib/readwrite.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <auth.h>
4219b2ee8SDavid du Colombier #include "authsrv.h"
5219b2ee8SDavid du Colombier 
6219b2ee8SDavid du Colombier int
7219b2ee8SDavid du Colombier readfile(char *file, char *buf, int n)
8219b2ee8SDavid du Colombier {
9219b2ee8SDavid du Colombier 	int fd;
10219b2ee8SDavid du Colombier 
11219b2ee8SDavid du Colombier 	fd = open(file, OREAD);
12219b2ee8SDavid du Colombier 	if(fd < 0){
13219b2ee8SDavid du Colombier 		werrstr("%s: %r", file);
14219b2ee8SDavid du Colombier 		return -1;
15219b2ee8SDavid du Colombier 	}
16219b2ee8SDavid du Colombier 	n = read(fd, buf, n);
17219b2ee8SDavid du Colombier 	close(fd);
18219b2ee8SDavid du Colombier 	return n;
19219b2ee8SDavid du Colombier }
20219b2ee8SDavid du Colombier 
21219b2ee8SDavid du Colombier int
22219b2ee8SDavid du Colombier writefile(char *file, char *buf, int n)
23219b2ee8SDavid du Colombier {
24219b2ee8SDavid du Colombier 	int fd;
25219b2ee8SDavid du Colombier 
26219b2ee8SDavid du Colombier 	fd = open(file, OWRITE);
27219b2ee8SDavid du Colombier 	if(fd < 0)
28219b2ee8SDavid du Colombier 		return -1;
29219b2ee8SDavid du Colombier 	n = write(fd, buf, n);
30219b2ee8SDavid du Colombier 	close(fd);
31219b2ee8SDavid du Colombier 	return n;
32219b2ee8SDavid du Colombier }
33219b2ee8SDavid du Colombier 
34219b2ee8SDavid du Colombier char*
35219b2ee8SDavid du Colombier findkey(char *db, char *user, char *key)
36219b2ee8SDavid du Colombier {
37219b2ee8SDavid du Colombier 	int n;
38219b2ee8SDavid du Colombier 	char filename[3*NAMELEN];
39219b2ee8SDavid du Colombier 
40219b2ee8SDavid du Colombier 	sprint(filename, "%s/%s/key", db, user);
41219b2ee8SDavid du Colombier 	n = readfile(filename, key, DESKEYLEN);
42219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
43219b2ee8SDavid du Colombier 		return 0;
44219b2ee8SDavid du Colombier 	else
45219b2ee8SDavid du Colombier 		return key;
46219b2ee8SDavid du Colombier }
47219b2ee8SDavid du Colombier 
48219b2ee8SDavid du Colombier char*
49*7dd7cddfSDavid du Colombier findsecret(char *db, char *user, char *secret)
50*7dd7cddfSDavid du Colombier {
51*7dd7cddfSDavid du Colombier 	int n;
52*7dd7cddfSDavid du Colombier 	char filename[3*NAMELEN];
53*7dd7cddfSDavid du Colombier 
54*7dd7cddfSDavid du Colombier 	sprint(filename, "%s/%s/secret", db, user);
55*7dd7cddfSDavid du Colombier 	n = readfile(filename, secret, SECRETLEN-1);
56*7dd7cddfSDavid du Colombier 	secret[n]=0;
57*7dd7cddfSDavid du Colombier 	if(n <= 0)
58*7dd7cddfSDavid du Colombier 		return 0;
59*7dd7cddfSDavid du Colombier 	else
60*7dd7cddfSDavid du Colombier 		return secret;
61*7dd7cddfSDavid du Colombier }
62*7dd7cddfSDavid du Colombier 
63*7dd7cddfSDavid du Colombier char*
64219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key)
65219b2ee8SDavid du Colombier {
66219b2ee8SDavid du Colombier 	int n;
67219b2ee8SDavid du Colombier 	char filename[3*NAMELEN];
68219b2ee8SDavid du Colombier 
69219b2ee8SDavid du Colombier 	sprint(filename, "%s/%s/key", db, user);
70219b2ee8SDavid du Colombier 	n = writefile(filename, key, DESKEYLEN);
71219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
72219b2ee8SDavid du Colombier 		return 0;
73219b2ee8SDavid du Colombier 	else
74219b2ee8SDavid du Colombier 		return key;
75219b2ee8SDavid du Colombier }
76*7dd7cddfSDavid du Colombier 
77*7dd7cddfSDavid du Colombier char*
78*7dd7cddfSDavid du Colombier setsecret(char *db, char *user, char *secret)
79*7dd7cddfSDavid du Colombier {
80*7dd7cddfSDavid du Colombier 	int n;
81*7dd7cddfSDavid du Colombier 	char filename[3*NAMELEN];
82*7dd7cddfSDavid du Colombier 
83*7dd7cddfSDavid du Colombier 	sprint(filename, "%s/%s/secret", db, user);
84*7dd7cddfSDavid du Colombier 	n = writefile(filename, secret, strlen(secret));
85*7dd7cddfSDavid du Colombier 	if(n != strlen(secret))
86*7dd7cddfSDavid du Colombier 		return 0;
87*7dd7cddfSDavid du Colombier 	else
88*7dd7cddfSDavid du Colombier 		return secret;
89*7dd7cddfSDavid du Colombier }
90