1 #include <u.h> 2 #include <libc.h> 3 #include <authsrv.h> 4 #include <bio.h> 5 #include "authcmdlib.h" 6 7 int 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 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* 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* 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* 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* 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