1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <ctype.h> 5 #include <auth.h> 6 #include "authsrv.h" 7 8 void 9 clrbio(Acctbio *a) 10 { 11 int i; 12 13 if(a->user) 14 free(a->user); 15 if(a->postid) 16 free(a->postid); 17 if(a->name) 18 free(a->name); 19 if(a->dept) 20 free(a->dept); 21 for(i = 0; i < Nemail; i++) 22 if(a->email[i]) 23 free(a->email[i]); 24 memset(a, 0, sizeof(Acctbio)); 25 } 26 27 void 28 rdbio(char *file, char *user, Acctbio *a) 29 { 30 int i,n; 31 Biobuf *b; 32 char *p; 33 char *field[20]; 34 35 memset(a, 0, sizeof(Acctbio)); 36 b = Bopen(file, OREAD); 37 if(b == 0) 38 return; 39 while(p = Brdline(b, '\n')){ 40 p[Blinelen(b)-1] = 0; 41 n = getfields(p, field, nelem(field), 0, "|"); 42 if(n < 4) 43 continue; 44 if(strcmp(field[0], user) != 0) 45 continue; 46 47 clrbio(a); 48 49 a->postid = strdup(field[1]); 50 a->name = strdup(field[2]); 51 a->dept = strdup(field[3]); 52 if(n-4 >= Nemail) 53 n = Nemail-4; 54 for(i = 4; i < n; i++) 55 a->email[i-4] = strdup(field[i]); 56 } 57 a->user = strdup(user); 58 Bterm(b); 59 } 60