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