Mercurial > gftp.yaz
diff lib/rfc959.c @ 541:e46278e7ef1d
2004-8-21 Brian Masney <masneyb@gftp.org>
* 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
author | masneyb |
---|---|
date | Sat, 21 Aug 2004 14:40:41 +0000 |
parents | 0f43d84c7f7c |
children | 34a3f10d8bae |
line wrap: on
line diff
--- 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;