cpu: fix potential format string bugs, and get rid of redundant "cpu: " prefix in logfile

This commit is contained in:
cinap_lenrek 2011-12-19 07:09:31 +01:00
parent 797ba8e6ff
commit 0df8b0c63c

View file

@ -16,7 +16,7 @@
#define MaxStr 128 #define MaxStr 128
void remoteside(int); void remoteside(int);
void fatal(int, char*, ...); void fatal(char*, ...);
void lclnoteproc(int); void lclnoteproc(int);
void rmtnoteproc(void); void rmtnoteproc(void);
void catcher(void*, char*); void catcher(void*, char*);
@ -153,12 +153,12 @@ main(int argc, char **argv)
user = getuser(); user = getuser();
if(user == nil) if(user == nil)
fatal(1, "can't read user name"); fatal("can't read user name: %r");
ARGBEGIN{ ARGBEGIN{
case 'a': case 'a':
p = EARGF(usage()); p = EARGF(usage());
if(setam(p) < 0) if(setam(p) < 0)
fatal(0, "unknown auth method %s", p); fatal("unknown auth method %s", p);
break; break;
case 'e': case 'e':
ealgs = EARGF(usage()); ealgs = EARGF(usage());
@ -211,12 +211,12 @@ main(int argc, char **argv)
if(system == nil) { if(system == nil) {
p = getenv("cpu"); p = getenv("cpu");
if(p == 0) if(p == 0)
fatal(0, "set $cpu"); fatal("set $cpu");
system = p; system = p;
} }
if(err = rexcall(&data, system, srvname)) if(err = rexcall(&data, system, srvname))
fatal(1, "%s: %s", err, system); fatal("%s: %s: %r", err, system);
procsetname("%s", origargs); procsetname("%s", origargs);
/* Tell the remote side the command to execute and where our working directory is */ /* Tell the remote side the command to execute and where our working directory is */
@ -235,7 +235,7 @@ main(int argc, char **argv)
* of /mnt/term * of /mnt/term
*/ */
if(readstr(data, buf, sizeof(buf)) < 0) if(readstr(data, buf, sizeof(buf)) < 0)
fatal(1, "waiting for FS: %r"); fatal("waiting for FS: %r");
if(strncmp("FS", buf, 2) != 0) { if(strncmp("FS", buf, 2) != 0) {
print("remote cpu: %s", buf); print("remote cpu: %s", buf);
exits(buf); exits(buf);
@ -259,45 +259,36 @@ main(int argc, char **argv)
} }
av[ac] = nil; av[ac] = nil;
exec(exportfs, av); exec(exportfs, av);
fatal(1, "starting exportfs"); fatal("starting exportfs: %r");
} }
void void
fatal(int syserr, char *fmt, ...) fatal(char *fmt, ...)
{ {
Fmt f; char buf[1024];
char *str;
va_list arg; va_list arg;
fmtstrinit(&f);
fmtprint(&f, "cpu: ");
va_start(arg, fmt); va_start(arg, fmt);
fmtvprint(&f, fmt, arg); vsnprint(buf, sizeof(buf), fmt, arg);
va_end(arg); va_end(arg);
if(syserr) fprint(2, "cpu: %s\n", buf);
fmtprint(&f, ": %r"); syslog(0, "cpu", "%s", buf);
str = fmtstrflush(&f); exits(buf);
fprint(2, "%s\n", str);
syslog(0, "cpu", str);
exits(str);
} }
char *negstr = "negotiating authentication method"; char *negstr = "negotiating authentication method";
char bug[256];
int int
old9p(int fd) old9p(int fd)
{ {
int p[2]; int p[2];
if(pipe(p) < 0) if(pipe(p) < 0)
fatal(1, "pipe"); fatal("pipe: %r");
switch(rfork(RFPROC|RFFDG|RFNAMEG)) { switch(rfork(RFPROC|RFFDG|RFNAMEG)) {
case -1: case -1:
fatal(1, "rfork srvold9p"); fatal("rfork srvold9p: %r");
case 0: case 0:
if(fd != 1){ if(fd != 1){
dup(fd, 1); dup(fd, 1);
@ -317,7 +308,7 @@ old9p(int fd)
execl("/bin/srvold9p", "srvold9p", "-ds", nil); execl("/bin/srvold9p", "srvold9p", "-ds", nil);
} else } else
execl("/bin/srvold9p", "srvold9p", "-s", nil); execl("/bin/srvold9p", "srvold9p", "-s", nil);
fatal(1, "exec srvold9p"); fatal("exec srvold9p: %r");
default: default:
close(fd); close(fd);
close(p[0]); close(p[0]);
@ -339,16 +330,16 @@ remoteside(int old)
/* negotiate authentication mechanism */ /* negotiate authentication mechanism */
n = readstr(fd, cmd, sizeof(cmd)); n = readstr(fd, cmd, sizeof(cmd));
if(n < 0) if(n < 0)
fatal(1, "authenticating"); fatal("authenticating: %r");
if(setamalg(cmd) < 0){ if(setamalg(cmd) < 0){
writestr(fd, "unsupported auth method", nil, 0); writestr(fd, "unsupported auth method", nil, 0);
fatal(1, "bad auth method %s", cmd); fatal("bad auth method %s: %r", cmd);
} else } else
writestr(fd, "", "", 1); writestr(fd, "", "", 1);
fd = (*am->sf)(fd, user); fd = (*am->sf)(fd, user);
if(fd < 0) if(fd < 0)
fatal(1, "srvauth"); fatal("srvauth: %r");
/* Set environment values for the user */ /* Set environment values for the user */
putenv("user", user); putenv("user", user);
@ -358,12 +349,12 @@ remoteside(int old)
/* Now collect invoking cpu's current directory or possibly a command */ /* Now collect invoking cpu's current directory or possibly a command */
gotcmd = 0; gotcmd = 0;
if(readstr(fd, xdir, sizeof(xdir)) < 0) if(readstr(fd, xdir, sizeof(xdir)) < 0)
fatal(1, "dir/cmd"); fatal("dir/cmd: %r");
if(xdir[0] == '!') { if(xdir[0] == '!') {
strcpy(cmd, &xdir[1]); strcpy(cmd, &xdir[1]);
gotcmd = 1; gotcmd = 1;
if(readstr(fd, xdir, sizeof(xdir)) < 0) if(readstr(fd, xdir, sizeof(xdir)) < 0)
fatal(1, "dir"); fatal("dir: %r");
} }
/* Establish the new process at the current working directory of the /* Establish the new process at the current working directory of the
@ -415,7 +406,7 @@ remoteside(int old)
execl("/bin/rc", "rc", "-lc", cmd, nil); execl("/bin/rc", "rc", "-lc", cmd, nil);
else else
execl("/bin/rc", "rc", "-li", nil); execl("/bin/rc", "rc", "-li", nil);
fatal(1, "exec shell"); fatal("exec shell: %r");
} }
char* char*
@ -464,7 +455,7 @@ writestr(int fd, char *str, char *thing, int ignore)
l = strlen(str); l = strlen(str);
n = write(fd, str, l+1); n = write(fd, str, l+1);
if(!ignore && n < 0) if(!ignore && n < 0)
fatal(1, "writing network: %s", thing); fatal("writing network: %s: %r", thing);
} }
int int
@ -562,7 +553,7 @@ netkeysrvauth(int fd, char *user)
return -1; return -1;
writestr(fd, "", "challenge", 1); writestr(fd, "", "challenge", 1);
if(auth_chuid(ai, 0) < 0) if(auth_chuid(ai, 0) < 0)
fatal(1, "newns"); fatal("newns: %r");
auth_freeAI(ai); auth_freeAI(ai);
return fd; return fd;
} }
@ -644,7 +635,7 @@ loghex(uchar *p, int n)
for(i = 0; i < n; i++) for(i = 0; i < n; i++)
sprint(buf+2*i, "%2.2ux", p[i]); sprint(buf+2*i, "%2.2ux", p[i]);
syslog(0, "cpu", buf); syslog(0, "cpu", "%s", buf);
} }
static int static int