xref: /plan9-contrib/sys/src/cmd/auth/lib/querybio.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 
9 #define TABLEN 8
10 
11 static char*
12 defreadln(char *prompt, char *def, int must, int *changed)
13 {
14 	char pr[512];
15 	char reply[256];
16 
17 	do {
18 		if(def && *def){
19 			if(must)
20 				snprint(pr, sizeof pr, "%s[return = %s]: ", prompt, def);
21 			else
22 				snprint(pr, sizeof pr, "%s[return = %s, space = none]: ", prompt, def);
23 		} else
24 			snprint(pr, sizeof pr, "%s: ", prompt);
25 		readln(pr, reply, sizeof(reply), 0);
26 		switch(*reply){
27 		case ' ':
28 			break;
29 		case 0:
30 			return def;
31 		default:
32 			*changed = 1;
33 			if(def)
34 				free(def);
35 			return strdup(reply);
36 		}
37 	} while(must);
38 
39 	if(def){
40 		*changed = 1;
41 		free(def);
42 	}
43 	return 0;
44 }
45 
46 /*
47  *  get bio from stdin
48  */
49 int
50 querybio(char *file, char *user, Acctbio *a)
51 {
52 	int i;
53 	int changed;
54 
55 	rdbio(file, user, a);
56 	a->postid = defreadln("Post id", a->postid, 0, &changed);
57 	a->name = defreadln("User's full name", a->name, 1, &changed);
58 	a->dept = defreadln("Department #", a->dept, 1, &changed);
59 	a->email[0] = defreadln("User's email address", a->email[0], 1, &changed);
60 	a->email[1] = defreadln("Sponsor's email address", a->email[1], 0, &changed);
61 	for(i = 2; i < Nemail; i++){
62 		if(a->email[i-1] == 0)
63 			break;
64 		a->email[i] = defreadln("other email address", a->email[i], 0, &changed);
65 	}
66 	return changed;
67 }
68