Could you please try the below diff if you have been experiencing problems with the globbing support in the sftp client. There have been a few reports that it doesn't work on Solaris, etc. Index: ChangeLog ==================================================================RCS file: /var/cvs/openssh/ChangeLog,v retrieving revision 1.1022 diff -u -r1.1022 ChangeLog --- ChangeLog 2001/03/28 03:03:42 1.1022 +++ ChangeLog 2001/03/28 03:28:37 @@ -2,6 +2,8 @@ - (djm) Reorder tests and library inclusion for Krb4/AFS to try to resolve linking conflicts with libcrypto. Report and suggested fix from Holger Trapp <Holger.Trapp at Informatik.TU-Chemnitz.DE> + - (djm) Work around Solaris' broken struct dirent. Diagnosis and suggested + fix from Philippe Levan <levan at epix.net> 20010327 - Attempt sync with sshlogin.c w/ OpenBSD (mainly CVS ID) Index: acconfig.h ==================================================================RCS file: /var/cvs/openssh/acconfig.h,v retrieving revision 1.108 diff -u -r1.108 acconfig.h --- acconfig.h 2001/03/17 01:15:38 1.108 +++ acconfig.h 2001/03/28 03:28:37 @@ -308,6 +308,9 @@ /* Define if your system glob() function has gl_matchc options in glob_t */ #undef GLOB_HAS_GL_MATCHC +/* Define in your struct dirent expects you to allocate extra space for d_name */ +#undef BROKEN_ONE_BYTE_DIRENT_D_NAME + @BOTTOM@ /* ******************* Shouldn't need to edit below this line ************** */ Index: configure.in ==================================================================RCS file: /var/cvs/openssh/configure.in,v retrieving revision 1.268 diff -u -r1.268 configure.in --- configure.in 2001/03/28 03:03:42 1.268 +++ configure.in 2001/03/28 03:28:37 @@ -404,6 +404,20 @@ ] ) +AC_MSG_CHECKING([whether struct dirent allocates space for d_name]) +AC_TRY_RUN( + [ +#include <sys/types.h> +#include <dirent.h> +int main(void){struct dirent d;return(sizeof(d.d_name)<=sizeof(char));} + ], + [AC_MSG_RESULT(yes)], + [ + AC_MSG_RESULT(no) + AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME) + ] +) + # Check whether user wants S/Key support SKEY_MSG="no" AC_ARG_WITH(skey, Index: sftp-glob.c ==================================================================RCS file: /var/cvs/openssh/sftp-glob.c,v retrieving revision 1.3 diff -u -r1.3 sftp-glob.c --- sftp-glob.c 2001/03/17 00:34:46 1.3 +++ sftp-glob.c 2001/03/28 03:28:37 @@ -65,7 +65,9 @@ struct dirent *fudge_readdir(struct SFTP_OPENDIR *od) { - static struct dirent ret; + /* Solaris needs sizeof(dirent) + path length (see below) */ + static char buf[sizeof(struct dirent) + MAXPATHLEN]; + struct dirent *ret = (struct dirent *)buf; #ifdef __GNU_LIBRARY__ static int inum = 1; #endif /* __GNU_LIBRARY__ */ @@ -73,22 +75,30 @@ if (od->dir[od->offset] == NULL) return(NULL); - memset(&ret, 0, sizeof(ret)); - strlcpy(ret.d_name, od->dir[od->offset++]->filename, - sizeof(ret.d_name)); + memset(buf, 0, sizeof(buf)); + /* + * Solaris defines dirent->d_name as a one byte array and expects + * you to hack around it. + */ +#ifdef BROKEN_ONE_BYTE_DIRENT_D_NAME + strlcpy(ret->d_name, od->dir[od->offset++]->filename, MAXPATHLEN); +#else + strlcpy(ret->d_name, od->dir[od->offset++]->filename, + sizeof(ret->d_name)); +#endif #ifdef __GNU_LIBRARY__ /* * Idiot glibc uses extensions to struct dirent for readdir with * ALTDIRFUNCs. Not that this is documented anywhere but the * source... Fake an inode number to appease it. */ - ret.d_ino = inum++; + ret->d_ino = inum++; if (!inum) inum = 1; #endif /* __GNU_LIBRARY__ */ - return(&ret); + return(ret); } void fudge_closedir(struct SFTP_OPENDIR *od) -- | Damien Miller <djm at mindrot.org> \ ``E-mail attachments are the poor man's | http://www.mindrot.org / distributed filesystem'' - Dan Geer