xref: /plan9-contrib/sys/src/cmd/auth/lib/rdbio.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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