xref: /plan9/sys/src/cmd/auth/lib/rdbio.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <bio.h>
4219b2ee8SDavid du Colombier #include <ctype.h>
5*9a747e4fSDavid du Colombier #include "authcmdlib.h"
6219b2ee8SDavid du Colombier 
7219b2ee8SDavid du Colombier void
clrbio(Acctbio * a)8219b2ee8SDavid du Colombier clrbio(Acctbio *a)
9219b2ee8SDavid du Colombier {
10219b2ee8SDavid du Colombier 	int i;
11219b2ee8SDavid du Colombier 
12219b2ee8SDavid du Colombier 	if(a->user)
13219b2ee8SDavid du Colombier 		free(a->user);
147dd7cddfSDavid du Colombier 	if(a->postid)
157dd7cddfSDavid du Colombier 		free(a->postid);
16219b2ee8SDavid du Colombier 	if(a->name)
17219b2ee8SDavid du Colombier 		free(a->name);
18219b2ee8SDavid du Colombier 	if(a->dept)
19219b2ee8SDavid du Colombier 		free(a->dept);
20219b2ee8SDavid du Colombier 	for(i = 0; i < Nemail; i++)
21219b2ee8SDavid du Colombier 		if(a->email[i])
22219b2ee8SDavid du Colombier 			free(a->email[i]);
23219b2ee8SDavid du Colombier 	memset(a, 0, sizeof(Acctbio));
24219b2ee8SDavid du Colombier }
25219b2ee8SDavid du Colombier 
26219b2ee8SDavid du Colombier void
rdbio(char * file,char * user,Acctbio * a)27219b2ee8SDavid du Colombier rdbio(char *file, char *user, Acctbio *a)
28219b2ee8SDavid du Colombier {
297dd7cddfSDavid du Colombier 	int i,n;
30219b2ee8SDavid du Colombier 	Biobuf *b;
317dd7cddfSDavid du Colombier 	char *p;
327dd7cddfSDavid du Colombier 	char *field[20];
33219b2ee8SDavid du Colombier 
34219b2ee8SDavid du Colombier 	memset(a, 0, sizeof(Acctbio));
35219b2ee8SDavid du Colombier 	b = Bopen(file, OREAD);
36219b2ee8SDavid du Colombier 	if(b == 0)
37219b2ee8SDavid du Colombier 		return;
38219b2ee8SDavid du Colombier 	while(p = Brdline(b, '\n')){
397dd7cddfSDavid du Colombier 		p[Blinelen(b)-1] = 0;
407dd7cddfSDavid du Colombier 		n = getfields(p, field, nelem(field), 0, "|");
417dd7cddfSDavid du Colombier 		if(n < 4)
42219b2ee8SDavid du Colombier 			continue;
437dd7cddfSDavid du Colombier 		if(strcmp(field[0], user) != 0)
44219b2ee8SDavid du Colombier 			continue;
45219b2ee8SDavid du Colombier 
46219b2ee8SDavid du Colombier 		clrbio(a);
47219b2ee8SDavid du Colombier 
487dd7cddfSDavid du Colombier 		a->postid = strdup(field[1]);
497dd7cddfSDavid du Colombier 		a->name = strdup(field[2]);
507dd7cddfSDavid du Colombier 		a->dept = strdup(field[3]);
517dd7cddfSDavid du Colombier 		if(n-4 >= Nemail)
527dd7cddfSDavid du Colombier 			n = Nemail-4;
537dd7cddfSDavid du Colombier 		for(i = 4; i < n; i++)
547dd7cddfSDavid du Colombier 			a->email[i-4] = strdup(field[i]);
55219b2ee8SDavid du Colombier 	}
56219b2ee8SDavid du Colombier 	a->user = strdup(user);
57219b2ee8SDavid du Colombier 	Bterm(b);
58219b2ee8SDavid du Colombier }
59