1219b2ee8SDavid du Colombier #include <u.h> 2219b2ee8SDavid du Colombier #include <libc.h> 3*9a747e4fSDavid du Colombier #include <authsrv.h> 4*9a747e4fSDavid du Colombier #include "authcmdlib.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; 38*9a747e4fSDavid du Colombier char filename[Maxpath]; 39219b2ee8SDavid du Colombier 40*9a747e4fSDavid du Colombier snprint(filename, sizeof 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* 497dd7cddfSDavid du Colombier findsecret(char *db, char *user, char *secret) 507dd7cddfSDavid du Colombier { 517dd7cddfSDavid du Colombier int n; 52*9a747e4fSDavid du Colombier char filename[Maxpath]; 537dd7cddfSDavid du Colombier 54*9a747e4fSDavid du Colombier snprint(filename, sizeof filename, "%s/%s/secret", db, user); 557dd7cddfSDavid du Colombier n = readfile(filename, secret, SECRETLEN-1); 567dd7cddfSDavid du Colombier secret[n]=0; 577dd7cddfSDavid du Colombier if(n <= 0) 587dd7cddfSDavid du Colombier return 0; 597dd7cddfSDavid du Colombier else 607dd7cddfSDavid du Colombier return secret; 617dd7cddfSDavid du Colombier } 627dd7cddfSDavid du Colombier 637dd7cddfSDavid du Colombier char* 64219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key) 65219b2ee8SDavid du Colombier { 66219b2ee8SDavid du Colombier int n; 67*9a747e4fSDavid du Colombier char filename[Maxpath]; 68219b2ee8SDavid du Colombier 69*9a747e4fSDavid du Colombier snprint(filename, sizeof 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 } 767dd7cddfSDavid du Colombier 777dd7cddfSDavid du Colombier char* 787dd7cddfSDavid du Colombier setsecret(char *db, char *user, char *secret) 797dd7cddfSDavid du Colombier { 807dd7cddfSDavid du Colombier int n; 81*9a747e4fSDavid du Colombier char filename[Maxpath]; 827dd7cddfSDavid du Colombier 83*9a747e4fSDavid du Colombier snprint(filename, sizeof filename, "%s/%s/secret", db, user); 847dd7cddfSDavid du Colombier n = writefile(filename, secret, strlen(secret)); 857dd7cddfSDavid du Colombier if(n != strlen(secret)) 867dd7cddfSDavid du Colombier return 0; 877dd7cddfSDavid du Colombier else 887dd7cddfSDavid du Colombier return secret; 897dd7cddfSDavid du Colombier } 90