Protect a remote filename that starts with a dash.
authorWayne Davison <wayned@samba.org>
Thu, 23 Dec 2010 17:26:39 +0000 (09:26 -0800)
committerWayne Davison <wayned@samba.org>
Fri, 24 Dec 2010 06:09:45 +0000 (22:09 -0800)
clientserver.c
main.c

index afd2b17..21ef01c 100644 (file)
@@ -265,7 +265,10 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char
                if (strncmp(*argv, modname, modlen) == 0
                 && argv[0][modlen] == '\0')
                        sargs[sargc++] = modname; /* we send "modname/" */
                if (strncmp(*argv, modname, modlen) == 0
                 && argv[0][modlen] == '\0')
                        sargs[sargc++] = modname; /* we send "modname/" */
-               else
+               else if (**argv == '-') {
+                       if (asprintf(sargs + sargc++, "./%s", *argv) < 0)
+                               out_of_memory("start_inband_exchange");
+               } else
                        sargs[sargc++] = *argv;
                argv++;
                argc--;
                        sargs[sargc++] = *argv;
                argv++;
                argc--;
diff --git a/main.c b/main.c
index 161bfad..649aa90 100644 (file)
--- a/main.c
+++ b/main.c
@@ -493,7 +493,11 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                                rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n");
                                exit_cleanup(RERR_SYNTAX);
                        }
                                rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n");
                                exit_cleanup(RERR_SYNTAX);
                        }
-                       args[argc++] = *remote_argv++;
+                       if (**remote_argv == '-') {
+                               if (asprintf(args + argc++, "./%s", *remote_argv++) < 0)
+                                       out_of_memory("do_cmd");
+                       } else
+                               args[argc++] = *remote_argv++;
                        remote_argc--;
                }
        }
                        remote_argc--;
                }
        }