config_parse.c
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:48k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. #ifndef lint
  2. /*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/
  3. static char yyrcsid[]
  4. #if __GNUC__ == 2
  5.   __attribute__ ((unused))
  6. #endif /* __GNUC__ == 2 */
  7.   = "$OpenBSD: skeleton.c,v 1.13 1998/11/18 15:45:12 dm Exp $";
  8. #endif
  9. #include <stdlib.h>
  10. #define YYBYACC 1
  11. #define YYMAJOR 1
  12. #define YYMINOR 9
  13. #define YYLEX yylex()
  14. #define YYEMPTY -1
  15. #define yyclearin (yychar=(YYEMPTY))
  16. #define yyerrok (yyerrflag=0)
  17. #define YYRECOVERING() (yyerrflag!=0)
  18. #define yyparse socks_yyparse
  19. #define yylex socks_yylex
  20. #define yyerror socks_yyerror
  21. #define yychar socks_yychar
  22. #define yyval socks_yyval
  23. #define yylval socks_yylval
  24. #define yydebug socks_yydebug
  25. #define yynerrs socks_yynerrs
  26. #define yyerrflag socks_yyerrflag
  27. #define yyss socks_yyss
  28. #define yysslim socks_yysslim
  29. #define yyssp socks_yyssp
  30. #define yyvs socks_yyvs
  31. #define yyvsp socks_yyvsp
  32. #define yystacksize socks_yystacksize
  33. #define yylhs socks_yylhs
  34. #define yylen socks_yylen
  35. #define yydefred socks_yydefred
  36. #define yydgoto socks_yydgoto
  37. #define yysindex socks_yysindex
  38. #define yyrindex socks_yyrindex
  39. #define yygindex socks_yygindex
  40. #define yytable socks_yytable
  41. #define yycheck socks_yycheck
  42. #define yyname socks_yyname
  43. #define yyrule socks_yyrule
  44. #define YYPREFIX "socks_yy"
  45. #line 45 "config_parse.y"
  46. #include "common.h"
  47. #include "yacconfig.h"
  48. static const char rcsid[] =
  49. "$Id: config_parse.y,v 1.121 1999/12/22 09:29:23 karls Exp $";
  50. __BEGIN_DECLS
  51. #if HAVE_LIBWRAP && SOCKS_SERVER
  52. extern jmp_buf tcpd_buf;
  53. #endif /* HAVE_LIBWRAP && SOCKS_SERVER */
  54. static void
  55. addressinit __P((struct ruleaddress_t *address));
  56. __END_DECLS
  57. extern int yylineno;
  58. extern char *yytext;
  59. #if SOCKS_SERVER
  60. static struct rule_t ruleinit;
  61. static struct rule_t rule; /* new rule. */
  62. static struct protocol_t protocolmem; /* new protocolmem. */
  63. struct linkedname_t **userbase; /* users rule applies to. */
  64. #endif
  65. #if SOCKS_CLIENT
  66. static struct serverstate_t state;
  67. static struct route_t route; /* new route. */
  68. static struct ruleaddress_t gw; /* new gateway. */
  69. #endif
  70. static struct ruleaddress_t src; /* new src. */
  71. static struct ruleaddress_t dst; /* new dst. */
  72. static struct ruleaddress_t *ruleaddress; /* current ruleaddress */
  73. static struct extension_t *extension; /* new extensions */
  74. static struct proxyprotocol_t *proxyprotocol;/* proxy protocol. */
  75. static char *atype; /* atype of new address. */
  76. static struct in_addr *ipaddr; /* new ipaddress */
  77. static struct in_addr *netmask; /* new netmask */
  78. static char *domain; /* new domain. */
  79. static in_port_t *port_tcp; /* new tcp portnumber. */
  80. static in_port_t *port_udp; /* new udp portnumber. */
  81. static int *methodv; /* new authmethods. */
  82. static int *methodc; /* number of them. */
  83. static struct protocol_t *protocol; /* new protocol. */
  84. static struct command_t *command; /* new command. */
  85. static enum operator_t *operator; /* new operator. */
  86. static const struct {
  87. const char *name;
  88. const int value;
  89. } syslogfacility[] = {
  90. #ifdef LOG_AUTH
  91. { "auth", LOG_AUTH },
  92. #endif /* LOG_AUTH */
  93. #ifdef LOG_AUTHPRIV
  94. { "authpriv", LOG_AUTHPRIV },
  95. #endif /* LOG_AUTHPRIV */
  96. #ifdef LOG_DAEMON
  97. { "daemon", LOG_DAEMON },
  98. #endif /* LOG_DAEMON */
  99. #ifdef LOG_USER
  100. { "user", LOG_USER },
  101. #endif /* LOG_USER */
  102. #ifdef LOG_LOCAL0
  103. { "local0", LOG_LOCAL0 },
  104. #endif /* LOG_LOCAL0 */
  105. #ifdef LOG_LOCAL1
  106. { "local1", LOG_LOCAL1 },
  107. #endif /* LOG_LOCAL1 */
  108. #ifdef LOG_LOCAL2
  109. { "local2", LOG_LOCAL2 },
  110. #endif /* LOG_LOCAL2 */
  111. #ifdef LOG_LOCAL3
  112. { "local3", LOG_LOCAL3 },
  113. #endif /* LOG_LOCAL3 */
  114. #ifdef LOG_LOCAL4
  115. { "local4", LOG_LOCAL4 },
  116. #endif /* LOG_LOCAL4 */
  117. #ifdef LOG_LOCAL5
  118. { "local5", LOG_LOCAL5 },
  119. #endif /* LOG_LOCAL5 */
  120. #ifdef LOG_LOCAL6
  121. { "local6", LOG_LOCAL6 },
  122. #endif /* LOG_LOCAL6 */
  123. #ifdef LOG_LOCAL7
  124. { "local7", LOG_LOCAL7 }
  125. #endif /* LOG_LOCAL7 */
  126. };
  127. #define YYDEBUG 1
  128. #define ADDMETHOD(method) 
  129. do { 
  130. if (*methodc >= AUTHMETHOD_MAX)
  131. yyerror("internal error or duplicate methods given");
  132. methodv[(*methodc)++] = method; 
  133. } while (0)
  134. #line 155 "config_parse.y"
  135. typedef union {
  136. char *string;
  137. uid_t uid;
  138. } YYSTYPE;
  139. #line 160 "y.tab.c"
  140. #define SERVERCONFIG 257
  141. #define CLIENTCONFIG 258
  142. #define DEPRECATED 259
  143. #define CLIENTRULE 260
  144. #define INTERNAL 261
  145. #define EXTERNAL 262
  146. #define DEBUGING 263
  147. #define RESOLVEPROTOCOL 264
  148. #define SRCHOST 265
  149. #define NOMISMATCH 266
  150. #define NOUNKNOWN 267
  151. #define EXTENSION 268
  152. #define BIND 269
  153. #define PRIVILEGED 270
  154. #define IOTIMEOUT 271
  155. #define CONNECTTIMEOUT 272
  156. #define METHOD 273
  157. #define NONE 274
  158. #define GSSAPI 275
  159. #define UNAME 276
  160. #define RFC931 277
  161. #define COMPATIBILITY 278
  162. #define REUSEADDR 279
  163. #define SAMEPORT 280
  164. #define USERNAME 281
  165. #define USER_PRIVILEGED 282
  166. #define USER_UNPRIVILEGED 283
  167. #define USER_LIBWRAP 284
  168. #define LOGOUTPUT 285
  169. #define LOGFILE 286
  170. #define ROUTE 287
  171. #define VIA 288
  172. #define VERDICT_BLOCK 289
  173. #define VERDICT_PASS 290
  174. #define PROTOCOL 291
  175. #define PROTOCOL_TCP 292
  176. #define PROTOCOL_UDP 293
  177. #define PROTOCOL_FAKE 294
  178. #define PROXYPROTOCOL 295
  179. #define PROXYPROTOCOL_SOCKS_V4 296
  180. #define PROXYPROTOCOL_SOCKS_V5 297
  181. #define PROXYPROTOCOL_MSPROXY_V2 298
  182. #define USER 299
  183. #define COMMAND 300
  184. #define COMMAND_BIND 301
  185. #define COMMAND_CONNECT 302
  186. #define COMMAND_UDPASSOCIATE 303
  187. #define COMMAND_BINDREPLY 304
  188. #define COMMAND_UDPREPLY 305
  189. #define ACTION 306
  190. #define LINE 307
  191. #define LIBWRAPSTART 308
  192. #define OPERATOR 309
  193. #define LOG 310
  194. #define LOG_CONNECT 311
  195. #define LOG_DATA 312
  196. #define LOG_DISCONNECT 313
  197. #define LOG_ERROR 314
  198. #define LOG_IOOPERATION 315
  199. #define IPADDRESS 316
  200. #define DOMAIN 317
  201. #define DIRECT 318
  202. #define PORT 319
  203. #define PORTNUMBER 320
  204. #define SERVICENAME 321
  205. #define NUMBER 322
  206. #define FROM 323
  207. #define TO 324
  208. #define YYERRCODE 256
  209. short socks_yylhs[] = {                                        -1,
  210.     0,    0,   45,    1,    1,    1,    1,    1,    2,    2,
  211.     2,    2,   22,   23,   23,   46,   46,   46,   46,   46,
  212.    46,   46,   44,   44,   44,   44,   44,   44,    3,   52,
  213.    21,    7,    8,    8,    8,    9,    9,   10,   11,   12,
  214.    12,   28,   29,   30,   30,   31,   32,   33,   34,   24,
  215.    24,   24,   35,   36,   37,   37,   47,   47,   47,   48,
  216.    49,   50,   51,   26,   27,   25,   38,   39,   39,   40,
  217.    40,   13,   14,   14,   14,   15,   16,   16,   17,   17,
  218.    41,   43,   43,   43,   43,   42,   42,   60,   61,   61,
  219.    61,   62,   62,   57,   58,   58,   58,   58,   58,   58,
  220.    58,   59,   59,   63,   63,   18,   20,   20,   20,   20,
  221.    20,   19,   19,    4,    6,    6,    5,    5,   64,   65,
  222.    67,   67,   67,   67,   67,   66,   66,   68,   69,   70,
  223.    54,   55,   55,   55,   55,   55,   56,   56,   76,   77,
  224.    53,   71,   71,   73,   73,   73,   72,   78,   78,   74,
  225.    75,   79,   79,   79,   83,   83,   80,   81,   84,   85,
  226.    82,
  227. };
  228. short socks_yylen[] = {                                         2,
  229.     2,    2,    1,    0,    2,    2,    2,    2,    0,    2,
  230.     2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
  231.     1,    1,    1,    1,    1,    1,    1,    1,    1,    8,
  232.     0,    3,    1,    1,    1,    1,    2,    3,    1,    1,
  233.     2,    3,    1,    1,    2,    5,    0,    4,    0,    1,
  234.     1,    1,    3,    1,    1,    2,    1,    1,    1,    3,
  235.     3,    3,    1,    3,    3,    3,    3,    1,    1,    1,
  236.     2,    3,    1,    1,    1,    3,    1,    1,    1,    2,
  237.     3,    1,    1,    1,    1,    1,    2,    7,    1,    1,
  238.     1,    0,    2,    6,    1,    1,    1,    1,    1,    1,
  239.     1,    0,    2,    1,    1,    3,    1,    1,    1,    1,
  240.     1,    1,    2,    3,    1,    1,    1,    2,    2,    3,
  241.     1,    1,    1,    1,    1,    1,    2,    3,    3,    3,
  242.     3,    1,    1,    1,    1,    1,    0,    2,    1,    1,
  243.     1,    4,    2,    2,    2,    1,    1,    1,    1,    1,
  244.     1,    0,    3,    2,    1,    1,    3,    1,    1,    1,
  245.     1,
  246. };
  247. short socks_yydefred[] = {                                      0,
  248.     3,   13,    0,    9,    4,    0,    0,   29,    0,    0,
  249.     0,   31,   10,   15,   52,   11,   14,   51,   50,   12,
  250.     0,   47,   49,    0,    0,    0,    0,    0,    0,    0,
  251.     0,    0,  104,  105,    5,   17,   27,   28,   26,   24,
  252.    25,   18,   19,   20,   23,   16,   21,    6,   22,   57,
  253.    58,   59,    8,    7,    0,    0,    0,    0,    0,    0,
  254.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  255.     0,    0,   66,   74,   75,   73,   72,   54,    0,   53,
  256.     0,    0,    0,    0,   77,   78,    0,   76,   43,    0,
  257.    42,   64,   65,   82,   83,   84,   85,   81,    0,   68,
  258.    69,    0,   67,   63,   60,   61,   62,    0,    0,    0,
  259.     0,    0,    0,   99,  100,  101,   96,   95,    0,    0,
  260.    98,   97,   56,  134,  135,  132,  133,  136,    0,    0,
  261.    91,    0,    0,   90,   89,  147,    0,   48,   80,   45,
  262.    87,   71,    0,    0,    0,    0,    0,    0,  103,  139,
  263.     0,    0,    0,  138,    0,   93,    0,    0,   46,  115,
  264.   116,  114,    0,   33,   34,   35,    0,   32,   39,    0,
  265.    38,  107,  108,  109,  110,  111,  106,    0,  128,  121,
  266.   122,  123,  124,  125,  120,    0,    0,  140,  119,    0,
  267.     0,  141,    0,    0,    0,  161,  158,  154,    0,    0,
  268.   118,   37,   41,  113,  127,   94,    0,  150,  129,    0,
  269.     0,    0,    0,   88,    0,  159,  156,  153,  155,  130,
  270.     0,  143,  151,    0,  131,    0,  146,   30,  160,  157,
  271.   149,  148,    0,  144,  145,  142,
  272. };
  273. short socks_yydgoto[] = {                                       3,
  274.     7,    6,   14,  114,  162,  163,  115,  167,  168,  116,
  275.   170,  171,   15,   77,   38,   87,   88,  117,  177,  178,
  276.    59,    4,   16,   17,   18,   39,   40,  127,   90,   91,
  277.    42,   61,   43,   62,   19,   79,   80,   45,  102,  103,
  278.   118,   98,   99,   47,    5,   48,   49,   50,   51,   52,
  279.   105,   20,  193,  194,  129,  130,   53,  119,  120,   54,
  280.   132,  133,   55,  151,  121,  185,  186,  122,  152,  189,
  281.   209,  210,  225,  211,  227,  153,  190,  233,  159,  198,
  282.   199,  200,  218,  219,  230,
  283. };
  284. short socks_yysindex[] = {                                   -223,
  285.     0,    0,    0,    0,    0,  -10,  224,    0,  -30,  -19,
  286.   -17,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  287.  -238,    0,    0,  -15,  -12,   -9,    3,    5,    9,   12,
  288.    18,   32,    0,    0,    0,    0,    0,    0,    0,    0,
  289.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  290.     0,    0,    0,    0,  -28, -208, -235, -167,   -3,   -1,
  291.    63,   66, -174, -142, -188, -187, -195, -206, -152, -152,
  292.  -152, -255,    0,    0,    0,    0,    0,    0, -167,    0,
  293.  -258, -278, -180, -180,    0,    0, -174,    0,    0, -142,
  294.     0,    0,    0,    0,    0,    0,    0,    0, -195,    0,
  295.     0, -206,    0,    0,    0,    0,    0,   79,   81,   82,
  296.    83,   84,   85,    0,    0,    0,    0,    0, -255, -179,
  297.     0,    0,    0,    0,    0,    0,    0,    0, -258, -179,
  298.     0, -278, -179,    0,    0,    0, -173,    0,    0,    0,
  299.     0,    0, -182, -193, -136, -216, -160, -213,    0,    0,
  300.  -255, -176,   91,    0, -135,    0, -278, -282,    0,    0,
  301.     0,    0, -182,    0,    0,    0, -193,    0,    0, -136,
  302.     0,    0,    0,    0,    0,    0,    0, -216,    0,    0,
  303.     0,    0,    0,    0,    0, -213,   27,    0,    0,   97,
  304.  -204,    0,  100, -258,   29,    0,    0,    0,  114, -205,
  305.     0,    0,    0,    0,    0,    0, -204,    0,    0,  116,
  306.  -173, -209,   36,    0, -156,    0,    0,    0,    0,    0,
  307.  -291,    0,    0, -173,    0, -173,    0,    0,    0,    0,
  308.     0,    0, -173,    0,    0,    0,
  309. };
  310. short socks_yyrindex[] = {                                      0,
  311.     0,    0,    0,    0,    0,  166,  167,    0,    0,    0,
  312.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  313.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  314.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  315.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  316.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  317.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  318.     0, -154,    0,    0,    0,    0,    0,    0,   96,    0,
  319.  -150, -148,    0,    0,    0,    0,  128,    0,    0,   54,
  320.     0,    0,    0,    0,    0,    0,    0,    0,    1,    0,
  321.     0,  160,    0,    0,    0,    0,    0,    0,    0,    0,
  322.     0,    0,    0,    0,    0,    0,    0,    0, -120,    0,
  323.     0,    0,    0,    0,    0,    0,    0,    0, -119,    0,
  324.     0, -118,    0,    0,    0,    0,  192,    0,    0,    0,
  325.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  326.    46,    0,    0,    0,    0,    0,   56,    0,    0,    0,
  327.     0,    0, -117,    0,    0,    0, -111,    0,    0,  -75,
  328.     0,    0,    0,    0,    0,    0,    0,  -78,    0,    0,
  329.     0,    0,    0,    0,    0,   -2,    0,    0,    0,    0,
  330.     0,    0,    0,   61,    0,    0,    0,    0,    0,    0,
  331.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  332.  -123,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  333.     0,    0,    0,  -54,    0,  -54,    0,    0,    0,    0,
  334.     0,    0, -123,    0,    0,    0,
  335. };
  336. short socks_yygindex[] = {                                      0,
  337.     0,    0,  187,  -69,   37,    0,  -64,    0,   40,  -66,
  338.     0,   38,  202,    0,    0,    0,  123,  -61,   33,    0,
  339.     0,    0,    0,    0,    0,    0,    0,  208,    0,  133,
  340.     0,    0,    0,    0,  211,    0,  147,    0,    0,  125,
  341.     2,  129,    0,    0,    0,    0,    0,    0,    0,    0,
  342.    47,    0,    0,    0,    0, -116,    0,    0,  -95,    0,
  343.     0, -109,  210, -104,  -63,   43,    0,  -60,    0,    0,
  344.    31,  -80,    0,   24,    0,    0,    0,    0, -149,    0,
  345.    39,    0,    0,    0,    0,
  346. };
  347. #define YYTABLESIZE 514
  348. short socks_yytable[] = {                                      13,
  349.    86,  152,  137,  138,  102,  137,   92,  117,   46,   25,
  350.    86,  124,  154,   36,   28,  131,  125,   28,  134,  126,
  351.   110,  135,  156,  149,  231,  155,  196,   56,  157,  112,
  352.   232,  113,  108,    1,    2,  108,  109,  197,   57,  109,
  353.    58,  111,   63,  110,  111,   64,  112,  195,   65,   40,
  354.    33,   34,  112,   44,  113,  187,   74,   75,   76,  124,
  355.    66,  222,   67,   44,  125,  131,   68,  126,  134,   69,
  356.   152,  135,  100,  101,  234,   70,  235,  213,   94,   95,
  357.    96,   97,  128,  236,  172,  173,  174,  175,  176,   71,
  358.   131,   85,   86,  134,   72,   55,  135,  180,  181,  182,
  359.   183,  184,  164,  165,  166,   55,  136,  208,  223,  160,
  360.   161,  136,  208,   73,  197,  216,  106,  107,   78,   81,
  361.    83,   82,  126,   84,  124,   86,   89,   79,  104,  125,
  362.   128,  224,  126,   92,   93,  136,  143,   79,  144,  145,
  363.   146,  147,  148,  150,  169,  158,  179,  188,  191,  152,
  364.   117,  206,  192,  214,  207,  117,   36,  212,  215,   70,
  365.   228,   36,  221,  229,  152,    2,    1,  152,  102,   70,
  366.   102,  152,  137,  117,   92,  152,  152,  117,   44,   36,
  367.    92,  117,  117,   36,  152,  137,  152,   36,   36,  112,
  368.   117,  152,  117,   36,  112,  128,   36,   40,   36,  201,
  369.   152,  152,  102,  137,   92,  117,  202,  203,   37,  139,
  370.   204,   36,  112,  152,   41,   40,  112,   44,  152,   40,
  371.   112,  112,  140,   40,   40,  123,  142,  141,  205,  112,
  372.    60,  112,   40,   35,   40,  226,  152,  220,  217,    0,
  373.   152,    0,    0,    0,  112,  152,    0,   40,    8,    0,
  374.     0,    0,    9,   10,    0,    0,    0,    0,    0,   86,
  375.    86,   86,   86,    0,   86,   86,    0,    0,   86,    0,
  376.   126,   86,   86,   86,   11,    0,   12,    0,   86,    0,
  377.     0,    0,   86,   86,   86,   86,    0,    0,  126,   86,
  378.    86,   86,  126,    0,    0,   86,  126,  126,    0,   86,
  379.    86,    0,    0,    0,    0,  126,    0,  126,   86,    0,
  380.    86,    0,   44,   44,   44,   44,    0,   44,   44,    0,
  381.   126,   44,    0,   86,   44,   44,   44,    0,    0,    0,
  382.     0,   44,    0,    0,    0,   44,   44,   44,   44,    0,
  383.     0,    0,   44,   44,   44,    0,    0,    0,   44,    0,
  384.     0,    0,    0,   44,   55,   55,   55,   55,   55,   55,
  385.    55,    0,    0,   55,    0,    0,   55,   55,   55,    0,
  386.     0,    0,    0,   55,    0,    0,   44,   55,   55,   55,
  387.    55,    0,   55,    0,   55,   55,   79,   79,   79,   79,
  388.     0,   79,   79,    0,    0,   79,    0,    0,   79,   79,
  389.    79,    0,    0,    0,    0,   79,    0,    0,    0,   79,
  390.    79,   79,   79,    0,    0,    0,   79,   79,   70,   70,
  391.    70,   70,    0,   70,   70,    0,    0,   70,    0,    0,
  392.    70,   70,   70,    0,    0,    0,    0,   70,    0,    0,
  393.     0,   70,   70,   70,   70,    0,    0,    0,   70,   70,
  394.   152,  152,  152,  152,    0,  152,  152,    0,    0,  152,
  395.     0,    0,  152,  152,  152,    0,    0,    0,    0,  152,
  396.     0,    0,    0,  152,  152,  152,  152,    0,    0,    0,
  397.   152,  152,    8,   21,   22,   23,    0,   10,   24,    0,
  398.     0,   25,    0,    0,   26,   27,   28,    0,    0,    0,
  399.     0,   29,    0,    0,    0,   30,   31,   32,   11,    0,
  400.     0,    0,   33,   34,
  401. };
  402. short socks_yycheck[] = {                                      10,
  403.     0,  125,   83,   84,  125,  125,  125,  125,    7,  268,
  404.    10,   81,  129,  125,  273,   82,   81,  273,   82,   81,
  405.   299,   82,  132,  119,  316,  130,  309,   58,  133,  308,
  406.   322,  310,  291,  257,  258,  291,  295,  320,   58,  295,
  407.    58,  300,   58,  299,  300,   58,  125,  157,   58,  125,
  408.   289,  290,  308,    0,  310,  151,  292,  293,  294,  129,
  409.    58,  211,   58,   10,  129,  132,   58,  129,  132,   58,
  410.   125,  132,  279,  280,  224,   58,  226,  194,  274,  275,
  411.   276,  277,   81,  233,  301,  302,  303,  304,  305,   58,
  412.   157,  266,  267,  157,  123,    0,  157,  311,  312,  313,
  413.   314,  315,  296,  297,  298,   10,  316,  317,  318,  292,
  414.   293,  316,  317,  322,  320,  321,   70,   71,  286,  123,
  415.    58,  123,  125,   58,  194,  125,  269,    0,  281,  194,
  416.   129,  212,  194,  322,  322,  316,   58,   10,   58,   58,
  417.    58,   58,   58,  323,  281,  319,  307,  324,   58,  273,
  418.   268,  125,  288,  125,   58,  273,  268,   58,   45,    0,
  419.   125,  273,   47,  320,  288,    0,    0,  291,  323,   10,
  420.   125,  295,  323,  291,  323,  299,  300,  295,  125,  291,
  421.   125,  299,  300,  295,  308,  125,  310,  299,  300,  268,
  422.   308,    0,  310,    7,  273,  194,  308,  273,  310,  163,
  423.   324,   10,  323,  323,  323,  323,  167,  170,    7,   87,
  424.   178,  323,  291,  268,    7,  291,  295,    7,  273,  295,
  425.   299,  300,   90,  299,  300,   79,  102,   99,  186,  308,
  426.    21,  310,  308,   10,  310,  212,  291,  207,  200,   -1,
  427.   295,   -1,   -1,   -1,  323,  300,   -1,  323,  259,   -1,
  428.    -1,   -1,  263,  264,   -1,   -1,   -1,   -1,   -1,  259,
  429.   260,  261,  262,   -1,  264,  265,   -1,   -1,  268,   -1,
  430.   273,  271,  272,  273,  285,   -1,  287,   -1,  278,   -1,
  431.    -1,   -1,  282,  283,  284,  285,   -1,   -1,  291,  289,
  432.   290,  291,  295,   -1,   -1,  295,  299,  300,   -1,  299,
  433.   300,   -1,   -1,   -1,   -1,  308,   -1,  310,  308,   -1,
  434.   310,   -1,  259,  260,  261,  262,   -1,  264,  265,   -1,
  435.   323,  268,   -1,  323,  271,  272,  273,   -1,   -1,   -1,
  436.    -1,  278,   -1,   -1,   -1,  282,  283,  284,  285,   -1,
  437.    -1,   -1,  289,  290,  291,   -1,   -1,   -1,  295,   -1,
  438.    -1,   -1,   -1,  300,  259,  260,  261,  262,  263,  264,
  439.   265,   -1,   -1,  268,   -1,   -1,  271,  272,  273,   -1,
  440.    -1,   -1,   -1,  278,   -1,   -1,  323,  282,  283,  284,
  441.   285,   -1,  287,   -1,  289,  290,  259,  260,  261,  262,
  442.    -1,  264,  265,   -1,   -1,  268,   -1,   -1,  271,  272,
  443.   273,   -1,   -1,   -1,   -1,  278,   -1,   -1,   -1,  282,
  444.   283,  284,  285,   -1,   -1,   -1,  289,  290,  259,  260,
  445.   261,  262,   -1,  264,  265,   -1,   -1,  268,   -1,   -1,
  446.   271,  272,  273,   -1,   -1,   -1,   -1,  278,   -1,   -1,
  447.    -1,  282,  283,  284,  285,   -1,   -1,   -1,  289,  290,
  448.   259,  260,  261,  262,   -1,  264,  265,   -1,   -1,  268,
  449.    -1,   -1,  271,  272,  273,   -1,   -1,   -1,   -1,  278,
  450.    -1,   -1,   -1,  282,  283,  284,  285,   -1,   -1,   -1,
  451.   289,  290,  259,  260,  261,  262,   -1,  264,  265,   -1,
  452.    -1,  268,   -1,   -1,  271,  272,  273,   -1,   -1,   -1,
  453.    -1,  278,   -1,   -1,   -1,  282,  283,  284,  285,   -1,
  454.    -1,   -1,  289,  290,
  455. };
  456. #define YYFINAL 3
  457. #ifndef YYDEBUG
  458. #define YYDEBUG 0
  459. #endif
  460. #define YYMAXTOKEN 324
  461. #if YYDEBUG
  462. char *socks_yyname[] = {
  463. "end-of-file",0,0,0,0,0,0,0,0,0,"'\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  464. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,"':'",0,0,0,0,0,0,
  465. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  466. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  467. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  468. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  469. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  470. "SERVERCONFIG","CLIENTCONFIG","DEPRECATED","CLIENTRULE","INTERNAL","EXTERNAL",
  471. "DEBUGING","RESOLVEPROTOCOL","SRCHOST","NOMISMATCH","NOUNKNOWN","EXTENSION",
  472. "BIND","PRIVILEGED","IOTIMEOUT","CONNECTTIMEOUT","METHOD","NONE","GSSAPI",
  473. "UNAME","RFC931","COMPATIBILITY","REUSEADDR","SAMEPORT","USERNAME",
  474. "USER_PRIVILEGED","USER_UNPRIVILEGED","USER_LIBWRAP","LOGOUTPUT","LOGFILE",
  475. "ROUTE","VIA","VERDICT_BLOCK","VERDICT_PASS","PROTOCOL","PROTOCOL_TCP",
  476. "PROTOCOL_UDP","PROTOCOL_FAKE","PROXYPROTOCOL","PROXYPROTOCOL_SOCKS_V4",
  477. "PROXYPROTOCOL_SOCKS_V5","PROXYPROTOCOL_MSPROXY_V2","USER","COMMAND",
  478. "COMMAND_BIND","COMMAND_CONNECT","COMMAND_UDPASSOCIATE","COMMAND_BINDREPLY",
  479. "COMMAND_UDPREPLY","ACTION","LINE","LIBWRAPSTART","OPERATOR","LOG",
  480. "LOG_CONNECT","LOG_DATA","LOG_DISCONNECT","LOG_ERROR","LOG_IOOPERATION",
  481. "IPADDRESS","DOMAIN","DIRECT","PORT","PORTNUMBER","SERVICENAME","NUMBER","FROM",
  482. "TO",
  483. };
  484. char *socks_yyrule[] = {
  485. "$accept : configtype",
  486. "configtype : serverinit serverline",
  487. "configtype : clientinit clientline",
  488. "serverinit : SERVERCONFIG",
  489. "serverline :",
  490. "serverline : serverline '\n'",
  491. "serverline : serverline serverconfig",
  492. "serverline : serverline clientrule",
  493. "serverline : serverline rule",
  494. "clientline :",
  495. "clientline : clientline '\n'",
  496. "clientline : clientline clientconfig",
  497. "clientline : clientline route",
  498. "clientinit : CLIENTCONFIG",
  499. "clientconfig : clientoption",
  500. "clientconfig : deprecated",
  501. "serverconfig : authmethod",
  502. "serverconfig : deprecated",
  503. "serverconfig : internal",
  504. "serverconfig : external",
  505. "serverconfig : logoutput",
  506. "serverconfig : serveroption",
  507. "serverconfig : userids",
  508. "serveroption : compatibility",
  509. "serveroption : connecttimeout",
  510. "serveroption : extension",
  511. "serveroption : iotimeout",
  512. "serveroption : resolveprotocol",
  513. "serveroption : srchost",
  514. "deprecated : DEPRECATED",
  515. "route : ROUTE routeinit '{' routeoptions fromto gateway routeoptions '}'",
  516. "routeinit :",
  517. "proxyprotocol : PROXYPROTOCOL ':' proxyprotocols",
  518. "proxyprotocolname : PROXYPROTOCOL_SOCKS_V4",
  519. "proxyprotocolname : PROXYPROTOCOL_SOCKS_V5",
  520. "proxyprotocolname : PROXYPROTOCOL_MSPROXY_V2",
  521. "proxyprotocols : proxyprotocolname",
  522. "proxyprotocols : proxyprotocolname proxyprotocols",
  523. "user : USER ':' usernames",
  524. "username : USERNAME",
  525. "usernames : username",
  526. "usernames : username usernames",
  527. "extension : EXTENSION ':' extensions",
  528. "extensionname : BIND",
  529. "extensions : extensionname",
  530. "extensions : extensionname extensions",
  531. "internal : INTERNAL internalinit ':' ipaddress port",
  532. "internalinit :",
  533. "external : EXTERNAL externalinit ':' ipaddress",
  534. "externalinit :",
  535. "clientoption : logoutput",
  536. "clientoption : debuging",
  537. "clientoption : resolveprotocol",
  538. "logoutput : LOGOUTPUT ':' logoutputdevices",
  539. "logoutputdevice : LOGFILE",
  540. "logoutputdevices : logoutputdevice",
  541. "logoutputdevices : logoutputdevice logoutputdevices",
  542. "userids : user_privileged",
  543. "userids : user_unprivileged",
  544. "userids : user_libwrap",
  545. "user_privileged : USER_PRIVILEGED ':' userid",
  546. "user_unprivileged : USER_UNPRIVILEGED ':' userid",
  547. "user_libwrap : USER_LIBWRAP ':' userid",
  548. "userid : USERNAME",
  549. "iotimeout : IOTIMEOUT ':' NUMBER",
  550. "connecttimeout : CONNECTTIMEOUT ':' NUMBER",
  551. "debuging : DEBUGING ':' NUMBER",
  552. "compatibility : COMPATIBILITY ':' compatibilitys",
  553. "compatibilityname : REUSEADDR",
  554. "compatibilityname : SAMEPORT",
  555. "compatibilitys : compatibilityname",
  556. "compatibilitys : compatibilityname compatibilitys",
  557. "resolveprotocol : RESOLVEPROTOCOL ':' resolveprotocolname",
  558. "resolveprotocolname : PROTOCOL_FAKE",
  559. "resolveprotocolname : PROTOCOL_TCP",
  560. "resolveprotocolname : PROTOCOL_UDP",
  561. "srchost : SRCHOST ':' srchostoptions",
  562. "srchostoption : NOMISMATCH",
  563. "srchostoption : NOUNKNOWN",
  564. "srchostoptions : srchostoption",
  565. "srchostoptions : srchostoption srchostoptions",
  566. "authmethod : METHOD ':' authmethods",
  567. "authmethodname : NONE",
  568. "authmethodname : GSSAPI",
  569. "authmethodname : UNAME",
  570. "authmethodname : RFC931",
  571. "authmethods : authmethodname",
  572. "authmethods : authmethodname authmethods",
  573. "clientrule : CLIENTRULE verdict '{' clientruleoptions fromto clientruleoptions '}'",
  574. "clientruleoption : libwrap",
  575. "clientruleoption : log",
  576. "clientruleoption : user",
  577. "clientruleoptions :",
  578. "clientruleoptions : clientruleoption clientruleoptions",
  579. "rule : verdict '{' ruleoptions fromto ruleoptions '}'",
  580. "ruleoption : authmethod",
  581. "ruleoption : command",
  582. "ruleoption : libwrap",
  583. "ruleoption : log",
  584. "ruleoption : protocol",
  585. "ruleoption : proxyprotocol",
  586. "ruleoption : user",
  587. "ruleoptions :",
  588. "ruleoptions : ruleoption ruleoptions",
  589. "verdict : VERDICT_BLOCK",
  590. "verdict : VERDICT_PASS",
  591. "command : COMMAND ':' commands",
  592. "commandname : COMMAND_BIND",
  593. "commandname : COMMAND_CONNECT",
  594. "commandname : COMMAND_UDPASSOCIATE",
  595. "commandname : COMMAND_BINDREPLY",
  596. "commandname : COMMAND_UDPREPLY",
  597. "commands : commandname",
  598. "commands : commandname commands",
  599. "protocol : PROTOCOL ':' protocols",
  600. "protocolname : PROTOCOL_TCP",
  601. "protocolname : PROTOCOL_UDP",
  602. "protocols : protocolname",
  603. "protocols : protocolname protocols",
  604. "fromto : srcaddress dstaddress",
  605. "log : LOG ':' logs",
  606. "logname : LOG_CONNECT",
  607. "logname : LOG_DATA",
  608. "logname : LOG_DISCONNECT",
  609. "logname : LOG_ERROR",
  610. "logname : LOG_IOOPERATION",
  611. "logs : logname",
  612. "logs : logname logs",
  613. "libwrap : LIBWRAPSTART ':' LINE",
  614. "srcaddress : from ':' address",
  615. "dstaddress : to ':' address",
  616. "gateway : via ':' gwaddress",
  617. "routeoption : command",
  618. "routeoption : extension",
  619. "routeoption : protocol",
  620. "routeoption : proxyprotocol",
  621. "routeoption : authmethod",
  622. "routeoptions :",
  623. "routeoptions : routeoption routeoptions",
  624. "from : FROM",
  625. "to : TO",
  626. "via : VIA",
  627. "address : ipaddress '/' netmask port",
  628. "address : domain port",
  629. "gwaddress : ipaddress port",
  630. "gwaddress : domain port",
  631. "gwaddress : direct",
  632. "ipaddress : IPADDRESS",
  633. "netmask : NUMBER",
  634. "netmask : IPADDRESS",
  635. "domain : DOMAIN",
  636. "direct : DIRECT",
  637. "port :",
  638. "port : PORT portoperator portnumber",
  639. "port : PORT portrange",
  640. "portnumber : portservice",
  641. "portnumber : portstart",
  642. "portrange : portstart '-' portend",
  643. "portstart : PORTNUMBER",
  644. "portservice : SERVICENAME",
  645. "portend : PORTNUMBER",
  646. "portoperator : OPERATOR",
  647. };
  648. #endif
  649. #ifdef YYSTACKSIZE
  650. #undef YYMAXDEPTH
  651. #define YYMAXDEPTH YYSTACKSIZE
  652. #else
  653. #ifdef YYMAXDEPTH
  654. #define YYSTACKSIZE YYMAXDEPTH
  655. #else
  656. #define YYSTACKSIZE 10000
  657. #define YYMAXDEPTH 10000
  658. #endif
  659. #endif
  660. #define YYINITSTACKSIZE 200
  661. int yydebug;
  662. int yynerrs;
  663. int yyerrflag;
  664. int yychar;
  665. short *yyssp;
  666. YYSTYPE *yyvsp;
  667. YYSTYPE yyval;
  668. YYSTYPE yylval;
  669. short *yyss;
  670. short *yysslim;
  671. YYSTYPE *yyvs;
  672. int yystacksize;
  673. #line 1043 "config_parse.y"
  674. #define INTERACTIVE 0
  675. #if SOCKS_SERVER
  676. #define ELECTRICFENCE 0
  677. #else
  678. #define ELECTRICFENCE 0
  679. #endif
  680. #if ELECTRICFENCE
  681. extern int EF_PROTECT_FREE;
  682. extern int EF_ALLOW_MALLOC_0;
  683. extern int EF_ALIGNMENT;
  684. extern int EF_PROTECT_BELOW;
  685. #endif /* ELECTRICFENCE */
  686. extern FILE *yyin;
  687. int parseinit;
  688. int
  689. readconfig(filename)
  690. const char *filename;
  691. {
  692. const char *function = "readconfig()";
  693. #if ELECTRICFENCE
  694. EF_PROTECT_FREE         = 1;
  695. EF_ALLOW_MALLOC_0       = 1;
  696. EF_ALIGNMENT            = 0;
  697. EF_PROTECT_BELOW = 0;
  698. #endif /* ELECTRICFENCE */
  699. /* yydebug = 0; */
  700. yylineno = 1;
  701. parseinit = 0;
  702. if ((yyin = fopen(filename, "r")) == NULL) {
  703. swarn("%s: %s", function, filename);
  704. return -1;
  705. }
  706. yyparse();
  707. fclose(yyin);
  708. errno = 0; /* yacc for some reason alters errno sometimes. */
  709. return 0;
  710. }
  711. void
  712. yyerror(s)
  713. const char *s;
  714. {
  715. serrx(1, "%s: error on line %d, near '%.10s': %s",
  716. config.option.configfile, yylineno,
  717. (yytext == NULL || *yytext == NUL) ? "'start of line'" : yytext, s);
  718. }
  719. static void
  720. addressinit(address)
  721. struct ruleaddress_t *address;
  722. {
  723. ruleaddress = address;
  724. atype = &ruleaddress->atype;
  725. ipaddr = &ruleaddress->addr.ipv4.ip;
  726. netmask = &ruleaddress->addr.ipv4.mask;
  727. domain = ruleaddress->addr.domain;
  728. port_tcp = &ruleaddress->port.tcp;
  729. port_udp = &ruleaddress->port.udp;
  730. operator = &ruleaddress->operator;
  731. }
  732. #line 772 "y.tab.c"
  733. /* allocate initial stack or double stack size, up to YYMAXDEPTH */
  734. #if defined(__cplusplus) || __STDC__
  735. static int yygrowstack(void)
  736. #else
  737. static int yygrowstack()
  738. #endif
  739. {
  740.     int newsize, i;
  741.     short *newss;
  742.     YYSTYPE *newvs;
  743.     if ((newsize = yystacksize) == 0)
  744.         newsize = YYINITSTACKSIZE;
  745.     else if (newsize >= YYMAXDEPTH)
  746.         return -1;
  747.     else if ((newsize *= 2) > YYMAXDEPTH)
  748.         newsize = YYMAXDEPTH;
  749.     i = yyssp - yyss;
  750.     newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
  751.       (short *)malloc(newsize * sizeof *newss);
  752.     if (newss == NULL)
  753.         return -1;
  754.     yyss = newss;
  755.     yyssp = newss + i;
  756.     newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
  757.       (YYSTYPE *)malloc(newsize * sizeof *newvs);
  758.     if (newvs == NULL)
  759.         return -1;
  760.     yyvs = newvs;
  761.     yyvsp = newvs + i;
  762.     yystacksize = newsize;
  763.     yysslim = yyss + newsize - 1;
  764.     return 0;
  765. }
  766. #define YYABORT goto yyabort
  767. #define YYREJECT goto yyabort
  768. #define YYACCEPT goto yyaccept
  769. #define YYERROR goto yyerrlab
  770. int
  771. #if defined(__cplusplus) || __STDC__
  772. yyparse(void)
  773. #else
  774. yyparse()
  775. #endif
  776. {
  777.     register int yym, yyn, yystate;
  778. #if YYDEBUG
  779.     register char *yys;
  780.     if ((yys = getenv("YYDEBUG")))
  781.     {
  782.         yyn = *yys;
  783.         if (yyn >= '0' && yyn <= '9')
  784.             yydebug = yyn - '0';
  785.     }
  786. #endif
  787.     yynerrs = 0;
  788.     yyerrflag = 0;
  789.     yychar = (-1);
  790.     if (yyss == NULL && yygrowstack()) goto yyoverflow;
  791.     yyssp = yyss;
  792.     yyvsp = yyvs;
  793.     *yyssp = yystate = 0;
  794. yyloop:
  795.     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
  796.     if (yychar < 0)
  797.     {
  798.         if ((yychar = yylex()) < 0) yychar = 0;
  799. #if YYDEBUG
  800.         if (yydebug)
  801.         {
  802.             yys = 0;
  803.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  804.             if (!yys) yys = "illegal-symbol";
  805.             printf("%sdebug: state %d, reading %d (%s)n",
  806.                     YYPREFIX, yystate, yychar, yys);
  807.         }
  808. #endif
  809.     }
  810.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  811.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  812.     {
  813. #if YYDEBUG
  814.         if (yydebug)
  815.             printf("%sdebug: state %d, shifting to state %dn",
  816.                     YYPREFIX, yystate, yytable[yyn]);
  817. #endif
  818.         if (yyssp >= yysslim && yygrowstack())
  819.         {
  820.             goto yyoverflow;
  821.         }
  822.         *++yyssp = yystate = yytable[yyn];
  823.         *++yyvsp = yylval;
  824.         yychar = (-1);
  825.         if (yyerrflag > 0)  --yyerrflag;
  826.         goto yyloop;
  827.     }
  828.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  829.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  830.     {
  831.         yyn = yytable[yyn];
  832.         goto yyreduce;
  833.     }
  834.     if (yyerrflag) goto yyinrecovery;
  835. #if defined(lint) || defined(__GNUC__)
  836.     goto yynewerror;
  837. #endif
  838. yynewerror:
  839.     yyerror("syntax error");
  840. #if defined(lint) || defined(__GNUC__)
  841.     goto yyerrlab;
  842. #endif
  843. yyerrlab:
  844.     ++yynerrs;
  845. yyinrecovery:
  846.     if (yyerrflag < 3)
  847.     {
  848.         yyerrflag = 3;
  849.         for (;;)
  850.         {
  851.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  852.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  853.             {
  854. #if YYDEBUG
  855.                 if (yydebug)
  856.                     printf("%sdebug: state %d, error recovery shifting
  857.  to state %dn", YYPREFIX, *yyssp, yytable[yyn]);
  858. #endif
  859.                 if (yyssp >= yysslim && yygrowstack())
  860.                 {
  861.                     goto yyoverflow;
  862.                 }
  863.                 *++yyssp = yystate = yytable[yyn];
  864.                 *++yyvsp = yylval;
  865.                 goto yyloop;
  866.             }
  867.             else
  868.             {
  869. #if YYDEBUG
  870.                 if (yydebug)
  871.                     printf("%sdebug: error recovery discarding state %dn",
  872.                             YYPREFIX, *yyssp);
  873. #endif
  874.                 if (yyssp <= yyss) goto yyabort;
  875.                 --yyssp;
  876.                 --yyvsp;
  877.             }
  878.         }
  879.     }
  880.     else
  881.     {
  882.         if (yychar == 0) goto yyabort;
  883. #if YYDEBUG
  884.         if (yydebug)
  885.         {
  886.             yys = 0;
  887.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  888.             if (!yys) yys = "illegal-symbol";
  889.             printf("%sdebug: state %d, error recovery discards token %d (%s)n",
  890.                     YYPREFIX, yystate, yychar, yys);
  891.         }
  892. #endif
  893.         yychar = (-1);
  894.         goto yyloop;
  895.     }
  896. yyreduce:
  897. #if YYDEBUG
  898.     if (yydebug)
  899.         printf("%sdebug: state %d, reducing by rule %d (%s)n",
  900.                 YYPREFIX, yystate, yyn, yyrule[yyn]);
  901. #endif
  902.     yym = yylen[yyn];
  903.     yyval = yyvsp[1-yym];
  904.     switch (yyn)
  905.     {
  906. case 3:
  907. #line 250 "config_parse.y"
  908. {
  909. #if SOCKS_SERVER
  910. protocol = &protocolmem;
  911. extension = &config.extension;
  912. methodv = config.methodv;
  913. methodc = &config.methodc;
  914. #endif
  915. }
  916. break;
  917. case 4:
  918. #line 261 "config_parse.y"
  919. { yyval.string = NULL; }
  920. break;
  921. case 9:
  922. #line 268 "config_parse.y"
  923. { yyval.string = NULL; }
  924. break;
  925. case 13:
  926. #line 275 "config_parse.y"
  927. {
  928. }
  929. break;
  930. case 29:
  931. #line 301 "config_parse.y"
  932. {
  933. yyerror("given keyword is deprecated");
  934. }
  935. break;
  936. case 30:
  937. #line 305 "config_parse.y"
  938. {
  939. #if SOCKS_CLIENT
  940. route.src = src;
  941. route.dst = dst;
  942. ruleaddress2sockshost(&gw, &route.gw.host, SOCKS_TCP);
  943. route.gw.state = state;
  944. addroute(&route);
  945. #endif
  946. }
  947. break;
  948. case 31:
  949. #line 317 "config_parse.y"
  950. {
  951. #if SOCKS_CLIENT
  952. command = &state.command;
  953. extension = &state.extension;
  954. methodv = state.methodv;
  955. methodc = &state.methodc;
  956. protocol = &state.protocol;
  957. proxyprotocol = &state.proxyprotocol;
  958. bzero(&state, sizeof(state));
  959. bzero(&route, sizeof(route));
  960. bzero(&gw, sizeof(gw));
  961. bzero(&src, sizeof(src));
  962. bzero(&dst, sizeof(dst));
  963. src.atype = SOCKS_ADDR_IPV4;
  964. dst.atype = SOCKS_ADDR_IPV4;
  965. #endif
  966. }
  967. break;
  968. case 33:
  969. #line 341 "config_parse.y"
  970. {
  971. proxyprotocol->socks_v4 = 1;
  972. }
  973. break;
  974. case 34:
  975. #line 344 "config_parse.y"
  976. {
  977. proxyprotocol->socks_v5 = 1;
  978. }
  979. break;
  980. case 35:
  981. #line 347 "config_parse.y"
  982. {
  983. proxyprotocol->msproxy_v2 = 1;
  984. }
  985. break;
  986. case 39:
  987. #line 359 "config_parse.y"
  988. {
  989. #if SOCKS_SERVER
  990. #if !HAVE_LIBWRAP
  991. if (strcmp(yyvsp[0].string, method2string(AUTHMETHOD_RFC931)) == 0)
  992. yyerror("method rfc931 requires libwrap");
  993. #endif /* !HAVE_LIBWRAP */
  994. if (adduser(userbase, yyvsp[0].string) == NULL)
  995. yyerror(NOMEM);
  996. #endif /* SOCKS_SERVER */
  997. }
  998. break;
  999. case 43:
  1000. #line 378 "config_parse.y"
  1001. {
  1002. extension->bind = 1;
  1003. }
  1004. break;
  1005. case 46:
  1006. #line 388 "config_parse.y"
  1007. {
  1008. #if SOCKS_SERVER
  1009. if (config.state.init) {
  1010. int i;
  1011. for (i = 0; i < config.internalc; ++i)
  1012. if (config.internalv[i].addr.sin_addr.s_addr == ipaddr->s_addr
  1013. &&  config.internalv[i].addr.sin_port == *port_tcp)
  1014. break;
  1015. if (i == config.internalc)
  1016. swarnx("can not change internal addresses once running");
  1017. }
  1018. #endif /* SOCKS_SERVER */
  1019. }
  1020. break;
  1021. case 47:
  1022. #line 405 "config_parse.y"
  1023. {
  1024. #if SOCKS_SERVER
  1025. static struct ruleaddress_t mem;
  1026. struct servent *service;
  1027. addressinit(&mem);
  1028. if (!config.state.init) {
  1029. if ((config.internalv = (struct listenaddress_t *)
  1030. realloc(config.internalv, sizeof(*config.internalv) * ++config.internalc))
  1031. == NULL)
  1032. yyerror(NOMEM);
  1033. bzero(&config.internalv[config.internalc - 1].addr,
  1034. sizeof((*config.internalv).addr));
  1035. config.internalv[config.internalc - 1].addr.sin_family = AF_INET;
  1036. ipaddr = &config.internalv[config.internalc - 1].addr.sin_addr;
  1037. port_tcp = &config.internalv[config.internalc - 1].addr.sin_port;
  1038. }
  1039. else { /* can only set internal addresses once. */
  1040. static struct in_addr inaddrmem;
  1041. static in_port_t portmem;
  1042. ipaddr = &inaddrmem;
  1043. port_tcp = &portmem;
  1044. }
  1045. /* set default port. */
  1046. if ((service = getservbyname("socks", "tcp")) == NULL)
  1047. *port_tcp = htons(SOCKD_PORT);
  1048. else
  1049. *port_tcp = service->s_port;
  1050. #endif
  1051. }
  1052. break;
  1053. case 48:
  1054. #line 442 "config_parse.y"
  1055. {
  1056. #if SOCKS_SERVER
  1057. if (config.externalv[config.externalc - 1].sin_addr.s_addr
  1058. == htonl(INADDR_ANY))
  1059. yyerror("external address can't be a wildcard address");
  1060. #endif
  1061. }
  1062. break;
  1063. case 49:
  1064. #line 451 "config_parse.y"
  1065. {
  1066. #if SOCKS_SERVER
  1067. static struct ruleaddress_t mem;
  1068. if ((config.externalv = (struct sockaddr_in *)realloc(config.externalv,
  1069. sizeof(*config.externalv) * ++config.externalc)) == NULL)
  1070. yyerror(NOMEM);
  1071. bzero(&config.externalv[config.externalc - 1], sizeof(*config.externalv));
  1072. config.externalv[config.externalc - 1].sin_family = AF_INET;
  1073. addressinit(&mem);
  1074. ipaddr = &config.externalv[config.externalc - 1].sin_addr;
  1075. #endif
  1076. }
  1077. break;
  1078. case 54:
  1079. #line 477 "config_parse.y"
  1080. {
  1081. if (!config.state.init) {
  1082. const char *syslogname = "syslog";
  1083. if (strncmp(yyvsp[0].string, syslogname, strlen(syslogname)) == 0
  1084. && (yyvsp[0].string[strlen(syslogname)] == NUL || yyvsp[0].string[strlen(syslogname)] == '/')) {
  1085. char *sl;
  1086. config.log.type |= LOGTYPE_SYSLOG;
  1087. if (*(sl = &(yyvsp[0].string[strlen(syslogname)])) == '/') { /* facility. */
  1088. size_t i;
  1089. for (i = 0, ++sl; i < ELEMENTS(syslogfacility); ++i)
  1090. if (strcmp(sl, syslogfacility[i].name) == 0)
  1091. break;
  1092. if (i == ELEMENTS(syslogfacility))
  1093. serrx(EXIT_FAILURE, "unknown syslog facility "%s"", sl);
  1094. config.log.facility = syslogfacility[i].value;
  1095. }
  1096. else
  1097. config.log.facility = LOG_DAEMON; /* default. */
  1098. }
  1099. else {
  1100. config.log.type |= LOGTYPE_FILE;
  1101. if ((config.log.fpv = (FILE **)realloc(config.log.fpv,
  1102. sizeof(*config.log.fpv) * (config.log.fpc + 1))) == NULL
  1103. || (config.log.fplockv = (int *)realloc(config.log.fplockv,
  1104. sizeof(*config.log.fplockv) * (config.log.fpc + 1))) == NULL)
  1105. serrx(EXIT_FAILURE, NOMEM);
  1106. if ((config.log.fplockv[config.log.fpc]
  1107. = socks_mklock(SOCKS_LOCKFILE)) == -1)
  1108. serr(EXIT_FAILURE, "socks_mklock()");
  1109. if (strcmp(yyvsp[0].string, "stdout") == 0)
  1110. config.log.fpv[config.log.fpc] = stdout;
  1111. else if (strcmp(yyvsp[0].string, "stderr") == 0)
  1112. config.log.fpv[config.log.fpc] = stderr;
  1113. else {
  1114. int flag;
  1115. if ((config.log.fpv[config.log.fpc] = fopen(yyvsp[0].string, "a"))
  1116. == NULL)
  1117. serr(EXIT_FAILURE, "fopen(%s)", yyvsp[0].string);
  1118. if ((flag = fcntl(fileno(config.log.fpv[config.log.fpc]),
  1119. F_GETFD, 0)) == -1
  1120. ||  fcntl(fileno(config.log.fpv[config.log.fpc]), F_SETFD,
  1121. flag | FD_CLOEXEC) == -1)
  1122. serr(EXIT_FAILURE, "fcntl(F_GETFD/F_SETFD)");
  1123. }
  1124. ++config.log.fpc;
  1125. }
  1126. }
  1127. else
  1128. ; /* XXX warn/exit if output changed. */
  1129. }
  1130. break;
  1131. case 60:
  1132. #line 548 "config_parse.y"
  1133. {
  1134. #if SOCKS_SERVER
  1135. config.uid.privileged = yyvsp[0].uid;
  1136. config.uid.privileged_isset = 1;
  1137. #endif
  1138. }
  1139. break;
  1140. case 61:
  1141. #line 556 "config_parse.y"
  1142. {
  1143. #if SOCKS_SERVER
  1144. config.uid.unprivileged = yyvsp[0].uid;
  1145. config.uid.unprivileged_isset = 1;
  1146. #endif
  1147. }
  1148. break;
  1149. case 62:
  1150. #line 564 "config_parse.y"
  1151. {
  1152. #if HAVE_LIBWRAP && SOCKS_SERVER
  1153. config.uid.libwrap = yyvsp[0].uid;
  1154. config.uid.libwrap_isset = 1;
  1155. #else  /* HAVE_LIBWRAP */
  1156. yyerror("libwrap support not compiled in");
  1157. #endif /* !HAVE_LIBWRAP */
  1158. }
  1159. break;
  1160. case 63:
  1161. #line 575 "config_parse.y"
  1162. {
  1163. struct passwd *pw;
  1164. if ((pw = getpwnam(yyvsp[0].string)) == NULL)
  1165. serrx(EXIT_FAILURE, "no such user "%s"", yyvsp[0].string);
  1166. else
  1167. yyval.uid = pw->pw_uid;
  1168. }
  1169. break;
  1170. case 64:
  1171. #line 585 "config_parse.y"
  1172. {
  1173. #if SOCKS_SERVER
  1174. config.timeout.io = atol(yyvsp[0].string);
  1175. #endif
  1176. }
  1177. break;
  1178. case 65:
  1179. #line 592 "config_parse.y"
  1180. {
  1181. #if SOCKS_SERVER
  1182. config.timeout.negotiate = atol(yyvsp[0].string);
  1183. #endif
  1184. }
  1185. break;
  1186. case 66:
  1187. #line 599 "config_parse.y"
  1188. {
  1189. config.option.debug = atoi(yyvsp[0].string);
  1190. }
  1191. break;
  1192. case 68:
  1193. #line 607 "config_parse.y"
  1194. {
  1195. #if SOCKS_SERVER
  1196. config.compat.reuseaddr = 1;
  1197. }
  1198. break;
  1199. case 69:
  1200. #line 611 "config_parse.y"
  1201. {
  1202. config.compat.sameport = 1;
  1203. #endif
  1204. }
  1205. break;
  1206. case 73:
  1207. #line 624 "config_parse.y"
  1208. {
  1209. config.resolveprotocol = RESOLVEPROTOCOL_FAKE;
  1210. }
  1211. break;
  1212. case 74:
  1213. #line 627 "config_parse.y"
  1214. {
  1215. #if HAVE_NO_RESOLVESTUFF
  1216. yyerror("resolveprotocol keyword not supported on this installation");
  1217. #else /* HAVE_NO_RESOLVESTUFF */
  1218. config.resolveprotocol = RESOLVEPROTOCOL_TCP;
  1219. #endif /* !HAVE_NO_RESOLVESTUFF */
  1220. }
  1221. break;
  1222. case 75:
  1223. #line 634 "config_parse.y"
  1224. {
  1225. config.resolveprotocol = RESOLVEPROTOCOL_UDP;
  1226. }
  1227. break;
  1228. case 77:
  1229. #line 642 "config_parse.y"
  1230. {
  1231. #if HAVE_LIBWRAP && SOCKS_SERVER
  1232. config.srchost.nomismatch = 1;
  1233. }
  1234. break;
  1235. case 78:
  1236. #line 646 "config_parse.y"
  1237. {
  1238. config.srchost.nounknown = 1;
  1239. #else
  1240. yyerror("srchostoption requires libwrap");
  1241. #endif
  1242. }
  1243. break;
  1244. case 82:
  1245. #line 662 "config_parse.y"
  1246. {
  1247. ADDMETHOD(AUTHMETHOD_NONE);
  1248. }
  1249. break;
  1250. case 83:
  1251. #line 665 "config_parse.y"
  1252. {
  1253. yyerror("GSSAPI not supported");
  1254. }
  1255. break;
  1256. case 84:
  1257. #line 668 "config_parse.y"
  1258. {
  1259. ADDMETHOD(AUTHMETHOD_UNAME);
  1260. }
  1261. break;
  1262. case 85:
  1263. #line 671 "config_parse.y"
  1264. {
  1265. #if HAVE_LIBWRAP && SOCKS_SERVER
  1266. ADDMETHOD(AUTHMETHOD_RFC931);
  1267. #else /* !HAVE_LIBWRAP */
  1268. yyerror("method rfc931 requires libwrap");
  1269. #endif /* !HAVE_LIBWRAP */
  1270. }
  1271. break;
  1272. case 88:
  1273. #line 687 "config_parse.y"
  1274. {
  1275. #if SOCKS_SERVER
  1276. rule.src = src;
  1277. rule.dst = dst;
  1278. addclientrule(&rule);
  1279. bzero(&src, sizeof(src));
  1280. bzero(&dst, sizeof(dst));
  1281. rule = ruleinit;
  1282. src.atype = SOCKS_ADDR_IPV4;
  1283. dst.atype = SOCKS_ADDR_IPV4;
  1284. #endif
  1285. }
  1286. break;
  1287. case 92:
  1288. #line 709 "config_parse.y"
  1289. { yyval.string = NULL; }
  1290. break;
  1291. case 94:
  1292. #line 713 "config_parse.y"
  1293. {
  1294. #if SOCKS_SERVER
  1295. rule.src = src;
  1296. rule.dst = dst;
  1297. addsocksrule(&rule);
  1298. bzero(&src, sizeof(src));
  1299. bzero(&dst, sizeof(dst));
  1300. rule = ruleinit;
  1301. src.atype = SOCKS_ADDR_IPV4;
  1302. dst.atype = SOCKS_ADDR_IPV4;
  1303. #endif
  1304. }
  1305. break;
  1306. case 102:
  1307. #line 740 "config_parse.y"
  1308. { yyval.string = NULL; }
  1309. break;
  1310. case 104:
  1311. #line 744 "config_parse.y"
  1312. {
  1313. #if SOCKS_SERVER
  1314. rule.verdict = VERDICT_BLOCK;
  1315. command = &rule.state.command;
  1316. methodv = rule.state.methodv;
  1317. methodc = &rule.state.methodc;
  1318. protocol = &rule.state.protocol;
  1319. proxyprotocol = &rule.state.proxyprotocol;
  1320. userbase = &rule.user;
  1321. }
  1322. break;
  1323. case 105:
  1324. #line 754 "config_parse.y"
  1325. {
  1326. rule.verdict = VERDICT_PASS;
  1327. command = &rule.state.command;
  1328. methodv = rule.state.methodv;
  1329. methodc = &rule.state.methodc;
  1330. protocol = &rule.state.protocol;
  1331. proxyprotocol = &rule.state.proxyprotocol;
  1332. userbase = &rule.user;
  1333. #endif
  1334. }
  1335. break;
  1336. case 107:
  1337. #line 769 "config_parse.y"
  1338. {
  1339. command->bind = 1;
  1340. }
  1341. break;
  1342. case 108:
  1343. #line 772 "config_parse.y"
  1344. {
  1345. command->connect = 1;
  1346. }
  1347. break;
  1348. case 109:
  1349. #line 775 "config_parse.y"
  1350. {
  1351. command->udpassociate = 1;
  1352. }
  1353. break;
  1354. case 110:
  1355. #line 781 "config_parse.y"
  1356. {
  1357. command->bindreply = 1;
  1358. }
  1359. break;
  1360. case 111:
  1361. #line 785 "config_parse.y"
  1362. {
  1363. command->udpreply = 1;
  1364. }
  1365. break;
  1366. case 115:
  1367. #line 797 "config_parse.y"
  1368. {
  1369. protocol->tcp = 1;
  1370. }
  1371. break;
  1372. case 116:
  1373. #line 800 "config_parse.y"
  1374. {
  1375. protocol->udp = 1;
  1376. }
  1377. break;
  1378. case 121:
  1379. #line 816 "config_parse.y"
  1380. {
  1381. #if SOCKS_SERVER
  1382. rule.log.connect = 1;
  1383. }
  1384. break;
  1385. case 122:
  1386. #line 820 "config_parse.y"
  1387. {
  1388. rule.log.data = 1;
  1389. }
  1390. break;
  1391. case 123:
  1392. #line 823 "config_parse.y"
  1393. {
  1394. rule.log.disconnect = 1;
  1395. }
  1396. break;
  1397. case 124:
  1398. #line 826 "config_parse.y"
  1399. {
  1400. rule.log.error = 1;
  1401. }
  1402. break;
  1403. case 125:
  1404. #line 829 "config_parse.y"
  1405. {
  1406. rule.log.iooperation = 1;
  1407. #endif
  1408. }
  1409. break;
  1410. case 128:
  1411. #line 840 "config_parse.y"
  1412. {
  1413. #if HAVE_LIBWRAP && SOCKS_SERVER
  1414. struct request_info request;
  1415. char libwrap[LIBWRAPBUF];
  1416. if (strlen(yyvsp[0].string) >= sizeof(rule.libwrap))
  1417. yyerror("libwrap line too long, make LIBWRAPBUF bigger");
  1418. strcpy(rule.libwrap, yyvsp[0].string);
  1419. /* libwrap modifies the passed buffer. */
  1420. SASSERTX(strlen(rule.libwrap) < sizeof(libwrap));
  1421. strcpy(libwrap, rule.libwrap);
  1422. ++dry_run;
  1423. request_init(&request, RQ_FILE, -1, RQ_DAEMON, __progname, 0);
  1424. if (setjmp(tcpd_buf) != 0)
  1425. yyerror("bad libwrap line");
  1426. process_options(libwrap, &request);
  1427. --dry_run;
  1428. #else /* !HAVE_LIBWRAP */
  1429. yyerror("libwrap support not compiled in");
  1430. #endif
  1431. }
  1432. break;
  1433. case 137:
  1434. #line 885 "config_parse.y"
  1435. { yyval.string = NULL; }
  1436. break;
  1437. case 139:
  1438. #line 889 "config_parse.y"
  1439. {
  1440. addressinit(&src);
  1441. }
  1442. break;
  1443. case 140:
  1444. #line 895 "config_parse.y"
  1445. {
  1446. addressinit(&dst);
  1447. }
  1448. break;
  1449. case 141:
  1450. #line 901 "config_parse.y"
  1451. {
  1452. #if SOCKS_CLIENT
  1453. addressinit(&gw);
  1454. #endif
  1455. }
  1456. break;
  1457. case 147:
  1458. #line 920 "config_parse.y"
  1459. {
  1460. *atype = SOCKS_ADDR_IPV4;
  1461. if (inet_aton(yyvsp[0].string, ipaddr) != 1)
  1462. yyerror("bad address");
  1463. }
  1464. break;
  1465. case 148:
  1466. #line 929 "config_parse.y"
  1467. {
  1468. if (atoi(yyvsp[0].string) < 0 || atoi(yyvsp[0].string) > 32)
  1469. yyerror("bad netmask");
  1470. netmask->s_addr
  1471. = atoi(yyvsp[0].string) == 0 ? 0 : htonl(0xffffffff << (32 - atoi(yyvsp[0].string)));
  1472. }
  1473. break;
  1474. case 149:
  1475. #line 936 "config_parse.y"
  1476. {
  1477. if (!inet_aton(yyvsp[0].string, netmask))
  1478. yyerror("bad netmask");
  1479. }
  1480. break;
  1481. case 150:
  1482. #line 942 "config_parse.y"
  1483. {
  1484. *atype = SOCKS_ADDR_DOMAIN;
  1485. if (strlen(yyvsp[0].string) >= MAXHOSTNAMELEN)
  1486. yyerror("domain too long");
  1487. strcpy(domain, yyvsp[0].string);
  1488. }
  1489. break;
  1490. case 151:
  1491. #line 951 "config_parse.y"
  1492. {
  1493. *atype = SOCKS_ADDR_DOMAIN;
  1494. if (strlen(yyvsp[0].string) >= MAXHOSTNAMELEN)
  1495. yyerror("domain too long");
  1496. strcpy(domain, yyvsp[0].string);
  1497. #if SOCKS_CLIENT
  1498. route.state.direct = 1;
  1499. #endif
  1500. }
  1501. break;
  1502. case 152:
  1503. #line 964 "config_parse.y"
  1504. { yyval.string = NULL; }
  1505. break;
  1506. case 158:
  1507. #line 977 "config_parse.y"
  1508. {
  1509. *port_tcp = htons((in_port_t)atoi(yyvsp[0].string));
  1510. *port_udp = htons((in_port_t)atoi(yyvsp[0].string));
  1511. }
  1512. break;
  1513. case 159:
  1514. #line 983 "config_parse.y"
  1515. {
  1516. struct servent *service;
  1517. struct protocol_t protocolunset;
  1518. int set;
  1519. bzero(&protocolunset, sizeof(protocolunset));
  1520. /* set all protocols if none set, default. */
  1521. if (memcmp(protocol, &protocolunset, sizeof(*protocol)) == 0) {
  1522. memset(protocol, UCHAR_MAX, sizeof(*protocol));
  1523. set = 0;
  1524. }
  1525. else
  1526. set = 1;
  1527. if (protocol->tcp) {
  1528. if ((service = getservbyname(yyvsp[0].string, "tcp")) == NULL) {
  1529. if (set)
  1530. yyerror("bad servicename for tcp");
  1531. else
  1532. *port_tcp = htons(0);
  1533. }
  1534. else
  1535. *port_tcp = (in_port_t)service->s_port;
  1536. }
  1537. if (protocol->udp) {
  1538. if ((service = getservbyname(yyvsp[0].string, "udp")) == NULL) {
  1539. if (set)
  1540. yyerror("bad servicename for udp");
  1541. else
  1542. *port_udp = htons(0);
  1543. }
  1544. else
  1545. *port_udp = (in_port_t)service->s_port;
  1546. }
  1547. /* check we got both protocol ports set right. */
  1548. if (*port_tcp == htons(0) && *port_udp == htons(0))
  1549. yyerror("bad service name for tcp/udp");
  1550. if (*port_tcp == htons(0))
  1551. *port_tcp = *port_udp;
  1552. else if (*port_udp == htons(0))
  1553. *port_udp = *port_tcp;
  1554. }
  1555. break;
  1556. case 160:
  1557. #line 1031 "config_parse.y"
  1558. {
  1559. ruleaddress->portend = htons((in_port_t)atoi(yyvsp[0].string));
  1560. ruleaddress->operator = range;
  1561. }
  1562. break;
  1563. case 161:
  1564. #line 1037 "config_parse.y"
  1565. {
  1566. *operator = string2operator(yyvsp[0].string);
  1567. }
  1568. break;
  1569. #line 1660 "y.tab.c"
  1570.     }
  1571.     yyssp -= yym;
  1572.     yystate = *yyssp;
  1573.     yyvsp -= yym;
  1574.     yym = yylhs[yyn];
  1575.     if (yystate == 0 && yym == 0)
  1576.     {
  1577. #if YYDEBUG
  1578.         if (yydebug)
  1579.             printf("%sdebug: after reduction, shifting from state 0 to
  1580.  state %dn", YYPREFIX, YYFINAL);
  1581. #endif
  1582.         yystate = YYFINAL;
  1583.         *++yyssp = YYFINAL;
  1584.         *++yyvsp = yyval;
  1585.         if (yychar < 0)
  1586.         {
  1587.             if ((yychar = yylex()) < 0) yychar = 0;
  1588. #if YYDEBUG
  1589.             if (yydebug)
  1590.             {
  1591.                 yys = 0;
  1592.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1593.                 if (!yys) yys = "illegal-symbol";
  1594.                 printf("%sdebug: state %d, reading %d (%s)n",
  1595.                         YYPREFIX, YYFINAL, yychar, yys);
  1596.             }
  1597. #endif
  1598.         }
  1599.         if (yychar == 0) goto yyaccept;
  1600.         goto yyloop;
  1601.     }
  1602.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  1603.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  1604.         yystate = yytable[yyn];
  1605.     else
  1606.         yystate = yydgoto[yym];
  1607. #if YYDEBUG
  1608.     if (yydebug)
  1609.         printf("%sdebug: after reduction, shifting from state %d 
  1610. to state %dn", YYPREFIX, *yyssp, yystate);
  1611. #endif
  1612.     if (yyssp >= yysslim && yygrowstack())
  1613.     {
  1614.         goto yyoverflow;
  1615.     }
  1616.     *++yyssp = yystate;
  1617.     *++yyvsp = yyval;
  1618.     goto yyloop;
  1619. yyoverflow:
  1620.     yyerror("yacc stack overflow");
  1621. yyabort:
  1622.     return (1);
  1623. yyaccept:
  1624.     return (0);
  1625. }