diff options
Diffstat (limited to 'sftp.c')
-rw-r--r-- | sftp.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | #include "includes.h" | 17 | #include "includes.h" |
18 | 18 | ||
19 | RCSID("$OpenBSD: sftp.c,v 1.66 2005/08/08 13:22:48 jaredy Exp $"); | 19 | RCSID("$OpenBSD: sftp.c,v 1.70 2006/01/31 10:19:02 djm Exp $"); |
20 | 20 | ||
21 | #ifdef USE_LIBEDIT | 21 | #ifdef USE_LIBEDIT |
22 | #include <histedit.h> | 22 | #include <histedit.h> |
@@ -697,6 +697,8 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag) | |||
697 | } | 697 | } |
698 | 698 | ||
699 | if (lflag & SORT_FLAGS) { | 699 | if (lflag & SORT_FLAGS) { |
700 | for (n = 0; d[n] != NULL; n++) | ||
701 | ; /* count entries */ | ||
700 | sort_flag = lflag & (SORT_FLAGS|LS_REVERSE_SORT); | 702 | sort_flag = lflag & (SORT_FLAGS|LS_REVERSE_SORT); |
701 | qsort(d, n, sizeof(*d), sdirent_comp); | 703 | qsort(d, n, sizeof(*d), sdirent_comp); |
702 | } | 704 | } |
@@ -1447,11 +1449,16 @@ main(int argc, char **argv) | |||
1447 | extern int optind; | 1449 | extern int optind; |
1448 | extern char *optarg; | 1450 | extern char *optarg; |
1449 | 1451 | ||
1452 | /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ | ||
1453 | sanitise_stdfd(); | ||
1454 | |||
1450 | __progname = ssh_get_progname(argv[0]); | 1455 | __progname = ssh_get_progname(argv[0]); |
1456 | memset(&args, '\0', sizeof(args)); | ||
1451 | args.list = NULL; | 1457 | args.list = NULL; |
1452 | addargs(&args, "ssh"); /* overwritten with ssh_program */ | 1458 | addargs(&args, ssh_program); |
1453 | addargs(&args, "-oForwardX11 no"); | 1459 | addargs(&args, "-oForwardX11 no"); |
1454 | addargs(&args, "-oForwardAgent no"); | 1460 | addargs(&args, "-oForwardAgent no"); |
1461 | addargs(&args, "-oPermitLocalCommand no"); | ||
1455 | addargs(&args, "-oClearAllForwardings yes"); | 1462 | addargs(&args, "-oClearAllForwardings yes"); |
1456 | 1463 | ||
1457 | ll = SYSLOG_LEVEL_INFO; | 1464 | ll = SYSLOG_LEVEL_INFO; |
@@ -1483,6 +1490,7 @@ main(int argc, char **argv) | |||
1483 | break; | 1490 | break; |
1484 | case 'S': | 1491 | case 'S': |
1485 | ssh_program = optarg; | 1492 | ssh_program = optarg; |
1493 | replacearg(&args, 0, "%s", ssh_program); | ||
1486 | break; | 1494 | break; |
1487 | case 'b': | 1495 | case 'b': |
1488 | if (batchmode) | 1496 | if (batchmode) |
@@ -1559,7 +1567,6 @@ main(int argc, char **argv) | |||
1559 | addargs(&args, "%s", host); | 1567 | addargs(&args, "%s", host); |
1560 | addargs(&args, "%s", (sftp_server != NULL ? | 1568 | addargs(&args, "%s", (sftp_server != NULL ? |
1561 | sftp_server : "sftp")); | 1569 | sftp_server : "sftp")); |
1562 | args.list[0] = ssh_program; | ||
1563 | 1570 | ||
1564 | if (!batchmode) | 1571 | if (!batchmode) |
1565 | fprintf(stderr, "Connecting to %s...\n", host); | 1572 | fprintf(stderr, "Connecting to %s...\n", host); |
@@ -1572,6 +1579,7 @@ main(int argc, char **argv) | |||
1572 | fprintf(stderr, "Attaching to %s...\n", sftp_direct); | 1579 | fprintf(stderr, "Attaching to %s...\n", sftp_direct); |
1573 | connect_to_server(sftp_direct, args.list, &in, &out); | 1580 | connect_to_server(sftp_direct, args.list, &in, &out); |
1574 | } | 1581 | } |
1582 | freeargs(&args); | ||
1575 | 1583 | ||
1576 | err = interactive_loop(in, out, file1, file2); | 1584 | err = interactive_loop(in, out, file1, file2); |
1577 | 1585 | ||