xref: /plan9/sys/src/cmd/auth/lib/rdbio.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <bio.h>
4219b2ee8SDavid du Colombier #include <ctype.h>
5219b2ee8SDavid du Colombier #include <auth.h>
6219b2ee8SDavid du Colombier #include "authsrv.h"
7219b2ee8SDavid du Colombier 
8219b2ee8SDavid du Colombier void
9219b2ee8SDavid du Colombier clrbio(Acctbio *a)
10219b2ee8SDavid du Colombier {
11219b2ee8SDavid du Colombier 	int i;
12219b2ee8SDavid du Colombier 
13219b2ee8SDavid du Colombier 	if(a->user)
14219b2ee8SDavid du Colombier 		free(a->user);
15*7dd7cddfSDavid du Colombier 	if(a->postid)
16*7dd7cddfSDavid du Colombier 		free(a->postid);
17219b2ee8SDavid du Colombier 	if(a->name)
18219b2ee8SDavid du Colombier 		free(a->name);
19219b2ee8SDavid du Colombier 	if(a->dept)
20219b2ee8SDavid du Colombier 		free(a->dept);
21219b2ee8SDavid du Colombier 	for(i = 0; i < Nemail; i++)
22219b2ee8SDavid du Colombier 		if(a->email[i])
23219b2ee8SDavid du Colombier 			free(a->email[i]);
24219b2ee8SDavid du Colombier 	memset(a, 0, sizeof(Acctbio));
25219b2ee8SDavid du Colombier }
26219b2ee8SDavid du Colombier 
27219b2ee8SDavid du Colombier void
28219b2ee8SDavid du Colombier rdbio(char *file, char *user, Acctbio *a)
29219b2ee8SDavid du Colombier {
30*7dd7cddfSDavid du Colombier 	int i,n;
31219b2ee8SDavid du Colombier 	Biobuf *b;
32*7dd7cddfSDavid du Colombier 	char *p;
33*7dd7cddfSDavid du Colombier 	char *field[20];
34219b2ee8SDavid du Colombier 
35219b2ee8SDavid du Colombier 	memset(a, 0, sizeof(Acctbio));
36219b2ee8SDavid du Colombier 	b = Bopen(file, OREAD);
37219b2ee8SDavid du Colombier 	if(b == 0)
38219b2ee8SDavid du Colombier 		return;
39219b2ee8SDavid du Colombier 	while(p = Brdline(b, '\n')){
40*7dd7cddfSDavid du Colombier 		p[Blinelen(b)-1] = 0;
41*7dd7cddfSDavid du Colombier 		n = getfields(p, field, nelem(field), 0, "|");
42*7dd7cddfSDavid du Colombier 		if(n < 4)
43219b2ee8SDavid du Colombier 			continue;
44*7dd7cddfSDavid du Colombier 		if(strcmp(field[0], user) != 0)
45219b2ee8SDavid du Colombier 			continue;
46219b2ee8SDavid du Colombier 
47219b2ee8SDavid du Colombier 		clrbio(a);
48219b2ee8SDavid du Colombier 
49*7dd7cddfSDavid du Colombier 		a->postid = strdup(field[1]);
50*7dd7cddfSDavid du Colombier 		a->name = strdup(field[2]);
51*7dd7cddfSDavid du Colombier 		a->dept = strdup(field[3]);
52*7dd7cddfSDavid du Colombier 		if(n-4 >= Nemail)
53*7dd7cddfSDavid du Colombier 			n = Nemail-4;
54*7dd7cddfSDavid du Colombier 		for(i = 4; i < n; i++)
55*7dd7cddfSDavid du Colombier 			a->email[i-4] = strdup(field[i]);
56219b2ee8SDavid du Colombier 	}
57219b2ee8SDavid du Colombier 	a->user = strdup(user);
58219b2ee8SDavid du Colombier 	Bterm(b);
59219b2ee8SDavid du Colombier }
60