summaryrefslogtreecommitdiff
path: root/sftp.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2014-07-09 13:07:06 +1000
committerDamien Miller <djm@mindrot.org>2014-07-09 13:07:06 +1000
commit0070776a038655c57f57e70cd05e4c38a5de9d84 (patch)
tree0df2401f9b5e9043b3c17ece1c10920c8dc1ed56 /sftp.c
parent079bac2a43c74ef7cf56850afbab3b1932534c50 (diff)
- djm@cvs.openbsd.org 2014/07/09 01:45:10
[sftp.c] more useful error message when GLOB_NOSPACE occurs; bz#2254, patch from Orion Poplawski
Diffstat (limited to 'sftp.c')
-rw-r--r--sftp.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/sftp.c b/sftp.c
index 2d6438553..ff4d63d5c 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp.c,v 1.163 2014/05/05 07:02:30 logan Exp $ */ 1/* $OpenBSD: sftp.c,v 1.164 2014/07/09 01:45:10 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -589,15 +589,19 @@ process_get(struct sftp_conn *conn, char *src, char *dst, char *pwd,
589 char *abs_dst = NULL; 589 char *abs_dst = NULL;
590 glob_t g; 590 glob_t g;
591 char *filename, *tmp=NULL; 591 char *filename, *tmp=NULL;
592 int i, err = 0; 592 int i, r, err = 0;
593 593
594 abs_src = xstrdup(src); 594 abs_src = xstrdup(src);
595 abs_src = make_absolute(abs_src, pwd); 595 abs_src = make_absolute(abs_src, pwd);
596 memset(&g, 0, sizeof(g)); 596 memset(&g, 0, sizeof(g));
597 597
598 debug3("Looking up %s", abs_src); 598 debug3("Looking up %s", abs_src);
599 if (remote_glob(conn, abs_src, GLOB_MARK, NULL, &g)) { 599 if ((r = remote_glob(conn, abs_src, GLOB_MARK, NULL, &g)) != 0) {
600 error("File \"%s\" not found.", abs_src); 600 if (r == GLOB_NOSPACE) {
601 error("Too many matches for \"%s\".", abs_src);
602 } else {
603 error("File \"%s\" not found.", abs_src);
604 }
601 err = -1; 605 err = -1;
602 goto out; 606 goto out;
603 } 607 }
@@ -862,19 +866,23 @@ do_globbed_ls(struct sftp_conn *conn, char *path, char *strip_path,
862{ 866{
863 char *fname, *lname; 867 char *fname, *lname;
864 glob_t g; 868 glob_t g;
865 int err; 869 int err, r;
866 struct winsize ws; 870 struct winsize ws;
867 u_int i, c = 1, colspace = 0, columns = 1, m = 0, width = 80; 871 u_int i, c = 1, colspace = 0, columns = 1, m = 0, width = 80;
868 872
869 memset(&g, 0, sizeof(g)); 873 memset(&g, 0, sizeof(g));
870 874
871 if (remote_glob(conn, path, 875 if ((r = remote_glob(conn, path,
872 GLOB_MARK|GLOB_NOCHECK|GLOB_BRACE|GLOB_KEEPSTAT|GLOB_NOSORT, 876 GLOB_MARK|GLOB_NOCHECK|GLOB_BRACE|GLOB_KEEPSTAT|GLOB_NOSORT,
873 NULL, &g) || 877 NULL, &g)) != 0 ||
874 (g.gl_pathc && !g.gl_matchc)) { 878 (g.gl_pathc && !g.gl_matchc)) {
875 if (g.gl_pathc) 879 if (g.gl_pathc)
876 globfree(&g); 880 globfree(&g);
877 error("Can't ls: \"%s\" not found", path); 881 if (r == GLOB_NOSPACE) {
882 error("Can't ls: Too many matches for \"%s\"", path);
883 } else {
884 error("Can't ls: \"%s\" not found", path);
885 }
878 return -1; 886 return -1;
879 } 887 }
880 888