summaryrefslogtreecommitdiffstats
path: root/crypto/openssh/scp.c
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2004-10-28 16:11:31 +0000
committerdes <des@FreeBSD.org>2004-10-28 16:11:31 +0000
commita744ec13ade7d70128cd82393862d02c1f712f6a (patch)
tree2b93d7eeb78a97c2cc9e93d61346f39150ed165f /crypto/openssh/scp.c
parentca12ec184bb7b4d1d0ff5dc213f5da06de091b8c (diff)
downloadFreeBSD-src-a744ec13ade7d70128cd82393862d02c1f712f6a.zip
FreeBSD-src-a744ec13ade7d70128cd82393862d02c1f712f6a.tar.gz
Resolve conflicts
Diffstat (limited to 'crypto/openssh/scp.c')
-rw-r--r--crypto/openssh/scp.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/crypto/openssh/scp.c b/crypto/openssh/scp.c
index 1daa2cc..ef9eaa1 100644
--- a/crypto/openssh/scp.c
+++ b/crypto/openssh/scp.c
@@ -71,7 +71,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: scp.c,v 1.113 2003/11/23 23:21:21 djm Exp $");
+RCSID("$OpenBSD: scp.c,v 1.117 2004/08/11 21:44:32 avsm Exp $");
#include "xmalloc.h"
#include "atomicio.h"
@@ -80,11 +80,7 @@ RCSID("$OpenBSD: scp.c,v 1.113 2003/11/23 23:21:21 djm Exp $");
#include "misc.h"
#include "progressmeter.h"
-#ifdef HAVE___PROGNAME
extern char *__progname;
-#else
-char *__progname;
-#endif
void bwlimit(int);
@@ -663,7 +659,7 @@ bwlimit(int amount)
{
static struct timeval bwstart, bwend;
static int lamt, thresh = 16384;
- u_int64_t wait;
+ u_int64_t waitlen;
struct timespec ts, rm;
if (!timerisset(&bwstart)) {
@@ -681,10 +677,10 @@ bwlimit(int amount)
return;
lamt *= 8;
- wait = (double)1000000L * lamt / limit_rate;
+ waitlen = (double)1000000L * lamt / limit_rate;
- bwstart.tv_sec = wait / 1000000L;
- bwstart.tv_usec = wait % 1000000L;
+ bwstart.tv_sec = waitlen / 1000000L;
+ bwstart.tv_usec = waitlen % 1000000L;
if (timercmp(&bwstart, &bwend, >)) {
timersub(&bwstart, &bwend, &bwend);
@@ -759,6 +755,8 @@ sink(int argc, char **argv)
*cp++ = ch;
} while (cp < &buf[sizeof(buf) - 1] && ch != '\n');
*cp = 0;
+ if (verbose_mode)
+ fprintf(stderr, "Sink: %s", buf);
if (buf[0] == '\01' || buf[0] == '\02') {
if (iamremote == 0)
@@ -822,6 +820,10 @@ sink(int argc, char **argv)
size = size * 10 + (*cp++ - '0');
if (*cp++ != ' ')
SCREWUP("size not delimited");
+ if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) {
+ run_err("error: unexpected filename: %s", cp);
+ exit(1);
+ }
if (targisdir) {
static char *namebuf;
static int cursize;
@@ -843,6 +845,8 @@ sink(int argc, char **argv)
exists = stat(np, &stb) == 0;
if (buf[0] == 'D') {
int mod_flag = pflag;
+ if (!iamrecursive)
+ SCREWUP("received directory without -r");
if (exists) {
if (!S_ISDIR(stb.st_mode)) {
errno = ENOTDIR;
@@ -894,11 +898,8 @@ bad: run_err("%s: %s", np, strerror(errno));
amt = size - i;
count += amt;
do {
- j = read(remin, cp, amt);
- if (j == -1 && (errno == EINTR ||
- errno == EAGAIN)) {
- continue;
- } else if (j <= 0) {
+ j = atomicio(read, remin, cp, amt);
+ if (j <= 0) {
run_err("%s", j ? strerror(errno) :
"dropped connection");
exit(1);
@@ -938,21 +939,25 @@ bad: run_err("%s: %s", np, strerror(errno));
if (pflag) {
if (exists || omode != mode)
#ifdef HAVE_FCHMOD
- if (fchmod(ofd, omode))
+ if (fchmod(ofd, omode)) {
#else /* HAVE_FCHMOD */
- if (chmod(np, omode))
+ if (chmod(np, omode)) {
#endif /* HAVE_FCHMOD */
run_err("%s: set mode: %s",
np, strerror(errno));
+ wrerr = DISPLAYED;
+ }
} else {
if (!exists && omode != mode)
#ifdef HAVE_FCHMOD
- if (fchmod(ofd, omode & ~mask))
+ if (fchmod(ofd, omode & ~mask)) {
#else /* HAVE_FCHMOD */
- if (chmod(np, omode & ~mask))
+ if (chmod(np, omode & ~mask)) {
#endif /* HAVE_FCHMOD */
run_err("%s: set mode: %s",
np, strerror(errno));
+ wrerr = DISPLAYED;
+ }
}
if (close(ofd) == -1) {
wrerr = YES;
OpenPOWER on IntegriCloud