=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/sftp.c,v retrieving revision 1.222 retrieving revision 1.223 diff -u -r1.222 -r1.223 --- src/usr.bin/ssh/sftp.c 2022/09/19 10:46:00 1.222 +++ src/usr.bin/ssh/sftp.c 2022/12/16 03:40:03 1.223 @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.222 2022/09/19 10:46:00 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.223 2022/12/16 03:40:03 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -2383,7 +2383,7 @@ struct sftp_conn *conn; size_t copy_buffer_len = 0; size_t num_requests = 0; - long long limit_kbps = 0; + long long llv, limit_kbps = 0; /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ sanitise_stdfd(); @@ -2400,7 +2400,7 @@ infile = stdin; while ((ch = getopt(argc, argv, - "1246AafhNpqrvCc:D:i:l:o:s:S:b:B:F:J:P:R:")) != -1) { + "1246AafhNpqrvCc:D:i:l:o:s:S:b:B:F:J:P:R:X:")) != -1) { switch (ch) { /* Passed through to ssh(1) */ case 'A': @@ -2496,6 +2496,31 @@ case 'S': ssh_program = optarg; replacearg(&args, 0, "%s", ssh_program); + break; + case 'X': + /* Please keep in sync with ssh.c -X */ + if (strncmp(optarg, "buffer=", 7) == 0) { + r = scan_scaled(optarg + 7, &llv); + if (r == 0 && (llv <= 0 || llv > 256 * 1024)) { + r = -1; + errno = EINVAL; + } + if (r == -1) { + fatal("Invalid buffer size \"%s\": %s", + optarg + 7, strerror(errno)); + } + copy_buffer_len = (size_t)llv; + } else if (strncmp(optarg, "nrequests=", 10) == 0) { + llv = strtonum(optarg + 10, 1, 256 * 1024, + &errstr); + if (errstr != NULL) { + fatal("Invalid number of requests " + "\"%s\": %s", optarg + 10, errstr); + } + num_requests = (size_t)llv; + } else { + fatal("Invalid -X option"); + } break; case 'h': default: