xref: /plan9-contrib/sys/src/cmd/auth/lib/readwrite.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <authsrv.h>
4*9a747e4fSDavid du Colombier #include "authcmdlib.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;
38*9a747e4fSDavid du Colombier 	char filename[Maxpath];
39219b2ee8SDavid du Colombier 
40*9a747e4fSDavid du Colombier 	snprint(filename, sizeof 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*
497dd7cddfSDavid du Colombier findsecret(char *db, char *user, char *secret)
507dd7cddfSDavid du Colombier {
517dd7cddfSDavid du Colombier 	int n;
52*9a747e4fSDavid du Colombier 	char filename[Maxpath];
537dd7cddfSDavid du Colombier 
54*9a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/secret", db, user);
557dd7cddfSDavid du Colombier 	n = readfile(filename, secret, SECRETLEN-1);
567dd7cddfSDavid du Colombier 	secret[n]=0;
577dd7cddfSDavid du Colombier 	if(n <= 0)
587dd7cddfSDavid du Colombier 		return 0;
597dd7cddfSDavid du Colombier 	else
607dd7cddfSDavid du Colombier 		return secret;
617dd7cddfSDavid du Colombier }
627dd7cddfSDavid du Colombier 
637dd7cddfSDavid du Colombier char*
64219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key)
65219b2ee8SDavid du Colombier {
66219b2ee8SDavid du Colombier 	int n;
67*9a747e4fSDavid du Colombier 	char filename[Maxpath];
68219b2ee8SDavid du Colombier 
69*9a747e4fSDavid du Colombier 	snprint(filename, sizeof 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 }
767dd7cddfSDavid du Colombier 
777dd7cddfSDavid du Colombier char*
787dd7cddfSDavid du Colombier setsecret(char *db, char *user, char *secret)
797dd7cddfSDavid du Colombier {
807dd7cddfSDavid du Colombier 	int n;
81*9a747e4fSDavid du Colombier 	char filename[Maxpath];
827dd7cddfSDavid du Colombier 
83*9a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/secret", db, user);
847dd7cddfSDavid du Colombier 	n = writefile(filename, secret, strlen(secret));
857dd7cddfSDavid du Colombier 	if(n != strlen(secret))
867dd7cddfSDavid du Colombier 		return 0;
877dd7cddfSDavid du Colombier 	else
887dd7cddfSDavid du Colombier 		return secret;
897dd7cddfSDavid du Colombier }
90