[scp.c]
     memory leak fix, and snprintf throughout
This commit is contained in:
Ben Lindstrom 2001-02-09 01:23:39 +00:00
parent af13ccacac
commit f6b7b09a4e
2 changed files with 27 additions and 16 deletions

View File

@ -17,6 +17,10 @@
[auth2.c] [auth2.c]
fix typo fix typo
- (djm) Update spec files - (djm) Update spec files
- (bal) OpenBSD sync:
- deraadt@cvs.openbsd.org 2001/02/08 14:38:54
[scp.c]
memory leak fix, and snprintf throughout
20010208 20010208
- (djm) Don't delete external askpass program in make uninstall target. - (djm) Don't delete external askpass program in make uninstall target.

39
scp.c
View File

@ -75,7 +75,7 @@
*/ */
#include "includes.h" #include "includes.h"
RCSID("$OpenBSD: scp.c,v 1.53 2001/02/04 23:56:22 deraadt Exp $"); RCSID("$OpenBSD: scp.c,v 1.55 2001/02/08 14:38:54 deraadt Exp $");
#include "xmalloc.h" #include "xmalloc.h"
#include "atomicio.h" #include "atomicio.h"
@ -326,7 +326,8 @@ main(argc, argv)
remin = remout = -1; remin = remout = -1;
/* Command to be executed on remote system using "ssh". */ /* Command to be executed on remote system using "ssh". */
(void) sprintf(cmd, "scp%s%s%s%s", verbose_mode ? " -v" : "", (void) snprintf(cmd, sizeof cmd, "scp%s%s%s%s",
verbose_mode ? " -v" : "",
iamrecursive ? " -r" : "", pflag ? " -p" : "", iamrecursive ? " -r" : "", pflag ? " -p" : "",
targetshouldbedirectory ? " -d" : ""); targetshouldbedirectory ? " -d" : "");
@ -397,16 +398,18 @@ toremote(targ, argc, argv)
suser = pwd->pw_name; suser = pwd->pw_name;
else if (!okname(suser)) else if (!okname(suser))
continue; continue;
sprintf(bp, snprintf(bp, len,
"%s%s -x -o'FallBackToRsh no' -n -l %s %s %s %s '%s%s%s:%s'", "%s%s -x -o'FallBackToRsh no' -n "
"-l %s %s %s %s '%s%s%s:%s'",
ssh_program, verbose_mode ? " -v" : "", ssh_program, verbose_mode ? " -v" : "",
suser, host, cmd, src, suser, host, cmd, src,
tuser ? tuser : "", tuser ? "@" : "", tuser ? tuser : "", tuser ? "@" : "",
thost, targ); thost, targ);
} else { } else {
host = cleanhostname(argv[i]); host = cleanhostname(argv[i]);
sprintf(bp, snprintf(bp, len,
"exec %s%s -x -o'FallBackToRsh no' -n %s %s %s '%s%s%s:%s'", "exec %s%s -x -o'FallBackToRsh no' -n %s "
"%s %s '%s%s%s:%s'",
ssh_program, verbose_mode ? " -v" : "", ssh_program, verbose_mode ? " -v" : "",
host, cmd, src, host, cmd, src,
tuser ? tuser : "", tuser ? "@" : "", tuser ? tuser : "", tuser ? "@" : "",
@ -420,7 +423,7 @@ toremote(targ, argc, argv)
if (remin == -1) { if (remin == -1) {
len = strlen(targ) + CMDNEEDS + 20; len = strlen(targ) + CMDNEEDS + 20;
bp = xmalloc(len); bp = xmalloc(len);
(void) sprintf(bp, "%s -t %s", cmd, targ); (void) snprintf(bp, len, "%s -t %s", cmd, targ);
host = cleanhostname(thost); host = cleanhostname(thost);
if (do_cmd(host, tuser, bp, &remin, if (do_cmd(host, tuser, bp, &remin,
&remout, argc) < 0) &remout, argc) < 0)
@ -447,7 +450,7 @@ tolocal(argc, argv)
len = strlen(_PATH_CP) + strlen(argv[i]) + len = strlen(_PATH_CP) + strlen(argv[i]) +
strlen(argv[argc - 1]) + 20; strlen(argv[argc - 1]) + 20;
bp = xmalloc(len); bp = xmalloc(len);
(void) sprintf(bp, "exec %s%s%s %s %s", _PATH_CP, (void) snprintf(bp, len, "exec %s%s%s %s %s", _PATH_CP,
iamrecursive ? " -r" : "", pflag ? " -p" : "", iamrecursive ? " -r" : "", pflag ? " -p" : "",
argv[i], argv[argc - 1]); argv[i], argv[argc - 1]);
if (verbose_mode) if (verbose_mode)
@ -474,7 +477,7 @@ tolocal(argc, argv)
host = cleanhostname(host); host = cleanhostname(host);
len = strlen(src) + CMDNEEDS + 20; len = strlen(src) + CMDNEEDS + 20;
bp = xmalloc(len); bp = xmalloc(len);
(void) sprintf(bp, "%s -f %s", cmd, src); (void) snprintf(bp, len, "%s -f %s", cmd, src);
if (do_cmd(host, suser, bp, &remin, &remout, argc) < 0) { if (do_cmd(host, suser, bp, &remin, &remout, argc) < 0) {
(void) xfree(bp); (void) xfree(bp);
++errs; ++errs;
@ -531,7 +534,7 @@ syserr: run_err("%s: %s", name, strerror(errno));
* Make it compatible with possible future * Make it compatible with possible future
* versions expecting microseconds. * versions expecting microseconds.
*/ */
(void) sprintf(buf, "T%lu 0 %lu 0\n", (void) snprintf(buf, sizeof buf, "T%lu 0 %lu 0\n",
(u_long) stb.st_mtime, (u_long) stb.st_mtime,
(u_long) stb.st_atime); (u_long) stb.st_atime);
(void) atomicio(write, remout, buf, strlen(buf)); (void) atomicio(write, remout, buf, strlen(buf));
@ -539,7 +542,7 @@ syserr: run_err("%s: %s", name, strerror(errno));
goto next; goto next;
} }
#define FILEMODEMASK (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO) #define FILEMODEMASK (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO)
sprintf(buf, "C%04o %lu %s\n", snprintf(buf, sizeof buf, "C%04o %lu %s\n",
(u_int) (stb.st_mode & FILEMODEMASK), (u_int) (stb.st_mode & FILEMODEMASK),
(u_long) stb.st_size, last); (u_long) stb.st_size, last);
if (verbose_mode) { if (verbose_mode) {
@ -608,7 +611,7 @@ rsource(name, statp)
else else
last++; last++;
if (pflag) { if (pflag) {
(void) sprintf(path, "T%lu 0 %lu 0\n", (void) snprintf(path, sizeof(path), "T%lu 0 %lu 0\n",
(u_long) statp->st_mtime, (u_long) statp->st_mtime,
(u_long) statp->st_atime); (u_long) statp->st_atime);
(void) atomicio(write, remout, path, strlen(path)); (void) atomicio(write, remout, path, strlen(path));
@ -617,7 +620,7 @@ rsource(name, statp)
return; return;
} }
} }
(void) sprintf(path, "D%04o %d %.1024s\n", (void) snprintf(path, sizeof path, "D%04o %d %.1024s\n",
(u_int) (statp->st_mode & FILEMODEMASK), 0, last); (u_int) (statp->st_mode & FILEMODEMASK), 0, last);
if (verbose_mode) if (verbose_mode)
fprintf(stderr, "Entering directory: %s", path); fprintf(stderr, "Entering directory: %s", path);
@ -635,7 +638,7 @@ rsource(name, statp)
run_err("%s/%s: name too long", name, dp->d_name); run_err("%s/%s: name too long", name, dp->d_name);
continue; continue;
} }
(void) sprintf(path, "%s/%s", name, dp->d_name); (void) snprintf(path, sizeof path, "%s/%s", name, dp->d_name);
vect[0] = path; vect[0] = path;
source(1, vect); source(1, vect);
} }
@ -765,9 +768,13 @@ sink(argc, argv)
size_t need; size_t need;
need = strlen(targ) + strlen(cp) + 250; need = strlen(targ) + strlen(cp) + 250;
if (need > cursize) if (need > cursize) {
if (namebuf)
xfree(namebuf);
namebuf = xmalloc(need); namebuf = xmalloc(need);
(void) sprintf(namebuf, "%s%s%s", targ, cursize = need;
}
(void) snprintf(namebuf, need, "%s%s%s", targ,
*targ ? "/" : "", cp); *targ ? "/" : "", cp);
np = namebuf; np = namebuf;
} else } else