|
@@ -137,7 +137,7 @@ static char *nvrfile = nil, *cputype = nil;
|
|
|
static void
|
|
|
findnvram(Nvrwhere *locp)
|
|
|
{
|
|
|
- char *nvrlen, *nvroff, *v[2];
|
|
|
+ char *nvrlen, *nvroff, *nvrcopy, *v[2];
|
|
|
int fd, i, safeoff, safelen;
|
|
|
|
|
|
if (nvrfile == nil)
|
|
@@ -156,7 +156,8 @@ findnvram(Nvrwhere *locp)
|
|
|
safelen = -1;
|
|
|
if(nvrfile != nil && *nvrfile != '\0'){
|
|
|
/* accept device and device!file */
|
|
|
- i = gettokens(nvrfile, v, nelem(v), "!");
|
|
|
+ nvrcopy = strdup(nvrfile);
|
|
|
+ i = gettokens(nvrcopy, v, nelem(v), "!");
|
|
|
if (i < 1) {
|
|
|
i = 1;
|
|
|
v[0] = "";
|
|
@@ -185,9 +186,10 @@ findnvram(Nvrwhere *locp)
|
|
|
fd = -1;
|
|
|
}
|
|
|
}
|
|
|
+ free(nvrcopy);
|
|
|
free(nvroff);
|
|
|
free(nvrlen);
|
|
|
- }else
|
|
|
+ }else{
|
|
|
for(i=0; i<nelem(nvtab); i++){
|
|
|
if(strcmp(cputype, nvtab[i].cputype) != 0)
|
|
|
continue;
|
|
@@ -203,8 +205,12 @@ findnvram(Nvrwhere *locp)
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
+ nvrfile = strdup(nvtab[i].file);
|
|
|
break;
|
|
|
}
|
|
|
+ if(i >= nelem(nvtab)) /* tried them all? */
|
|
|
+ werrstr(""); /* ignore failed opens */
|
|
|
+ }
|
|
|
locp->fd = fd;
|
|
|
locp->safelen = safelen;
|
|
|
locp->safeoff = safeoff;
|
|
@@ -231,7 +237,7 @@ readnvram(Nvrsafe *safep, int flag)
|
|
|
else if (loc.safelen > sizeof buf)
|
|
|
loc.safelen = sizeof buf;
|
|
|
if (loc.safeoff < 0) {
|
|
|
- fprint(2, "readnvram: couldn't find nvram\n");
|
|
|
+ fprint(2, "readnvram: can't find nvram\n");
|
|
|
if(!(flag&NVwritemem))
|
|
|
memset(safep, 0, sizeof(*safep));
|
|
|
safe = safep;
|
|
@@ -245,14 +251,18 @@ readnvram(Nvrsafe *safep, int flag)
|
|
|
safe = safep;
|
|
|
else {
|
|
|
memset(safep, 0, sizeof(*safep));
|
|
|
+ werrstr("");
|
|
|
if(loc.fd < 0
|
|
|
|| seek(loc.fd, loc.safeoff, 0) < 0
|
|
|
|| read(loc.fd, buf, loc.safelen) != loc.safelen){
|
|
|
err = 1;
|
|
|
if(flag&(NVwrite|NVwriteonerr))
|
|
|
- if(loc.fd < 0)
|
|
|
+ if(loc.fd < 0 && nvrfile != nil)
|
|
|
fprint(2, "can't open %s: %r\n", nvrfile);
|
|
|
- else if (seek(loc.fd, loc.safeoff, 0) < 0)
|
|
|
+ else if(loc.fd < 0){
|
|
|
+ /* this will have been printed above */
|
|
|
+ // fprint(2, "can't find nvram: %r\n");
|
|
|
+ }else if (seek(loc.fd, loc.safeoff, 0) < 0)
|
|
|
fprint(2, "can't seek %s to %d: %r\n",
|
|
|
nvrfile, loc.safeoff);
|
|
|
else
|
|
@@ -267,9 +277,9 @@ readnvram(Nvrsafe *safep, int flag)
|
|
|
|
|
|
/* verify data read */
|
|
|
err |= check(safe->machkey, DESKEYLEN, safe->machsum,
|
|
|
- "bad nvram key");
|
|
|
+ "bad authentication password");
|
|
|
// err |= check(safe->config, CONFIGLEN, safe->configsum,
|
|
|
-// "bad secstore key");
|
|
|
+// "bad secstore password");
|
|
|
err |= check(safe->authid, ANAMELEN, safe->authidsum,
|
|
|
"bad authentication id");
|
|
|
err |= check(safe->authdom, DOMLEN, safe->authdomsum,
|
|
@@ -288,15 +298,15 @@ readnvram(Nvrsafe *safep, int flag)
|
|
|
sizeof safe->authid);
|
|
|
readcons("authdom", nil, 0, safe->authdom,
|
|
|
sizeof safe->authdom);
|
|
|
- readcons("secstore key", nil, 1, safe->config,
|
|
|
- sizeof safe->config);
|
|
|
for(;;){
|
|
|
- if(readcons("password", nil, 1, in, sizeof in)
|
|
|
- == nil)
|
|
|
+ if(readcons("auth password", nil, 1, in,
|
|
|
+ sizeof in) == nil)
|
|
|
goto Out;
|
|
|
if(passtokey(safe->machkey, in))
|
|
|
break;
|
|
|
}
|
|
|
+ readcons("secstore password", nil, 1, safe->config,
|
|
|
+ sizeof safe->config);
|
|
|
}
|
|
|
|
|
|
// safe->authsum = nvcsum(safe->authkey, DESKEYLEN);
|
|
@@ -306,6 +316,7 @@ readnvram(Nvrsafe *safep, int flag)
|
|
|
safe->authdomsum = nvcsum(safe->authdom, sizeof safe->authdom);
|
|
|
|
|
|
*(Nvrsafe*)buf = *safe;
|
|
|
+ werrstr("");
|
|
|
if(loc.fd < 0
|
|
|
|| seek(loc.fd, loc.safeoff, 0) < 0
|
|
|
|| write(loc.fd, buf, loc.safelen) != loc.safelen){
|