]> andersk Git - openssh.git/blobdiff - scp.c
- djm@cvs.openbsd.org 2010/01/30 02:54:53
[openssh.git] / scp.c
diff --git a/scp.c b/scp.c
index 46433a63847d2d878ae0daa5e4204016877e1c25..09efb82acb3e91b798a925ffbd932d2813eb44b3 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scp.c,v 1.163 2008/06/13 18:55:22 dtucker Exp $ */
+/* $OpenBSD: scp.c,v 1.165 2009/12/20 07:28:36 guenther Exp $ */
 /*
  * scp - secure remote copy.  This is basically patched BSD rcp which
  * uses ssh to do the data transfer (instead of using rcmd).
@@ -244,8 +244,11 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
                close(pout[1]);
 
                replacearg(&args, 0, "%s", ssh_program);
-               if (remuser != NULL)
-                       addargs(&args, "-l%s", remuser);
+               if (remuser != NULL) {
+                       addargs(&args, "-l");
+                       addargs(&args, "%s", remuser);
+               }
+               addargs(&args, "--");
                addargs(&args, "%s", host);
                addargs(&args, "%s", cmd);
 
@@ -337,10 +340,12 @@ main(int argc, char **argv)
                case 'c':
                case 'i':
                case 'F':
-                       addargs(&args, "-%c%s", ch, optarg);
+                       addargs(&args, "-%c", ch);
+                       addargs(&args, "%s", optarg);
                        break;
                case 'P':
-                       addargs(&args, "-p%s", optarg);
+                       addargs(&args, "-p");
+                       addargs(&args, "%s", optarg);
                        break;
                case 'B':
                        addargs(&args, "-oBatchmode yes");
@@ -434,7 +439,7 @@ main(int argc, char **argv)
        }
        /*
         * Finally check the exit status of the ssh process, if one was forked
-        * and no error has occured yet
+        * and no error has occurred yet
         */
        if (do_cmd_pid != -1 && errs == 0) {
                if (remin != -1)
@@ -474,7 +479,7 @@ scpio(ssize_t (*f)(int, void *, size_t), int fd, void *_p, size_t l, off_t *c)
                if (r < 0) {
                        if (errno == EINTR)
                                continue;
-                       if (errno == EAGAIN) {
+                       if (errno == EAGAIN || errno == EWOULDBLOCK) {
                                (void)poll(&pfd, 1, -1); /* Ignore errors */
                                continue;
                        }
@@ -548,6 +553,7 @@ toremote(char *targ, int argc, char **argv)
                        } else {
                                host = cleanhostname(argv[i]);
                        }
+                       addargs(&alist, "--");
                        addargs(&alist, "%s", host);
                        addargs(&alist, "%s", cmd);
                        addargs(&alist, "%s", src);
@@ -558,7 +564,7 @@ toremote(char *targ, int argc, char **argv)
                                errs = 1;
                } else {        /* local to remote */
                        if (remin == -1) {
-                               xasprintf(&bp, "%s -t %s", cmd, targ);
+                               xasprintf(&bp, "%s -t -- %s", cmd, targ);
                                host = cleanhostname(thost);
                                if (do_cmd(host, tuser, bp, &remin,
                                    &remout) < 0)
@@ -591,6 +597,7 @@ tolocal(int argc, char **argv)
                                addargs(&alist, "-r");
                        if (pflag)
                                addargs(&alist, "-p");
+                       addargs(&alist, "--");
                        addargs(&alist, "%s", argv[i]);
                        addargs(&alist, "%s", argv[argc-1]);
                        if (do_local_cmd(&alist))
@@ -610,7 +617,7 @@ tolocal(int argc, char **argv)
                                suser = pwd->pw_name;
                }
                host = cleanhostname(host);
-               xasprintf(&bp, "%s -f %s", cmd, src);
+               xasprintf(&bp, "%s -f -- %s", cmd, src);
                if (do_cmd(host, suser, bp, &remin, &remout) < 0) {
                        (void) xfree(bp);
                        ++errs;
This page took 0.50233 seconds and 4 git commands to generate.