]> andersk Git - openssh.git/commitdiff
- djm@cvs.openbsd.org 2004/01/13 09:25:05
authordjm <djm>
Tue, 20 Jan 2004 23:58:47 +0000 (23:58 +0000)
committerdjm <djm>
Tue, 20 Jan 2004 23:58:47 +0000 (23:58 +0000)
     [sftp-int.c sftp.1 sftp.c]
     Tidy sftp batchmode handling, eliminate junk to stderr (bugzilla #754) and
     enable use of "-b -" to accept batchfile from stdin; ok markus@

ChangeLog
sftp-int.c
sftp.1
sftp.c

index ccfde56236317a0500c00a37ea78c0f5a029116b..0c354d01095e3b4142337ce44904644fc05f15a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+20040121
+ - (djm) OpenBSD CVS Sync
+   - djm@cvs.openbsd.org 2004/01/13 09:25:05
+     [sftp-int.c sftp.1 sftp.c]
+     Tidy sftp batchmode handling, eliminate junk to stderr (bugzilla #754) and
+     enable use of "-b -" to accept batchfile from stdin; ok markus@
+
 20040114
  - (dtucker) [auth-pam.c] Have monitor die if PAM authentication thread exits
    unexpectedly.  with & ok djm@
index edb475bbb0f7b359988e5232fcd55d5220c38391..a9423fe6932c56c1d63b2d6a06b3c5b5df042b71 100644 (file)
@@ -25,7 +25,7 @@
 /* XXX: recursive operations */
 
 #include "includes.h"
-RCSID("$OpenBSD: sftp-int.c,v 1.65 2003/11/21 11:57:03 djm Exp $");
+RCSID("$OpenBSD: sftp-int.c,v 1.66 2004/01/13 09:25:05 djm Exp $");
 
 #include "buffer.h"
 #include "xmalloc.h"
@@ -41,6 +41,9 @@ RCSID("$OpenBSD: sftp-int.c,v 1.65 2003/11/21 11:57:03 djm Exp $");
 /* File to read commands from */
 extern FILE *infile;
 
+/* Are we in batchfile mode? */
+extern int batchmode;
+
 /* Size of buffer used when copying files */
 extern size_t copy_buffer_len;
 
@@ -1172,14 +1175,16 @@ interactive_loop(int fd_in, int fd_out, char *file1, char *file2)
                if (fgets(cmd, sizeof(cmd), infile) == NULL) {
                        printf("\n");
                        break;
-               } else if (infile != stdin) /* Bluff typing */
+               }
+
+               if (batchmode) /* Echo command */
                        printf("%s", cmd);
 
                cp = strrchr(cmd, '\n');
                if (cp)
                        *cp = '\0';
 
-               err = parse_dispatch_command(conn, cmd, &pwd, infile != stdin);
+               err = parse_dispatch_command(conn, cmd, &pwd, batchmode);
                if (err != 0)
                        break;
        }
diff --git a/sftp.1 b/sftp.1
index 8563e2bddf391ae7cd94a0a670fcb77c2e744a42..cfa2e10b32fa885fbff3aa01ec39b5772fc0e4cf 100644 (file)
--- a/sftp.1
+++ b/sftp.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: sftp.1,v 1.49 2003/12/16 15:49:51 markus Exp $
+.\" $OpenBSD: sftp.1,v 1.50 2004/01/13 09:25:05 djm Exp $
 .\"
 .\" Copyright (c) 2001 Damien Miller.  All rights reserved.
 .\"
@@ -99,7 +99,12 @@ Batch mode reads a series of commands from an input
 instead of
 .Em stdin .
 Since it lacks user interaction it should be used in conjunction with
-non-interactive authentication.
+non-interactive authentication. 
+A
+.Ar batchfile 
+of 
+.Sq Ic \-
+may be used to indicate standard input.
 .Nm
 will abort if any of the following
 commands fail:
diff --git a/sftp.c b/sftp.c
index fddc6875f650fbbb964a4627a21ce58e96cca08a..e288302fa06710607e22b3db4fc67a64062f9bed 100644 (file)
--- a/sftp.c
+++ b/sftp.c
@@ -24,7 +24,7 @@
 
 #include "includes.h"
 
-RCSID("$OpenBSD: sftp.c,v 1.38 2003/10/08 08:27:36 jmc Exp $");
+RCSID("$OpenBSD: sftp.c,v 1.39 2004/01/13 09:25:05 djm Exp $");
 
 #include "buffer.h"
 #include "xmalloc.h"
@@ -43,7 +43,8 @@ extern char *__progname;
 char *__progname;
 #endif
 
-FILE* infile;
+FILE* infile = stdin;
+int batchmode = 0;
 size_t copy_buffer_len = 32768;
 size_t num_requests = 16;
 static pid_t sshpid = -1;
@@ -141,7 +142,6 @@ main(int argc, char **argv)
        addargs(&args, "-oForwardAgent no");
        addargs(&args, "-oClearAllForwardings yes");
        ll = SYSLOG_LEVEL_INFO;
-       infile = stdin;         /* Read from STDIN unless changed by -b */
 
        while ((ch = getopt(argc, argv, "1hvCo:s:S:b:B:F:P:R:")) != -1) {
                switch (ch) {
@@ -171,13 +171,15 @@ main(int argc, char **argv)
                        ssh_program = optarg;
                        break;
                case 'b':
-                       if (infile == stdin) {
-                               infile = fopen(optarg, "r");
-                               if (infile == NULL)
-                                       fatal("%s (%s).", strerror(errno), optarg);
-                       } else
-                               fatal("Filename already specified.");
+                       if (batchmode)
+                               fatal("Batch file already specified.");
+
+                       /* Allow "-" as stdin */
+                       if (strcmp(optarg, "-") != 0 && 
+                          (infile = fopen(optarg, "r")) == NULL)
+                               fatal("%s (%s).", strerror(errno), optarg);
                        showprogress = 0;
+                       batchmode = 1;
                        break;
                case 'P':
                        sftp_direct = optarg;
@@ -241,13 +243,15 @@ main(int argc, char **argv)
                    sftp_server : "sftp"));
                args.list[0] = ssh_program;
 
-               fprintf(stderr, "Connecting to %s...\n", host);
+               if (!batchmode)
+                       fprintf(stderr, "Connecting to %s...\n", host);
                connect_to_server(ssh_program, args.list, &in, &out);
        } else {
                args.list = NULL;
                addargs(&args, "sftp-server");
 
-               fprintf(stderr, "Attaching to %s...\n", sftp_direct);
+               if (!batchmode)
+                       fprintf(stderr, "Attaching to %s...\n", sftp_direct);
                connect_to_server(sftp_direct, args.list, &in, &out);
        }
 
@@ -260,7 +264,7 @@ main(int argc, char **argv)
 
        close(in);
        close(out);
-       if (infile != stdin)
+       if (batchmode)
                fclose(infile);
 
        while (waitpid(sshpid, NULL, 0) == -1)
This page took 0.052512 seconds and 5 git commands to generate.