X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxsftp.c;h=7045c32281f03fa827c580b365f9c231409078ae;hb=d64907553943e368130fec2076536a2d8c1adc79;hp=0862bc4c4427c3ca8af97f7ec5f913656c7c2ef9;hpb=a4fe4391842446ceacc0df65a6b5879a9ed35fa9;p=PuTTY.git diff --git a/unix/uxsftp.c b/unix/uxsftp.c index 0862bc4c..7045c322 100644 --- a/unix/uxsftp.c +++ b/unix/uxsftp.c @@ -341,6 +341,17 @@ void finish_wildcard_matching(WildcardMatcher *dir) { sfree(dir); } +int vet_filename(char *name) +{ + if (strchr(name, '/')) + return FALSE; + + if (name[0] == '.' && (!name[1] || (name[1] == '.' && !name[2]))) + return FALSE; + + return TRUE; +} + int create_directory(char *name) { return mkdir(name, 0777) == 0; @@ -355,7 +366,7 @@ char *dir_file_cat(char *dir, char *file) * Do a select() between all currently active network fds and * optionally stdin. */ -static int ssh_sftp_do_select(int include_stdin) +static int ssh_sftp_do_select(int include_stdin, int no_fds_ok) { fd_set rset, wset, xset; int i, fdcount, fdsize, *fdlist; @@ -372,7 +383,7 @@ static int ssh_sftp_do_select(int include_stdin) for (fd = first_fd(&fdstate, &rwx); fd >= 0; fd = next_fd(&fdstate, &rwx)) i++; - if (i < 1) + if (i < 1 && !no_fds_ok) return -1; /* doom */ /* Expand the fdlist buffer if necessary. */ @@ -457,13 +468,13 @@ static int ssh_sftp_do_select(int include_stdin) */ int ssh_sftp_loop_iteration(void) { - return ssh_sftp_do_select(FALSE); + return ssh_sftp_do_select(FALSE, FALSE); } /* * Read a PSFTP command line from stdin. */ -char *ssh_sftp_get_cmdline(char *prompt) +char *ssh_sftp_get_cmdline(char *prompt, int no_fds_ok) { char *buf; int buflen, bufsize, ret; @@ -475,7 +486,7 @@ char *ssh_sftp_get_cmdline(char *prompt) buflen = bufsize = 0; while (1) { - ret = ssh_sftp_do_select(TRUE); + ret = ssh_sftp_do_select(TRUE, no_fds_ok); if (ret < 0) { printf("connection died\n"); return NULL; /* woop woop */