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 9219b2ee8SDavid du Colombier #define TABLEN 8 10219b2ee8SDavid du Colombier 11219b2ee8SDavid du Colombier static char* 12219b2ee8SDavid du Colombier defreadln(char *prompt, char *def, int must, int *changed) 13219b2ee8SDavid du Colombier { 14219b2ee8SDavid du Colombier char pr[512]; 15219b2ee8SDavid du Colombier char reply[256]; 16219b2ee8SDavid du Colombier 17219b2ee8SDavid du Colombier do { 18219b2ee8SDavid du Colombier if(def && *def){ 19219b2ee8SDavid du Colombier if(must) 20219b2ee8SDavid du Colombier snprint(pr, sizeof pr, "%s[return = %s]: ", prompt, def); 21219b2ee8SDavid du Colombier else 22219b2ee8SDavid du Colombier snprint(pr, sizeof pr, "%s[return = %s, space = none]: ", prompt, def); 23219b2ee8SDavid du Colombier } else 24219b2ee8SDavid du Colombier snprint(pr, sizeof pr, "%s: ", prompt); 25219b2ee8SDavid du Colombier readln(pr, reply, sizeof(reply), 0); 26219b2ee8SDavid du Colombier switch(*reply){ 27219b2ee8SDavid du Colombier case ' ': 28219b2ee8SDavid du Colombier break; 29219b2ee8SDavid du Colombier case 0: 30219b2ee8SDavid du Colombier return def; 31219b2ee8SDavid du Colombier default: 32219b2ee8SDavid du Colombier *changed = 1; 33*7dd7cddfSDavid du Colombier if(def) 34*7dd7cddfSDavid du Colombier free(def); 35219b2ee8SDavid du Colombier return strdup(reply); 36219b2ee8SDavid du Colombier } 37219b2ee8SDavid du Colombier } while(must); 38219b2ee8SDavid du Colombier 39219b2ee8SDavid du Colombier if(def){ 40219b2ee8SDavid du Colombier *changed = 1; 41219b2ee8SDavid du Colombier free(def); 42219b2ee8SDavid du Colombier } 43219b2ee8SDavid du Colombier return 0; 44219b2ee8SDavid du Colombier } 45219b2ee8SDavid du Colombier 46219b2ee8SDavid du Colombier /* 47219b2ee8SDavid du Colombier * get bio from stdin 48219b2ee8SDavid du Colombier */ 49219b2ee8SDavid du Colombier int 50219b2ee8SDavid du Colombier querybio(char *file, char *user, Acctbio *a) 51219b2ee8SDavid du Colombier { 52219b2ee8SDavid du Colombier int i; 53219b2ee8SDavid du Colombier int changed; 54219b2ee8SDavid du Colombier 55219b2ee8SDavid du Colombier rdbio(file, user, a); 56*7dd7cddfSDavid du Colombier a->postid = defreadln("Post id", a->postid, 0, &changed); 57219b2ee8SDavid du Colombier a->name = defreadln("User's full name", a->name, 1, &changed); 58219b2ee8SDavid du Colombier a->dept = defreadln("Department #", a->dept, 1, &changed); 59219b2ee8SDavid du Colombier a->email[0] = defreadln("User's email address", a->email[0], 1, &changed); 60219b2ee8SDavid du Colombier a->email[1] = defreadln("Sponsor's email address", a->email[1], 0, &changed); 61219b2ee8SDavid du Colombier for(i = 2; i < Nemail; i++){ 62219b2ee8SDavid du Colombier if(a->email[i-1] == 0) 63219b2ee8SDavid du Colombier break; 64219b2ee8SDavid du Colombier a->email[i] = defreadln("other email address", a->email[i], 0, &changed); 65219b2ee8SDavid du Colombier } 66219b2ee8SDavid du Colombier return changed; 67219b2ee8SDavid du Colombier } 68