Deleted Added
full compact
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 ---