Mercurial > gftp.yaz
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; |