cpu: fix potential format string bugs, and get rid of redundant "cpu: " prefix in logfile
This commit is contained in:
parent
797ba8e6ff
commit
0df8b0c63c
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue