ftpcmd.c (178826) | ftpcmd.c (233294) |
---|---|
1/* A Bison parser, made by GNU Bison 2.3. */ 2 3/* Skeleton implementation for Bison's Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 6 Free Software Foundation, Inc. 7 8 This program is free software; you can redistribute it and/or modify --- 228 unchanged lines hidden (view full) --- 237 238 239 240/* Copy the first part of user declarations. */ 241#line 43 "ftpcmd.y" 242 243 244#include "ftpd_locl.h" | 1/* A Bison parser, made by GNU Bison 2.3. */ 2 3/* Skeleton implementation for Bison's Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 6 Free Software Foundation, Inc. 7 8 This program is free software; you can redistribute it and/or modify --- 228 unchanged lines hidden (view full) --- 237 238 239 240/* Copy the first part of user declarations. */ 241#line 43 "ftpcmd.y" 242 243 244#include "ftpd_locl.h" |
245RCSID("$Id: ftpcmd.y 15677 2005-07-19 18:33:08Z lha $"); | 245RCSID("$Id$"); |
246 247off_t restart_point; 248 249static int hasyyerrored; 250 251 252static int cmd_type; 253static int cmd_form; --- 406 unchanged lines hidden (view full) --- 660 12, -1, 11, -1, 13, -1, 4, -1, 5, -1, 661 98, -1, 83, -1, 84, -1, 101, -1, 102, -1, 662 -1 663}; 664 665/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 666static const yytype_uint16 yyrline[] = 667{ | 246 247off_t restart_point; 248 249static int hasyyerrored; 250 251 252static int cmd_type; 253static int cmd_form; --- 406 unchanged lines hidden (view full) --- 660 12, -1, 11, -1, 13, -1, 4, -1, 5, -1, 661 98, -1, 83, -1, 84, -1, 101, -1, 102, -1, 662 -1 663}; 664 665/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 666static const yytype_uint16 yyrline[] = 667{ |
668 0, 129, 129, 131, 136, 140, 146, 153, 164, 170, 669 175, 180, 186, 223, 237, 251, 257, 263, 272, 281, 670 290, 295, 304, 309, 315, 322, 327, 334, 348, 353, 671 358, 365, 370, 387, 392, 399, 406, 411, 416, 426, 672 433, 438, 443, 451, 464, 478, 485, 502, 525, 530, 673 539, 552, 563, 576, 583, 588, 595, 613, 630, 658, 674 665, 671, 681, 691, 696, 701, 706, 711, 716, 721, 675 726, 734, 739, 742, 746, 750, 763, 767, 771, 778, 676 783, 788, 793, 798, 802, 807, 813, 821, 825, 829, 677 836, 840, 844, 851, 879, 883, 909, 917, 928 | 668 0, 129, 129, 131, 136, 140, 146, 154, 175, 181, 669 186, 191, 197, 234, 248, 262, 268, 274, 283, 292, 670 301, 306, 315, 320, 326, 333, 338, 345, 359, 364, 671 373, 380, 385, 402, 407, 414, 421, 426, 431, 441, 672 448, 453, 458, 466, 479, 493, 500, 517, 521, 526, 673 530, 534, 545, 558, 565, 570, 577, 595, 612, 640, 674 647, 653, 663, 673, 678, 683, 688, 693, 698, 703, 675 708, 716, 721, 724, 728, 732, 745, 749, 753, 760, 676 765, 770, 775, 780, 784, 789, 795, 803, 807, 811, 677 818, 822, 826, 833, 861, 865, 891, 899, 910 |
678}; 679#endif 680 681#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 682/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 683 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 684static const char *const yytname[] = 685{ --- 1103 unchanged lines hidden (view full) --- 1789 if ((yyvsp[(5) - (5)].i)) 1790 pass((yyvsp[(3) - (5)].s)); 1791 memset ((yyvsp[(3) - (5)].s), 0, strlen((yyvsp[(3) - (5)].s))); 1792 free((yyvsp[(3) - (5)].s)); 1793 } 1794 break; 1795 1796 case 7: | 678}; 679#endif 680 681#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 682/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 683 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 684static const char *const yytname[] = 685{ --- 1103 unchanged lines hidden (view full) --- 1789 if ((yyvsp[(5) - (5)].i)) 1790 pass((yyvsp[(3) - (5)].s)); 1791 memset ((yyvsp[(3) - (5)].s), 0, strlen((yyvsp[(3) - (5)].s))); 1792 free((yyvsp[(3) - (5)].s)); 1793 } 1794 break; 1795 1796 case 7: |
1797#line 154 "ftpcmd.y" | 1797#line 155 "ftpcmd.y" |
1798 { 1799 if ((yyvsp[(5) - (5)].i)) { | 1798 { 1799 if ((yyvsp[(5) - (5)].i)) { |
1800 usedefault = 0; 1801 if (pdata >= 0) { | 1800 if (paranoid && 1801 (data_dest->sa_family != his_addr->sa_family || 1802 (socket_get_port(data_dest) < IPPORT_RESERVED) || 1803 memcmp(socket_get_address(data_dest), 1804 socket_get_address(his_addr), 1805 socket_addr_size(his_addr)) != 0)) { 1806 usedefault = 1; 1807 reply(500, "Illegal PORT range rejected."); 1808 } else { 1809 usedefault = 0; 1810 if (pdata >= 0) { |
1802 close(pdata); 1803 pdata = -1; | 1811 close(pdata); 1812 pdata = -1; |
1813 } 1814 reply(200, "PORT command successful."); |
|
1804 } | 1815 } |
1805 reply(200, "PORT command successful."); | |
1806 } 1807 } 1808 break; 1809 1810 case 8: | 1816 } 1817 } 1818 break; 1819 1820 case 8: |
1811#line 165 "ftpcmd.y" | 1821#line 176 "ftpcmd.y" |
1812 { 1813 if ((yyvsp[(5) - (5)].i)) 1814 eprt ((yyvsp[(3) - (5)].s)); 1815 free ((yyvsp[(3) - (5)].s)); 1816 } 1817 break; 1818 1819 case 9: | 1822 { 1823 if ((yyvsp[(5) - (5)].i)) 1824 eprt ((yyvsp[(3) - (5)].s)); 1825 free ((yyvsp[(3) - (5)].s)); 1826 } 1827 break; 1828 1829 case 9: |
1820#line 171 "ftpcmd.y" | 1830#line 182 "ftpcmd.y" |
1821 { 1822 if((yyvsp[(3) - (3)].i)) 1823 pasv (); 1824 } 1825 break; 1826 1827 case 10: | 1831 { 1832 if((yyvsp[(3) - (3)].i)) 1833 pasv (); 1834 } 1835 break; 1836 1837 case 10: |
1828#line 176 "ftpcmd.y" | 1838#line 187 "ftpcmd.y" |
1829 { 1830 if((yyvsp[(3) - (3)].i)) 1831 epsv (NULL); 1832 } 1833 break; 1834 1835 case 11: | 1839 { 1840 if((yyvsp[(3) - (3)].i)) 1841 epsv (NULL); 1842 } 1843 break; 1844 1845 case 11: |
1836#line 181 "ftpcmd.y" | 1846#line 192 "ftpcmd.y" |
1837 { 1838 if((yyvsp[(5) - (5)].i)) 1839 epsv ((yyvsp[(3) - (5)].s)); 1840 free ((yyvsp[(3) - (5)].s)); 1841 } 1842 break; 1843 1844 case 12: | 1847 { 1848 if((yyvsp[(5) - (5)].i)) 1849 epsv ((yyvsp[(3) - (5)].s)); 1850 free ((yyvsp[(3) - (5)].s)); 1851 } 1852 break; 1853 1854 case 12: |
1845#line 187 "ftpcmd.y" | 1855#line 198 "ftpcmd.y" |
1846 { 1847 if ((yyvsp[(5) - (5)].i)) { 1848 switch (cmd_type) { 1849 1850 case TYPE_A: 1851 if (cmd_form == FORM_N) { 1852 reply(200, "Type set to A."); 1853 type = cmd_type; --- 23 unchanged lines hidden (view full) --- 1877 UNIMPLEMENTED for NBBY != 8 1878#endif /* NBBY == 8 */ 1879 } 1880 } 1881 } 1882 break; 1883 1884 case 13: | 1856 { 1857 if ((yyvsp[(5) - (5)].i)) { 1858 switch (cmd_type) { 1859 1860 case TYPE_A: 1861 if (cmd_form == FORM_N) { 1862 reply(200, "Type set to A."); 1863 type = cmd_type; --- 23 unchanged lines hidden (view full) --- 1887 UNIMPLEMENTED for NBBY != 8 1888#endif /* NBBY == 8 */ 1889 } 1890 } 1891 } 1892 break; 1893 1894 case 13: |
1885#line 224 "ftpcmd.y" | 1895#line 235 "ftpcmd.y" |
1886 { 1887 if ((yyvsp[(5) - (5)].i)) { 1888 switch ((yyvsp[(3) - (5)].i)) { 1889 1890 case STRU_F: 1891 reply(200, "STRU F ok."); 1892 break; 1893 1894 default: 1895 reply(504, "Unimplemented STRU type."); 1896 } 1897 } 1898 } 1899 break; 1900 1901 case 14: | 1896 { 1897 if ((yyvsp[(5) - (5)].i)) { 1898 switch ((yyvsp[(3) - (5)].i)) { 1899 1900 case STRU_F: 1901 reply(200, "STRU F ok."); 1902 break; 1903 1904 default: 1905 reply(504, "Unimplemented STRU type."); 1906 } 1907 } 1908 } 1909 break; 1910 1911 case 14: |
1902#line 238 "ftpcmd.y" | 1912#line 249 "ftpcmd.y" |
1903 { 1904 if ((yyvsp[(5) - (5)].i)) { 1905 switch ((yyvsp[(3) - (5)].i)) { 1906 1907 case MODE_S: 1908 reply(200, "MODE S ok."); 1909 break; 1910 1911 default: 1912 reply(502, "Unimplemented MODE type."); 1913 } 1914 } 1915 } 1916 break; 1917 1918 case 15: | 1913 { 1914 if ((yyvsp[(5) - (5)].i)) { 1915 switch ((yyvsp[(3) - (5)].i)) { 1916 1917 case MODE_S: 1918 reply(200, "MODE S ok."); 1919 break; 1920 1921 default: 1922 reply(502, "Unimplemented MODE type."); 1923 } 1924 } 1925 } 1926 break; 1927 1928 case 15: |
1919#line 252 "ftpcmd.y" | 1929#line 263 "ftpcmd.y" |
1920 { 1921 if ((yyvsp[(5) - (5)].i)) { 1922 reply(202, "ALLO command ignored."); 1923 } 1924 } 1925 break; 1926 1927 case 16: | 1930 { 1931 if ((yyvsp[(5) - (5)].i)) { 1932 reply(202, "ALLO command ignored."); 1933 } 1934 } 1935 break; 1936 1937 case 16: |
1928#line 258 "ftpcmd.y" | 1938#line 269 "ftpcmd.y" |
1929 { 1930 if ((yyvsp[(9) - (9)].i)) { 1931 reply(202, "ALLO command ignored."); 1932 } 1933 } 1934 break; 1935 1936 case 17: | 1939 { 1940 if ((yyvsp[(9) - (9)].i)) { 1941 reply(202, "ALLO command ignored."); 1942 } 1943 } 1944 break; 1945 1946 case 17: |
1937#line 264 "ftpcmd.y" | 1947#line 275 "ftpcmd.y" |
1938 { 1939 char *name = (yyvsp[(3) - (5)].s); 1940 1941 if ((yyvsp[(5) - (5)].i) && name != NULL) 1942 retrieve(0, name); 1943 if (name != NULL) 1944 free(name); 1945 } 1946 break; 1947 1948 case 18: | 1948 { 1949 char *name = (yyvsp[(3) - (5)].s); 1950 1951 if ((yyvsp[(5) - (5)].i) && name != NULL) 1952 retrieve(0, name); 1953 if (name != NULL) 1954 free(name); 1955 } 1956 break; 1957 1958 case 18: |
1949#line 273 "ftpcmd.y" | 1959#line 284 "ftpcmd.y" |
1950 { 1951 char *name = (yyvsp[(3) - (5)].s); 1952 1953 if ((yyvsp[(5) - (5)].i) && name != NULL) 1954 do_store(name, "w", 0); 1955 if (name != NULL) 1956 free(name); 1957 } 1958 break; 1959 1960 case 19: | 1960 { 1961 char *name = (yyvsp[(3) - (5)].s); 1962 1963 if ((yyvsp[(5) - (5)].i) && name != NULL) 1964 do_store(name, "w", 0); 1965 if (name != NULL) 1966 free(name); 1967 } 1968 break; 1969 1970 case 19: |
1961#line 282 "ftpcmd.y" | 1971#line 293 "ftpcmd.y" |
1962 { 1963 char *name = (yyvsp[(3) - (5)].s); 1964 1965 if ((yyvsp[(5) - (5)].i) && name != NULL) 1966 do_store(name, "a", 0); 1967 if (name != NULL) 1968 free(name); 1969 } 1970 break; 1971 1972 case 20: | 1972 { 1973 char *name = (yyvsp[(3) - (5)].s); 1974 1975 if ((yyvsp[(5) - (5)].i) && name != NULL) 1976 do_store(name, "a", 0); 1977 if (name != NULL) 1978 free(name); 1979 } 1980 break; 1981 1982 case 20: |
1973#line 291 "ftpcmd.y" | 1983#line 302 "ftpcmd.y" |
1974 { 1975 if ((yyvsp[(3) - (3)].i)) 1976 send_file_list("."); 1977 } 1978 break; 1979 1980 case 21: | 1984 { 1985 if ((yyvsp[(3) - (3)].i)) 1986 send_file_list("."); 1987 } 1988 break; 1989 1990 case 21: |
1981#line 296 "ftpcmd.y" | 1991#line 307 "ftpcmd.y" |
1982 { 1983 char *name = (yyvsp[(3) - (5)].s); 1984 1985 if ((yyvsp[(5) - (5)].i) && name != NULL) 1986 send_file_list(name); 1987 if (name != NULL) 1988 free(name); 1989 } 1990 break; 1991 1992 case 22: | 1992 { 1993 char *name = (yyvsp[(3) - (5)].s); 1994 1995 if ((yyvsp[(5) - (5)].i) && name != NULL) 1996 send_file_list(name); 1997 if (name != NULL) 1998 free(name); 1999 } 2000 break; 2001 2002 case 22: |
1993#line 305 "ftpcmd.y" | 2003#line 316 "ftpcmd.y" |
1994 { 1995 if((yyvsp[(3) - (3)].i)) 1996 list_file("."); 1997 } 1998 break; 1999 2000 case 23: | 2004 { 2005 if((yyvsp[(3) - (3)].i)) 2006 list_file("."); 2007 } 2008 break; 2009 2010 case 23: |
2001#line 310 "ftpcmd.y" | 2011#line 321 "ftpcmd.y" |
2002 { 2003 if((yyvsp[(5) - (5)].i)) 2004 list_file((yyvsp[(3) - (5)].s)); 2005 free((yyvsp[(3) - (5)].s)); 2006 } 2007 break; 2008 2009 case 24: | 2012 { 2013 if((yyvsp[(5) - (5)].i)) 2014 list_file((yyvsp[(3) - (5)].s)); 2015 free((yyvsp[(3) - (5)].s)); 2016 } 2017 break; 2018 2019 case 24: |
2010#line 316 "ftpcmd.y" | 2020#line 327 "ftpcmd.y" |
2011 { 2012 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2013 statfilecmd((yyvsp[(3) - (5)].s)); 2014 if ((yyvsp[(3) - (5)].s) != NULL) 2015 free((yyvsp[(3) - (5)].s)); 2016 } 2017 break; 2018 2019 case 25: | 2021 { 2022 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2023 statfilecmd((yyvsp[(3) - (5)].s)); 2024 if ((yyvsp[(3) - (5)].s) != NULL) 2025 free((yyvsp[(3) - (5)].s)); 2026 } 2027 break; 2028 2029 case 25: |
2020#line 323 "ftpcmd.y" | 2030#line 334 "ftpcmd.y" |
2021 { 2022 if ((yyvsp[(3) - (3)].i)) 2023 statcmd(); 2024 } 2025 break; 2026 2027 case 26: | 2031 { 2032 if ((yyvsp[(3) - (3)].i)) 2033 statcmd(); 2034 } 2035 break; 2036 2037 case 26: |
2028#line 328 "ftpcmd.y" | 2038#line 339 "ftpcmd.y" |
2029 { 2030 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2031 do_delete((yyvsp[(3) - (5)].s)); 2032 if ((yyvsp[(3) - (5)].s) != NULL) 2033 free((yyvsp[(3) - (5)].s)); 2034 } 2035 break; 2036 2037 case 27: | 2039 { 2040 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2041 do_delete((yyvsp[(3) - (5)].s)); 2042 if ((yyvsp[(3) - (5)].s) != NULL) 2043 free((yyvsp[(3) - (5)].s)); 2044 } 2045 break; 2046 2047 case 27: |
2038#line 335 "ftpcmd.y" | 2048#line 346 "ftpcmd.y" |
2039 { 2040 if((yyvsp[(5) - (5)].i)){ 2041 if (fromname) { 2042 renamecmd(fromname, (yyvsp[(3) - (5)].s)); 2043 free(fromname); 2044 fromname = (char *) 0; 2045 } else { 2046 reply(503, "Bad sequence of commands."); 2047 } 2048 } 2049 if ((yyvsp[(3) - (5)].s) != NULL) 2050 free((yyvsp[(3) - (5)].s)); 2051 } 2052 break; 2053 2054 case 28: | 2049 { 2050 if((yyvsp[(5) - (5)].i)){ 2051 if (fromname) { 2052 renamecmd(fromname, (yyvsp[(3) - (5)].s)); 2053 free(fromname); 2054 fromname = (char *) 0; 2055 } else { 2056 reply(503, "Bad sequence of commands."); 2057 } 2058 } 2059 if ((yyvsp[(3) - (5)].s) != NULL) 2060 free((yyvsp[(3) - (5)].s)); 2061 } 2062 break; 2063 2064 case 28: |
2055#line 349 "ftpcmd.y" | 2065#line 360 "ftpcmd.y" |
2056 { 2057 if ((yyvsp[(3) - (3)].i)) 2058 reply(225, "ABOR command successful."); 2059 } 2060 break; 2061 2062 case 29: | 2066 { 2067 if ((yyvsp[(3) - (3)].i)) 2068 reply(225, "ABOR command successful."); 2069 } 2070 break; 2071 2072 case 29: |
2063#line 354 "ftpcmd.y" | 2073#line 365 "ftpcmd.y" |
2064 { | 2074 { |
2065 if ((yyvsp[(3) - (3)].i)) 2066 cwd(pw->pw_dir); | 2075 if ((yyvsp[(3) - (3)].i)) { 2076 const char *path = pw->pw_dir; 2077 if (dochroot || guest) 2078 path = "/"; 2079 cwd(path); 2080 } |
2067 } 2068 break; 2069 2070 case 30: | 2081 } 2082 break; 2083 2084 case 30: |
2071#line 359 "ftpcmd.y" | 2085#line 374 "ftpcmd.y" |
2072 { 2073 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2074 cwd((yyvsp[(3) - (5)].s)); 2075 if ((yyvsp[(3) - (5)].s) != NULL) 2076 free((yyvsp[(3) - (5)].s)); 2077 } 2078 break; 2079 2080 case 31: | 2086 { 2087 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2088 cwd((yyvsp[(3) - (5)].s)); 2089 if ((yyvsp[(3) - (5)].s) != NULL) 2090 free((yyvsp[(3) - (5)].s)); 2091 } 2092 break; 2093 2094 case 31: |
2081#line 366 "ftpcmd.y" | 2095#line 381 "ftpcmd.y" |
2082 { 2083 if ((yyvsp[(3) - (3)].i)) 2084 help(cmdtab, (char *) 0); 2085 } 2086 break; 2087 2088 case 32: | 2096 { 2097 if ((yyvsp[(3) - (3)].i)) 2098 help(cmdtab, (char *) 0); 2099 } 2100 break; 2101 2102 case 32: |
2089#line 371 "ftpcmd.y" | 2103#line 386 "ftpcmd.y" |
2090 { 2091 if ((yyvsp[(5) - (5)].i)) { 2092 char *cp = (yyvsp[(3) - (5)].s); 2093 2094 if (strncasecmp(cp, "SITE", 4) == 0) { 2095 cp = (yyvsp[(3) - (5)].s) + 4; 2096 if (*cp == ' ') 2097 cp++; 2098 if (*cp) 2099 help(sitetab, cp); 2100 else 2101 help(sitetab, (char *) 0); 2102 } else 2103 help(cmdtab, (yyvsp[(3) - (5)].s)); 2104 } 2105 } 2106 break; 2107 2108 case 33: | 2104 { 2105 if ((yyvsp[(5) - (5)].i)) { 2106 char *cp = (yyvsp[(3) - (5)].s); 2107 2108 if (strncasecmp(cp, "SITE", 4) == 0) { 2109 cp = (yyvsp[(3) - (5)].s) + 4; 2110 if (*cp == ' ') 2111 cp++; 2112 if (*cp) 2113 help(sitetab, cp); 2114 else 2115 help(sitetab, (char *) 0); 2116 } else 2117 help(cmdtab, (yyvsp[(3) - (5)].s)); 2118 } 2119 } 2120 break; 2121 2122 case 33: |
2109#line 388 "ftpcmd.y" | 2123#line 403 "ftpcmd.y" |
2110 { 2111 if ((yyvsp[(3) - (3)].i)) 2112 reply(200, "NOOP command successful."); 2113 } 2114 break; 2115 2116 case 34: | 2124 { 2125 if ((yyvsp[(3) - (3)].i)) 2126 reply(200, "NOOP command successful."); 2127 } 2128 break; 2129 2130 case 34: |
2117#line 393 "ftpcmd.y" | 2131#line 408 "ftpcmd.y" |
2118 { 2119 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2120 makedir((yyvsp[(3) - (5)].s)); 2121 if ((yyvsp[(3) - (5)].s) != NULL) 2122 free((yyvsp[(3) - (5)].s)); 2123 } 2124 break; 2125 2126 case 35: | 2132 { 2133 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2134 makedir((yyvsp[(3) - (5)].s)); 2135 if ((yyvsp[(3) - (5)].s) != NULL) 2136 free((yyvsp[(3) - (5)].s)); 2137 } 2138 break; 2139 2140 case 35: |
2127#line 400 "ftpcmd.y" | 2141#line 415 "ftpcmd.y" |
2128 { 2129 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2130 removedir((yyvsp[(3) - (5)].s)); 2131 if ((yyvsp[(3) - (5)].s) != NULL) 2132 free((yyvsp[(3) - (5)].s)); 2133 } 2134 break; 2135 2136 case 36: | 2142 { 2143 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2144 removedir((yyvsp[(3) - (5)].s)); 2145 if ((yyvsp[(3) - (5)].s) != NULL) 2146 free((yyvsp[(3) - (5)].s)); 2147 } 2148 break; 2149 2150 case 36: |
2137#line 407 "ftpcmd.y" | 2151#line 422 "ftpcmd.y" |
2138 { 2139 if ((yyvsp[(3) - (3)].i)) 2140 pwd(); 2141 } 2142 break; 2143 2144 case 37: | 2152 { 2153 if ((yyvsp[(3) - (3)].i)) 2154 pwd(); 2155 } 2156 break; 2157 2158 case 37: |
2145#line 412 "ftpcmd.y" | 2159#line 427 "ftpcmd.y" |
2146 { 2147 if ((yyvsp[(3) - (3)].i)) 2148 cwd(".."); 2149 } 2150 break; 2151 2152 case 38: | 2160 { 2161 if ((yyvsp[(3) - (3)].i)) 2162 cwd(".."); 2163 } 2164 break; 2165 2166 case 38: |
2153#line 417 "ftpcmd.y" | 2167#line 432 "ftpcmd.y" |
2154 { 2155 if ((yyvsp[(3) - (3)].i)) { 2156 lreply(211, "Supported features:"); 2157 lreply(0, " MDTM"); 2158 lreply(0, " REST STREAM"); 2159 lreply(0, " SIZE"); 2160 reply(211, "End"); 2161 } 2162 } 2163 break; 2164 2165 case 39: | 2168 { 2169 if ((yyvsp[(3) - (3)].i)) { 2170 lreply(211, "Supported features:"); 2171 lreply(0, " MDTM"); 2172 lreply(0, " REST STREAM"); 2173 lreply(0, " SIZE"); 2174 reply(211, "End"); 2175 } 2176 } 2177 break; 2178 2179 case 39: |
2166#line 427 "ftpcmd.y" | 2180#line 442 "ftpcmd.y" |
2167 { 2168 if ((yyvsp[(5) - (5)].i)) 2169 reply(501, "Bad options"); 2170 free ((yyvsp[(3) - (5)].s)); 2171 } 2172 break; 2173 2174 case 40: | 2181 { 2182 if ((yyvsp[(5) - (5)].i)) 2183 reply(501, "Bad options"); 2184 free ((yyvsp[(3) - (5)].s)); 2185 } 2186 break; 2187 2188 case 40: |
2175#line 434 "ftpcmd.y" | 2189#line 449 "ftpcmd.y" |
2176 { 2177 if ((yyvsp[(5) - (5)].i)) 2178 help(sitetab, (char *) 0); 2179 } 2180 break; 2181 2182 case 41: | 2190 { 2191 if ((yyvsp[(5) - (5)].i)) 2192 help(sitetab, (char *) 0); 2193 } 2194 break; 2195 2196 case 41: |
2183#line 439 "ftpcmd.y" | 2197#line 454 "ftpcmd.y" |
2184 { 2185 if ((yyvsp[(7) - (7)].i)) 2186 help(sitetab, (yyvsp[(5) - (7)].s)); 2187 } 2188 break; 2189 2190 case 42: | 2198 { 2199 if ((yyvsp[(7) - (7)].i)) 2200 help(sitetab, (yyvsp[(5) - (7)].s)); 2201 } 2202 break; 2203 2204 case 42: |
2191#line 444 "ftpcmd.y" | 2205#line 459 "ftpcmd.y" |
2192 { 2193 if ((yyvsp[(5) - (5)].i)) { 2194 int oldmask = umask(0); 2195 umask(oldmask); 2196 reply(200, "Current UMASK is %03o", oldmask); 2197 } 2198 } 2199 break; 2200 2201 case 43: | 2206 { 2207 if ((yyvsp[(5) - (5)].i)) { 2208 int oldmask = umask(0); 2209 umask(oldmask); 2210 reply(200, "Current UMASK is %03o", oldmask); 2211 } 2212 } 2213 break; 2214 2215 case 43: |
2202#line 452 "ftpcmd.y" | 2216#line 467 "ftpcmd.y" |
2203 { 2204 if ((yyvsp[(7) - (7)].i)) { 2205 if (((yyvsp[(5) - (7)].i) == -1) || ((yyvsp[(5) - (7)].i) > 0777)) { 2206 reply(501, "Bad UMASK value"); 2207 } else { 2208 int oldmask = umask((yyvsp[(5) - (7)].i)); 2209 reply(200, 2210 "UMASK set to %03o (was %03o)", 2211 (yyvsp[(5) - (7)].i), oldmask); 2212 } 2213 } 2214 } 2215 break; 2216 2217 case 44: | 2217 { 2218 if ((yyvsp[(7) - (7)].i)) { 2219 if (((yyvsp[(5) - (7)].i) == -1) || ((yyvsp[(5) - (7)].i) > 0777)) { 2220 reply(501, "Bad UMASK value"); 2221 } else { 2222 int oldmask = umask((yyvsp[(5) - (7)].i)); 2223 reply(200, 2224 "UMASK set to %03o (was %03o)", 2225 (yyvsp[(5) - (7)].i), oldmask); 2226 } 2227 } 2228 } 2229 break; 2230 2231 case 44: |
2218#line 465 "ftpcmd.y" | 2232#line 480 "ftpcmd.y" |
2219 { 2220 if ((yyvsp[(9) - (9)].i) && (yyvsp[(7) - (9)].s) != NULL) { 2221 if ((yyvsp[(5) - (9)].i) > 0777) 2222 reply(501, 2223 "CHMOD: Mode value must be between 0 and 0777"); 2224 else if (chmod((yyvsp[(7) - (9)].s), (yyvsp[(5) - (9)].i)) < 0) 2225 perror_reply(550, (yyvsp[(7) - (9)].s)); 2226 else 2227 reply(200, "CHMOD command successful."); 2228 } 2229 if ((yyvsp[(7) - (9)].s) != NULL) 2230 free((yyvsp[(7) - (9)].s)); 2231 } 2232 break; 2233 2234 case 45: | 2233 { 2234 if ((yyvsp[(9) - (9)].i) && (yyvsp[(7) - (9)].s) != NULL) { 2235 if ((yyvsp[(5) - (9)].i) > 0777) 2236 reply(501, 2237 "CHMOD: Mode value must be between 0 and 0777"); 2238 else if (chmod((yyvsp[(7) - (9)].s), (yyvsp[(5) - (9)].i)) < 0) 2239 perror_reply(550, (yyvsp[(7) - (9)].s)); 2240 else 2241 reply(200, "CHMOD command successful."); 2242 } 2243 if ((yyvsp[(7) - (9)].s) != NULL) 2244 free((yyvsp[(7) - (9)].s)); 2245 } 2246 break; 2247 2248 case 45: |
2235#line 479 "ftpcmd.y" | 2249#line 494 "ftpcmd.y" |
2236 { 2237 if ((yyvsp[(5) - (5)].i)) 2238 reply(200, 2239 "Current IDLE time limit is %d seconds; max %d", 2240 ftpd_timeout, maxtimeout); 2241 } 2242 break; 2243 2244 case 46: | 2250 { 2251 if ((yyvsp[(5) - (5)].i)) 2252 reply(200, 2253 "Current IDLE time limit is %d seconds; max %d", 2254 ftpd_timeout, maxtimeout); 2255 } 2256 break; 2257 2258 case 46: |
2245#line 486 "ftpcmd.y" | 2259#line 501 "ftpcmd.y" |
2246 { 2247 if ((yyvsp[(7) - (7)].i)) { 2248 if ((yyvsp[(5) - (7)].i) < 30 || (yyvsp[(5) - (7)].i) > maxtimeout) { 2249 reply(501, 2250 "Maximum IDLE time must be between 30 and %d seconds", 2251 maxtimeout); 2252 } else { 2253 ftpd_timeout = (yyvsp[(5) - (7)].i); 2254 alarm((unsigned) ftpd_timeout); 2255 reply(200, 2256 "Maximum IDLE time set to %d seconds", 2257 ftpd_timeout); 2258 } 2259 } 2260 } 2261 break; 2262 2263 case 47: | 2260 { 2261 if ((yyvsp[(7) - (7)].i)) { 2262 if ((yyvsp[(5) - (7)].i) < 30 || (yyvsp[(5) - (7)].i) > maxtimeout) { 2263 reply(501, 2264 "Maximum IDLE time must be between 30 and %d seconds", 2265 maxtimeout); 2266 } else { 2267 ftpd_timeout = (yyvsp[(5) - (7)].i); 2268 alarm((unsigned) ftpd_timeout); 2269 reply(200, 2270 "Maximum IDLE time set to %d seconds", 2271 ftpd_timeout); 2272 } 2273 } 2274 } 2275 break; 2276 2277 case 47: |
2264#line 503 "ftpcmd.y" | 2278#line 518 "ftpcmd.y" |
2265 { | 2279 { |
2266#ifdef KRB4 2267 char *p; 2268 2269 if(guest) 2270 reply(500, "Can't be done as guest."); 2271 else{ 2272 if((yyvsp[(7) - (7)].i) && (yyvsp[(5) - (7)].s) != NULL){ 2273 p = strpbrk((yyvsp[(5) - (7)].s), " \t"); 2274 if(p){ 2275 *p++ = 0; 2276 kauth((yyvsp[(5) - (7)].s), p + strspn(p, " \t")); 2277 }else 2278 kauth((yyvsp[(5) - (7)].s), NULL); 2279 } 2280 } 2281 if((yyvsp[(5) - (7)].s) != NULL) 2282 free((yyvsp[(5) - (7)].s)); 2283#else | |
2284 reply(500, "Command not implemented."); | 2280 reply(500, "Command not implemented."); |
2285#endif | |
2286 } 2287 break; 2288 2289 case 48: | 2281 } 2282 break; 2283 2284 case 48: |
2290#line 526 "ftpcmd.y" | 2285#line 522 "ftpcmd.y" |
2291 { 2292 if((yyvsp[(5) - (5)].i)) 2293 klist(); 2294 } 2295 break; 2296 2297 case 49: | 2286 { 2287 if((yyvsp[(5) - (5)].i)) 2288 klist(); 2289 } 2290 break; 2291 2292 case 49: |
2298#line 531 "ftpcmd.y" | 2293#line 527 "ftpcmd.y" |
2299 { | 2294 { |
2300#ifdef KRB4 2301 if((yyvsp[(5) - (5)].i)) 2302 kdestroy(); 2303#else | |
2304 reply(500, "Command not implemented."); | 2295 reply(500, "Command not implemented."); |
2305#endif | |
2306 } 2307 break; 2308 2309 case 50: | 2296 } 2297 break; 2298 2299 case 50: |
2310#line 540 "ftpcmd.y" | 2300#line 531 "ftpcmd.y" |
2311 { | 2301 { |
2312#ifdef KRB4 2313 if(guest) 2314 reply(500, "Can't be done as guest."); 2315 else if((yyvsp[(7) - (7)].i) && (yyvsp[(5) - (7)].s)) 2316 krbtkfile((yyvsp[(5) - (7)].s)); 2317 if((yyvsp[(5) - (7)].s)) 2318 free((yyvsp[(5) - (7)].s)); 2319#else | |
2320 reply(500, "Command not implemented."); | 2302 reply(500, "Command not implemented."); |
2321#endif | |
2322 } 2323 break; 2324 2325 case 51: | 2303 } 2304 break; 2305 2306 case 51: |
2326#line 553 "ftpcmd.y" | 2307#line 535 "ftpcmd.y" |
2327 { | 2308 { |
2328#if defined(KRB4) || defined(KRB5) | 2309#if defined(KRB5) |
2329 if(guest) 2330 reply(500, "Can't be done as guest."); 2331 else if((yyvsp[(5) - (5)].i)) 2332 afslog(NULL, 0); 2333#else 2334 reply(500, "Command not implemented."); 2335#endif 2336 } 2337 break; 2338 2339 case 52: | 2310 if(guest) 2311 reply(500, "Can't be done as guest."); 2312 else if((yyvsp[(5) - (5)].i)) 2313 afslog(NULL, 0); 2314#else 2315 reply(500, "Command not implemented."); 2316#endif 2317 } 2318 break; 2319 2320 case 52: |
2340#line 564 "ftpcmd.y" | 2321#line 546 "ftpcmd.y" |
2341 { | 2322 { |
2342#if defined(KRB4) || defined(KRB5) | 2323#if defined(KRB5) |
2343 if(guest) 2344 reply(500, "Can't be done as guest."); 2345 else if((yyvsp[(7) - (7)].i)) 2346 afslog((yyvsp[(5) - (7)].s), 0); 2347 if((yyvsp[(5) - (7)].s)) 2348 free((yyvsp[(5) - (7)].s)); 2349#else 2350 reply(500, "Command not implemented."); 2351#endif 2352 } 2353 break; 2354 2355 case 53: | 2324 if(guest) 2325 reply(500, "Can't be done as guest."); 2326 else if((yyvsp[(7) - (7)].i)) 2327 afslog((yyvsp[(5) - (7)].s), 0); 2328 if((yyvsp[(5) - (7)].s)) 2329 free((yyvsp[(5) - (7)].s)); 2330#else 2331 reply(500, "Command not implemented."); 2332#endif 2333 } 2334 break; 2335 2336 case 53: |
2356#line 577 "ftpcmd.y" | 2337#line 559 "ftpcmd.y" |
2357 { 2358 if((yyvsp[(7) - (7)].i) && (yyvsp[(5) - (7)].s) != NULL) 2359 find((yyvsp[(5) - (7)].s)); 2360 if((yyvsp[(5) - (7)].s) != NULL) 2361 free((yyvsp[(5) - (7)].s)); 2362 } 2363 break; 2364 2365 case 54: | 2338 { 2339 if((yyvsp[(7) - (7)].i) && (yyvsp[(5) - (7)].s) != NULL) 2340 find((yyvsp[(5) - (7)].s)); 2341 if((yyvsp[(5) - (7)].s) != NULL) 2342 free((yyvsp[(5) - (7)].s)); 2343 } 2344 break; 2345 2346 case 54: |
2366#line 584 "ftpcmd.y" | 2347#line 566 "ftpcmd.y" |
2367 { 2368 if ((yyvsp[(5) - (5)].i)) 2369 reply(200, "http://www.pdc.kth.se/heimdal/"); 2370 } 2371 break; 2372 2373 case 55: | 2348 { 2349 if ((yyvsp[(5) - (5)].i)) 2350 reply(200, "http://www.pdc.kth.se/heimdal/"); 2351 } 2352 break; 2353 2354 case 55: |
2374#line 589 "ftpcmd.y" | 2355#line 571 "ftpcmd.y" |
2375 { 2376 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2377 do_store((yyvsp[(3) - (5)].s), "w", 1); 2378 if ((yyvsp[(3) - (5)].s) != NULL) 2379 free((yyvsp[(3) - (5)].s)); 2380 } 2381 break; 2382 2383 case 56: | 2356 { 2357 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2358 do_store((yyvsp[(3) - (5)].s), "w", 1); 2359 if ((yyvsp[(3) - (5)].s) != NULL) 2360 free((yyvsp[(3) - (5)].s)); 2361 } 2362 break; 2363 2364 case 56: |
2384#line 596 "ftpcmd.y" | 2365#line 578 "ftpcmd.y" |
2385 { 2386 if ((yyvsp[(3) - (3)].i)) { 2387#if !defined(WIN32) && !defined(__EMX__) && !defined(__OS2__) && !defined(__CYGWIN32__) 2388 reply(215, "UNIX Type: L%d", NBBY); 2389#else 2390 reply(215, "UNKNOWN Type: L%d", NBBY); 2391#endif 2392 } 2393 } 2394 break; 2395 2396 case 57: | 2366 { 2367 if ((yyvsp[(3) - (3)].i)) { 2368#if !defined(WIN32) && !defined(__EMX__) && !defined(__OS2__) && !defined(__CYGWIN32__) 2369 reply(215, "UNIX Type: L%d", NBBY); 2370#else 2371 reply(215, "UNKNOWN Type: L%d", NBBY); 2372#endif 2373 } 2374 } 2375 break; 2376 2377 case 57: |
2397#line 614 "ftpcmd.y" | 2378#line 596 "ftpcmd.y" |
2398 { 2399 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2400 sizecmd((yyvsp[(3) - (5)].s)); 2401 if ((yyvsp[(3) - (5)].s) != NULL) 2402 free((yyvsp[(3) - (5)].s)); 2403 } 2404 break; 2405 2406 case 58: | 2379 { 2380 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) 2381 sizecmd((yyvsp[(3) - (5)].s)); 2382 if ((yyvsp[(3) - (5)].s) != NULL) 2383 free((yyvsp[(3) - (5)].s)); 2384 } 2385 break; 2386 2387 case 58: |
2407#line 631 "ftpcmd.y" | 2388#line 613 "ftpcmd.y" |
2408 { 2409 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) { 2410 struct stat stbuf; 2411 if (stat((yyvsp[(3) - (5)].s), &stbuf) < 0) 2412 reply(550, "%s: %s", 2413 (yyvsp[(3) - (5)].s), strerror(errno)); 2414 else if (!S_ISREG(stbuf.st_mode)) { 2415 reply(550, --- 14 unchanged lines hidden (view full) --- 2430 } 2431 } 2432 if ((yyvsp[(3) - (5)].s) != NULL) 2433 free((yyvsp[(3) - (5)].s)); 2434 } 2435 break; 2436 2437 case 59: | 2389 { 2390 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s) != NULL) { 2391 struct stat stbuf; 2392 if (stat((yyvsp[(3) - (5)].s), &stbuf) < 0) 2393 reply(550, "%s: %s", 2394 (yyvsp[(3) - (5)].s), strerror(errno)); 2395 else if (!S_ISREG(stbuf.st_mode)) { 2396 reply(550, --- 14 unchanged lines hidden (view full) --- 2411 } 2412 } 2413 if ((yyvsp[(3) - (5)].s) != NULL) 2414 free((yyvsp[(3) - (5)].s)); 2415 } 2416 break; 2417 2418 case 59: |
2438#line 659 "ftpcmd.y" | 2419#line 641 "ftpcmd.y" |
2439 { 2440 if ((yyvsp[(3) - (3)].i)) { 2441 reply(221, "Goodbye."); 2442 dologout(0); 2443 } 2444 } 2445 break; 2446 2447 case 60: | 2420 { 2421 if ((yyvsp[(3) - (3)].i)) { 2422 reply(221, "Goodbye."); 2423 dologout(0); 2424 } 2425 } 2426 break; 2427 2428 case 60: |
2448#line 666 "ftpcmd.y" | 2429#line 648 "ftpcmd.y" |
2449 { 2450 yyerrok; 2451 } 2452 break; 2453 2454 case 61: | 2430 { 2431 yyerrok; 2432 } 2433 break; 2434 2435 case 61: |
2455#line 672 "ftpcmd.y" | 2436#line 654 "ftpcmd.y" |
2456 { 2457 restart_point = (off_t) 0; 2458 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s)) { 2459 fromname = renamefrom((yyvsp[(3) - (5)].s)); 2460 if (fromname == (char *) 0 && (yyvsp[(3) - (5)].s)) { 2461 free((yyvsp[(3) - (5)].s)); 2462 } 2463 } 2464 } 2465 break; 2466 2467 case 62: | 2437 { 2438 restart_point = (off_t) 0; 2439 if ((yyvsp[(5) - (5)].i) && (yyvsp[(3) - (5)].s)) { 2440 fromname = renamefrom((yyvsp[(3) - (5)].s)); 2441 if (fromname == (char *) 0 && (yyvsp[(3) - (5)].s)) { 2442 free((yyvsp[(3) - (5)].s)); 2443 } 2444 } 2445 } 2446 break; 2447 2448 case 62: |
2468#line 682 "ftpcmd.y" | 2449#line 664 "ftpcmd.y" |
2469 { 2470 if ((yyvsp[(5) - (5)].i)) { 2471 fromname = (char *) 0; 2472 restart_point = (yyvsp[(3) - (5)].i); /* XXX $3 is only "int" */ 2473 reply(350, "Restarting at %ld. %s", 2474 (long)restart_point, 2475 "Send STORE or RETRIEVE to initiate transfer."); 2476 } 2477 } 2478 break; 2479 2480 case 63: | 2450 { 2451 if ((yyvsp[(5) - (5)].i)) { 2452 fromname = (char *) 0; 2453 restart_point = (yyvsp[(3) - (5)].i); /* XXX $3 is only "int" */ 2454 reply(350, "Restarting at %ld. %s", 2455 (long)restart_point, 2456 "Send STORE or RETRIEVE to initiate transfer."); 2457 } 2458 } 2459 break; 2460 2461 case 63: |
2481#line 692 "ftpcmd.y" | 2462#line 674 "ftpcmd.y" |
2482 { 2483 auth((yyvsp[(3) - (4)].s)); 2484 free((yyvsp[(3) - (4)].s)); 2485 } 2486 break; 2487 2488 case 64: | 2463 { 2464 auth((yyvsp[(3) - (4)].s)); 2465 free((yyvsp[(3) - (4)].s)); 2466 } 2467 break; 2468 2469 case 64: |
2489#line 697 "ftpcmd.y" | 2470#line 679 "ftpcmd.y" |
2490 { 2491 adat((yyvsp[(3) - (4)].s)); 2492 free((yyvsp[(3) - (4)].s)); 2493 } 2494 break; 2495 2496 case 65: | 2471 { 2472 adat((yyvsp[(3) - (4)].s)); 2473 free((yyvsp[(3) - (4)].s)); 2474 } 2475 break; 2476 2477 case 65: |
2497#line 702 "ftpcmd.y" | 2478#line 684 "ftpcmd.y" |
2498 { 2499 if ((yyvsp[(5) - (5)].i)) 2500 pbsz((yyvsp[(3) - (5)].i)); 2501 } 2502 break; 2503 2504 case 66: | 2479 { 2480 if ((yyvsp[(5) - (5)].i)) 2481 pbsz((yyvsp[(3) - (5)].i)); 2482 } 2483 break; 2484 2485 case 66: |
2505#line 707 "ftpcmd.y" | 2486#line 689 "ftpcmd.y" |
2506 { 2507 if ((yyvsp[(5) - (5)].i)) 2508 prot((yyvsp[(3) - (5)].s)); 2509 } 2510 break; 2511 2512 case 67: | 2487 { 2488 if ((yyvsp[(5) - (5)].i)) 2489 prot((yyvsp[(3) - (5)].s)); 2490 } 2491 break; 2492 2493 case 67: |
2513#line 712 "ftpcmd.y" | 2494#line 694 "ftpcmd.y" |
2514 { 2515 if ((yyvsp[(3) - (3)].i)) 2516 ccc(); 2517 } 2518 break; 2519 2520 case 68: | 2495 { 2496 if ((yyvsp[(3) - (3)].i)) 2497 ccc(); 2498 } 2499 break; 2500 2501 case 68: |
2521#line 717 "ftpcmd.y" | 2502#line 699 "ftpcmd.y" |
2522 { 2523 mec((yyvsp[(3) - (4)].s), prot_safe); 2524 free((yyvsp[(3) - (4)].s)); 2525 } 2526 break; 2527 2528 case 69: | 2503 { 2504 mec((yyvsp[(3) - (4)].s), prot_safe); 2505 free((yyvsp[(3) - (4)].s)); 2506 } 2507 break; 2508 2509 case 69: |
2529#line 722 "ftpcmd.y" | 2510#line 704 "ftpcmd.y" |
2530 { 2531 mec((yyvsp[(3) - (4)].s), prot_confidential); 2532 free((yyvsp[(3) - (4)].s)); 2533 } 2534 break; 2535 2536 case 70: | 2511 { 2512 mec((yyvsp[(3) - (4)].s), prot_confidential); 2513 free((yyvsp[(3) - (4)].s)); 2514 } 2515 break; 2516 2517 case 70: |
2537#line 727 "ftpcmd.y" | 2518#line 709 "ftpcmd.y" |
2538 { 2539 mec((yyvsp[(3) - (4)].s), prot_private); 2540 free((yyvsp[(3) - (4)].s)); 2541 } 2542 break; 2543 2544 case 72: | 2519 { 2520 mec((yyvsp[(3) - (4)].s), prot_private); 2521 free((yyvsp[(3) - (4)].s)); 2522 } 2523 break; 2524 2525 case 72: |
2545#line 739 "ftpcmd.y" | 2526#line 721 "ftpcmd.y" |
2546 { 2547 (yyval.s) = (char *)calloc(1, sizeof(char)); 2548 } 2549 break; 2550 2551 case 75: | 2527 { 2528 (yyval.s) = (char *)calloc(1, sizeof(char)); 2529 } 2530 break; 2531 2532 case 75: |
2552#line 752 "ftpcmd.y" | 2533#line 734 "ftpcmd.y" |
2553 { 2554 struct sockaddr_in *sin4 = (struct sockaddr_in *)data_dest; 2555 2556 sin4->sin_family = AF_INET; 2557 sin4->sin_port = htons((yyvsp[(9) - (11)].i) * 256 + (yyvsp[(11) - (11)].i)); | 2534 { 2535 struct sockaddr_in *sin4 = (struct sockaddr_in *)data_dest; 2536 2537 sin4->sin_family = AF_INET; 2538 sin4->sin_port = htons((yyvsp[(9) - (11)].i) * 256 + (yyvsp[(11) - (11)].i)); |
2558 sin4->sin_addr.s_addr = | 2539 sin4->sin_addr.s_addr = |
2559 htonl(((yyvsp[(1) - (11)].i) << 24) | ((yyvsp[(3) - (11)].i) << 16) | ((yyvsp[(5) - (11)].i) << 8) | (yyvsp[(7) - (11)].i)); 2560 } 2561 break; 2562 2563 case 76: | 2540 htonl(((yyvsp[(1) - (11)].i) << 24) | ((yyvsp[(3) - (11)].i) << 16) | ((yyvsp[(5) - (11)].i) << 8) | (yyvsp[(7) - (11)].i)); 2541 } 2542 break; 2543 2544 case 76: |
2564#line 764 "ftpcmd.y" | 2545#line 746 "ftpcmd.y" |
2565 { 2566 (yyval.i) = FORM_N; 2567 } 2568 break; 2569 2570 case 77: | 2546 { 2547 (yyval.i) = FORM_N; 2548 } 2549 break; 2550 2551 case 77: |
2571#line 768 "ftpcmd.y" | 2552#line 750 "ftpcmd.y" |
2572 { 2573 (yyval.i) = FORM_T; 2574 } 2575 break; 2576 2577 case 78: | 2553 { 2554 (yyval.i) = FORM_T; 2555 } 2556 break; 2557 2558 case 78: |
2578#line 772 "ftpcmd.y" | 2559#line 754 "ftpcmd.y" |
2579 { 2580 (yyval.i) = FORM_C; 2581 } 2582 break; 2583 2584 case 79: | 2560 { 2561 (yyval.i) = FORM_C; 2562 } 2563 break; 2564 2565 case 79: |
2585#line 779 "ftpcmd.y" | 2566#line 761 "ftpcmd.y" |
2586 { 2587 cmd_type = TYPE_A; 2588 cmd_form = FORM_N; 2589 } 2590 break; 2591 2592 case 80: | 2567 { 2568 cmd_type = TYPE_A; 2569 cmd_form = FORM_N; 2570 } 2571 break; 2572 2573 case 80: |
2593#line 784 "ftpcmd.y" | 2574#line 766 "ftpcmd.y" |
2594 { 2595 cmd_type = TYPE_A; 2596 cmd_form = (yyvsp[(3) - (3)].i); 2597 } 2598 break; 2599 2600 case 81: | 2575 { 2576 cmd_type = TYPE_A; 2577 cmd_form = (yyvsp[(3) - (3)].i); 2578 } 2579 break; 2580 2581 case 81: |
2601#line 789 "ftpcmd.y" | 2582#line 771 "ftpcmd.y" |
2602 { 2603 cmd_type = TYPE_E; 2604 cmd_form = FORM_N; 2605 } 2606 break; 2607 2608 case 82: | 2583 { 2584 cmd_type = TYPE_E; 2585 cmd_form = FORM_N; 2586 } 2587 break; 2588 2589 case 82: |
2609#line 794 "ftpcmd.y" | 2590#line 776 "ftpcmd.y" |
2610 { 2611 cmd_type = TYPE_E; 2612 cmd_form = (yyvsp[(3) - (3)].i); 2613 } 2614 break; 2615 2616 case 83: | 2591 { 2592 cmd_type = TYPE_E; 2593 cmd_form = (yyvsp[(3) - (3)].i); 2594 } 2595 break; 2596 2597 case 83: |
2617#line 799 "ftpcmd.y" | 2598#line 781 "ftpcmd.y" |
2618 { 2619 cmd_type = TYPE_I; 2620 } 2621 break; 2622 2623 case 84: | 2599 { 2600 cmd_type = TYPE_I; 2601 } 2602 break; 2603 2604 case 84: |
2624#line 803 "ftpcmd.y" | 2605#line 785 "ftpcmd.y" |
2625 { 2626 cmd_type = TYPE_L; 2627 cmd_bytesz = NBBY; 2628 } 2629 break; 2630 2631 case 85: | 2606 { 2607 cmd_type = TYPE_L; 2608 cmd_bytesz = NBBY; 2609 } 2610 break; 2611 2612 case 85: |
2632#line 808 "ftpcmd.y" | 2613#line 790 "ftpcmd.y" |
2633 { 2634 cmd_type = TYPE_L; 2635 cmd_bytesz = (yyvsp[(3) - (3)].i); 2636 } 2637 break; 2638 2639 case 86: | 2614 { 2615 cmd_type = TYPE_L; 2616 cmd_bytesz = (yyvsp[(3) - (3)].i); 2617 } 2618 break; 2619 2620 case 86: |
2640#line 814 "ftpcmd.y" | 2621#line 796 "ftpcmd.y" |
2641 { 2642 cmd_type = TYPE_L; 2643 cmd_bytesz = (yyvsp[(2) - (2)].i); 2644 } 2645 break; 2646 2647 case 87: | 2622 { 2623 cmd_type = TYPE_L; 2624 cmd_bytesz = (yyvsp[(2) - (2)].i); 2625 } 2626 break; 2627 2628 case 87: |
2648#line 822 "ftpcmd.y" | 2629#line 804 "ftpcmd.y" |
2649 { 2650 (yyval.i) = STRU_F; 2651 } 2652 break; 2653 2654 case 88: | 2630 { 2631 (yyval.i) = STRU_F; 2632 } 2633 break; 2634 2635 case 88: |
2655#line 826 "ftpcmd.y" | 2636#line 808 "ftpcmd.y" |
2656 { 2657 (yyval.i) = STRU_R; 2658 } 2659 break; 2660 2661 case 89: | 2637 { 2638 (yyval.i) = STRU_R; 2639 } 2640 break; 2641 2642 case 89: |
2662#line 830 "ftpcmd.y" | 2643#line 812 "ftpcmd.y" |
2663 { 2664 (yyval.i) = STRU_P; 2665 } 2666 break; 2667 2668 case 90: | 2644 { 2645 (yyval.i) = STRU_P; 2646 } 2647 break; 2648 2649 case 90: |
2669#line 837 "ftpcmd.y" | 2650#line 819 "ftpcmd.y" |
2670 { 2671 (yyval.i) = MODE_S; 2672 } 2673 break; 2674 2675 case 91: | 2651 { 2652 (yyval.i) = MODE_S; 2653 } 2654 break; 2655 2656 case 91: |
2676#line 841 "ftpcmd.y" | 2657#line 823 "ftpcmd.y" |
2677 { 2678 (yyval.i) = MODE_B; 2679 } 2680 break; 2681 2682 case 92: | 2658 { 2659 (yyval.i) = MODE_B; 2660 } 2661 break; 2662 2663 case 92: |
2683#line 845 "ftpcmd.y" | 2664#line 827 "ftpcmd.y" |
2684 { 2685 (yyval.i) = MODE_C; 2686 } 2687 break; 2688 2689 case 93: | 2665 { 2666 (yyval.i) = MODE_C; 2667 } 2668 break; 2669 2670 case 93: |
2690#line 852 "ftpcmd.y" | 2671#line 834 "ftpcmd.y" |
2691 { 2692 /* 2693 * Problem: this production is used for all pathname 2694 * processing, but only gives a 550 error reply. 2695 * This is a valid reply in some cases but not in others. 2696 */ 2697 if (logged_in && (yyvsp[(1) - (1)].s) && *(yyvsp[(1) - (1)].s) == '~') { 2698 glob_t gl; --- 11 unchanged lines hidden (view full) --- 2710 globfree(&gl); 2711 free((yyvsp[(1) - (1)].s)); 2712 } else 2713 (yyval.s) = (yyvsp[(1) - (1)].s); 2714 } 2715 break; 2716 2717 case 95: | 2672 { 2673 /* 2674 * Problem: this production is used for all pathname 2675 * processing, but only gives a 550 error reply. 2676 * This is a valid reply in some cases but not in others. 2677 */ 2678 if (logged_in && (yyvsp[(1) - (1)].s) && *(yyvsp[(1) - (1)].s) == '~') { 2679 glob_t gl; --- 11 unchanged lines hidden (view full) --- 2691 globfree(&gl); 2692 free((yyvsp[(1) - (1)].s)); 2693 } else 2694 (yyval.s) = (yyvsp[(1) - (1)].s); 2695 } 2696 break; 2697 2698 case 95: |
2718#line 884 "ftpcmd.y" | 2699#line 866 "ftpcmd.y" |
2719 { 2720 int ret, dec, multby, digit; 2721 2722 /* 2723 * Convert a number that was read as decimal number 2724 * to what it would be if it had been read as octal. 2725 */ 2726 dec = (yyvsp[(1) - (1)].i); --- 9 unchanged lines hidden (view full) --- 2736 multby *= 8; 2737 dec /= 10; 2738 } 2739 (yyval.i) = ret; 2740 } 2741 break; 2742 2743 case 96: | 2700 { 2701 int ret, dec, multby, digit; 2702 2703 /* 2704 * Convert a number that was read as decimal number 2705 * to what it would be if it had been read as octal. 2706 */ 2707 dec = (yyvsp[(1) - (1)].i); --- 9 unchanged lines hidden (view full) --- 2717 multby *= 8; 2718 dec /= 10; 2719 } 2720 (yyval.i) = ret; 2721 } 2722 break; 2723 2724 case 96: |
2744#line 910 "ftpcmd.y" | 2725#line 892 "ftpcmd.y" |
2745 { 2746 (yyval.i) = (yyvsp[(1) - (1)].i) && !guest; 2747 if((yyvsp[(1) - (1)].i) && !(yyval.i)) 2748 reply(550, "Permission denied"); 2749 } 2750 break; 2751 2752 case 97: | 2726 { 2727 (yyval.i) = (yyvsp[(1) - (1)].i) && !guest; 2728 if((yyvsp[(1) - (1)].i) && !(yyval.i)) 2729 reply(550, "Permission denied"); 2730 } 2731 break; 2732 2733 case 97: |
2753#line 918 "ftpcmd.y" | 2734#line 900 "ftpcmd.y" |
2754 { 2755 if((yyvsp[(1) - (1)].i)) { 2756 if(((yyval.i) = logged_in) == 0) 2757 reply(530, "Please login with USER and PASS."); 2758 } else 2759 (yyval.i) = 0; 2760 } 2761 break; 2762 2763 case 98: | 2735 { 2736 if((yyvsp[(1) - (1)].i)) { 2737 if(((yyval.i) = logged_in) == 0) 2738 reply(530, "Please login with USER and PASS."); 2739 } else 2740 (yyval.i) = 0; 2741 } 2742 break; 2743 2744 case 98: |
2764#line 928 "ftpcmd.y" | 2745#line 910 "ftpcmd.y" |
2765 { 2766 (yyval.i) = 1; 2767 if(sec_complete && !ccc_passed && !secure_command()) { 2768 (yyval.i) = 0; 2769 reply(533, "Command protection level denied " 2770 "for paranoid reasons."); 2771 } 2772 } 2773 break; 2774 2775 2776/* Line 1267 of yacc.c. */ | 2746 { 2747 (yyval.i) = 1; 2748 if(sec_complete && !ccc_passed && !secure_command()) { 2749 (yyval.i) = 0; 2750 reply(533, "Command protection level denied " 2751 "for paranoid reasons."); 2752 } 2753 } 2754 break; 2755 2756 2757/* Line 1267 of yacc.c. */ |
2777#line 2778 "ftpcmd.c" | 2758#line 2759 "ftpcmd.c" |
2778 default: break; 2779 } 2780 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 2781 2782 YYPOPSTACK (yylen); 2783 yylen = 0; 2784 YY_STACK_PRINT (yyss, yyssp); 2785 --- 197 unchanged lines hidden (view full) --- 2983 if (yymsg != yymsgbuf) 2984 YYSTACK_FREE (yymsg); 2985#endif 2986 /* Make sure YYID is used. */ 2987 return YYID (yyresult); 2988} 2989 2990 | 2759 default: break; 2760 } 2761 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 2762 2763 YYPOPSTACK (yylen); 2764 yylen = 0; 2765 YY_STACK_PRINT (yyss, yyssp); 2766 --- 197 unchanged lines hidden (view full) --- 2964 if (yymsg != yymsgbuf) 2965 YYSTACK_FREE (yymsg); 2966#endif 2967 /* Make sure YYID is used. */ 2968 return YYID (yyresult); 2969} 2970 2971 |
2991#line 938 "ftpcmd.y" | 2972#line 920 "ftpcmd.y" |
2992 2993 2994#define CMD 0 /* beginning of command */ 2995#define ARGS 1 /* expect miscellaneous arguments */ 2996#define STR1 2 /* expect SP followed by STRING */ 2997#define STR2 3 /* expect STRING */ 2998#define OSTR 4 /* optional SP then STRING */ 2999#define ZSTR1 5 /* SP then optional STRING */ --- 80 unchanged lines hidden (view full) --- 3080 { "KDESTROY", KDESTROY, ARGS, 1, "(destroy tickets)" }, 3081 { "KRBTKFILE", KRBTKFILE, STR1, 1, "<sp> ticket-file" }, 3082 { "AFSLOG", AFSLOG, OSTR, 1, "[<sp> cell]" }, 3083 3084 { "LOCATE", LOCATE, STR1, 1, "<sp> globexpr" }, 3085 { "FIND", LOCATE, STR1, 1, "<sp> globexpr" }, 3086 3087 { "URL", URL, ARGS, 1, "?" }, | 2973 2974 2975#define CMD 0 /* beginning of command */ 2976#define ARGS 1 /* expect miscellaneous arguments */ 2977#define STR1 2 /* expect SP followed by STRING */ 2978#define STR2 3 /* expect STRING */ 2979#define OSTR 4 /* optional SP then STRING */ 2980#define ZSTR1 5 /* SP then optional STRING */ --- 80 unchanged lines hidden (view full) --- 3061 { "KDESTROY", KDESTROY, ARGS, 1, "(destroy tickets)" }, 3062 { "KRBTKFILE", KRBTKFILE, STR1, 1, "<sp> ticket-file" }, 3063 { "AFSLOG", AFSLOG, OSTR, 1, "[<sp> cell]" }, 3064 3065 { "LOCATE", LOCATE, STR1, 1, "<sp> globexpr" }, 3066 { "FIND", LOCATE, STR1, 1, "<sp> globexpr" }, 3067 3068 { "URL", URL, ARGS, 1, "?" }, |
3088 | 3069 |
3089 { NULL, 0, 0, 0, 0 } 3090}; 3091 3092static struct tab * 3093lookup(struct tab *p, char *cmd) 3094{ 3095 3096 for (; p->name != NULL; p++) --- 455 unchanged lines hidden --- | 3070 { NULL, 0, 0, 0, 0 } 3071}; 3072 3073static struct tab * 3074lookup(struct tab *p, char *cmd) 3075{ 3076 3077 for (; p->name != NULL; p++) --- 455 unchanged lines hidden --- |