summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorDamien Miller <djm@cvs.openbsd.org>2004-01-13 09:25:06 +0000
committerDamien Miller <djm@cvs.openbsd.org>2004-01-13 09:25:06 +0000
commitd5d5b1882beab9d34eca725661fa4d97109b1a40 (patch)
tree9d4cf1f4b6cca5011b557df7245f8d92e63f9bf4 /usr.bin
parentb55eca611ac78ee17d2992d7d079c18fba27bcaa (diff)
Tidy sftp batchmode handling, eliminate junk to stderr (bugzilla #754) and
enable use of "-b -" to accept batchfile from stdin; ok markus@
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/ssh/sftp-int.c11
-rw-r--r--usr.bin/ssh/sftp.19
-rw-r--r--usr.bin/ssh/sftp.c28
3 files changed, 31 insertions, 17 deletions
diff --git a/usr.bin/ssh/sftp-int.c b/usr.bin/ssh/sftp-int.c
index 749b0661d81..5e84ce80952 100644
--- a/usr.bin/ssh/sftp-int.c
+++ b/usr.bin/ssh/sftp-int.c
@@ -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 <glob.h>
@@ -43,6 +43,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;
@@ -1169,14 +1172,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/usr.bin/ssh/sftp.1 b/usr.bin/ssh/sftp.1
index 8563e2bddf3..cfa2e10b32f 100644
--- a/usr.bin/ssh/sftp.1
+++ b/usr.bin/ssh/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/usr.bin/ssh/sftp.c b/usr.bin/ssh/sftp.c
index 1ebcbeb7581..d0e595e0c38 100644
--- a/usr.bin/ssh/sftp.c
+++ b/usr.bin/ssh/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"
@@ -37,7 +37,8 @@ RCSID("$OpenBSD: sftp.c,v 1.38 2003/10/08 08:27:36 jmc Exp $");
#include "sftp-client.h"
#include "sftp-int.h"
-FILE* infile;
+FILE* infile = stdin;
+int batchmode = 0;
size_t copy_buffer_len = 32768;
size_t num_requests = 16;
static pid_t sshpid = -1;
@@ -134,7 +135,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) {
@@ -164,13 +164,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;
@@ -234,13 +236,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);
}
@@ -248,7 +252,7 @@ main(int argc, char **argv)
close(in);
close(out);
- if (infile != stdin)
+ if (batchmode)
fclose(infile);
while (waitpid(sshpid, NULL, 0) == -1)