1219b2ee8SDavid du Colombier #include <u.h> 2219b2ee8SDavid du Colombier #include <libc.h> 3219b2ee8SDavid du Colombier #include <auth.h> 4219b2ee8SDavid du Colombier #include "authsrv.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; 38219b2ee8SDavid du Colombier char filename[3*NAMELEN]; 39219b2ee8SDavid du Colombier 40219b2ee8SDavid du Colombier sprint(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* 49*7dd7cddfSDavid du Colombier findsecret(char *db, char *user, char *secret) 50*7dd7cddfSDavid du Colombier { 51*7dd7cddfSDavid du Colombier int n; 52*7dd7cddfSDavid du Colombier char filename[3*NAMELEN]; 53*7dd7cddfSDavid du Colombier 54*7dd7cddfSDavid du Colombier sprint(filename, "%s/%s/secret", db, user); 55*7dd7cddfSDavid du Colombier n = readfile(filename, secret, SECRETLEN-1); 56*7dd7cddfSDavid du Colombier secret[n]=0; 57*7dd7cddfSDavid du Colombier if(n <= 0) 58*7dd7cddfSDavid du Colombier return 0; 59*7dd7cddfSDavid du Colombier else 60*7dd7cddfSDavid du Colombier return secret; 61*7dd7cddfSDavid du Colombier } 62*7dd7cddfSDavid du Colombier 63*7dd7cddfSDavid du Colombier char* 64219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key) 65219b2ee8SDavid du Colombier { 66219b2ee8SDavid du Colombier int n; 67219b2ee8SDavid du Colombier char filename[3*NAMELEN]; 68219b2ee8SDavid du Colombier 69219b2ee8SDavid du Colombier sprint(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 } 76*7dd7cddfSDavid du Colombier 77*7dd7cddfSDavid du Colombier char* 78*7dd7cddfSDavid du Colombier setsecret(char *db, char *user, char *secret) 79*7dd7cddfSDavid du Colombier { 80*7dd7cddfSDavid du Colombier int n; 81*7dd7cddfSDavid du Colombier char filename[3*NAMELEN]; 82*7dd7cddfSDavid du Colombier 83*7dd7cddfSDavid du Colombier sprint(filename, "%s/%s/secret", db, user); 84*7dd7cddfSDavid du Colombier n = writefile(filename, secret, strlen(secret)); 85*7dd7cddfSDavid du Colombier if(n != strlen(secret)) 86*7dd7cddfSDavid du Colombier return 0; 87*7dd7cddfSDavid du Colombier else 88*7dd7cddfSDavid du Colombier return secret; 89*7dd7cddfSDavid du Colombier } 90