commit 00b9a457e57ed25bd9a9edcc5bc4c9d8bb0db5d4
parent 3770625993b114caaeb7a03c22326f42d55eb532
Author: finwo <finwo@pm.me>
Date: Sat, 3 Jan 2026 19:13:43 +0100
1.17
Diffstat:
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++)