1*219b2ee8SDavid du Colombier #include <u.h> 2*219b2ee8SDavid du Colombier #include <libc.h> 3*219b2ee8SDavid du Colombier #include <auth.h> 4*219b2ee8SDavid du Colombier #include "authsrv.h" 5*219b2ee8SDavid du Colombier 6*219b2ee8SDavid du Colombier int 7*219b2ee8SDavid du Colombier readfile(char *file, char *buf, int n) 8*219b2ee8SDavid du Colombier { 9*219b2ee8SDavid du Colombier int fd; 10*219b2ee8SDavid du Colombier 11*219b2ee8SDavid du Colombier fd = open(file, OREAD); 12*219b2ee8SDavid du Colombier if(fd < 0){ 13*219b2ee8SDavid du Colombier werrstr("%s: %r", file); 14*219b2ee8SDavid du Colombier return -1; 15*219b2ee8SDavid du Colombier } 16*219b2ee8SDavid du Colombier n = read(fd, buf, n); 17*219b2ee8SDavid du Colombier close(fd); 18*219b2ee8SDavid du Colombier return n; 19*219b2ee8SDavid du Colombier } 20*219b2ee8SDavid du Colombier 21*219b2ee8SDavid du Colombier int 22*219b2ee8SDavid du Colombier writefile(char *file, char *buf, int n) 23*219b2ee8SDavid du Colombier { 24*219b2ee8SDavid du Colombier int fd; 25*219b2ee8SDavid du Colombier 26*219b2ee8SDavid du Colombier fd = open(file, OWRITE); 27*219b2ee8SDavid du Colombier if(fd < 0) 28*219b2ee8SDavid du Colombier return -1; 29*219b2ee8SDavid du Colombier n = write(fd, buf, n); 30*219b2ee8SDavid du Colombier close(fd); 31*219b2ee8SDavid du Colombier return n; 32*219b2ee8SDavid du Colombier } 33*219b2ee8SDavid du Colombier 34*219b2ee8SDavid du Colombier char* 35*219b2ee8SDavid du Colombier findkey(char *db, char *user, char *key) 36*219b2ee8SDavid du Colombier { 37*219b2ee8SDavid du Colombier int n; 38*219b2ee8SDavid du Colombier char filename[3*NAMELEN]; 39*219b2ee8SDavid du Colombier 40*219b2ee8SDavid du Colombier sprint(filename, "%s/%s/key", db, user); 41*219b2ee8SDavid du Colombier n = readfile(filename, key, DESKEYLEN); 42*219b2ee8SDavid du Colombier if(n != DESKEYLEN) 43*219b2ee8SDavid du Colombier return 0; 44*219b2ee8SDavid du Colombier else 45*219b2ee8SDavid du Colombier return key; 46*219b2ee8SDavid du Colombier } 47*219b2ee8SDavid du Colombier 48*219b2ee8SDavid du Colombier char* 49*219b2ee8SDavid du Colombier setkey(char *db, char *user, char *key) 50*219b2ee8SDavid du Colombier { 51*219b2ee8SDavid du Colombier int n; 52*219b2ee8SDavid du Colombier char filename[3*NAMELEN]; 53*219b2ee8SDavid du Colombier 54*219b2ee8SDavid du Colombier sprint(filename, "%s/%s/key", db, user); 55*219b2ee8SDavid du Colombier n = writefile(filename, key, DESKEYLEN); 56*219b2ee8SDavid du Colombier if(n != DESKEYLEN) 57*219b2ee8SDavid du Colombier return 0; 58*219b2ee8SDavid du Colombier else 59*219b2ee8SDavid du Colombier return key; 60*219b2ee8SDavid du Colombier } 61