make scp(1) in SFTP mode output better match original scp(1) by
authordjm <djm@openbsd.org>
Sat, 7 Aug 2021 00:08:52 +0000 (00:08 +0000)
committerdjm <djm@openbsd.org>
Sat, 7 Aug 2021 00:08:52 +0000 (00:08 +0000)
suppressing "Retrieving [path]" lines that were emitted to support
the interactive sftp(1) client. ok markus@

usr.bin/ssh/scp.c
usr.bin/ssh/sftp-client.c
usr.bin/ssh/sftp-client.h

index 0db5435..7aa6cdb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: scp.c,v 1.219 2021/08/07 00:06:30 djm Exp $ */
+/* $OpenBSD: scp.c,v 1.220 2021/08/07 00:08:52 djm Exp $ */
 /*
  * scp - secure remote copy.  This is basically patched BSD rcp which
  * uses ssh to do the data transfer (instead of using rcmd).
@@ -1256,7 +1256,8 @@ source_sftp(int argc, char *src, char *targ,
        debug3_f("copying local %s to remote %s", src, abs_dst);
 
        if (local_is_dir(src) && iamrecursive) {
-               if (upload_dir(conn, src, abs_dst, pflag, 1, 0, 0) != 0) {
+               if (upload_dir(conn, src, abs_dst, pflag,
+                   SFTP_PROGRESS_ONLY, 0, 0) != 0) {
                        fatal("failed to upload directory %s to %s",
                                src, abs_dst);
                }
@@ -1488,7 +1489,7 @@ sink_sftp(int argc, char *dst, const char *src, struct sftp_conn *conn)
                debug("Fetching %s to %s\n", g.gl_pathv[i], abs_dst);
                if (globpath_is_dir(g.gl_pathv[i]) && iamrecursive) {
                        if (download_dir(conn, g.gl_pathv[i], abs_dst, NULL,
-                           pflag, 1, 0, 0) == -1)
+                           pflag, SFTP_PROGRESS_ONLY, 0, 0) == -1)
                                err = -1;
                } else {
                        if (do_download(conn, g.gl_pathv[i], abs_dst, NULL,
index 7386cf9..ebb9c38 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-client.c,v 1.146 2021/08/07 00:07:18 djm Exp $ */
+/* $OpenBSD: sftp-client.c,v 1.147 2021/08/07 00:08:52 djm Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -1615,7 +1615,7 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst,
                error("\"%s\" is not a directory", src);
                return -1;
        }
-       if (print_flag)
+       if (print_flag && print_flag != SFTP_PROGRESS_ONLY)
                mprintf("Retrieving %s\n", src);
 
        if (dirattrib->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {
@@ -1938,7 +1938,7 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst,
                error("\"%s\" is not a directory", src);
                return -1;
        }
-       if (print_flag)
+       if (print_flag && print_flag != SFTP_PROGRESS_ONLY)
                mprintf("Entering %s\n", src);
 
        attrib_clear(&a);
index 5b94d86..03fe96b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-client.h,v 1.31 2021/08/07 00:02:41 djm Exp $ */
+/* $OpenBSD: sftp-client.h,v 1.32 2021/08/07 00:08:52 djm Exp $ */
 
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
@@ -55,6 +55,11 @@ struct sftp_limits {
        u_int64_t open_handles;
 };
 
+/* print flag values */
+#define SFTP_QUIET             0       /* be quiet during transfers */
+#define SFTP_PRINT             1       /* list files and show progress bar */
+#define SFTP_PROGRESS_ONLY     2       /* progress bar only */
+
 /*
  * Initialise a SSH filexfer connection. Returns NULL on error or
  * a pointer to a initialized sftp_conn struct on success.