17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include <ctype.h>
5*9a747e4fSDavid du Colombier #include "authcmdlib.h"
67dd7cddfSDavid du Colombier
77dd7cddfSDavid du Colombier void
clrbio(Acctbio * a)87dd7cddfSDavid du Colombier clrbio(Acctbio *a)
97dd7cddfSDavid du Colombier {
107dd7cddfSDavid du Colombier int i;
117dd7cddfSDavid du Colombier
127dd7cddfSDavid du Colombier if(a->user)
137dd7cddfSDavid du Colombier free(a->user);
147dd7cddfSDavid du Colombier if(a->name)
157dd7cddfSDavid du Colombier free(a->name);
167dd7cddfSDavid du Colombier if(a->dept)
177dd7cddfSDavid du Colombier free(a->dept);
187dd7cddfSDavid du Colombier for(i = 0; i < Nemail; i++)
197dd7cddfSDavid du Colombier if(a->email[i])
207dd7cddfSDavid du Colombier free(a->email[i]);
217dd7cddfSDavid du Colombier memset(a, 0, sizeof(Acctbio));
227dd7cddfSDavid du Colombier }
237dd7cddfSDavid du Colombier
247dd7cddfSDavid du Colombier int
ordbio(Biobuf * b,Acctbio * a)257dd7cddfSDavid du Colombier ordbio(Biobuf *b, Acctbio *a)
267dd7cddfSDavid du Colombier {
277dd7cddfSDavid du Colombier char *p, *cp, *next;
287dd7cddfSDavid du Colombier int ne;
297dd7cddfSDavid du Colombier
307dd7cddfSDavid du Colombier clrbio(a);
317dd7cddfSDavid du Colombier while(p = Brdline(b, '\n')){
327dd7cddfSDavid du Colombier if(*p == '\n')
337dd7cddfSDavid du Colombier continue;
347dd7cddfSDavid du Colombier
357dd7cddfSDavid du Colombier p[Blinelen(b)-1] = 0;
367dd7cddfSDavid du Colombier
377dd7cddfSDavid du Colombier /* get user */
387dd7cddfSDavid du Colombier for(cp = p; *cp && *cp != ' ' && *cp != '\t'; cp++)
397dd7cddfSDavid du Colombier ;
407dd7cddfSDavid du Colombier a->user = malloc(cp - p + 1);
417dd7cddfSDavid du Colombier strncpy(a->user, p, cp - p);
427dd7cddfSDavid du Colombier a->user[cp - p] = 0;
437dd7cddfSDavid du Colombier p = cp;
447dd7cddfSDavid du Colombier
457dd7cddfSDavid du Colombier /* get name */
467dd7cddfSDavid du Colombier while(*p == ' ' || *p == '\t')
477dd7cddfSDavid du Colombier p++;
487dd7cddfSDavid du Colombier for(cp = p; *cp; cp++){
497dd7cddfSDavid du Colombier if(isdigit(*cp) || *cp == '<'){
507dd7cddfSDavid du Colombier while(cp > p && *(cp-1) != ' ' && *(cp-1) != '\t')
517dd7cddfSDavid du Colombier cp--;
527dd7cddfSDavid du Colombier break;
537dd7cddfSDavid du Colombier }
547dd7cddfSDavid du Colombier }
557dd7cddfSDavid du Colombier next = cp;
567dd7cddfSDavid du Colombier while(cp > p && (*(cp-1) == ' ' || *(cp-1) == '\t'))
577dd7cddfSDavid du Colombier cp--;
587dd7cddfSDavid du Colombier a->name = malloc(cp - p + 1);
597dd7cddfSDavid du Colombier strncpy(a->name, p, cp - p);
607dd7cddfSDavid du Colombier a->name[cp - p] = 0;
617dd7cddfSDavid du Colombier p = next;
627dd7cddfSDavid du Colombier
637dd7cddfSDavid du Colombier /* get dept */
647dd7cddfSDavid du Colombier for(cp = p; *cp; cp++){
657dd7cddfSDavid du Colombier if(*cp == '<')
667dd7cddfSDavid du Colombier break;
677dd7cddfSDavid du Colombier }
687dd7cddfSDavid du Colombier next = cp;
697dd7cddfSDavid du Colombier while(cp > p && (*(cp-1) == ' ' || *(cp-1) == '\t'))
707dd7cddfSDavid du Colombier cp--;
717dd7cddfSDavid du Colombier a->dept = malloc(cp - p + 1);
727dd7cddfSDavid du Colombier strncpy(a->dept, p, cp - p);
737dd7cddfSDavid du Colombier a->dept[cp - p] = 0;
747dd7cddfSDavid du Colombier p = next;
757dd7cddfSDavid du Colombier
767dd7cddfSDavid du Colombier /* get emails */
777dd7cddfSDavid du Colombier ne = 0;
787dd7cddfSDavid du Colombier for(cp = p; *cp && ne < Nemail;){
797dd7cddfSDavid du Colombier if(*cp != '<'){
807dd7cddfSDavid du Colombier cp++;
817dd7cddfSDavid du Colombier continue;
827dd7cddfSDavid du Colombier }
837dd7cddfSDavid du Colombier p = ++cp;
847dd7cddfSDavid du Colombier while(*cp && *cp != '>')
857dd7cddfSDavid du Colombier cp++;
867dd7cddfSDavid du Colombier if(cp == p)
877dd7cddfSDavid du Colombier break;
887dd7cddfSDavid du Colombier a->email[ne] = malloc(cp - p + 1);
897dd7cddfSDavid du Colombier strncpy(a->email[ne], p, cp - p);
907dd7cddfSDavid du Colombier a->email[ne][cp-p] = 0;
917dd7cddfSDavid du Colombier ne++;
927dd7cddfSDavid du Colombier }
937dd7cddfSDavid du Colombier return 0;
947dd7cddfSDavid du Colombier }
957dd7cddfSDavid du Colombier return -1;
967dd7cddfSDavid du Colombier }
977dd7cddfSDavid du Colombier
987dd7cddfSDavid du Colombier void
nwrbio(Biobuf * b,Acctbio * a)997dd7cddfSDavid du Colombier nwrbio(Biobuf *b, Acctbio *a)
1007dd7cddfSDavid du Colombier {
1017dd7cddfSDavid du Colombier int i;
1027dd7cddfSDavid du Colombier
1037dd7cddfSDavid du Colombier if(a->postid == 0)
1047dd7cddfSDavid du Colombier a->postid = "";
1057dd7cddfSDavid du Colombier if(a->name == 0)
1067dd7cddfSDavid du Colombier a->name = "";
1077dd7cddfSDavid du Colombier if(a->dept == 0)
1087dd7cddfSDavid du Colombier a->dept = "";
1097dd7cddfSDavid du Colombier if(a->email[0] == 0)
1107dd7cddfSDavid du Colombier a->email[0] = strdup(a->user);
1117dd7cddfSDavid du Colombier
1127dd7cddfSDavid du Colombier Bprint(b, "%s|%s|%s|%s|%s", a->user, a->user, a->name, a->dept, a->email[0]);
1137dd7cddfSDavid du Colombier for(i = 1; i < Nemail; i++){
1147dd7cddfSDavid du Colombier if(a->email[i] == 0)
1157dd7cddfSDavid du Colombier break;
1167dd7cddfSDavid du Colombier Bprint(b, "|%s", a->email[i]);
1177dd7cddfSDavid du Colombier }
1187dd7cddfSDavid du Colombier Bprint(b, "\n");
1197dd7cddfSDavid du Colombier }
1207dd7cddfSDavid du Colombier
1217dd7cddfSDavid du Colombier void
main(void)1227dd7cddfSDavid du Colombier main(void)
1237dd7cddfSDavid du Colombier {
1247dd7cddfSDavid du Colombier Biobuf in, out;
1257dd7cddfSDavid du Colombier Acctbio a;
1267dd7cddfSDavid du Colombier
1277dd7cddfSDavid du Colombier Binit(&in, 0, OREAD);
1287dd7cddfSDavid du Colombier Binit(&out, 1, OWRITE);
1297dd7cddfSDavid du Colombier while(ordbio(&in, &a) == 0)
1307dd7cddfSDavid du Colombier nwrbio(&out, &a);
1317dd7cddfSDavid du Colombier Bterm(&in);
1327dd7cddfSDavid du Colombier Bterm(&out);
1337dd7cddfSDavid du Colombier }
134