# HG changeset patch # User masneyb # Date 1093099241 0 # Node ID e46278e7ef1d6cdafaf97de254b8d978ad6dc4f4 # Parent 5dc503f04424e28a54e507eb1f76203779e951a2 2004-8-21 Brian Masney * lib/rfc959.c lib/ftpcommon.h - added internal option to quote the filename in the SITE command. This is only enabled for servers that return UNIX in the SYST output. It is disabled if it is a BSD based FTP server * lib/sshv2.c (sshv2_start_login_sequence) - pass the search strings through gettext so that logins will work properly for non-english users * lib/pty.c (gftp_exec) - redirect STDERR of the child process to the opened pty so that stderr is shown properly in the log window diff -r 5dc503f04424 -r e46278e7ef1d ChangeLog --- a/ChangeLog Fri Aug 20 16:46:22 2004 +0000 +++ b/ChangeLog Sat Aug 21 14:40:41 2004 +0000 @@ -1,3 +1,16 @@ +2004-8-21 Brian Masney + * lib/rfc959.c lib/ftpcommon.h - added internal option to quote + the filename in the SITE command. This is only enabled for servers + that return UNIX in the SYST output. It is disabled if it is a BSD + based FTP server + + * lib/sshv2.c (sshv2_start_login_sequence) - pass the search strings + through gettext so that logins will work properly for non-english + users + + * lib/pty.c (gftp_exec) - redirect STDERR of the child process to the + opened pty so that stderr is shown properly in the log window + 2004-8-17 Brian Masney * lib/sshv2.c - renamed read_buffer in sshv2_params to transfer_buffer. In sshv2_put_next_file_chunk(), dynamically allocate @@ -2761,7 +2774,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.312 2004/08/18 04:11:26 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.313 2004/08/21 14:40:41 masneyb Exp $ tags * debian/* - updated files from Debian maintainer diff -r 5dc503f04424 -r e46278e7ef1d lib/ftpcommon.h --- a/lib/ftpcommon.h Fri Aug 20 16:46:22 2004 +0000 +++ b/lib/ftpcommon.h Sat Aug 21 14:40:41 2004 +0000 @@ -27,7 +27,8 @@ * dataconn_rbuf; int data_connection; unsigned int is_ascii_transfer : 1, - is_fxp_transfer : 1; + is_fxp_transfer : 1, + quote_filename : 1; int (*auth_tls_start) (gftp_request * request); ssize_t (*data_conn_read) (gftp_request * request, void *ptr, size_t size, int fd); diff -r 5dc503f04424 -r e46278e7ef1d lib/pty.c --- a/lib/pty.c Fri Aug 20 16:46:22 2004 +0000 +++ b/lib/pty.c Sat Aug 21 14:40:41 2004 +0000 @@ -324,7 +324,7 @@ dup2 (s[1], 0); dup2 (s[1], 1); - dup2 (s[1], 2); + dup2 (ptysfd, 2); _gftp_close_all_fds (ptysfd); execvp (args[0], args); diff -r 5dc503f04424 -r e46278e7ef1d lib/rfc959.c --- a/lib/rfc959.c Fri Aug 20 16:46:22 2004 +0000 +++ b/lib/rfc959.c Sat Aug 21 14:40:41 2004 +0000 @@ -386,12 +386,14 @@ static int rfc959_syst (gftp_request * request) { + rfc959_parms * parms; char *stpos, *endpos; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); + parms = request->protocol_data; ret = rfc959_send_command (request, "SYST\r\n", 1); if (ret < 0) @@ -408,8 +410,14 @@ return (GFTP_ERETRYABLE); *endpos = '\0'; + parms->quote_filename = 0; + if (strcmp (stpos, "UNIX") == 0) - request->server_type = GFTP_DIRTYPE_UNIX; + { + request->server_type = GFTP_DIRTYPE_UNIX; + if (strstr (endpos + 1, "BSD") == NULL) + parms->quote_filename = 1; + } else if (strcmp (stpos, "VMS") == 0) request->server_type = GFTP_DIRTYPE_VMS; else if (strcmp (stpos, "MVS") == 0 || @@ -1656,6 +1664,7 @@ static int rfc959_chmod (gftp_request * request, const char *file, mode_t mode) { + rfc959_parms * parms; char *tempstr; int ret; @@ -1663,7 +1672,12 @@ g_return_val_if_fail (file != NULL, GFTP_EFATAL); g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); - tempstr = g_strdup_printf ("SITE CHMOD %o \"%s\"\r\n", mode, file); + parms = request->protocol_data; + if (parms->quote_filename) + tempstr = g_strdup_printf ("SITE CHMOD %o \"%s\"\r\n", mode, file); + else + tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, file); + ret = rfc959_send_command (request, tempstr, 1); g_free (tempstr); @@ -1730,17 +1744,24 @@ rfc959_set_file_time (gftp_request * request, const char *file, time_t datetime) { char *tempstr, *datestr; + rfc959_parms * parms; int ret; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (file != NULL, GFTP_EFATAL); g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); + parms = request->protocol_data; + datestr = rfc959_time_t_to_mdtm (request, datetime); if (datestr == NULL) return (GFTP_EFATAL); - tempstr = g_strconcat ("SITE UTIME ", datestr, " \"", file, "\"\r\n", NULL); + if (parms->quote_filename) + tempstr = g_strconcat ("SITE UTIME ", datestr, " \"", file, "\"\r\n", NULL); + else + tempstr = g_strconcat ("SITE UTIME ", datestr, " ", file, "\r\n", NULL); + g_free (datestr); ret = rfc959_send_command (request, tempstr, 1); @@ -1806,6 +1827,7 @@ sparms = src_request->protocol_data; dparms->data_connection = -1; + dparms->quote_filename = sparms->quote_filename; dparms->is_ascii_transfer = sparms->is_ascii_transfer; dparms->is_fxp_transfer = sparms->is_fxp_transfer; dparms->auth_tls_start = sparms->auth_tls_start; diff -r 5dc503f04424 -r e46278e7ef1d lib/sshv2.c --- a/lib/sshv2.c Fri Aug 20 16:46:22 2004 +0000 +++ b/lib/sshv2.c Sat Aug 21 14:40:41 2004 +0000 @@ -304,8 +304,13 @@ static int sshv2_start_login_sequence (gftp_request * request, int fdm, int ptymfd) { + static char *pwstrs[] = {N_("Enter passphrase for RSA key"), + N_("Enter passphrase for key '"), + N_("Password"), + N_("password"), + NULL}; char *tempstr, *temp1str, *pwstr, *yesstr = "yes\n", *securid_pass; - int wrotepw, ok, maxfd, ret, clear_tempstr; + int wrotepw, ok, maxfd, ret, clear_tempstr, pwidx; size_t rem, len, diff; fd_set rset, eset; ssize_t rd; @@ -381,10 +386,15 @@ rem -= rd; diff += rd; - if (strcmp (tempstr, "Password:") == 0 || - (diff >= 10 && strcmp (tempstr + diff - 9, "assword: ") == 0) || - strstr (tempstr, "Enter passphrase for RSA key") != NULL || - strstr (tempstr, "Enter passphrase for key '") != NULL) + /* See if we are at the enter password prompt... */ + for (pwidx = 0; pwstrs[pwidx] != NULL; pwidx++) + { + if (strstr (tempstr, pwstrs[pwidx]) != NULL || + strstr (tempstr, _(pwstrs[pwidx])) != NULL) + break; + } + + if (pwstrs[pwidx] != NULL) { clear_tempstr = 1; if (wrotepw) @@ -400,7 +410,8 @@ break; } } - else if (diff > 10 && strcmp (tempstr + diff - 10, "(yes/no)? ") == 0) + else if (strstr (tempstr, "(yes/no)?") != NULL || + strstr (tempstr, _("(yes/no)?")) != NULL) { clear_tempstr = 1; if (!gftpui_protocol_ask_yes_no (request, request->hostname, tempstr)) @@ -417,7 +428,8 @@ } } } - else if (strstr (tempstr, "Enter PASSCODE:") != NULL) + else if (strstr (tempstr, "Enter PASSCODE:") != NULL || + strstr (tempstr, _("Enter PASSCODE:")) != NULL) { clear_tempstr = 1; securid_pass = gftpui_protocol_ask_user_input (request,