crossroads

Git mirror of https://crossroads.e-tunity.com/
git clone git://git.finwo.net/app/crossroads
Log | Files | Refs

commit 00b9a457e57ed25bd9a9edcc5bc4c9d8bb0db5d4
parent 3770625993b114caaeb7a03c22326f42d55eb532
Author: finwo <finwo@pm.me>
Date:   Sat,  3 Jan 2026 19:13:43 +0100

1.17

Diffstat:
MChangeLog | 5+++++
Mdoc/crossroads.html | 4++--
Mdoc/crossroads.man | 4++--
Mdoc/crossroads.pdf | 0
Metc/Makefile.def | 2+-
Msrc/crossroads.h | 8++++++++
Msrc/netwrite.c | 2+-
Msrc/parser.c | 379++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/parser.h | 4++++
Msrc/parser.y | 16++++++++++++++++
10 files changed, 231 insertions(+), 193 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,6 +1,11 @@ ChangeLog for Crossroads ------------------------------------------------------------------------------ +1.17 [KK 2006-11-28] Next development version. + [KK 2006-11-29] Removed debugging stuff which by mistake slipped + into 1.16 stable. Shipping this 1.17 as next-stable (instead of + the previous 1.16, which is theoretically unnecessarily slow). + 1.16 [KK 2006-11-01] New development version. Usage text updated to point to http://crossroads.e-tunity.com. Flag -s implemented. Small bugfix in 'restart' action. diff --git a/doc/crossroads.html b/doc/crossroads.html @@ -1,12 +1,12 @@ <a name="defs.yo"></a><html><head> -<title>Crossroads 1.16</title> +<title>Crossroads 1.17</title> <link rel="stylesheet" type="text/css" href="http://www.e-tunity.com/css/yodl.css"> <link rel="stylesheet" type="text/css" href="http://www.e-tunity.com/css/yodl.css"> <link rev="made" href="mailto:info@e-tunity.com"> </head> <body> <hr> -<h1>Crossroads 1.16</h1> +<h1>Crossroads 1.17</h1> <h2>Karel Kubat</h2> <h2>e-tunity</h2><h2>2005, 2006, ff.</h2> diff --git a/doc/crossroads.man b/doc/crossroads.man @@ -1,6 +1,6 @@ -.TH "Crossroads 1\&.16" "2005, 2006, ff\&." +.TH "Crossroads 1\&.17" "2005, 2006, ff\&." .PP -.SH "Crossroads 1\&.16" +.SH "Crossroads 1\&.17" .SH "Karel Kubat" .SH "e-tunity" .SH "2005, 2006, ff\&." diff --git a/doc/crossroads.pdf b/doc/crossroads.pdf Binary files differ. diff --git a/etc/Makefile.def b/etc/Makefile.def @@ -3,7 +3,7 @@ # Versioning. This defines the overall version ID and must match the topmost # entry in the ChangeLog. -VER = 1.16 +VER = 1.17 # Default config DEFAULT_CONF = /etc/crossroads.conf diff --git a/src/crossroads.h b/src/crossroads.h @@ -136,6 +136,12 @@ typedef struct { /* Backend description */ int nappendserverheader; /* .. table size */ } Backend; +typedef struct { /* Filtering information: */ + unsigned char ip[4]; /* .. IP address (or part of it) */ + unsigned char ip_len; /* .. used # of bytes in ip */ + unsigned char mask; /* .. netmask */ +} IpFilter; + typedef struct { /* Service description */ char *name; /* .. service name */ char *bind; /* .. address to bind to */ @@ -151,6 +157,8 @@ typedef struct { /* Service description */ Servicetype type; /* .. type of the service */ Backend *backend; /* .. the back ends */ int nbackend; /* .. size of backend array */ + char *allowfile; /* .. file with allowed IP filters */ + char *denyfile; /* .. and denied */ } Service; typedef enum { /* Backend availability */ diff --git a/src/netwrite.c b/src/netwrite.c @@ -5,7 +5,7 @@ * /tmp/crossroads-sentto{client,server}.dump. This is of course for deep * mode debugging only. */ -#define DUMPFILE +// #define DUMPFILE int net_write (int sock, unsigned char const *buf, unsigned buflen, int is_client) { diff --git a/src/parser.c b/src/parser.c @@ -43,6 +43,10 @@ # define ADDSERVERHEADER 294 # define SETSERVERHEADER 295 # define APPENDSERVERHEADER 296 +# define ALLOWFROM 297 +# define DENYFROM 298 +# define ALLOWFILE 299 +# define DENYFILE 300 #line 3 "parser.y" @@ -129,10 +133,10 @@ static Service cur_service; /* Storage for a handled service */ #define YYFINAL 165 #define YYFLAG -32768 -#define YYNTBASE 46 +#define YYNTBASE 50 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 296 ? yytranslate[x] : 113) +#define YYTRANSLATE(x) ((unsigned)(x) <= 300 ? yytranslate[x] : 117) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = @@ -142,14 +146,14 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 45, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 43, 2, 44, 2, 2, 2, 2, + 2, 2, 2, 47, 2, 48, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -166,7 +170,8 @@ static const char yytranslate[] = 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42 + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46 }; #if YYDEBUG @@ -186,32 +191,32 @@ static const short yyprhs[] = }; static const short yyrhs[] = { - 47, 46, 0, 47, 0, 48, 49, 43, 50, 44, - 0, 101, 3, 0, 109, 4, 0, 50, 51, 0, - 51, 0, 103, 52, 0, 53, 0, 54, 0, 58, - 0, 60, 0, 65, 0, 66, 0, 67, 0, 68, - 0, 69, 0, 70, 0, 73, 0, 5, 56, 57, - 0, 31, 55, 57, 0, 111, 19, 0, 99, 6, - 0, 104, 45, 0, 8, 105, 59, 57, 0, 10, - 0, 11, 0, 12, 63, 61, 57, 0, 29, 62, - 0, 0, 99, 6, 0, 106, 64, 0, 13, 0, + 51, 50, 0, 51, 0, 52, 53, 47, 54, 48, + 0, 105, 3, 0, 113, 4, 0, 54, 55, 0, + 55, 0, 107, 56, 0, 57, 0, 58, 0, 62, + 0, 64, 0, 69, 0, 70, 0, 71, 0, 72, + 0, 73, 0, 74, 0, 77, 0, 5, 60, 61, + 0, 31, 59, 61, 0, 115, 19, 0, 103, 6, + 0, 108, 49, 0, 8, 109, 63, 61, 0, 10, + 0, 11, 0, 12, 67, 65, 61, 0, 29, 66, + 0, 0, 103, 6, 0, 110, 68, 0, 13, 0, 21, 0, 22, 0, 23, 0, 27, 0, 24, 0, - 14, 56, 57, 0, 20, 56, 57, 0, 15, 56, - 57, 0, 25, 56, 57, 0, 26, 56, 57, 0, - 33, 71, 57, 0, 112, 72, 0, 34, 0, 35, - 0, 7, 74, 43, 75, 44, 0, 110, 4, 0, - 75, 76, 0, 76, 0, 102, 77, 0, 78, 0, - 53, 0, 58, 0, 82, 0, 83, 0, 84, 0, - 85, 0, 79, 0, 80, 0, 69, 0, 88, 0, - 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, - 95, 0, 9, 100, 81, 57, 0, 16, 56, 57, - 0, 30, 56, 57, 0, 19, 0, 17, 86, 57, - 0, 18, 86, 57, 0, 28, 87, 57, 0, 32, - 87, 57, 0, 107, 19, 0, 108, 19, 0, 36, - 89, 57, 0, 98, 19, 0, 37, 96, 57, 0, - 38, 96, 57, 0, 39, 96, 57, 0, 40, 96, - 57, 0, 41, 96, 57, 0, 42, 96, 57, 0, - 97, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 60, 61, 0, 20, 60, 61, 0, 15, 60, + 61, 0, 25, 60, 61, 0, 26, 60, 61, 0, + 33, 75, 61, 0, 116, 76, 0, 34, 0, 35, + 0, 7, 78, 47, 79, 48, 0, 114, 4, 0, + 79, 80, 0, 80, 0, 106, 81, 0, 82, 0, + 57, 0, 62, 0, 86, 0, 87, 0, 88, 0, + 89, 0, 83, 0, 84, 0, 73, 0, 92, 0, + 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, + 99, 0, 9, 104, 85, 61, 0, 16, 60, 61, + 0, 30, 60, 61, 0, 19, 0, 17, 90, 61, + 0, 18, 90, 61, 0, 28, 91, 61, 0, 32, + 91, 61, 0, 111, 19, 0, 112, 19, 0, 36, + 93, 61, 0, 102, 19, 0, 37, 100, 61, 0, + 38, 100, 61, 0, 39, 100, 61, 0, 40, 100, + 61, 0, 41, 100, 61, 0, 42, 100, 61, 0, + 101, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -221,17 +226,17 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 89, 92, 96, 125, 130, 138, 141, 145, 150, - 156, 162, 168, 176, 182, 188, 194, 200, 206, 212, - 361, 373, 385, 394, 401, 406, 419, 423, 429, 448, - 451, 457, 464, 469, 473, 477, 481, 485, 489, 495, - 507, 519, 531, 543, 555, 567, 572, 576, 582, 592, - 600, 608, 614, 621, 626, 631, 636, 641, 646, 651, - 656, 661, 666, 671, 676, 681, 686, 691, 696, 701, - 708, 721, 733, 745, 751, 763, 775, 787, 799, 808, - 817, 829, 838, 850, 862, 874, 886, 898, 910, 919, - 924, 929, 934, 939, 944, 949, 954, 959, 964, 969, - 974, 979, 984, 989, 994 + 0, 90, 93, 97, 126, 131, 139, 142, 146, 151, + 157, 163, 169, 177, 183, 189, 195, 201, 207, 228, + 377, 389, 401, 410, 417, 422, 435, 439, 445, 464, + 467, 473, 480, 485, 489, 493, 497, 501, 505, 511, + 523, 535, 547, 559, 571, 583, 588, 592, 598, 608, + 616, 624, 630, 637, 642, 647, 652, 657, 662, 667, + 672, 677, 682, 687, 692, 697, 702, 707, 712, 717, + 724, 737, 749, 761, 767, 779, 791, 803, 815, 824, + 833, 845, 854, 866, 878, 890, 902, 914, 926, 935, + 940, 945, 950, 955, 960, 965, 970, 975, 980, 985, + 990, 995, 1000, 1005, 1010 }; #endif @@ -249,45 +254,45 @@ static const char *const yytname[] = "TRAFFICLOG", "OVER", "DECAY", "BINDTO", "THROUGHPUTLOG", "TYPE", "ANY", "HTTP", "STICKYCOOKIE", "ADDCLIENTHEADER", "SETCLIENTHEADER", "APPENDCLIENTHEADER", "ADDSERVERHEADER", "SETSERVERHEADER", - "APPENDSERVERHEADER", "'{'", "'}'", "';'", "input", "element", - "service", "servicename", "servicestatements", "servicestatement", - "servicebody", "portstatement", "bindstatement", "ipaddress", "number", - "semicol", "verbositystatement", "onoff", "dispatchmodestatement", - "opt_over", "overnumber", "dispatchmethod", "dispatchmethodspec", - "revivingintervalstatement", "backlogstatement", "shmkeystatement", - "connectiontimeoutstatement", "maxconnectionsstatement", - "typestatement", "typespec", "typespecifier", "backendblock", - "backendname", "backenddefinitions", "backenddefinition", - "backendstatement", "serverstatement", "weightstatement", - "decaystatement", "serveraddress", "onsuccessstatement", - "onfailurestatement", "dumptrafficstatement", "throughputstatement", - "commandline", "filename", "stickycookiestatement", "cookiespecifier", - "addclientheaderstatement", "setclientheaderstatement", - "appendclientheaderstatement", "addserverheaderstatement", - "setserverheaderstatement", "appendserverheaderstatement", - "headerstring", "headerstring_expected", "cookie_expected", - "number_expected", "serveraddress_expected", "service_expected", - "backendstatement_expected", "servicebody_expected", "semicol_expected", - "onoff_expected", "dispatchmethod_expected", "commandline_expected", - "filename_expected", "servicename_expected", "backendname_expected", - "ipaddress_expected", "type_expected", 0 + "APPENDSERVERHEADER", "ALLOWFROM", "DENYFROM", "ALLOWFILE", "DENYFILE", + "'{'", "'}'", "';'", "input", "element", "service", "servicename", + "servicestatements", "servicestatement", "servicebody", "portstatement", + "bindstatement", "ipaddress", "number", "semicol", "verbositystatement", + "onoff", "dispatchmodestatement", "opt_over", "overnumber", + "dispatchmethod", "dispatchmethodspec", "revivingintervalstatement", + "backlogstatement", "shmkeystatement", "connectiontimeoutstatement", + "maxconnectionsstatement", "typestatement", "typespec", "typespecifier", + "backendblock", "backendname", "backenddefinitions", + "backenddefinition", "backendstatement", "serverstatement", + "weightstatement", "decaystatement", "serveraddress", + "onsuccessstatement", "onfailurestatement", "dumptrafficstatement", + "throughputstatement", "commandline", "filename", + "stickycookiestatement", "cookiespecifier", "addclientheaderstatement", + "setclientheaderstatement", "appendclientheaderstatement", + "addserverheaderstatement", "setserverheaderstatement", + "appendserverheaderstatement", "headerstring", "headerstring_expected", + "cookie_expected", "number_expected", "serveraddress_expected", + "service_expected", "backendstatement_expected", "servicebody_expected", + "semicol_expected", "onoff_expected", "dispatchmethod_expected", + "commandline_expected", "filename_expected", "servicename_expected", + "backendname_expected", "ipaddress_expected", "type_expected", 0 }; #endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { - 0, 46, 46, 47, 48, 49, 50, 50, 51, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 53, 54, 55, 56, 57, 58, 59, 59, 60, 61, - 61, 62, 63, 64, 64, 64, 64, 64, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 72, 73, 74, - 75, 75, 76, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112 + 0, 50, 50, 51, 52, 53, 54, 54, 55, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 57, 58, 59, 60, 61, 62, 63, 63, 64, 65, + 65, 66, 67, 68, 68, 68, 68, 68, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, + 79, 79, 80, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -343,19 +348,19 @@ static const short yydefgoto[] = static const short yypact[] = { - -32768, 12,-32768, 14,-32768, -37, 18,-32768,-32768,-32768, - -14,-32768, 41,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -32768, 12,-32768, 14,-32768, -41, 18,-32768,-32768,-32768, + -25,-32768, 41,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 17, - -11, 30, -1, 7, 56,-32768,-32768,-32768,-32768,-32768, - -32768, 19,-32768, -21,-32768, -8,-32768,-32768,-32768,-32768, + -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 24, + -15, 30, -1, 7, 56,-32768,-32768,-32768,-32768,-32768, + -32768, 19,-32768, -21,-32768, -12,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, 6,-32768, 3,-32768,-32768, 45,-32768, + -32768,-32768,-32768, 4,-32768, 3,-32768,-32768, 44,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768, 28,-32768,-32768, 33,-32768, + -32768,-32768,-32768,-32768,-32768, 28,-32768,-32768, 32,-32768, -32768, 35,-32768,-32768,-32768, 38,-32768, 39,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, @@ -366,9 +371,9 @@ static const short yypgoto[] = { 62,-32768,-32768,-32768,-32768, 53,-32768, -20,-32768,-32768, 5, -45, -17,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, -15,-32768,-32768,-32768,-32768,-32768,-32768, + -32768,-32768,-32768, -14,-32768,-32768,-32768,-32768,-32768,-32768, -19,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -24, -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -22, -28,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2,-32768,-32768, 13,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768 }; @@ -381,12 +386,12 @@ static const short yytable[] = { 71, 72, 73, 74, 75, 76, 8, 78, 15, 59, 60, 17, 92, 79, 80, -93, 86, 7, 89, 93, - 94, 95, 9, 56, 45, 46, 47, 48, 49, 23, - 13, 96, 57, 97, 58, 98, 62, 82, 77, 99, + 94, 95, 9, 13, 45, 46, 47, 48, 49, 23, + 56, 96, 57, 97, 58, 98, 62, 82, 77, 99, 100, 101, 102, 103, 104, 105, 15, 143, 16, 17, - 90, 124, 147, 18, 150, 19, 20, 154, 156, 164, + 124, 147, 90, 18, 150, 19, 20, 154, 156, 164, 165, 21, 163, 14, 91, 106, 22, 23, 107, 64, - 108, 129, 24, 133, 25, 88, 0, 65, 66, 67, + 133, 108, 24, 129, 25, 88, 0, 65, 66, 67, 68, 145, 146, 69, 148, 149, 0, 151, 152, 153, 0, 155, 0, 157, 158, 159, 160, 161, 126, 162, 0, 0, 132, 138, 139, 140, 141, 142 @@ -394,14 +399,14 @@ static const short yytable[] = static const short yycheck[] = { - 45, 46, 47, 48, 49, 50, 43, 52, 5, 10, + 45, 46, 47, 48, 49, 50, 47, 52, 5, 10, 11, 8, 9, 34, 35, 3, 61, 3, 63, 16, - 17, 18, 4, 6, 19, 20, 21, 22, 23, 26, - 44, 28, 43, 30, 4, 32, 29, 45, 19, 36, + 17, 18, 4, 48, 19, 20, 21, 22, 23, 26, + 6, 28, 47, 30, 4, 32, 29, 49, 19, 36, 37, 38, 39, 40, 41, 42, 5, 19, 7, 8, - 44, 6, 19, 12, 19, 14, 15, 19, 19, 0, + 6, 19, 48, 12, 19, 14, 15, 19, 19, 0, 0, 20, 0, 10, 83, 85, 25, 26, 85, 13, - 85, 95, 31, 98, 33, 62, -1, 21, 22, 23, + 98, 85, 31, 95, 33, 62, -1, 21, 22, 23, 24, 126, 127, 27, 129, 130, -1, 132, 133, 134, -1, 136, -1, 138, 139, 140, 141, 142, 93, 144, -1, -1, 97, 101, 102, 103, 104, 105 @@ -1114,7 +1119,7 @@ yyreduce: switch (yyn) { case 3: -#line 101 "parser.y" +#line 102 "parser.y" { /* Verify the service description, supply defaults * and so on. @@ -1139,14 +1144,14 @@ case 3: ; break;} case 5: -#line 132 "parser.y" +#line 133 "parser.y" { psmsg ("service:", yytext); cur_service.name = xstrdup(yytext); ; break;} case 9: -#line 151 "parser.y" +#line 152 "parser.y" { pimsg ("sevice port:", yyvsp[0].set[0].v.ival); cur_service.port = yyvsp[0].set[0].v.ival; @@ -1154,7 +1159,7 @@ case 9: ; break;} case 10: -#line 157 "parser.y" +#line 158 "parser.y" { psmsg ("service binding:", yyvsp[0].set[0].v.sval); cur_service.bind = yyvsp[0].set[0].v.sval; @@ -1162,7 +1167,7 @@ case 10: ; break;} case 11: -#line 163 "parser.y" +#line 164 "parser.y" { pimsg ("service verbosity:", yyvsp[0].set[0].v.ival); cur_service.verbosity = yyvsp[0].set[0].v.ival; @@ -1170,7 +1175,7 @@ case 11: ; break;} case 12: -#line 169 "parser.y" +#line 170 "parser.y" { pimsg ("service dispatch mode:", yyvsp[0].set[0].v.ival); pimsg ("service dispatch over:", lastovernr); @@ -1180,7 +1185,7 @@ case 12: ; break;} case 13: -#line 177 "parser.y" +#line 178 "parser.y" { pimsg ("service revival interval:", yyvsp[0].set[0].v.ival); cur_service.rev_interval = yyvsp[0].set[0].v.ival; @@ -1188,7 +1193,7 @@ case 13: ; break;} case 14: -#line 183 "parser.y" +#line 184 "parser.y" { pimsg ("service backlog:", yyvsp[0].set[0].v.ival); cur_service.backlog = yyvsp[0].set[0].v.ival; @@ -1196,7 +1201,7 @@ case 14: ; break;} case 15: -#line 189 "parser.y" +#line 190 "parser.y" { pimsg ("service shmkey:", yyvsp[0].set[0].v.ival); cur_service.shmkey = yyvsp[0].set[0].v.ival; @@ -1204,7 +1209,7 @@ case 15: ; break;} case 16: -#line 195 "parser.y" +#line 196 "parser.y" { pimsg ("connection timout:", yyvsp[0].set[0].v.ival); cur_service.connectiontimeout = yyvsp[0].set[0].v.ival; @@ -1212,7 +1217,7 @@ case 16: ; break;} case 17: -#line 201 "parser.y" +#line 202 "parser.y" { pimsg ("max clients in service:", yyvsp[0].set[0].v.ival); cur_service.maxconnections = yyvsp[0].set[0].v.ival; @@ -1220,7 +1225,7 @@ case 17: ; break;} case 18: -#line 207 "parser.y" +#line 208 "parser.y" { pimsg ("service type: ", yyvsp[0].set[0].v.ival); cur_service.type = yyvsp[0].set[0].v.ival; @@ -1228,7 +1233,7 @@ case 18: ; break;} case 19: -#line 213 "parser.y" +#line 229 "parser.y" { pimsg ("converting backend statements, count is", yyvsp[0].n); for (i = 0; i < yyvsp[0].n; i++) @@ -1377,7 +1382,7 @@ case 19: ; break;} case 20: -#line 364 "parser.y" +#line 380 "parser.y" { pimsg ("port statement:", lastnr); yyval.n = 1; @@ -1387,7 +1392,7 @@ case 20: ; break;} case 21: -#line 376 "parser.y" +#line 392 "parser.y" { psmsg ("bindto statement:", laststr); yyval.n = 1; @@ -1397,7 +1402,7 @@ case 21: ; break;} case 22: -#line 387 "parser.y" +#line 403 "parser.y" { setlaststr (laststring); free (laststring); @@ -1405,13 +1410,13 @@ case 22: ; break;} case 23: -#line 396 "parser.y" +#line 412 "parser.y" { setlastnr (yytext); ; break;} case 25: -#line 410 "parser.y" +#line 426 "parser.y" { pimsg ("verbosity statement:", lastnr); yyval.n = 1; @@ -1421,19 +1426,19 @@ case 25: ; break;} case 26: -#line 420 "parser.y" +#line 436 "parser.y" { lastnr = 1; ; break;} case 27: -#line 424 "parser.y" +#line 440 "parser.y" { lastnr = 0; ; break;} case 28: -#line 433 "parser.y" +#line 449 "parser.y" { pimsg ("dispatch mode statement:", lastnr); yyval.n = 1; @@ -1449,55 +1454,55 @@ case 28: ; break;} case 30: -#line 452 "parser.y" +#line 468 "parser.y" { lastovernr = 0; ; break;} case 31: -#line 459 "parser.y" +#line 475 "parser.y" { setlastovernr (yytext); ; break;} case 33: -#line 470 "parser.y" +#line 486 "parser.y" { lastnr = ds_roundrobin; ; break;} case 34: -#line 474 "parser.y" +#line 490 "parser.y" { lastnr = ds_random; ; break;} case 35: -#line 478 "parser.y" +#line 494 "parser.y" { lastnr = ds_byduration; ; break;} case 36: -#line 482 "parser.y" +#line 498 "parser.y" { lastnr = ds_bysize; ; break;} case 37: -#line 486 "parser.y" +#line 502 "parser.y" { lastnr = ds_byorder; ; break;} case 38: -#line 490 "parser.y" +#line 506 "parser.y" { lastnr = ds_byconnections; ; break;} case 39: -#line 498 "parser.y" +#line 514 "parser.y" { pimsg ("reviving interval statement:", lastnr); yyval.n = 1; @@ -1507,7 +1512,7 @@ case 39: ; break;} case 40: -#line 510 "parser.y" +#line 526 "parser.y" { pimsg ("backlog statement:", lastnr); yyval.n = 1; @@ -1517,7 +1522,7 @@ case 40: ; break;} case 41: -#line 522 "parser.y" +#line 538 "parser.y" { pimsg ("shmkey statement:", lastnr); yyval.n = 1; @@ -1527,7 +1532,7 @@ case 41: ; break;} case 42: -#line 534 "parser.y" +#line 550 "parser.y" { pimsg ("connection timeout statement:", lastnr); yyval.n = 1; @@ -1537,7 +1542,7 @@ case 42: ; break;} case 43: -#line 546 "parser.y" +#line 562 "parser.y" { pimsg ("max clients statement (service):", lastnr); yyval.n = 1; @@ -1547,7 +1552,7 @@ case 43: ; break;} case 44: -#line 558 "parser.y" +#line 574 "parser.y" { pimsg ("service type:", lastnr); yyval.n = 1; @@ -1557,32 +1562,32 @@ case 44: ; break;} case 46: -#line 573 "parser.y" +#line 589 "parser.y" { lastnr = type_any; ; break;} case 47: -#line 577 "parser.y" +#line 593 "parser.y" { lastnr = type_http; ; break;} case 48: -#line 587 "parser.y" +#line 603 "parser.y" { yyval = yyvsp[-1]; ; break;} case 49: -#line 594 "parser.y" +#line 610 "parser.y" { psmsg ("backend name:", yytext); cur_backend.name = xstrdup (yytext); ; break;} case 50: -#line 602 "parser.y" +#line 618 "parser.y" { yyvsp[-1].n++; yyvsp[-1].set = xrealloc (yyvsp[-1].set, yyvsp[-1].n * sizeof(Confset)); @@ -1591,138 +1596,138 @@ case 50: ; break;} case 51: -#line 609 "parser.y" +#line 625 "parser.y" { yyval = yyvsp[0]; ; break;} case 52: -#line 616 "parser.y" +#line 632 "parser.y" { yyval = yyvsp[0]; ; break;} case 53: -#line 622 "parser.y" +#line 638 "parser.y" { psmsg ("backend server:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 54: -#line 627 "parser.y" +#line 643 "parser.y" { pimsg ("backend port:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 55: -#line 632 "parser.y" +#line 648 "parser.y" { pimsg ("backend verbosity:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 56: -#line 637 "parser.y" +#line 653 "parser.y" { psmsg ("backend onsuccess:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 57: -#line 642 "parser.y" +#line 658 "parser.y" { psmsg ("backend onfailure:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 58: -#line 647 "parser.y" +#line 663 "parser.y" { psmsg ("backend trafficlog:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 59: -#line 652 "parser.y" +#line 668 "parser.y" { psmsg ("backend trafficlog:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 60: -#line 657 "parser.y" +#line 673 "parser.y" { pimsg ("backend weight:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 61: -#line 662 "parser.y" +#line 678 "parser.y" { pimsg ("backend decay:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 62: -#line 667 "parser.y" +#line 683 "parser.y" { pimsg ("backend maxconnections:", yyvsp[0].set[0].v.ival); yyval = yyvsp[0]; ; break;} case 63: -#line 672 "parser.y" +#line 688 "parser.y" { psmsg ("backend sticky cookie:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 64: -#line 677 "parser.y" +#line 693 "parser.y" { psmsg ("addclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 65: -#line 682 "parser.y" +#line 698 "parser.y" { psmsg ("setclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 66: -#line 687 "parser.y" +#line 703 "parser.y" { psmsg ("appendclientheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 67: -#line 692 "parser.y" +#line 708 "parser.y" { psmsg ("addserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 68: -#line 697 "parser.y" +#line 713 "parser.y" { psmsg ("setserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 69: -#line 702 "parser.y" +#line 718 "parser.y" { psmsg ("appendserverheader:", yyvsp[0].set[0].v.sval); yyval = yyvsp[0]; ; break;} case 70: -#line 712 "parser.y" +#line 728 "parser.y" { psmsg ("server statement:", laststr); yyval.n = 1; @@ -1732,7 +1737,7 @@ case 70: ; break;} case 71: -#line 724 "parser.y" +#line 740 "parser.y" { pimsg ("weight statement", lastnr); yyval.n = 1; @@ -1742,7 +1747,7 @@ case 71: ; break;} case 72: -#line 736 "parser.y" +#line 752 "parser.y" { pimsg ("decay statement", lastnr); yyval.n = 1; @@ -1752,13 +1757,13 @@ case 72: ; break;} case 73: -#line 746 "parser.y" +#line 762 "parser.y" { setlaststr (laststring); ; break;} case 74: -#line 754 "parser.y" +#line 770 "parser.y" { psmsg ("onsuccess statement:", laststr); yyval.n = 1; @@ -1768,7 +1773,7 @@ case 74: ; break;} case 75: -#line 766 "parser.y" +#line 782 "parser.y" { psmsg ("onfailure statement:", laststr); yyval.n = 1; @@ -1778,7 +1783,7 @@ case 75: ; break;} case 76: -#line 778 "parser.y" +#line 794 "parser.y" { psmsg ("trafficlog statement:", laststr); yyval.n = 1; @@ -1788,7 +1793,7 @@ case 76: ; break;} case 77: -#line 790 "parser.y" +#line 806 "parser.y" { psmsg ("throughputlog statement:", laststr); yyval.n = 1; @@ -1798,7 +1803,7 @@ case 77: ; break;} case 78: -#line 801 "parser.y" +#line 817 "parser.y" { setlaststr (laststring); free (laststring); @@ -1806,7 +1811,7 @@ case 78: ; break;} case 79: -#line 810 "parser.y" +#line 826 "parser.y" { setlaststr (laststring); free (laststring); @@ -1814,7 +1819,7 @@ case 79: ; break;} case 80: -#line 820 "parser.y" +#line 836 "parser.y" { psmsg ("insertcookie statement:", laststr); yyval.n = 1; @@ -1824,7 +1829,7 @@ case 80: ; break;} case 81: -#line 831 "parser.y" +#line 847 "parser.y" { setlaststr (laststring); free (laststring); @@ -1832,7 +1837,7 @@ case 81: ; break;} case 82: -#line 841 "parser.y" +#line 857 "parser.y" { psmsg ("addclientheader statement:", laststr); yyval.n = 1; @@ -1842,7 +1847,7 @@ case 82: ; break;} case 83: -#line 853 "parser.y" +#line 869 "parser.y" { psmsg ("setclientheader statement:", laststr); yyval.n = 1; @@ -1852,7 +1857,7 @@ case 83: ; break;} case 84: -#line 865 "parser.y" +#line 881 "parser.y" { psmsg ("appendclientheader statement:", laststr); yyval.n = 1; @@ -1862,7 +1867,7 @@ case 84: ; break;} case 85: -#line 877 "parser.y" +#line 893 "parser.y" { psmsg ("addserverheader statement:", laststr); yyval.n = 1; @@ -1872,7 +1877,7 @@ case 85: ; break;} case 86: -#line 889 "parser.y" +#line 905 "parser.y" { psmsg ("setserverheader statement:", laststr); yyval.n = 1; @@ -1882,7 +1887,7 @@ case 86: ; break;} case 87: -#line 901 "parser.y" +#line 917 "parser.y" { psmsg ("appendserverheader statement:", laststr); yyval.n = 1; @@ -1892,7 +1897,7 @@ case 87: ; break;} case 88: -#line 912 "parser.y" +#line 928 "parser.y" { setlaststr (laststring); free (laststring); @@ -1900,97 +1905,97 @@ case 88: ; break;} case 89: -#line 919 "parser.y" +#line 935 "parser.y" { yyerrmsg = "HTTP header specifier expected"; ; break;} case 90: -#line 924 "parser.y" +#line 940 "parser.y" { yyerrmsg = "cookie specifier expected"; ; break;} case 91: -#line 929 "parser.y" +#line 945 "parser.y" { yyerrmsg = "number expected"; ; break;} case 92: -#line 934 "parser.y" +#line 950 "parser.y" { yyerrmsg = "hostname or IP address expected"; ; break;} case 93: -#line 939 "parser.y" +#line 955 "parser.y" { yyerrmsg = "'service' expected"; ; break;} case 94: -#line 944 "parser.y" +#line 960 "parser.y" { yyerrmsg = "backend definition statement expected"; ; break;} case 95: -#line 949 "parser.y" +#line 965 "parser.y" { yyerrmsg = "service body statement expected"; ; break;} case 96: -#line 954 "parser.y" +#line 970 "parser.y" { yyerrmsg = "semicolon (;) expected"; ; break;} case 97: -#line 959 "parser.y" +#line 975 "parser.y" { yyerrmsg = "'on' or 'off' expetcted"; ; break;} case 98: -#line 964 "parser.y" +#line 980 "parser.y" { yyerrmsg = "dispatch method expected"; ; break;} case 99: -#line 969 "parser.y" +#line 985 "parser.y" { yyerrmsg = "command line expected"; ; break;} case 100: -#line 974 "parser.y" +#line 990 "parser.y" { yyerrmsg = "file name expected"; ; break;} case 101: -#line 979 "parser.y" +#line 995 "parser.y" { yyerrmsg = "service name (identifier) expected"; ; break;} case 102: -#line 984 "parser.y" +#line 1000 "parser.y" { yyerrmsg = "backend name (identifier) expected"; ; break;} case 103: -#line 989 "parser.y" +#line 1005 "parser.y" { yyerrmsg = "IP address or 'any' expected"; ; break;} case 104: -#line 994 "parser.y" +#line 1010 "parser.y" { yyerrmsg = "Service type expected ('any', 'stickyhttp', ...)"; ; @@ -2228,4 +2233,4 @@ yyreturn: #endif return yyresult; } -#line 998 "parser.y" +#line 1014 "parser.y" diff --git a/src/parser.h b/src/parser.h @@ -45,6 +45,10 @@ # define ADDSERVERHEADER 294 # define SETSERVERHEADER 295 # define APPENDSERVERHEADER 296 +# define ALLOWFROM 297 +# define DENYFROM 298 +# define ALLOWFILE 299 +# define DENYFILE 300 extern YYSTYPE yylval; diff --git a/src/parser.y b/src/parser.y @@ -82,6 +82,7 @@ static Service cur_service; /* Storage for a handled service */ OVER DECAY BINDTO THROUGHPUTLOG TYPE ANY HTTP STICKYCOOKIE ADDCLIENTHEADER SETCLIENTHEADER APPENDCLIENTHEADER ADDSERVERHEADER SETSERVERHEADER APPENDSERVERHEADER + ALLOWFROM DENYFROM ALLOWFILE DENYFILE %% /* Config file grammar rules */ @@ -209,7 +210,22 @@ servicebody: cur_service.type = $1.set[0].v.ival; free ($1.set); } +/* | + allowfromstatement { + psmsg ("allow from: ", $1.set[0].v.sval); + if (ipf_add_allow (&cur_service, $1.set[0].v.sval)) + error ("Bad IP filter specifier '%s' at line %d", + $1.set[0].v.sval, yylineno + 1); + } | + denyfromstatement { + psmsg ("deny from: ", $1.set[0].v.sval); + if (ipf_add_deny (&cur_service, $1.set[0].v.sval)) + error ("Bad IP filter specifier '%s' at line %d", + $1.set[0].v.sval, yylineno + 1); + } +*/ +| backendblock { pimsg ("converting backend statements, count is", $1.n); for (i = 0; i < $1.n; i++)