1 #include <u.h>
2 #include <libc.h>
3 #include <authsrv.h>
4 #include <bio.h>
5 #include "authcmdlib.h"
6
7 int
readfile(char * file,char * buf,int n)8 readfile(char *file, char *buf, int n)
9 {
10 int fd;
11
12 fd = open(file, OREAD);
13 if(fd < 0){
14 werrstr("%s: %r", file);
15 return -1;
16 }
17 n = read(fd, buf, n);
18 close(fd);
19 return n;
20 }
21
22 int
writefile(char * file,char * buf,int n)23 writefile(char *file, char *buf, int n)
24 {
25 int fd;
26
27 fd = open(file, OWRITE);
28 if(fd < 0)
29 return -1;
30 n = write(fd, buf, n);
31 close(fd);
32 return n;
33 }
34
35 char*
findkey(char * db,char * user,char * key)36 findkey(char *db, char *user, char *key)
37 {
38 int n;
39 char filename[Maxpath];
40
41 snprint(filename, sizeof filename, "%s/%s/key", db, user);
42 n = readfile(filename, key, DESKEYLEN);
43 if(n != DESKEYLEN)
44 return 0;
45 else
46 return key;
47 }
48
49 char*
findsecret(char * db,char * user,char * secret)50 findsecret(char *db, char *user, char *secret)
51 {
52 int n;
53 char filename[Maxpath];
54
55 snprint(filename, sizeof filename, "%s/%s/secret", db, user);
56 n = readfile(filename, secret, SECRETLEN-1);
57 secret[n]=0;
58 if(n <= 0)
59 return 0;
60 else
61 return secret;
62 }
63
64 char*
setkey(char * db,char * user,char * key)65 setkey(char *db, char *user, char *key)
66 {
67 int n;
68 char filename[Maxpath];
69
70 snprint(filename, sizeof filename, "%s/%s/key", db, user);
71 n = writefile(filename, key, DESKEYLEN);
72 if(n != DESKEYLEN)
73 return 0;
74 else
75 return key;
76 }
77
78 char*
setsecret(char * db,char * user,char * secret)79 setsecret(char *db, char *user, char *secret)
80 {
81 int n;
82 char filename[Maxpath];
83
84 snprint(filename, sizeof filename, "%s/%s/secret", db, user);
85 n = writefile(filename, secret, strlen(secret));
86 if(n != strlen(secret))
87 return 0;
88 else
89 return secret;
90 }
91