~ubuntu-branches/ubuntu/karmic/dante/karmic

« back to all changes in this revision

Viewing changes to dlib/config_parse.c

  • Committer: Bazaar Package Importer
  • Author(s): Thijs Kinkhorst
  • Date: 2006-10-19 12:09:39 UTC
  • mfrom: (3.1.1 dapper)
  • Revision ID: james.westby@ubuntu.com-20061019120939-t818x24e2tn8be5k
Tags: 1.1.18-2.1
* Non-maintainer upload for RC bug.
* Make sure changelogs are installed into all packages (Closes: #393568).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#ifndef lint
2
2
/*static char yysccsid[] = "from: @(#)yaccpar   1.9 (Berkeley) 02/21/93";*/
3
3
static char yyrcsid[]
4
 
#if __GNUC__ == 2
 
4
#if __GNUC__ >= 2
5
5
  __attribute__ ((unused))
6
 
#endif /* __GNUC__ == 2 */
7
 
  = "$OpenBSD: skeleton.c,v 1.18 2001/11/19 19:02:18 mpech Exp $";
 
6
#endif /* __GNUC__ >= 2 */
 
7
  = "$OpenBSD: skeleton.c,v 1.23 2004/03/12 13:39:50 henning Exp $";
8
8
#endif
9
9
#include <stdlib.h>
10
10
#define YYBYACC 1
42
42
#define yyname socks_yyname
43
43
#define yyrule socks_yyrule
44
44
#define YYPREFIX "socks_yy"
45
 
#line 45 "config_parse.y"
 
45
#line 45 "../lib/config_parse.y"
46
46
 
47
47
#include "common.h"
48
48
 
49
49
#include "yacconfig.h"
50
50
 
51
51
static const char rcsid[] =
52
 
"$Id: config_parse.y,v 1.183 2002/05/01 12:35:14 michaels Exp $";
 
52
"$Id: config_parse.y,v 1.191 2005/06/10 11:14:48 michaels Exp $";
53
53
 
54
54
__BEGIN_DECLS
55
55
 
63
63
#if SOCKS_SERVER
64
64
static void
65
65
ruleinit __P((struct rule_t *rule));
 
66
 
 
67
static void
 
68
fixconfig __P((void));
 
69
 
66
70
#endif
67
71
 
68
72
__END_DECLS
157
161
                        yywarn("duplicate method: %s", method2string(method)); \
158
162
                else { \
159
163
                        if (*methodc >= MAXMETHOD)      \
160
 
                                yyerror("internal error");      \
 
164
                                yyerror("internal error, (%d >= %d)", *methodc, MAXMETHOD);     \
161
165
                        methodv[(*methodc)++] = method; \
162
166
                } \
163
167
        } while (0)
164
168
 
165
 
#line 166 "config_parse.y"
 
169
#line 170 "../lib/config_parse.y"
 
170
#ifndef YYSTYPE_DEFINED
 
171
#define YYSTYPE_DEFINED
166
172
typedef union {
167
173
        char    *string;
168
174
        uid_t   uid;
169
175
} YYSTYPE;
170
 
#line 171 "y.tab.c"
 
176
#endif /* YYSTYPE_DEFINED */
 
177
#line 178 "config_parse.c"
171
178
#define SERVERCONFIG 257
172
179
#define CLIENTCONFIG 258
173
180
#define DEPRECATED 259
201
208
#define USER_LIBWRAP 287
202
209
#define LOGOUTPUT 288
203
210
#define LOGFILE 289
204
 
#define CHILD_MAXIDLENUMBER 290
 
211
#define CHILD_MAXIDLE 290
205
212
#define ROUTE 291
206
213
#define VIA 292
207
214
#define VERDICT_BLOCK 293
246
253
#define REDIRECT 332
247
254
#define BANDWIDTH 333
248
255
#define YYERRCODE 256
249
 
short socks_yylhs[] = {                                        -1,
 
256
#if defined(__cplusplus) || defined(__STDC__)
 
257
const short socks_yylhs[] =
 
258
#else
 
259
short socks_yylhs[] =
 
260
#endif
 
261
        {                                        -1,
250
262
    0,    0,   51,    1,    1,    1,    1,    1,    2,    2,
251
263
    2,    2,   25,   26,   26,   52,   52,   52,   52,   52,
252
264
   52,   52,   52,   52,   52,   50,   50,   50,   50,   50,
268
280
   86,   90,   90,   90,   94,   94,   91,   92,  102,   95,
269
281
   93,
270
282
};
271
 
short socks_yylen[] = {                                         2,
 
283
#if defined(__cplusplus) || defined(__STDC__)
 
284
const short socks_yylen[] =
 
285
#else
 
286
short socks_yylen[] =
 
287
#endif
 
288
        {                                         2,
272
289
    2,    2,    1,    0,    2,    2,    2,    2,    0,    2,
273
290
    2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
274
291
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
290
307
    1,    0,    3,    2,    1,    1,    3,    1,    1,    1,
291
308
    1,
292
309
};
293
 
short socks_yydefred[] = {                                      0,
 
310
#if defined(__cplusplus) || defined(__STDC__)
 
311
const short socks_yydefred[] =
 
312
#else
 
313
short socks_yydefred[] =
 
314
#endif
 
315
        {                                      0,
294
316
    3,   13,    0,    9,    4,    0,    0,   32,    0,    0,
295
317
    0,   34,   10,   15,   58,   11,   14,   57,   56,   12,
296
318
    0,   51,   53,    0,    0,    0,    0,    0,    0,    0,
321
343
  172,  148,  181,    0,  151,    0,  175,   33,  189,  187,
322
344
  178,  177,    0,  173,  174,  170,
323
345
};
324
 
short socks_yydgoto[] = {                                       3,
 
346
#if defined(__cplusplus) || defined(__STDC__)
 
347
const short socks_yydgoto[] =
 
348
#else
 
349
short socks_yydgoto[] =
 
350
#endif
 
351
        {                                       3,
325
352
    7,    6,   14,  126,  205,  206,  127,  211,  212,  128,
326
353
  214,  215,  129,   15,   86,   41,   98,   99,  130,  221,
327
354
  222,  131,  132,   65,    4,   16,   17,   18,   42,   43,
334
361
  245,  246,  247,  267,  268,  105,  106,  182,  183,  184,
335
362
  185,  280,
336
363
};
337
 
short socks_yysindex[] = {                                   -152,
 
364
#if defined(__cplusplus) || defined(__STDC__)
 
365
const short socks_yysindex[] =
 
366
#else
 
367
short socks_yysindex[] =
 
368
#endif
 
369
        {                                   -152,
338
370
    0,    0,    0,    0,    0,  -10,  255,    0,  -29,  -26,
339
371
  -18,    0,    0,    0,    0,    0,    0,    0,    0,    0,
340
372
 -186,    0,    0,   -8,   -1,    3,    8,   18,   20,   43,
363
395
    0,    0,    0,  152, -161, -161,    0,    0, -254,    0,
364
396
 -277,   77,    0, -124,    0,    0,    0,    0, -295,    0,
365
397
    0,    0,    0, -161,    0, -161,    0,    0,    0,    0,
366
 
    0,    0, -161,    0,    0,    0,
367
 
};
368
 
short socks_yyrindex[] = {                                      0,
 
398
    0,    0, -161,    0,    0,    0,};
 
399
#if defined(__cplusplus) || defined(__STDC__)
 
400
const short socks_yyrindex[] =
 
401
#else
 
402
short socks_yyrindex[] =
 
403
#endif
 
404
        {                                      0,
369
405
    0,    0,    0,    0,    0,  204,  205,    0,    0,    0,
370
406
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
371
407
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
394
430
    0,    0,    0,    0, -120, -120,    0,    0,    0,    0,
395
431
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
396
432
    0,    0,    0, -119,    0, -119,    0,    0,    0,    0,
397
 
    0,    0, -120,    0,    0,    0,
398
 
};
399
 
short socks_yygindex[] = {                                      0,
 
433
    0,    0, -120,    0,    0,    0,};
 
434
#if defined(__cplusplus) || defined(__STDC__)
 
435
const short socks_yygindex[] =
 
436
#else
 
437
short socks_yygindex[] =
 
438
#endif
 
439
        {                                      0,
400
440
    0,    0,  199,  -78,   17,    0,  -75,    0,    9,    0,
401
441
    0,   13,    0,  218,    0,    0,    0,  130,  -73,   12,
402
442
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
410
450
    0,    0,
411
451
};
412
452
#define YYTABLESIZE 661
413
 
short socks_yytable[] = {                                      13,
 
453
#if defined(__cplusplus) || defined(__STDC__)
 
454
const short socks_yytable[] =
 
455
#else
 
456
short socks_yytable[] =
 
457
#endif
 
458
        {                                      13,
414
459
   98,  111,  157,  102,  182,  182,  192,  194,  154,  158,
415
460
   98,  140,  155,  159,  141,  170,  142,  116,  144,  187,
416
461
  149,  116,  198,  199,  257,   94,  281,   26,   62,  243,
479
524
    0,    0,    0,    0,    0,    0,    0,  143,    0,  143,
480
525
  143,
481
526
};
482
 
short socks_yycheck[] = {                                      10,
 
527
#if defined(__cplusplus) || defined(__STDC__)
 
528
const short socks_yycheck[] =
 
529
#else
 
530
short socks_yycheck[] =
 
531
#endif
 
532
        {                                      10,
483
533
    0,  125,  125,  125,  125,  125,  145,  147,   92,   93,
484
534
   10,   90,   92,   93,   90,  106,   90,  274,   90,  134,
485
535
   91,  274,  155,  156,  232,  276,  322,  269,   58,  315,
554
604
#endif
555
605
#define YYMAXTOKEN 333
556
606
#if YYDEBUG
557
 
#if defined(__cplusplus) || __STDC__
 
607
#if defined(__cplusplus) || defined(__STDC__)
558
608
const char * const socks_yyname[] =
559
609
#else
560
610
char *socks_yyname[] =
572
622
"NOUNKNOWN","EXTENSION","BIND","PRIVILEGED","IOTIMEOUT","CONNECTTIMEOUT",
573
623
"METHOD","CLIENTMETHOD","NONE","GSSAPI","UNAME","RFC931","PAM","COMPATIBILITY",
574
624
"REUSEADDR","SAMEPORT","USERNAME","USER_PRIVILEGED","USER_UNPRIVILEGED",
575
 
"USER_LIBWRAP","LOGOUTPUT","LOGFILE","CHILD_MAXIDLENUMBER","ROUTE","VIA",
 
625
"USER_LIBWRAP","LOGOUTPUT","LOGFILE","CHILD_MAXIDLE","ROUTE","VIA",
576
626
"VERDICT_BLOCK","VERDICT_PASS","PAMSERVICENAME","PROTOCOL","PROTOCOL_TCP",
577
627
"PROTOCOL_UDP","PROTOCOL_FAKE","PROXYPROTOCOL","PROXYPROTOCOL_SOCKS_V4",
578
628
"PROXYPROTOCOL_SOCKS_V5","PROXYPROTOCOL_MSPROXY_V2","PROXYPROTOCOL_HTTP_V1_0",
582
632
"LOG_IOOPERATION","IPADDRESS","DOMAINNAME","DIRECT","IFNAME","PORT",
583
633
"PORTNUMBER","SERVICENAME","NUMBER","FROM","TO","REDIRECT","BANDWIDTH",
584
634
};
585
 
#if defined(__cplusplus) || __STDC__
 
635
#if defined(__cplusplus) || defined(__STDC__)
586
636
const char * const socks_yyrule[] =
587
637
#else
588
638
char *socks_yyrule[] =
650
700
"logoutputdevice : LOGFILE",
651
701
"logoutputdevices : logoutputdevice",
652
702
"logoutputdevices : logoutputdevice logoutputdevices",
653
 
"childstate : CHILD_MAXIDLENUMBER ':' NUMBER",
 
703
"childstate : CHILD_MAXIDLE ':' NUMBER",
654
704
"userids : user_privileged",
655
705
"userids : user_unprivileged",
656
706
"userids : user_libwrap",
805
855
short *yysslim;
806
856
YYSTYPE *yyvs;
807
857
int yystacksize;
808
 
#line 1176 "config_parse.y"
 
858
#line 1179 "../lib/config_parse.y"
809
859
 
810
860
#define INTERACTIVE             0
811
861
 
818
868
        const char *filename;
819
869
{
820
870
        const char *function = "readconfig()";
821
 
        const int errno_s = errno;
822
871
 
823
872
/*      yydebug                         = 1;          */
824
873
        yylineno                                = 1;
829
878
                return -1;
830
879
        }
831
880
 
 
881
        errno = 0;      /* don't report old errors in yyparse(). */
832
882
        yyparse();
833
883
        fclose(yyin);
834
884
 
835
 
        errno = errno_s; /* some buggy yacc's alter errno sometimes. */
 
885
#if SOCKS_SERVER
 
886
        fixconfig();
 
887
#endif /* SOCKS_SERVER */
 
888
 
 
889
        errno = 0;
836
890
 
837
891
        return 0;
838
892
}
948
1002
 
949
1003
        dst = rdr_from = rdr_to = src;
950
1004
}
951
 
#endif
952
 
#line 944 "y.tab.c"
 
1005
 
 
1006
static void
 
1007
fixconfig(void)
 
1008
{
 
1009
        const char *function = "fixsettings()";
 
1010
        int i;
 
1011
        uid_t euid;
 
1012
 
 
1013
        /*
 
1014
         * Check arguments and settings, do they make sense?
 
1015
         */
 
1016
 
 
1017
        if (sockscf.clientmethodc == 0)
 
1018
                sockscf.clientmethodv[sockscf.clientmethodc++] = AUTHMETHOD_NONE;
 
1019
 
 
1020
#if !HAVE_DUMPCONF
 
1021
        if (!sockscf.uid.privileged_isset)
 
1022
                sockscf.uid.privileged = sockscf.state.euid;
 
1023
        else {
 
1024
                socks_seteuid(&euid, sockscf.uid.privileged);
 
1025
                socks_reseteuid(sockscf.uid.privileged, euid);
 
1026
        }
 
1027
 
 
1028
        if (!sockscf.uid.unprivileged_isset)
 
1029
                sockscf.uid.unprivileged = sockscf.state.euid;
 
1030
        else {
 
1031
                socks_seteuid(&euid, sockscf.uid.unprivileged);
 
1032
                socks_reseteuid(sockscf.uid.unprivileged, euid);
 
1033
        }
 
1034
 
 
1035
#if HAVE_LIBWRAP
 
1036
        if (!sockscf.uid.libwrap_isset)
 
1037
                sockscf.uid.libwrap = sockscf.state.euid;
 
1038
        else {
 
1039
                socks_seteuid(&euid, sockscf.uid.libwrap);
 
1040
                socks_reseteuid(sockscf.uid.libwrap, euid);
 
1041
        }
 
1042
#endif /* HAVE_LIBWRAP */
 
1043
#endif /* !HAVE_DUMPCONF */
 
1044
 
 
1045
        if (sockscf.internalc == 0)
 
1046
                serrx(EXIT_FAILURE, "%s: no internal address given", function);
 
1047
        /* values will be used once and checked there. */
 
1048
 
 
1049
        if (sockscf.external.addrc == 0)
 
1050
                serrx(EXIT_FAILURE, "%s: no external address given", function);
 
1051
#if !HAVE_DUMPCONF
 
1052
        for (i = 0; i < sockscf.external.addrc; ++i)
 
1053
                if (!addressisbindable(&sockscf.external.addrv[i]))
 
1054
                        serrx(EXIT_FAILURE, NULL);
 
1055
#endif /* !HAVE_DUMPCONF */
 
1056
 
 
1057
#if !HAVE_DUMPCONF 
 
1058
        if (sockscf.methodc == 0)
 
1059
                swarnx("%s: no methods enabled (total block)", function);
 
1060
 
 
1061
        if (sockscf.uid.unprivileged == 0)
 
1062
                swarnx("%s: setting the unprivileged uid to %d is not recommended",
 
1063
                function, sockscf.uid.unprivileged);
 
1064
 
 
1065
#if HAVE_LIBWRAP
 
1066
        if (sockscf.uid.libwrap == 0)
 
1067
                swarnx("%s: setting the libwrap uid to %d is not recommended",
 
1068
                function, sockscf.uid.libwrap);
 
1069
#endif /* HAVE_LIBWRAP */
 
1070
#endif /* !HAVE_DUMPCONF */
 
1071
}
 
1072
 
 
1073
#endif /* SOCKS_SERVER */
 
1074
#line 1023 "config_parse.c"
953
1075
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
954
 
#if defined(__cplusplus) || __STDC__
 
1076
#if defined(__cplusplus) || defined(__STDC__)
955
1077
static int yygrowstack(void)
956
1078
#else
957
1079
static int yygrowstack()
999
1121
#define YYACCEPT goto yyaccept
1000
1122
#define YYERROR goto yyerrlab
1001
1123
int
1002
 
#if defined(__cplusplus) || __STDC__
 
1124
#if defined(__cplusplus) || defined(__STDC__)
1003
1125
yyparse(void)
1004
1126
#else
1005
1127
yyparse()
1007
1129
{
1008
1130
    int yym, yyn, yystate;
1009
1131
#if YYDEBUG
1010
 
#if defined(__cplusplus) || __STDC__
 
1132
#if defined(__cplusplus) || defined(__STDC__)
1011
1133
    const char *yys;
1012
 
#else /* !(defined(__cplusplus) || __STDC__) */
 
1134
#else /* !(defined(__cplusplus) || defined(__STDC__)) */
1013
1135
    char *yys;
1014
 
#endif /* !(defined(__cplusplus) || __STDC__) */
 
1136
#endif /* !(defined(__cplusplus) || defined(__STDC__)) */
1015
1137
 
1016
1138
    if ((yys = getenv("YYDEBUG")))
1017
1139
    {
1143
1265
    switch (yyn)
1144
1266
    {
1145
1267
case 3:
1146
 
#line 272 "config_parse.y"
 
1268
#line 276 "../lib/config_parse.y"
1147
1269
{
1148
1270
#if SOCKS_SERVER
1149
1271
                protocol                        = &protocolmem;
1152
1274
        }
1153
1275
break;
1154
1276
case 4:
1155
 
#line 281 "config_parse.y"
 
1277
#line 285 "../lib/config_parse.y"
1156
1278
{ yyval.string = NULL; }
1157
1279
break;
1158
1280
case 9:
1159
 
#line 288 "config_parse.y"
 
1281
#line 292 "../lib/config_parse.y"
1160
1282
{ yyval.string = NULL; }
1161
1283
break;
1162
1284
case 13:
1163
 
#line 295 "config_parse.y"
 
1285
#line 299 "../lib/config_parse.y"
1164
1286
{
1165
1287
        }
1166
1288
break;
1167
1289
case 32:
1168
 
#line 324 "config_parse.y"
 
1290
#line 328 "../lib/config_parse.y"
1169
1291
{
1170
1292
                yywarn("given keyword is deprecated");
1171
1293
        }
1172
1294
break;
1173
1295
case 33:
1174
 
#line 328 "config_parse.y"
 
1296
#line 332 "../lib/config_parse.y"
1175
1297
{
1176
1298
#if SOCKS_CLIENT
1177
1299
                route.src               = src;
1184
1306
        }
1185
1307
break;
1186
1308
case 34:
1187
 
#line 340 "config_parse.y"
 
1309
#line 344 "../lib/config_parse.y"
1188
1310
{
1189
1311
#if SOCKS_CLIENT
1190
1312
                command                 = &state.command;
1205
1327
        }
1206
1328
break;
1207
1329
case 36:
1208
 
#line 364 "config_parse.y"
 
1330
#line 368 "../lib/config_parse.y"
1209
1331
{
1210
1332
                        proxyprotocol->socks_v4         = 1;
1211
1333
        }
1212
1334
break;
1213
1335
case 37:
1214
 
#line 367 "config_parse.y"
 
1336
#line 371 "../lib/config_parse.y"
1215
1337
{
1216
1338
                        proxyprotocol->socks_v5         = 1;
1217
1339
        }
1218
1340
break;
1219
1341
case 38:
1220
 
#line 370 "config_parse.y"
 
1342
#line 374 "../lib/config_parse.y"
1221
1343
{
1222
1344
                        proxyprotocol->msproxy_v2       = 1;
1223
1345
        }
1224
1346
break;
1225
1347
case 39:
1226
 
#line 373 "config_parse.y"
 
1348
#line 377 "../lib/config_parse.y"
1227
1349
{
1228
1350
                        proxyprotocol->http_v1_0        = 1;
1229
1351
        }
1230
1352
break;
1231
1353
case 43:
1232
 
#line 385 "config_parse.y"
 
1354
#line 389 "../lib/config_parse.y"
1233
1355
{
1234
1356
#if SOCKS_SERVER
1235
1357
#if !HAVE_LIBWRAP
1242
1364
        }
1243
1365
break;
1244
1366
case 47:
1245
 
#line 404 "config_parse.y"
 
1367
#line 408 "../lib/config_parse.y"
1246
1368
{
1247
1369
                        extension->bind = 1;
1248
1370
        }
1249
1371
break;
1250
1372
case 50:
1251
 
#line 414 "config_parse.y"
 
1373
#line 418 "../lib/config_parse.y"
1252
1374
{
1253
1375
#if SOCKS_SERVER
1254
1376
                addinternal(ruleaddress);
1256
1378
        }
1257
1379
break;
1258
1380
case 51:
1259
 
#line 421 "config_parse.y"
 
1381
#line 425 "../lib/config_parse.y"
1260
1382
{
1261
1383
#if SOCKS_SERVER
1262
1384
        static struct ruleaddress_t mem;
1273
1395
        }
1274
1396
break;
1275
1397
case 52:
1276
 
#line 437 "config_parse.y"
 
1398
#line 441 "../lib/config_parse.y"
1277
1399
{
1278
1400
#if SOCKS_SERVER
1279
1401
                addexternal(ruleaddress);
1281
1403
        }
1282
1404
break;
1283
1405
case 53:
1284
 
#line 444 "config_parse.y"
 
1406
#line 448 "../lib/config_parse.y"
1285
1407
{
1286
1408
#if SOCKS_SERVER
1287
1409
                static struct ruleaddress_t mem;
1291
1413
        }
1292
1414
break;
1293
1415
case 54:
1294
 
#line 453 "config_parse.y"
 
1416
#line 457 "../lib/config_parse.y"
1295
1417
{
1296
1418
#if SOCKS_SERVER
1297
1419
                sockscf.external.rotation = ROTATION_NONE;
1298
1420
        }
1299
1421
break;
1300
1422
case 55:
1301
 
#line 457 "config_parse.y"
 
1423
#line 461 "../lib/config_parse.y"
1302
1424
{
1303
1425
#if !HAVE_ROUTE_SOURCE
1304
1426
                yyerror("don't have code to discover route/address source on platform");
1309
1431
        }
1310
1432
break;
1311
1433
case 60:
1312
 
#line 475 "config_parse.y"
 
1434
#line 479 "../lib/config_parse.y"
1313
1435
{
1314
1436
                const char *syslogname = "syslog";
1315
1437
 
1405
1527
        }
1406
1528
break;
1407
1529
case 63:
1408
 
#line 575 "config_parse.y"
 
1530
#line 579 "../lib/config_parse.y"
1409
1531
{
1410
1532
#if SOCKS_SERVER
1411
1533
                if (atoi(yyvsp[0].string) < SOCKD_FREESLOTS)
1412
 
                        yyerror("child.maxidlenumber can't be less than SOCKD_FREESLOTS (%d)",
1413
 
                        SOCKD_FREESLOTS);
1414
 
 
1415
 
                sockscf.child.maxidlenumber = atoi(yyvsp[0].string);
 
1534
                        yyerror("%s (%s) can't be less than SOCKD_FREESLOTS (%d)",
 
1535
                        yyvsp[-2].string, yyvsp[0].string, SOCKD_FREESLOTS);
 
1536
                sockscf.child.maxidle = atoi(yyvsp[0].string);
1416
1537
#endif
1417
1538
        }
1418
1539
break;
1419
1540
case 67:
1420
 
#line 592 "config_parse.y"
 
1541
#line 595 "../lib/config_parse.y"
1421
1542
{
1422
1543
#if SOCKS_SERVER
1423
1544
                sockscf.uid.privileged                  = yyvsp[0].uid;
1426
1547
        }
1427
1548
break;
1428
1549
case 68:
1429
 
#line 600 "config_parse.y"
 
1550
#line 603 "../lib/config_parse.y"
1430
1551
{
1431
1552
#if SOCKS_SERVER
1432
1553
                sockscf.uid.unprivileged                        = yyvsp[0].uid;
1435
1556
        }
1436
1557
break;
1437
1558
case 69:
1438
 
#line 608 "config_parse.y"
 
1559
#line 611 "../lib/config_parse.y"
1439
1560
{
1440
1561
#if HAVE_LIBWRAP && SOCKS_SERVER
1441
1562
                sockscf.uid.libwrap                     = yyvsp[0].uid;
1446
1567
        }
1447
1568
break;
1448
1569
case 70:
1449
 
#line 619 "config_parse.y"
 
1570
#line 622 "../lib/config_parse.y"
1450
1571
{
1451
1572
                struct passwd *pw;
1452
1573
 
1457
1578
        }
1458
1579
break;
1459
1580
case 71:
1460
 
#line 629 "config_parse.y"
 
1581
#line 632 "../lib/config_parse.y"
1461
1582
{
1462
1583
#if SOCKS_SERVER
1463
1584
                sockscf.timeout.io = (time_t)atol(yyvsp[0].string);
1465
1586
        }
1466
1587
break;
1467
1588
case 72:
1468
 
#line 636 "config_parse.y"
 
1589
#line 639 "../lib/config_parse.y"
1469
1590
{
1470
1591
#if SOCKS_SERVER
1471
1592
                sockscf.timeout.negotiate = (time_t)atol(yyvsp[0].string);
1473
1594
        }
1474
1595
break;
1475
1596
case 73:
1476
 
#line 643 "config_parse.y"
 
1597
#line 646 "../lib/config_parse.y"
1477
1598
{
1478
1599
                sockscf.option.debug = atoi(yyvsp[0].string);
1479
1600
        }
1480
1601
break;
1481
1602
case 75:
1482
 
#line 651 "config_parse.y"
 
1603
#line 654 "../lib/config_parse.y"
1483
1604
{
1484
1605
#if SOCKS_SERVER
1485
1606
                sockscf.compat.reuseaddr = 1;
1486
1607
        }
1487
1608
break;
1488
1609
case 76:
1489
 
#line 655 "config_parse.y"
 
1610
#line 658 "../lib/config_parse.y"
1490
1611
{
1491
1612
                sockscf.compat.sameport = 1;
1492
1613
#endif
1493
1614
        }
1494
1615
break;
1495
1616
case 80:
1496
 
#line 668 "config_parse.y"
 
1617
#line 671 "../lib/config_parse.y"
1497
1618
{
1498
1619
                        sockscf.resolveprotocol = RESOLVEPROTOCOL_FAKE;
1499
1620
        }
1500
1621
break;
1501
1622
case 81:
1502
 
#line 671 "config_parse.y"
 
1623
#line 674 "../lib/config_parse.y"
1503
1624
{
1504
1625
#if HAVE_NO_RESOLVESTUFF
1505
1626
                        yyerror("resolveprotocol keyword not supported on this installation");
1509
1630
        }
1510
1631
break;
1511
1632
case 82:
1512
 
#line 678 "config_parse.y"
 
1633
#line 681 "../lib/config_parse.y"
1513
1634
{
1514
1635
                        sockscf.resolveprotocol = RESOLVEPROTOCOL_UDP;
1515
1636
        }
1516
1637
break;
1517
1638
case 84:
1518
 
#line 686 "config_parse.y"
 
1639
#line 689 "../lib/config_parse.y"
1519
1640
{
1520
1641
#if HAVE_LIBWRAP && SOCKS_SERVER
1521
1642
                        sockscf.srchost.nomismatch = 1;
1522
1643
        }
1523
1644
break;
1524
1645
case 85:
1525
 
#line 690 "config_parse.y"
 
1646
#line 693 "../lib/config_parse.y"
1526
1647
{
1527
1648
                        sockscf.srchost.nounknown = 1;
1528
1649
#else
1531
1652
        }
1532
1653
break;
1533
1654
case 89:
1534
 
#line 706 "config_parse.y"
 
1655
#line 709 "../lib/config_parse.y"
1535
1656
{
1536
1657
#if SOCKS_SERVER
1537
1658
        methodv = sockscf.methodv;
1541
1662
        }
1542
1663
break;
1543
1664
case 91:
1544
 
#line 715 "config_parse.y"
 
1665
#line 718 "../lib/config_parse.y"
1545
1666
{
1546
1667
#if SOCKS_SERVER
1547
1668
        methodv = sockscf.clientmethodv;
1551
1672
        }
1552
1673
break;
1553
1674
case 93:
1554
 
#line 724 "config_parse.y"
 
1675
#line 727 "../lib/config_parse.y"
1555
1676
{
1556
1677
                ADDMETHOD(AUTHMETHOD_NONE);
1557
1678
        }
1558
1679
break;
1559
1680
case 94:
1560
 
#line 727 "config_parse.y"
 
1681
#line 730 "../lib/config_parse.y"
1561
1682
{
1562
1683
                yyerror("%s not supported", AUTHMETHOD_GSSAPIs);
1563
1684
        }
1564
1685
break;
1565
1686
case 95:
1566
 
#line 730 "config_parse.y"
 
1687
#line 733 "../lib/config_parse.y"
1567
1688
{
1568
1689
                ADDMETHOD(AUTHMETHOD_UNAME);
1569
1690
        }
1570
1691
break;
1571
1692
case 96:
1572
 
#line 733 "config_parse.y"
 
1693
#line 736 "../lib/config_parse.y"
1573
1694
{
1574
1695
#if HAVE_LIBWRAP && SOCKS_SERVER
1575
1696
                ADDMETHOD(AUTHMETHOD_RFC931);
1579
1700
        }
1580
1701
break;
1581
1702
case 97:
1582
 
#line 740 "config_parse.y"
 
1703
#line 743 "../lib/config_parse.y"
1583
1704
{
1584
1705
#if !HAVE_PAM
1585
1706
                yyerror("method %s requires pamlibrary", AUTHMETHOD_PAMs);
1589
1710
        }
1590
1711
break;
1591
1712
case 100:
1592
 
#line 756 "config_parse.y"
 
1713
#line 759 "../lib/config_parse.y"
1593
1714
{
1594
1715
#if SOCKS_SERVER
1595
1716
                rule.src                        = src;
1603
1724
        }
1604
1725
break;
1605
1726
case 102:
1606
 
#line 772 "config_parse.y"
 
1727
#line 775 "../lib/config_parse.y"
1607
1728
{ yyval.string = NULL; }
1608
1729
break;
1609
1730
case 104:
1610
 
#line 776 "config_parse.y"
 
1731
#line 779 "../lib/config_parse.y"
1611
1732
{
1612
1733
#if SOCKS_SERVER
1613
1734
                rule.src                        = src;
1620
1741
        }
1621
1742
break;
1622
1743
case 106:
1623
 
#line 790 "config_parse.y"
 
1744
#line 793 "../lib/config_parse.y"
1624
1745
{
1625
1746
#if SOCKS_SERVER
1626
1747
                        checkmodule("bandwidth");
1628
1749
        }
1629
1750
break;
1630
1751
case 110:
1631
 
#line 798 "config_parse.y"
 
1752
#line 801 "../lib/config_parse.y"
1632
1753
{
1633
1754
#if SOCKS_SERVER
1634
1755
                        checkmodule("redirect");
1636
1757
        }
1637
1758
break;
1638
1759
case 111:
1639
 
#line 805 "config_parse.y"
 
1760
#line 808 "../lib/config_parse.y"
1640
1761
{ yyval.string = NULL; }
1641
1762
break;
1642
1763
case 118:
1643
 
#line 816 "config_parse.y"
 
1764
#line 819 "../lib/config_parse.y"
1644
1765
{
1645
1766
#if SOCKS_SERVER
1646
1767
                ruleinit(&rule);
1648
1769
        }
1649
1770
break;
1650
1771
case 119:
1651
 
#line 821 "config_parse.y"
 
1772
#line 824 "../lib/config_parse.y"
1652
1773
{
1653
1774
                ruleinit(&rule);
1654
1775
                rule.verdict    = VERDICT_PASS;
1656
1777
        }
1657
1778
break;
1658
1779
case 121:
1659
 
#line 832 "config_parse.y"
 
1780
#line 835 "../lib/config_parse.y"
1660
1781
{
1661
1782
                        command->bind = 1;
1662
1783
        }
1663
1784
break;
1664
1785
case 122:
1665
 
#line 835 "config_parse.y"
 
1786
#line 838 "../lib/config_parse.y"
1666
1787
{
1667
1788
                        command->connect = 1;
1668
1789
        }
1669
1790
break;
1670
1791
case 123:
1671
 
#line 838 "config_parse.y"
 
1792
#line 841 "../lib/config_parse.y"
1672
1793
{
1673
1794
                        command->udpassociate = 1;
1674
1795
        }
1675
1796
break;
1676
1797
case 124:
1677
 
#line 844 "config_parse.y"
 
1798
#line 847 "../lib/config_parse.y"
1678
1799
{
1679
1800
                        command->bindreply = 1;
1680
1801
        }
1681
1802
break;
1682
1803
case 125:
1683
 
#line 848 "config_parse.y"
 
1804
#line 851 "../lib/config_parse.y"
1684
1805
{
1685
1806
                        command->udpreply = 1;
1686
1807
        }
1687
1808
break;
1688
1809
case 129:
1689
 
#line 860 "config_parse.y"
 
1810
#line 863 "../lib/config_parse.y"
1690
1811
{
1691
1812
                protocol->tcp = 1;
1692
1813
        }
1693
1814
break;
1694
1815
case 130:
1695
 
#line 863 "config_parse.y"
 
1816
#line 866 "../lib/config_parse.y"
1696
1817
{
1697
1818
                protocol->udp = 1;
1698
1819
        }
1699
1820
break;
1700
1821
case 136:
1701
 
#line 880 "config_parse.y"
 
1822
#line 883 "../lib/config_parse.y"
1702
1823
{
1703
1824
#if SOCKS_SERVER
1704
1825
                static bw_t bwmeminit;
1717
1838
        }
1718
1839
break;
1719
1840
case 138:
1720
 
#line 902 "config_parse.y"
 
1841
#line 905 "../lib/config_parse.y"
1721
1842
{
1722
1843
#if SOCKS_SERVER
1723
1844
        rule.log.connect = 1;
1724
1845
        }
1725
1846
break;
1726
1847
case 139:
1727
 
#line 906 "config_parse.y"
 
1848
#line 909 "../lib/config_parse.y"
1728
1849
{
1729
1850
                        rule.log.data = 1;
1730
1851
        }
1731
1852
break;
1732
1853
case 140:
1733
 
#line 909 "config_parse.y"
 
1854
#line 912 "../lib/config_parse.y"
1734
1855
{
1735
1856
                        rule.log.disconnect = 1;
1736
1857
        }
1737
1858
break;
1738
1859
case 141:
1739
 
#line 912 "config_parse.y"
 
1860
#line 915 "../lib/config_parse.y"
1740
1861
{
1741
1862
                        rule.log.error = 1;
1742
1863
        }
1743
1864
break;
1744
1865
case 142:
1745
 
#line 915 "config_parse.y"
 
1866
#line 918 "../lib/config_parse.y"
1746
1867
{
1747
1868
                        rule.log.iooperation = 1;
1748
1869
#endif
1749
1870
        }
1750
1871
break;
1751
1872
case 145:
1752
 
#line 926 "config_parse.y"
 
1873
#line 929 "../lib/config_parse.y"
1753
1874
{
1754
1875
#if HAVE_PAM && SOCKS_SERVER
1755
1876
                if (strlen(yyvsp[0].string) >= sizeof(rule.pamservicename))
1761
1882
        }
1762
1883
break;
1763
1884
case 146:
1764
 
#line 937 "config_parse.y"
 
1885
#line 940 "../lib/config_parse.y"
1765
1886
{
1766
1887
#if HAVE_LIBWRAP && SOCKS_SERVER
1767
1888
                struct request_info request;
1788
1909
        }
1789
1910
break;
1790
1911
case 157:
1791
 
#line 987 "config_parse.y"
 
1912
#line 990 "../lib/config_parse.y"
1792
1913
{ yyval.string = NULL; }
1793
1914
break;
1794
1915
case 159:
1795
 
#line 991 "config_parse.y"
 
1916
#line 994 "../lib/config_parse.y"
1796
1917
{
1797
1918
                addressinit(&src);
1798
1919
        }
1799
1920
break;
1800
1921
case 160:
1801
 
#line 996 "config_parse.y"
 
1922
#line 999 "../lib/config_parse.y"
1802
1923
{
1803
1924
                addressinit(&dst);
1804
1925
        }
1805
1926
break;
1806
1927
case 161:
1807
 
#line 1001 "config_parse.y"
 
1928
#line 1004 "../lib/config_parse.y"
1808
1929
{
1809
1930
                addressinit(&rdr_from);
1810
1931
        }
1811
1932
break;
1812
1933
case 162:
1813
 
#line 1006 "config_parse.y"
 
1934
#line 1009 "../lib/config_parse.y"
1814
1935
{
1815
1936
                addressinit(&rdr_to);
1816
1937
        }
1817
1938
break;
1818
1939
case 163:
1819
 
#line 1013 "config_parse.y"
 
1940
#line 1016 "../lib/config_parse.y"
1820
1941
{
1821
1942
#if SOCKS_CLIENT
1822
1943
                addressinit(&gw);
1824
1945
        }
1825
1946
break;
1826
1947
case 176:
1827
 
#line 1043 "config_parse.y"
 
1948
#line 1046 "../lib/config_parse.y"
1828
1949
{
1829
1950
                *atype = SOCKS_ADDR_IPV4;
1830
1951
 
1833
1954
        }
1834
1955
break;
1835
1956
case 177:
1836
 
#line 1052 "config_parse.y"
 
1957
#line 1055 "../lib/config_parse.y"
1837
1958
{
1838
1959
                if (atoi(yyvsp[0].string) < 0 || atoi(yyvsp[0].string) > 32)
1839
 
                        yyerror("bad netmask: %d", yyvsp[0].string);
 
1960
                        yyerror("bad netmask: %s", yyvsp[0].string);
1840
1961
 
1841
1962
                netmask->s_addr
1842
1963
                = atoi(yyvsp[0].string) == 0 ? 0 : htonl(0xffffffff << (32 - atoi(yyvsp[0].string)));
1843
1964
        }
1844
1965
break;
1845
1966
case 178:
1846
 
#line 1059 "config_parse.y"
 
1967
#line 1062 "../lib/config_parse.y"
1847
1968
{
1848
1969
                        if (!inet_aton(yyvsp[0].string, netmask))
1849
1970
                                yyerror("bad netmask: %s", yyvsp[0].string);
1850
1971
        }
1851
1972
break;
1852
1973
case 179:
1853
 
#line 1065 "config_parse.y"
 
1974
#line 1068 "../lib/config_parse.y"
1854
1975
{
1855
1976
                *atype = SOCKS_ADDR_DOMAIN;
1856
1977
 
1860
1981
        }
1861
1982
break;
1862
1983
case 180:
1863
 
#line 1074 "config_parse.y"
 
1984
#line 1077 "../lib/config_parse.y"
1864
1985
{
1865
1986
                *atype = SOCKS_ADDR_IFNAME;
1866
1987
 
1870
1991
        }
1871
1992
break;
1872
1993
case 181:
1873
 
#line 1084 "config_parse.y"
 
1994
#line 1087 "../lib/config_parse.y"
1874
1995
{
1875
1996
                *atype = SOCKS_ADDR_DOMAIN;
1876
1997
 
1884
2005
        }
1885
2006
break;
1886
2007
case 182:
1887
 
#line 1097 "config_parse.y"
 
2008
#line 1100 "../lib/config_parse.y"
1888
2009
{ yyval.string = NULL; }
1889
2010
break;
1890
2011
case 188:
1891
 
#line 1110 "config_parse.y"
 
2012
#line 1113 "../lib/config_parse.y"
1892
2013
{
1893
2014
                *port_tcp       = htons((in_port_t)atoi(yyvsp[0].string));
1894
2015
                *port_udp       = htons((in_port_t)atoi(yyvsp[0].string));
1895
2016
        }
1896
2017
break;
1897
2018
case 189:
1898
 
#line 1116 "config_parse.y"
 
2019
#line 1119 "../lib/config_parse.y"
1899
2020
{
1900
2021
                ruleaddress->portend            = htons((in_port_t)atoi(yyvsp[0].string));
1901
2022
                ruleaddress->operator   = range;
1902
2023
        }
1903
2024
break;
1904
2025
case 190:
1905
 
#line 1122 "config_parse.y"
 
2026
#line 1125 "../lib/config_parse.y"
1906
2027
{
1907
2028
                struct servent  *service;
1908
2029
                struct protocol_t       protocolunset;
1950
2071
        }
1951
2072
break;
1952
2073
case 191:
1953
 
#line 1170 "config_parse.y"
 
2074
#line 1173 "../lib/config_parse.y"
1954
2075
{
1955
2076
                *operator = string2operator(yyvsp[0].string);
1956
2077
        }
1957
2078
break;
1958
 
#line 1950 "y.tab.c"
 
2079
#line 2028 "config_parse.c"
1959
2080
    }
1960
2081
    yyssp -= yym;
1961
2082
    yystate = *yyssp;
2008
2129
yyoverflow:
2009
2130
    yyerror("yacc stack overflow");
2010
2131
yyabort:
 
2132
    if (yyss)
 
2133
            free(yyss);
 
2134
    if (yyvs)
 
2135
            free(yyvs);
 
2136
    yyss = yyssp = NULL;
 
2137
    yyvs = yyvsp = NULL;
 
2138
    yystacksize = 0;
2011
2139
    return (1);
2012
2140
yyaccept:
 
2141
    if (yyss)
 
2142
            free(yyss);
 
2143
    if (yyvs)
 
2144
            free(yyvs);
 
2145
    yyss = yyssp = NULL;
 
2146
    yyvs = yyvsp = NULL;
 
2147
    yystacksize = 0;
2013
2148
    return (0);
2014
2149
}