1*219b2ee8SDavid du Colombier #include <u.h> 2*219b2ee8SDavid du Colombier #include <libc.h> 3*219b2ee8SDavid du Colombier #include <bio.h> 4*219b2ee8SDavid du Colombier #include <ctype.h> 5*219b2ee8SDavid du Colombier #include <auth.h> 6*219b2ee8SDavid du Colombier #include "authsrv.h" 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier void 9*219b2ee8SDavid du Colombier clrbio(Acctbio *a) 10*219b2ee8SDavid du Colombier { 11*219b2ee8SDavid du Colombier int i; 12*219b2ee8SDavid du Colombier 13*219b2ee8SDavid du Colombier if(a->user) 14*219b2ee8SDavid du Colombier free(a->user); 15*219b2ee8SDavid du Colombier if(a->name) 16*219b2ee8SDavid du Colombier free(a->name); 17*219b2ee8SDavid du Colombier if(a->dept) 18*219b2ee8SDavid du Colombier free(a->dept); 19*219b2ee8SDavid du Colombier for(i = 0; i < Nemail; i++) 20*219b2ee8SDavid du Colombier if(a->email[i]) 21*219b2ee8SDavid du Colombier free(a->email[i]); 22*219b2ee8SDavid du Colombier memset(a, 0, sizeof(Acctbio)); 23*219b2ee8SDavid du Colombier } 24*219b2ee8SDavid du Colombier 25*219b2ee8SDavid du Colombier void 26*219b2ee8SDavid du Colombier rdbio(char *file, char *user, Acctbio *a) 27*219b2ee8SDavid du Colombier { 28*219b2ee8SDavid du Colombier Biobuf *b; 29*219b2ee8SDavid du Colombier char *p, *cp, *next; 30*219b2ee8SDavid du Colombier int ne, ulen; 31*219b2ee8SDavid du Colombier 32*219b2ee8SDavid du Colombier memset(a, 0, sizeof(Acctbio)); 33*219b2ee8SDavid du Colombier b = Bopen(file, OREAD); 34*219b2ee8SDavid du Colombier if(b == 0) 35*219b2ee8SDavid du Colombier return; 36*219b2ee8SDavid du Colombier ulen = strlen(user); 37*219b2ee8SDavid du Colombier while(p = Brdline(b, '\n')){ 38*219b2ee8SDavid du Colombier if(strncmp(p, user, ulen) != 0) 39*219b2ee8SDavid du Colombier continue; 40*219b2ee8SDavid du Colombier if(p[ulen] && p[ulen] != ' ' && p[ulen] != '\t') 41*219b2ee8SDavid du Colombier continue; 42*219b2ee8SDavid du Colombier 43*219b2ee8SDavid du Colombier p[Blinelen(b)-1] = 0; 44*219b2ee8SDavid du Colombier p += ulen; 45*219b2ee8SDavid du Colombier clrbio(a); 46*219b2ee8SDavid du Colombier 47*219b2ee8SDavid du Colombier /* get name */ 48*219b2ee8SDavid du Colombier while(*p == ' ' || *p == '\t') 49*219b2ee8SDavid du Colombier p++; 50*219b2ee8SDavid du Colombier for(cp = p; *cp; cp++){ 51*219b2ee8SDavid du Colombier if(isdigit(*cp) || *cp == '<'){ 52*219b2ee8SDavid du Colombier while(cp > p && *(cp-1) != ' ' && *(cp-1) != '\t') 53*219b2ee8SDavid du Colombier cp--; 54*219b2ee8SDavid du Colombier break; 55*219b2ee8SDavid du Colombier } 56*219b2ee8SDavid du Colombier } 57*219b2ee8SDavid du Colombier next = cp; 58*219b2ee8SDavid du Colombier while(cp > p && (*(cp-1) == ' ' || *(cp-1) == '\t')) 59*219b2ee8SDavid du Colombier cp--; 60*219b2ee8SDavid du Colombier a->name = malloc(cp - p + 1); 61*219b2ee8SDavid du Colombier strncpy(a->name, p, cp - p); 62*219b2ee8SDavid du Colombier a->name[cp - p] = 0; 63*219b2ee8SDavid du Colombier p = next; 64*219b2ee8SDavid du Colombier 65*219b2ee8SDavid du Colombier /* get dept */ 66*219b2ee8SDavid du Colombier for(cp = p; *cp; cp++){ 67*219b2ee8SDavid du Colombier if(*cp == '<') 68*219b2ee8SDavid du Colombier break; 69*219b2ee8SDavid du Colombier } 70*219b2ee8SDavid du Colombier next = cp; 71*219b2ee8SDavid du Colombier while(cp > p && (*(cp-1) == ' ' || *(cp-1) == '\t')) 72*219b2ee8SDavid du Colombier cp--; 73*219b2ee8SDavid du Colombier a->dept = malloc(cp - p + 1); 74*219b2ee8SDavid du Colombier strncpy(a->dept, p, cp - p); 75*219b2ee8SDavid du Colombier a->dept[cp - p] = 0; 76*219b2ee8SDavid du Colombier p = next; 77*219b2ee8SDavid du Colombier 78*219b2ee8SDavid du Colombier /* get emails */ 79*219b2ee8SDavid du Colombier ne = 0; 80*219b2ee8SDavid du Colombier for(cp = p; *cp && ne < Nemail;){ 81*219b2ee8SDavid du Colombier if(*cp != '<'){ 82*219b2ee8SDavid du Colombier cp++; 83*219b2ee8SDavid du Colombier continue; 84*219b2ee8SDavid du Colombier } 85*219b2ee8SDavid du Colombier p = ++cp; 86*219b2ee8SDavid du Colombier while(*cp && *cp != '>') 87*219b2ee8SDavid du Colombier cp++; 88*219b2ee8SDavid du Colombier if(cp == p) 89*219b2ee8SDavid du Colombier break; 90*219b2ee8SDavid du Colombier a->email[ne] = malloc(cp - p + 1); 91*219b2ee8SDavid du Colombier strncpy(a->email[ne], p, cp - p); 92*219b2ee8SDavid du Colombier a->email[ne][cp-p] = 0; 93*219b2ee8SDavid du Colombier ne++; 94*219b2ee8SDavid du Colombier } 95*219b2ee8SDavid du Colombier } 96*219b2ee8SDavid du Colombier a->user = strdup(user); 97*219b2ee8SDavid du Colombier Bterm(b); 98*219b2ee8SDavid du Colombier } 99