xref: /plan9/sys/src/cmd/auth/lib/readwrite.c (revision 5979f96214a33481f1724725761f2ef3585d2237)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <authsrv.h>
4*5979f962SDavid du Colombier #include <bio.h>
59a747e4fSDavid du Colombier #include "authcmdlib.h"
6219b2ee8SDavid du Colombier 
7219b2ee8SDavid du Colombier int
readfile(char * file,char * buf,int n)8219b2ee8SDavid du Colombier readfile(char *file, char *buf, int n)
9219b2ee8SDavid du Colombier {
10219b2ee8SDavid du Colombier 	int fd;
11219b2ee8SDavid du Colombier 
12219b2ee8SDavid du Colombier 	fd = open(file, OREAD);
13219b2ee8SDavid du Colombier 	if(fd < 0){
14219b2ee8SDavid du Colombier 		werrstr("%s: %r", file);
15219b2ee8SDavid du Colombier 		return -1;
16219b2ee8SDavid du Colombier 	}
17219b2ee8SDavid du Colombier 	n = read(fd, buf, n);
18219b2ee8SDavid du Colombier 	close(fd);
19219b2ee8SDavid du Colombier 	return n;
20219b2ee8SDavid du Colombier }
21219b2ee8SDavid du Colombier 
22219b2ee8SDavid du Colombier int
writefile(char * file,char * buf,int n)23219b2ee8SDavid du Colombier writefile(char *file, char *buf, int n)
24219b2ee8SDavid du Colombier {
25219b2ee8SDavid du Colombier 	int fd;
26219b2ee8SDavid du Colombier 
27219b2ee8SDavid du Colombier 	fd = open(file, OWRITE);
28219b2ee8SDavid du Colombier 	if(fd < 0)
29219b2ee8SDavid du Colombier 		return -1;
30219b2ee8SDavid du Colombier 	n = write(fd, buf, n);
31219b2ee8SDavid du Colombier 	close(fd);
32219b2ee8SDavid du Colombier 	return n;
33219b2ee8SDavid du Colombier }
34219b2ee8SDavid du Colombier 
35219b2ee8SDavid du Colombier char*
findkey(char * db,char * user,char * key)36219b2ee8SDavid du Colombier findkey(char *db, char *user, char *key)
37219b2ee8SDavid du Colombier {
38219b2ee8SDavid du Colombier 	int n;
399a747e4fSDavid du Colombier 	char filename[Maxpath];
40219b2ee8SDavid du Colombier 
419a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/key", db, user);
42219b2ee8SDavid du Colombier 	n = readfile(filename, key, DESKEYLEN);
43219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
44219b2ee8SDavid du Colombier 		return 0;
45219b2ee8SDavid du Colombier 	else
46219b2ee8SDavid du Colombier 		return key;
47219b2ee8SDavid du Colombier }
48219b2ee8SDavid du Colombier 
49219b2ee8SDavid du Colombier char*
findsecret(char * db,char * user,char * secret)507dd7cddfSDavid du Colombier findsecret(char *db, char *user, char *secret)
517dd7cddfSDavid du Colombier {
527dd7cddfSDavid du Colombier 	int n;
539a747e4fSDavid du Colombier 	char filename[Maxpath];
547dd7cddfSDavid du Colombier 
559a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/secret", db, user);
567dd7cddfSDavid du Colombier 	n = readfile(filename, secret, SECRETLEN-1);
577dd7cddfSDavid du Colombier 	secret[n]=0;
587dd7cddfSDavid du Colombier 	if(n <= 0)
597dd7cddfSDavid du Colombier 		return 0;
607dd7cddfSDavid du Colombier 	else
617dd7cddfSDavid du Colombier 		return secret;
627dd7cddfSDavid du Colombier }
637dd7cddfSDavid du Colombier 
647dd7cddfSDavid du Colombier char*
setkey(char * db,char * user,char * key)65219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key)
66219b2ee8SDavid du Colombier {
67219b2ee8SDavid du Colombier 	int n;
689a747e4fSDavid du Colombier 	char filename[Maxpath];
69219b2ee8SDavid du Colombier 
709a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/key", db, user);
71219b2ee8SDavid du Colombier 	n = writefile(filename, key, DESKEYLEN);
72219b2ee8SDavid du Colombier 	if(n != DESKEYLEN)
73219b2ee8SDavid du Colombier 		return 0;
74219b2ee8SDavid du Colombier 	else
75219b2ee8SDavid du Colombier 		return key;
76219b2ee8SDavid du Colombier }
777dd7cddfSDavid du Colombier 
787dd7cddfSDavid du Colombier char*
setsecret(char * db,char * user,char * secret)797dd7cddfSDavid du Colombier setsecret(char *db, char *user, char *secret)
807dd7cddfSDavid du Colombier {
817dd7cddfSDavid du Colombier 	int n;
829a747e4fSDavid du Colombier 	char filename[Maxpath];
837dd7cddfSDavid du Colombier 
849a747e4fSDavid du Colombier 	snprint(filename, sizeof filename, "%s/%s/secret", db, user);
857dd7cddfSDavid du Colombier 	n = writefile(filename, secret, strlen(secret));
867dd7cddfSDavid du Colombier 	if(n != strlen(secret))
877dd7cddfSDavid du Colombier 		return 0;
887dd7cddfSDavid du Colombier 	else
897dd7cddfSDavid du Colombier 		return secret;
907dd7cddfSDavid du Colombier }
91