static int setlocaltime(char* timebuf, int s){ int n, f, t; t=0; f = open("#r/rtc", ORDWR); if(f >= 0){ if((n = read(f, timebuf, s-1)) > 0){ timebuf[n] = '\0'; t = 1; } close(f); }else do{ strcpy(timebuf, "yymmddhhmm[ss]"); outin("\ndate/time ", timebuf, s); }while((t=lusertime(timebuf)) <= 0); return t; }
/* * get host owner and set it */ void promptforhostowner(void) { char owner[64], *p; /* hack for bitsy; can't prompt during boot */ if(p = getenv("user")){ writehostowner(p); free(p); return; } free(p); strcpy(owner, "none"); do{ outin("user", owner, sizeof(owner)); } while(*owner == 0); writehostowner(owner); }
void configip(int bargc, char **bargv, int needfs) { Waitmsg *w; int argc, pid; char **arg, **argv, buf[32], *p; fmtinstall('I', eipfmt); fmtinstall('M', eipfmt); fmtinstall('E', eipfmt); arg = malloc((bargc+1) * sizeof(char*)); if(arg == nil) fatal("malloc"); memmove(arg, bargv, bargc * sizeof(char*)); arg[bargc] = 0; argc = bargc; argv = arg; strcpy(mpoint, "/net"); ARGBEGIN { case 'x': p = ARGF(); if(p != nil) snprint(mpoint, sizeof(mpoint), "/net%s", p); break; case 'g': case 'b': case 'h': case 'm': p = ARGF(); USED(p); break; } ARGEND; /* bind in an ip interface */ if(bind("#I", mpoint, MAFTER) < 0) fatal("bind #I"); if(access("#l0", 0) == 0 && bind("#l0", mpoint, MAFTER) < 0) warning("bind #l0"); if(access("#l1", 0) == 0 && bind("#l1", mpoint, MAFTER) < 0) warning("bind #l1"); if(access("#l2", 0) == 0 && bind("#l2", mpoint, MAFTER) < 0) warning("bind #l2"); if(access("#l3", 0) == 0 && bind("#l3", mpoint, MAFTER) < 0) warning("bind #l3"); werrstr(""); /* let ipconfig configure the ip interface */ switch(pid = fork()){ case -1: fatal("fork configuring ip: %r"); case 0: exec("/boot/ipconfig", arg); fatal("execing /boot/ipconfig: %r"); default: break; } /* wait for ipconfig to finish */ if(debugboot) fprint(2, "waiting for dhcp..."); for(;;){ w = wait(); if(w != nil && w->pid == pid){ if(w->msg[0] != 0) fatal(w->msg); free(w); break; } else if(w == nil) fatal("configuring ip"); free(w); } if(debugboot) fprint(2, "\n"); if(!needfs) return; /* if we didn't get a file and auth server, query user */ netndb("fs", fsip); if(!isvalidip(fsip)) netenv("fs", fsip); while(!isvalidip(fsip)){ buf[0] = 0; outin("filesystem IP address", buf, sizeof(buf)); if (parseip(fsip, buf) == -1) fprint(2, "configip: can't parse fs ip %s\n", buf); } netndb("auth", auip); if(!isvalidip(auip)) netenv("auth", auip); while(!isvalidip(auip)){ buf[0] = 0; outin("authentication server IP address", buf, sizeof(buf)); if (parseip(auip, buf) == -1) fprint(2, "configip: can't parse auth ip %s\n", buf); } }