diff --git a/cpukit/ftpd/ftpd.c b/cpukit/ftpd/ftpd.c
index 5289e65..5135f27 100644
a
|
b
|
|
15 | 15 | * |
16 | 16 | * Changes: |
17 | 17 | * |
| 18 | * 2010-12-02 Sebastien Bourdeauducq <sebastien@milkymist.org> |
| 19 | * |
| 20 | * * Support spaces in filenames |
| 21 | * |
18 | 22 | * 2001-01-31 Sergei Organov <osv@javad.ru> |
19 | 23 | * |
20 | 24 | * * Hacks with current dir and root dir removed in favor of new libio |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1680 | 1684 | } |
1681 | 1685 | else if (!strcmp("RETR", cmd)) |
1682 | 1686 | { |
1683 | | sscanf(args, "%254s", fname); |
| 1687 | strncpy(fname, args, 254); |
1684 | 1688 | command_retrieve(info, fname); |
1685 | 1689 | } |
1686 | 1690 | else if (!strcmp("STOR", cmd)) |
1687 | 1691 | { |
1688 | | sscanf(args, "%254s", fname); |
| 1692 | strncpy(fname, args, 254); |
1689 | 1693 | command_store(info, fname); |
1690 | 1694 | } |
1691 | 1695 | else if (!strcmp("LIST", cmd)) |
1692 | 1696 | { |
1693 | | sscanf(args, "%254s", fname); |
| 1697 | strncpy(fname, args, 254); |
1694 | 1698 | command_list(info, fname, 1); |
1695 | 1699 | } |
1696 | 1700 | else if (!strcmp("NLST", cmd)) |
1697 | 1701 | { |
1698 | | sscanf(args, "%254s", fname); |
| 1702 | strncpy(fname, args, 254); |
1699 | 1703 | command_list(info, fname, 0); |
1700 | 1704 | } |
1701 | 1705 | else if (!strcmp("MDTM", cmd)) |
1702 | 1706 | { |
1703 | | sscanf(args, "%254s", fname); |
| 1707 | strncpy(fname, args, 254); |
1704 | 1708 | command_mdtm(info, fname); |
1705 | 1709 | } |
1706 | 1710 | else if (!strcmp("SYST", cmd)) |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1736 | 1740 | send_reply(info, 550, "Access denied."); |
1737 | 1741 | } |
1738 | 1742 | else if ( |
1739 | | 1 == sscanf(args, "%254s", fname) && |
| 1743 | strncpy(fname, args, 254) && |
1740 | 1744 | unlink(fname) == 0) |
1741 | 1745 | { |
1742 | 1746 | send_reply(info, 257, "DELE successful."); |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1758 | 1762 | { |
1759 | 1763 | send_reply(info, 550, "Access denied."); |
1760 | 1764 | } |
1761 | | else if( |
1762 | | 2 == sscanf(args, "%o %254s", &mask, fname) && |
1763 | | chmod(fname, (mode_t)mask) == 0) |
1764 | | { |
1765 | | send_reply(info, 257, "CHMOD successful."); |
1766 | | } |
1767 | | else |
1768 | | { |
1769 | | send_reply(info, 550, "CHMOD failed."); |
| 1765 | else { |
| 1766 | char *c; |
| 1767 | c = strchr(args, ' '); |
| 1768 | if((c != NULL) && (sscanf(args, "%o", &mask) == 1) && strncpy(fname, c+1, 254) |
| 1769 | && (chmod(fname, (mode_t)mask) == 0)) |
| 1770 | send_reply(info, 257, "CHMOD successful."); |
| 1771 | else |
| 1772 | send_reply(info, 550, "CHMOD failed."); |
1770 | 1773 | } |
1771 | 1774 | } |
1772 | 1775 | else |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1779 | 1782 | send_reply(info, 550, "Access denied."); |
1780 | 1783 | } |
1781 | 1784 | else if ( |
1782 | | 1 == sscanf(args, "%254s", fname) && |
| 1785 | strncpy(fname, args, 254) && |
1783 | 1786 | rmdir(fname) == 0) |
1784 | 1787 | { |
1785 | 1788 | send_reply(info, 257, "RMD successful."); |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1796 | 1799 | send_reply(info, 550, "Access denied."); |
1797 | 1800 | } |
1798 | 1801 | else if ( |
1799 | | 1 == sscanf(args, "%254s", fname) && |
| 1802 | strncpy(fname, args, 254) && |
1800 | 1803 | mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO) == 0) |
1801 | 1804 | { |
1802 | 1805 | send_reply(info, 257, "MKD successful."); |
… |
… |
exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) |
1808 | 1811 | } |
1809 | 1812 | else if (!strcmp("CWD", cmd)) |
1810 | 1813 | { |
1811 | | sscanf(args, "%254s", fname); |
| 1814 | strncpy(fname, args, 254); |
1812 | 1815 | command_cwd(info, fname); |
1813 | 1816 | } |
1814 | 1817 | else if (!strcmp("CDUP", cmd)) |