comparison 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
comparison
equal deleted inserted replaced
540:5dc503f04424 541:e46278e7ef1d
384 384
385 385
386 static int 386 static int
387 rfc959_syst (gftp_request * request) 387 rfc959_syst (gftp_request * request)
388 { 388 {
389 rfc959_parms * parms;
389 char *stpos, *endpos; 390 char *stpos, *endpos;
390 int ret; 391 int ret;
391 392
392 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 393 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
393 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 394 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
394 395
396 parms = request->protocol_data;
395 ret = rfc959_send_command (request, "SYST\r\n", 1); 397 ret = rfc959_send_command (request, "SYST\r\n", 1);
396 398
397 if (ret < 0) 399 if (ret < 0)
398 return (ret); 400 return (ret);
399 else if (ret != '2') 401 else if (ret != '2')
406 408
407 if ((endpos = strchr (stpos, ' ')) == NULL) 409 if ((endpos = strchr (stpos, ' ')) == NULL)
408 return (GFTP_ERETRYABLE); 410 return (GFTP_ERETRYABLE);
409 411
410 *endpos = '\0'; 412 *endpos = '\0';
413 parms->quote_filename = 0;
414
411 if (strcmp (stpos, "UNIX") == 0) 415 if (strcmp (stpos, "UNIX") == 0)
412 request->server_type = GFTP_DIRTYPE_UNIX; 416 {
417 request->server_type = GFTP_DIRTYPE_UNIX;
418 if (strstr (endpos + 1, "BSD") == NULL)
419 parms->quote_filename = 1;
420 }
413 else if (strcmp (stpos, "VMS") == 0) 421 else if (strcmp (stpos, "VMS") == 0)
414 request->server_type = GFTP_DIRTYPE_VMS; 422 request->server_type = GFTP_DIRTYPE_VMS;
415 else if (strcmp (stpos, "MVS") == 0 || 423 else if (strcmp (stpos, "MVS") == 0 ||
416 strcmp (stpos, "OS/MVS") == 0) 424 strcmp (stpos, "OS/MVS") == 0)
417 request->server_type = GFTP_DIRTYPE_MVS; 425 request->server_type = GFTP_DIRTYPE_MVS;
1654 1662
1655 1663
1656 static int 1664 static int
1657 rfc959_chmod (gftp_request * request, const char *file, mode_t mode) 1665 rfc959_chmod (gftp_request * request, const char *file, mode_t mode)
1658 { 1666 {
1667 rfc959_parms * parms;
1659 char *tempstr; 1668 char *tempstr;
1660 int ret; 1669 int ret;
1661 1670
1662 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1671 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1663 g_return_val_if_fail (file != NULL, GFTP_EFATAL); 1672 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1664 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1673 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1665 1674
1666 tempstr = g_strdup_printf ("SITE CHMOD %o \"%s\"\r\n", mode, file); 1675 parms = request->protocol_data;
1676 if (parms->quote_filename)
1677 tempstr = g_strdup_printf ("SITE CHMOD %o \"%s\"\r\n", mode, file);
1678 else
1679 tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, file);
1680
1667 ret = rfc959_send_command (request, tempstr, 1); 1681 ret = rfc959_send_command (request, tempstr, 1);
1668 g_free (tempstr); 1682 g_free (tempstr);
1669 1683
1670 if (ret < 0) 1684 if (ret < 0)
1671 return (ret); 1685 return (ret);
1728 1742
1729 static int 1743 static int
1730 rfc959_set_file_time (gftp_request * request, const char *file, time_t datetime) 1744 rfc959_set_file_time (gftp_request * request, const char *file, time_t datetime)
1731 { 1745 {
1732 char *tempstr, *datestr; 1746 char *tempstr, *datestr;
1747 rfc959_parms * parms;
1733 int ret; 1748 int ret;
1734 1749
1735 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1750 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1736 g_return_val_if_fail (file != NULL, GFTP_EFATAL); 1751 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1737 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1752 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1753
1754 parms = request->protocol_data;
1738 1755
1739 datestr = rfc959_time_t_to_mdtm (request, datetime); 1756 datestr = rfc959_time_t_to_mdtm (request, datetime);
1740 if (datestr == NULL) 1757 if (datestr == NULL)
1741 return (GFTP_EFATAL); 1758 return (GFTP_EFATAL);
1742 1759
1743 tempstr = g_strconcat ("SITE UTIME ", datestr, " \"", file, "\"\r\n", NULL); 1760 if (parms->quote_filename)
1761 tempstr = g_strconcat ("SITE UTIME ", datestr, " \"", file, "\"\r\n", NULL);
1762 else
1763 tempstr = g_strconcat ("SITE UTIME ", datestr, " ", file, "\r\n", NULL);
1764
1744 g_free (datestr); 1765 g_free (datestr);
1745 1766
1746 ret = rfc959_send_command (request, tempstr, 1); 1767 ret = rfc959_send_command (request, tempstr, 1);
1747 g_free (tempstr); 1768 g_free (tempstr);
1748 1769
1804 1825
1805 dparms = dest_request->protocol_data; 1826 dparms = dest_request->protocol_data;
1806 sparms = src_request->protocol_data; 1827 sparms = src_request->protocol_data;
1807 1828
1808 dparms->data_connection = -1; 1829 dparms->data_connection = -1;
1830 dparms->quote_filename = sparms->quote_filename;
1809 dparms->is_ascii_transfer = sparms->is_ascii_transfer; 1831 dparms->is_ascii_transfer = sparms->is_ascii_transfer;
1810 dparms->is_fxp_transfer = sparms->is_fxp_transfer; 1832 dparms->is_fxp_transfer = sparms->is_fxp_transfer;
1811 dparms->auth_tls_start = sparms->auth_tls_start; 1833 dparms->auth_tls_start = sparms->auth_tls_start;
1812 dparms->data_conn_read = sparms->data_conn_read; 1834 dparms->data_conn_read = sparms->data_conn_read;
1813 dparms->data_conn_write = sparms->data_conn_write; 1835 dparms->data_conn_write = sparms->data_conn_write;