summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArno Töll <debian@toell.net>2011-12-18 20:37:18 +0100
committerArno Töll <arno@debian.org>2012-11-21 23:30:04 +0100
commit3ba85dd1f41b3623be7ff55548a75d6e9393ba11 (patch)
treecd885a415c08c3c9e9e1aacdac3f17a366b0aabf
parent97c46fb716594ff23f436209580b8424a926d7e3 (diff)
downloadlighttpd-3ba85dd1f41b3623be7ff55548a75d6e9393ba11.tar.gz
Imported Debian patch 1.4.28-2+squeeze1debian/1.4.28-2+squeeze1
-rw-r--r--debian/NEWS21
-rw-r--r--debian/changelog11
-rw-r--r--debian/conf-available/10-ssl.conf3
-rw-r--r--debian/patches/debian-changes-1.4.28-2535
-rw-r--r--debian/patches/fix-CVE-2011-4362.patch37
-rw-r--r--debian/patches/series2
-rw-r--r--debian/patches/ssl-mitigate-beast.patch67
-rwxr-xr-x[-rw-r--r--]ltmain.sh0
-rw-r--r--src/configparser.c80
-rw-r--r--src/mod_ssi_exprparser.c38
-rwxr-xr-x[-rw-r--r--]tests/core-404-handler.t0
-rwxr-xr-x[-rw-r--r--]tests/symlink.t0
12 files changed, 735 insertions, 59 deletions
diff --git a/debian/NEWS b/debian/NEWS
index 9a3548e..c31c290 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -1,3 +1,24 @@
+lighttpd (1.4.28-2+squeeze1) stable-security; urgency=high
+
+ This releases includes an option to force Lighttpd to honor the cipher order
+ in ssl.cipher-list. This mitigates the effects of a SSL CBC attack commonly
+ referred to as "BEAST attack". See [1] and CVE-2011-3389 for more details.
+
+ To minimze the risk of this attack it is recommended either to disable all CBC
+ ciphers (beware: this will break older clients), or pursue clients to use safe
+ ciphers where possible at least. To do so, set
+
+ ssl.ciphers = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
+ ssl.honor-cipher-order = "enable"
+
+ in your /etc/lighttpd/conf-available/10-ssl.conf file or on any SSL enabled
+ host you configured. If you did not change this file previously, this upgrade
+ will update it automatically.
+
+ [1] http://blog.ivanristic.com/2011/10/mitigating-the-beast-attack-on-tls.html
+
+ -- Arno Töll <debian@toell.net> Sun, 18 Dec 2011 21:20:12 +0100
+
lighttpd (1.4.23-1) unstable; urgency=low
spawn-fcgi is now separate package. Please install "spawn-fcgi" package if
diff --git a/debian/changelog b/debian/changelog
index 1d3a0b5..bfa16d1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+lighttpd (1.4.28-2+squeeze1) stable-security; urgency=high
+
+ * Backport security issues from 1.4.30:
+ + Fix integer overflow (CVE-2011-4362)
+ + Fix attack vector as disclosed by the SSL BEAST attack (related:
+ CVE-2011-3389). Note: If you are upgrading from an older version you need
+ to change your configuration to mitigate effects of the attack. See the
+ corresponding NEWS file for details.
+
+ -- Arno Töll <debian@toell.net> Sun, 18 Dec 2011 20:37:18 +0100
+
lighttpd (1.4.28-2) unstable; urgency=medium
[ Olaf van der Spek ]
diff --git a/debian/conf-available/10-ssl.conf b/debian/conf-available/10-ssl.conf
index 4656d86..34f3912 100644
--- a/debian/conf-available/10-ssl.conf
+++ b/debian/conf-available/10-ssl.conf
@@ -3,4 +3,7 @@
$SERVER["socket"] == "0.0.0.0:443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"
+
+ ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
+ ssl.honor-cipher-order = "enable"
}
diff --git a/debian/patches/debian-changes-1.4.28-2 b/debian/patches/debian-changes-1.4.28-2
new file mode 100644
index 0000000..d165d10
--- /dev/null
+++ b/debian/patches/debian-changes-1.4.28-2
@@ -0,0 +1,535 @@
+Description: Upstream changes introduced in version 1.4.28-2
+ This patch has been created by dpkg-source during the package build.
+ Here's the last changelog entry, hopefully it gives details on why
+ those changes were made:
+ .
+ lighttpd (1.4.28-2) unstable; urgency=medium
+ .
+ [ Olaf van der Spek ]
+ * Use relative instead of absolute links for conf-enabled (closes: #541645)
+ * Fix /doc/ for IPv6 (closes: #512583)
+ .
+ [ Krzysztof Krzyżaniak (eloy) ]
+ * Added patch patches/silence-errors.diff (closes: #601177)
+ .
+ The person named in the Author field signed this changelog entry.
+Author: Krzysztof Krzyżaniak (eloy) <eloy@debian.org>
+Bug-Debian: http://bugs.debian.org/512583
+Bug-Debian: http://bugs.debian.org/541645
+Bug-Debian: http://bugs.debian.org/601177
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: <vendor|upstream|other>, <url of original patch>
+Bug: <url in upstream bugtracker>
+Bug-Debian: http://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: <no|not-needed|url proving that it has been forwarded>
+Reviewed-By: <name and email of someone who approved the patch>
+Last-Update: <YYYY-MM-DD>
+
+--- lighttpd-1.4.28.orig/src/configparser.c
++++ lighttpd-1.4.28/src/configparser.c
+@@ -4,7 +4,7 @@
+ /* First off, code is include which follows the "include" declaration
+ ** in the input file. */
+ #include <stdio.h>
+-#line 5 "../../src/configparser.y"
++#line 5 "./configparser.y"
+
+ #include "configfile.h"
+ #include "buffer.h"
+@@ -518,42 +518,42 @@ static void yy_destructor(YYCODETYPE yym
+ case 23:
+ case 24:
+ case 25:
+-#line 144 "../../src/configparser.y"
++#line 144 "./configparser.y"
+ { buffer_free((yypminor->yy0)); }
+ #line 523 "configparser.c"
+ break;
+ case 35:
+-#line 135 "../../src/configparser.y"
++#line 135 "./configparser.y"
+ { (yypminor->yy41)->free((yypminor->yy41)); }
+ #line 528 "configparser.c"
+ break;
+ case 36:
+-#line 136 "../../src/configparser.y"
++#line 136 "./configparser.y"
+ { (yypminor->yy41)->free((yypminor->yy41)); }
+ #line 533 "configparser.c"
+ break;
+ case 37:
+-#line 137 "../../src/configparser.y"
++#line 137 "./configparser.y"
+ { (yypminor->yy41)->free((yypminor->yy41)); }
+ #line 538 "configparser.c"
+ break;
+ case 39:
+-#line 138 "../../src/configparser.y"
++#line 138 "./configparser.y"
+ { array_free((yypminor->yy40)); }
+ #line 543 "configparser.c"
+ break;
+ case 40:
+-#line 139 "../../src/configparser.y"
++#line 139 "./configparser.y"
+ { array_free((yypminor->yy40)); }
+ #line 548 "configparser.c"
+ break;
+ case 41:
+-#line 140 "../../src/configparser.y"
++#line 140 "./configparser.y"
+ { buffer_free((yypminor->yy43)); }
+ #line 553 "configparser.c"
+ break;
+ case 42:
+-#line 141 "../../src/configparser.y"
++#line 141 "./configparser.y"
+ { buffer_free((yypminor->yy43)); }
+ #line 558 "configparser.c"
+ break;
+@@ -823,7 +823,7 @@ static void yy_reduce(
+ /* No destructor defined for global */
+ break;
+ case 5:
+-#line 117 "../../src/configparser.y"
++#line 117 "./configparser.y"
+ { yymsp[-1].minor.yy78 = NULL; }
+ #line 828 "configparser.c"
+ yy_destructor(1,&yymsp[0].minor);
+@@ -838,7 +838,7 @@ static void yy_reduce(
+ yy_destructor(1,&yymsp[0].minor);
+ break;
+ case 9:
+-#line 146 "../../src/configparser.y"
++#line 146 "./configparser.y"
+ {
+ if (ctx->ok) {
+ buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
+@@ -866,7 +866,7 @@ static void yy_reduce(
+ yy_destructor(2,&yymsp[-1].minor);
+ break;
+ case 10:
+-#line 170 "../../src/configparser.y"
++#line 170 "./configparser.y"
+ {
+ array *vars = ctx->current->value;
+ data_unset *du;
+@@ -909,7 +909,7 @@ static void yy_reduce(
+ yy_destructor(3,&yymsp[-1].minor);
+ break;
+ case 11:
+-#line 209 "../../src/configparser.y"
++#line 209 "./configparser.y"
+ {
+ if (strchr(yymsp[0].minor.yy0->ptr, '.') == NULL) {
+ yygotominor.yy43 = buffer_init_string("var.");
+@@ -924,7 +924,7 @@ static void yy_reduce(
+ #line 924 "configparser.c"
+ break;
+ case 12:
+-#line 221 "../../src/configparser.y"
++#line 221 "./configparser.y"
+ {
+ yygotominor.yy41 = configparser_merge_data(yymsp[-2].minor.yy41, yymsp[0].minor.yy41);
+ if (NULL == yygotominor.yy41) {
+@@ -938,7 +938,7 @@ static void yy_reduce(
+ yy_destructor(5,&yymsp[-1].minor);
+ break;
+ case 13:
+-#line 231 "../../src/configparser.y"
++#line 231 "./configparser.y"
+ {
+ yygotominor.yy41 = yymsp[0].minor.yy41;
+ yymsp[0].minor.yy41 = NULL;
+@@ -946,7 +946,7 @@ static void yy_reduce(
+ #line 946 "configparser.c"
+ break;
+ case 14:
+-#line 236 "../../src/configparser.y"
++#line 236 "./configparser.y"
+ {
+ yygotominor.yy41 = NULL;
+ if (strncmp(yymsp[0].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
+@@ -976,7 +976,7 @@ static void yy_reduce(
+ #line 976 "configparser.c"
+ break;
+ case 15:
+-#line 263 "../../src/configparser.y"
++#line 263 "./configparser.y"
+ {
+ yygotominor.yy41 = (data_unset *)data_string_init();
+ buffer_copy_string_buffer(((data_string *)(yygotominor.yy41))->value, yymsp[0].minor.yy0);
+@@ -986,7 +986,7 @@ static void yy_reduce(
+ #line 986 "configparser.c"
+ break;
+ case 16:
+-#line 270 "../../src/configparser.y"
++#line 270 "./configparser.y"
+ {
+ yygotominor.yy41 = (data_unset *)data_integer_init();
+ ((data_integer *)(yygotominor.yy41))->value = strtol(yymsp[0].minor.yy0->ptr, NULL, 10);
+@@ -996,7 +996,7 @@ static void yy_reduce(
+ #line 996 "configparser.c"
+ break;
+ case 17:
+-#line 276 "../../src/configparser.y"
++#line 276 "./configparser.y"
+ {
+ yygotominor.yy41 = (data_unset *)data_array_init();
+ array_free(((data_array *)(yygotominor.yy41))->value);
+@@ -1006,7 +1006,7 @@ static void yy_reduce(
+ #line 1006 "configparser.c"
+ break;
+ case 18:
+-#line 282 "../../src/configparser.y"
++#line 282 "./configparser.y"
+ {
+ yygotominor.yy40 = array_init();
+ }
+@@ -1015,7 +1015,7 @@ static void yy_reduce(
+ yy_destructor(9,&yymsp[0].minor);
+ break;
+ case 19:
+-#line 285 "../../src/configparser.y"
++#line 285 "./configparser.y"
+ {
+ yygotominor.yy40 = yymsp[-1].minor.yy40;
+ yymsp[-1].minor.yy40 = NULL;
+@@ -1025,7 +1025,7 @@ static void yy_reduce(
+ yy_destructor(9,&yymsp[0].minor);
+ break;
+ case 20:
+-#line 290 "../../src/configparser.y"
++#line 290 "./configparser.y"
+ {
+ if (buffer_is_empty(yymsp[0].minor.yy41->key) ||
+ NULL == array_get_element(yymsp[-2].minor.yy40, yymsp[0].minor.yy41->key->ptr)) {
+@@ -1046,7 +1046,7 @@ static void yy_reduce(
+ yy_destructor(10,&yymsp[-1].minor);
+ break;
+ case 21:
+-#line 307 "../../src/configparser.y"
++#line 307 "./configparser.y"
+ {
+ yygotominor.yy40 = yymsp[-1].minor.yy40;
+ yymsp[-1].minor.yy40 = NULL;
+@@ -1055,7 +1055,7 @@ static void yy_reduce(
+ yy_destructor(10,&yymsp[0].minor);
+ break;
+ case 22:
+-#line 312 "../../src/configparser.y"
++#line 312 "./configparser.y"
+ {
+ yygotominor.yy40 = array_init();
+ array_insert_unique(yygotominor.yy40, yymsp[0].minor.yy41);
+@@ -1064,7 +1064,7 @@ static void yy_reduce(
+ #line 1064 "configparser.c"
+ break;
+ case 23:
+-#line 318 "../../src/configparser.y"
++#line 318 "./configparser.y"
+ {
+ yygotominor.yy41 = yymsp[0].minor.yy41;
+ yymsp[0].minor.yy41 = NULL;
+@@ -1072,7 +1072,7 @@ static void yy_reduce(
+ #line 1072 "configparser.c"
+ break;
+ case 24:
+-#line 322 "../../src/configparser.y"
++#line 322 "./configparser.y"
+ {
+ buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
+ buffer_free(yymsp[-2].minor.yy43);
+@@ -1090,7 +1090,7 @@ static void yy_reduce(
+ case 26:
+ break;
+ case 27:
+-#line 334 "../../src/configparser.y"
++#line 334 "./configparser.y"
+ {
+ data_config *dc;
+ dc = (data_config *)array_get_element(ctx->srv->config_context, "global");
+@@ -1101,7 +1101,7 @@ static void yy_reduce(
+ yy_destructor(12,&yymsp[0].minor);
+ break;
+ case 28:
+-#line 341 "../../src/configparser.y"
++#line 341 "./configparser.y"
+ {
+ data_config *cur;
+
+@@ -1119,7 +1119,7 @@ static void yy_reduce(
+ yy_destructor(14,&yymsp[0].minor);
+ break;
+ case 29:
+-#line 352 "../../src/configparser.y"
++#line 352 "./configparser.y"
+ {
+ if (yymsp[-3].minor.yy78->context_ndx >= yymsp[0].minor.yy78->context_ndx) {
+ fprintf(stderr, "unreachable else condition\n");
+@@ -1136,7 +1136,7 @@ static void yy_reduce(
+ yy_destructor(15,&yymsp[-1].minor);
+ break;
+ case 30:
+-#line 364 "../../src/configparser.y"
++#line 364 "./configparser.y"
+ {
+ yygotominor.yy78 = yymsp[0].minor.yy78;
+ yymsp[0].minor.yy78 = NULL;
+@@ -1144,7 +1144,7 @@ static void yy_reduce(
+ #line 1144 "configparser.c"
+ break;
+ case 31:
+-#line 369 "../../src/configparser.y"
++#line 369 "./configparser.y"
+ {
+ data_config *cur;
+
+@@ -1162,7 +1162,7 @@ static void yy_reduce(
+ yy_destructor(14,&yymsp[0].minor);
+ break;
+ case 32:
+-#line 380 "../../src/configparser.y"
++#line 380 "./configparser.y"
+ {
+ data_config *dc;
+ buffer *b, *rvalue, *op;
+@@ -1318,7 +1318,7 @@ static void yy_reduce(
+ yy_destructor(19,&yymsp[-2].minor);
+ break;
+ case 33:
+-#line 529 "../../src/configparser.y"
++#line 529 "./configparser.y"
+ {
+ yygotominor.yy27 = CONFIG_COND_EQ;
+ }
+@@ -1326,7 +1326,7 @@ static void yy_reduce(
+ yy_destructor(20,&yymsp[0].minor);
+ break;
+ case 34:
+-#line 532 "../../src/configparser.y"
++#line 532 "./configparser.y"
+ {
+ yygotominor.yy27 = CONFIG_COND_MATCH;
+ }
+@@ -1334,7 +1334,7 @@ static void yy_reduce(
+ yy_destructor(21,&yymsp[0].minor);
+ break;
+ case 35:
+-#line 535 "../../src/configparser.y"
++#line 535 "./configparser.y"
+ {
+ yygotominor.yy27 = CONFIG_COND_NE;
+ }
+@@ -1342,7 +1342,7 @@ static void yy_reduce(
+ yy_destructor(22,&yymsp[0].minor);
+ break;
+ case 36:
+-#line 538 "../../src/configparser.y"
++#line 538 "./configparser.y"
+ {
+ yygotominor.yy27 = CONFIG_COND_NOMATCH;
+ }
+@@ -1350,7 +1350,7 @@ static void yy_reduce(
+ yy_destructor(23,&yymsp[0].minor);
+ break;
+ case 37:
+-#line 542 "../../src/configparser.y"
++#line 542 "./configparser.y"
+ {
+ yygotominor.yy43 = NULL;
+ if (ctx->ok) {
+@@ -1370,7 +1370,7 @@ static void yy_reduce(
+ #line 1370 "configparser.c"
+ break;
+ case 38:
+-#line 559 "../../src/configparser.y"
++#line 559 "./configparser.y"
+ {
+ if (ctx->ok) {
+ if (0 != config_parse_file(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
+@@ -1384,7 +1384,7 @@ static void yy_reduce(
+ yy_destructor(24,&yymsp[-1].minor);
+ break;
+ case 39:
+-#line 569 "../../src/configparser.y"
++#line 569 "./configparser.y"
+ {
+ if (ctx->ok) {
+ if (0 != config_parse_cmd(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
+@@ -1424,7 +1424,7 @@ static void yy_parse_failed(
+ while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+ /* Here code is inserted which will be executed whenever the
+ ** parser fails */
+-#line 108 "../../src/configparser.y"
++#line 108 "./configparser.y"
+
+ ctx->ok = 0;
+
+--- lighttpd-1.4.28.orig/src/mod_ssi_exprparser.c
++++ lighttpd-1.4.28/src/mod_ssi_exprparser.c
+@@ -4,7 +4,7 @@
+ /* First off, code is include which follows the "include" declaration
+ ** in the input file. */
+ #include <stdio.h>
+-#line 6 "../../src/mod_ssi_exprparser.y"
++#line 6 "./mod_ssi_exprparser.y"
+
+ #include "mod_ssi_expr.h"
+ #include "buffer.h"
+@@ -347,7 +347,7 @@ static void yy_destructor(YYCODETYPE yym
+ case 10:
+ case 11:
+ case 12:
+-#line 22 "../../src/mod_ssi_exprparser.y"
++#line 22 "./mod_ssi_exprparser.y"
+ { buffer_free((yypminor->yy0)); }
+ #line 352 "mod_ssi_exprparser.c"
+ break;
+@@ -578,7 +578,7 @@ static void yy_reduce(
+ ** break;
+ */
+ case 0:
+-#line 29 "../../src/mod_ssi_exprparser.y"
++#line 29 "./mod_ssi_exprparser.y"
+ {
+ ctx->val.bo = ssi_val_tobool(yymsp[0].minor.yy29);
+ ctx->val.type = SSI_TYPE_BOOL;
+@@ -588,7 +588,7 @@ static void yy_reduce(
+ #line 588 "mod_ssi_exprparser.c"
+ break;
+ case 1:
+-#line 36 "../../src/mod_ssi_exprparser.y"
++#line 36 "./mod_ssi_exprparser.y"
+ {
+ int cmp;
+
+@@ -617,14 +617,14 @@ static void yy_reduce(
+ #line 617 "mod_ssi_exprparser.c"
+ break;
+ case 2:
+-#line 61 "../../src/mod_ssi_exprparser.y"
++#line 61 "./mod_ssi_exprparser.y"
+ {
+ yygotominor.yy29 = yymsp[0].minor.yy29;
+ }
+ #line 624 "mod_ssi_exprparser.c"
+ break;
+ case 3:
+-#line 64 "../../src/mod_ssi_exprparser.y"
++#line 64 "./mod_ssi_exprparser.y"
+ {
+ int e;
+
+@@ -639,7 +639,7 @@ static void yy_reduce(
+ yy_destructor(1,&yymsp[-1].minor);
+ break;
+ case 4:
+-#line 75 "../../src/mod_ssi_exprparser.y"
++#line 75 "./mod_ssi_exprparser.y"
+ {
+ int e;
+
+@@ -654,7 +654,7 @@ static void yy_reduce(
+ yy_destructor(2,&yymsp[-1].minor);
+ break;
+ case 5:
+-#line 86 "../../src/mod_ssi_exprparser.y"
++#line 86 "./mod_ssi_exprparser.y"
+ {
+ int e;
+
+@@ -668,7 +668,7 @@ static void yy_reduce(
+ yy_destructor(9,&yymsp[-1].minor);
+ break;
+ case 6:
+-#line 95 "../../src/mod_ssi_exprparser.y"
++#line 95 "./mod_ssi_exprparser.y"
+ {
+ yygotominor.yy29 = yymsp[-1].minor.yy29;
+ }
+@@ -677,7 +677,7 @@ static void yy_reduce(
+ yy_destructor(11,&yymsp[0].minor);
+ break;
+ case 7:
+-#line 99 "../../src/mod_ssi_exprparser.y"
++#line 99 "./mod_ssi_exprparser.y"
+ {
+ yygotominor.yy29 = ssi_val_init();
+ yygotominor.yy29->str = yymsp[0].minor.yy19;
+@@ -686,14 +686,14 @@ static void yy_reduce(
+ #line 686 "mod_ssi_exprparser.c"
+ break;
+ case 8:
+-#line 105 "../../src/mod_ssi_exprparser.y"
++#line 105 "./mod_ssi_exprparser.y"
+ {
+ yygotominor.yy19 = yymsp[0].minor.yy0;
+ }
+ #line 693 "mod_ssi_exprparser.c"
+ break;
+ case 9:
+-#line 109 "../../src/mod_ssi_exprparser.y"
++#line 109 "./mod_ssi_exprparser.y"
+ {
+ yygotominor.yy19 = yymsp[-1].minor.yy19;
+ buffer_append_string_buffer(yygotominor.yy19, yymsp[0].minor.yy0);
+@@ -702,37 +702,37 @@ static void yy_reduce(
+ #line 702 "mod_ssi_exprparser.c"
+ break;
+ case 10:
+-#line 115 "../../src/mod_ssi_exprparser.y"
++#line 115 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_EQ; }
+ #line 707 "mod_ssi_exprparser.c"
+ yy_destructor(3,&yymsp[0].minor);
+ break;
+ case 11:
+-#line 116 "../../src/mod_ssi_exprparser.y"
++#line 116 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_NE; }
+ #line 713 "mod_ssi_exprparser.c"
+ yy_destructor(4,&yymsp[0].minor);
+ break;
+ case 12:
+-#line 117 "../../src/mod_ssi_exprparser.y"
++#line 117 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_LE; }
+ #line 719 "mod_ssi_exprparser.c"
+ yy_destructor(8,&yymsp[0].minor);
+ break;
+ case 13:
+-#line 118 "../../src/mod_ssi_exprparser.y"
++#line 118 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_GE; }
+ #line 725 "mod_ssi_exprparser.c"
+ yy_destructor(6,&yymsp[0].minor);
+ break;
+ case 14:
+-#line 119 "../../src/mod_ssi_exprparser.y"
++#line 119 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_LT; }
+ #line 731 "mod_ssi_exprparser.c"
+ yy_destructor(7,&yymsp[0].minor);
+ break;
+ case 15:
+-#line 120 "../../src/mod_ssi_exprparser.y"
++#line 120 "./mod_ssi_exprparser.y"
+ { yygotominor.yy8 = SSI_COND_GT; }
+ #line 737 "mod_ssi_exprparser.c"
+ yy_destructor(5,&yymsp[0].minor);
+@@ -764,7 +764,7 @@ static void yy_parse_failed(
+ while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+ /* Here code is inserted which will be executed whenever the
+ ** parser fails */
+-#line 14 "../../src/mod_ssi_exprparser.y"
++#line 14 "./mod_ssi_exprparser.y"
+
+ ctx->ok = 0;
+
diff --git a/debian/patches/fix-CVE-2011-4362.patch b/debian/patches/fix-CVE-2011-4362.patch
new file mode 100644
index 0000000..cf39e6c
--- /dev/null
+++ b/debian/patches/fix-CVE-2011-4362.patch
@@ -0,0 +1,37 @@
+--- a/src/http_auth.c
++++ b/src/http_auth.c
+@@ -89,7 +89,7 @@
+ ch = in[0];
+ /* run through the whole string, converting as we go */
+ for (i = 0; i < in_len; i++) {
+- ch = in[i];
++ ch = (unsigned char) in[i];
+
+ if (ch == '\0') break;
+
+--- a/tests/mod-auth.t
++++ b/tests/mod-auth.t
+@@ -8,7 +8,7 @@
+
+ use strict;
+ use IO::Socket;
+-use Test::More tests => 14;
++use Test::More tests => 15;
+ use LightyTest;
+
+ my $tf = LightyTest->new();
+@@ -25,6 +25,14 @@
+
+ $t->{REQUEST} = ( <<EOF
+ GET /server-status HTTP/1.0
++Authorization: Basic \x80mFuOmphb
++EOF
++ );
++$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
++ok($tf->handle_http($t) == 0, 'Basic-Auth: Invalid base64 Auth-token');
++
++$t->{REQUEST} = ( <<EOF
++GET /server-status HTTP/1.0
+ Authorization: Basic amFuOmphb
+ EOF
+ );
diff --git a/debian/patches/series b/debian/patches/series
index a2c5449..8441374 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,4 @@
silence-errors.diff
+fix-CVE-2011-4362.patch
+ssl-mitigate-beast.patch
debian-changes-1.4.28-2
diff --git a/debian/patches/ssl-mitigate-beast.patch b/debian/patches/ssl-mitigate-beast.patch
new file mode 100644
index 0000000..9a8e6b0
--- /dev/null
+++ b/debian/patches/ssl-mitigate-beast.patch
@@ -0,0 +1,67 @@
+--- a/src/base.h
++++ b/src/base.h
+@@ -275,6 +275,7 @@
+ buffer *ssl_pemfile;
+ buffer *ssl_ca_file;
+ buffer *ssl_cipher_list;
++ unsigned short ssl_honor_cipher_order; /* determine SSL cipher in server-preferred order, not client-order */
+ unsigned short ssl_use_sslv2;
+ unsigned short ssl_verifyclient;
+ unsigned short ssl_verifyclient_enforce;
+--- a/src/configfile.c
++++ b/src/configfile.c
+@@ -102,6 +102,7 @@
+ { "ssl.verifyclient.exportcert", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 60 */
+
+ { "server.set-v6only", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 61 */
++ { "ssl.honor-cipher-order", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER}, /* 62 */
+
+ { "server.host", "use server.bind instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+ { "server.docroot", "use server.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+@@ -171,6 +172,7 @@
+ s->max_write_idle = 360;
+ s->use_xattr = 0;
+ s->is_ssl = 0;
++ s->ssl_honor_cipher_order = 1;
+ s->ssl_use_sslv2 = 0;
+ s->use_ipv6 = 0;
+ s->set_v6only = 1;
+@@ -246,6 +248,7 @@
+ cv[58].destination = &(s->ssl_verifyclient_depth);
+ cv[59].destination = s->ssl_verifyclient_username;
+ cv[60].destination = &(s->ssl_verifyclient_export_cert);
++ cv[62].destination = &(s->ssl_honor_cipher_order);
+
+ srv->config_storage[i] = s;
+
+@@ -324,6 +327,7 @@
+ #endif
+ PATCH(ssl_ca_file);
+ PATCH(ssl_cipher_list);
++ PATCH(ssl_honor_cipher_order);
+ PATCH(ssl_use_sslv2);
+ PATCH(etag_use_inode);
+ PATCH(etag_use_mtime);
+@@ -388,6 +392,8 @@
+ #endif
+ } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.ca-file"))) {
+ PATCH(ssl_ca_file);
++ } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.honor-cipher-order"))) {
++ PATCH(ssl_honor_cipher_order);
+ } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.use-sslv2"))) {
+ PATCH(ssl_use_sslv2);
+ } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.cipher-list"))) {
+--- a/src/network.c
++++ b/src/network.c
+@@ -552,6 +552,11 @@
+ ERR_error_string(ERR_get_error(), NULL));
+ return -1;
+ }
++
++ if (s->ssl_honor_cipher_order) {
++ SSL_CTX_set_options(s->ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
++ }
++
+ }
+
+ if (!buffer_is_empty(s->ssl_ca_file)) {
diff --git a/ltmain.sh b/ltmain.sh
index d88da2c..d88da2c 100644..100755
--- a/ltmain.sh
+++ b/ltmain.sh
diff --git a/src/configparser.c b/src/configparser.c
index 808cd66..24e973b 100644
--- a/src/configparser.c
+++ b/src/configparser.c
@@ -4,7 +4,7 @@
/* First off, code is include which follows the "include" declaration
** in the input file. */
#include <stdio.h>
-#line 5 "./configparser.y"
+#line 5 "../../src/configparser.y"
#include "configfile.h"
#include "buffer.h"
@@ -518,42 +518,42 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
case 23:
case 24:
case 25:
-#line 144 "./configparser.y"
+#line 144 "../../src/configparser.y"
{ buffer_free((yypminor->yy0)); }
#line 523 "configparser.c"
break;
case 35:
-#line 135 "./configparser.y"
+#line 135 "../../src/configparser.y"
{ (yypminor->yy41)->free((yypminor->yy41)); }
#line 528 "configparser.c"
break;
case 36:
-#line 136 "./configparser.y"
+#line 136 "../../src/configparser.y"
{ (yypminor->yy41)->free((yypminor->yy41)); }
#line 533 "configparser.c"
break;
case 37:
-#line 137 "./configparser.y"
+#line 137 "../../src/configparser.y"
{ (yypminor->yy41)->free((yypminor->yy41)); }
#line 538 "configparser.c"
break;
case 39:
-#line 138 "./configparser.y"
+#line 138 "../../src/configparser.y"
{ array_free((yypminor->yy40)); }
#line 543 "configparser.c"
break;
case 40:
-#line 139 "./configparser.y"
+#line 139 "../../src/configparser.y"
{ array_free((yypminor->yy40)); }
#line 548 "configparser.c"
break;
case 41:
-#line 140 "./configparser.y"
+#line 140 "../../src/configparser.y"
{ buffer_free((yypminor->yy43)); }
#line 553 "configparser.c"
break;
case 42:
-#line 141 "./configparser.y"
+#line 141 "../../src/configparser.y"
{ buffer_free((yypminor->yy43)); }
#line 558 "configparser.c"
break;
@@ -823,7 +823,7 @@ static void yy_reduce(
/* No destructor defined for global */
break;
case 5:
-#line 117 "./configparser.y"
+#line 117 "../../src/configparser.y"
{ yymsp[-1].minor.yy78 = NULL; }
#line 828 "configparser.c"
yy_destructor(1,&yymsp[0].minor);
@@ -838,7 +838,7 @@ static void yy_reduce(
yy_destructor(1,&yymsp[0].minor);
break;
case 9:
-#line 146 "./configparser.y"
+#line 146 "../../src/configparser.y"
{
if (ctx->ok) {
buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
@@ -866,7 +866,7 @@ static void yy_reduce(
yy_destructor(2,&yymsp[-1].minor);
break;
case 10:
-#line 170 "./configparser.y"
+#line 170 "../../src/configparser.y"
{
array *vars = ctx->current->value;
data_unset *du;
@@ -909,7 +909,7 @@ static void yy_reduce(
yy_destructor(3,&yymsp[-1].minor);
break;
case 11:
-#line 209 "./configparser.y"
+#line 209 "../../src/configparser.y"
{
if (strchr(yymsp[0].minor.yy0->ptr, '.') == NULL) {
yygotominor.yy43 = buffer_init_string("var.");
@@ -924,7 +924,7 @@ static void yy_reduce(
#line 924 "configparser.c"
break;
case 12:
-#line 221 "./configparser.y"
+#line 221 "../../src/configparser.y"
{
yygotominor.yy41 = configparser_merge_data(yymsp[-2].minor.yy41, yymsp[0].minor.yy41);
if (NULL == yygotominor.yy41) {
@@ -938,7 +938,7 @@ static void yy_reduce(
yy_destructor(5,&yymsp[-1].minor);
break;
case 13:
-#line 231 "./configparser.y"
+#line 231 "../../src/configparser.y"
{
yygotominor.yy41 = yymsp[0].minor.yy41;
yymsp[0].minor.yy41 = NULL;
@@ -946,7 +946,7 @@ static void yy_reduce(
#line 946 "configparser.c"
break;
case 14:
-#line 236 "./configparser.y"
+#line 236 "../../src/configparser.y"
{
yygotominor.yy41 = NULL;
if (strncmp(yymsp[0].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
@@ -976,7 +976,7 @@ static void yy_reduce(
#line 976 "configparser.c"
break;
case 15:
-#line 263 "./configparser.y"
+#line 263 "../../src/configparser.y"
{
yygotominor.yy41 = (data_unset *)data_string_init();
buffer_copy_string_buffer(((data_string *)(yygotominor.yy41))->value, yymsp[0].minor.yy0);
@@ -986,7 +986,7 @@ static void yy_reduce(
#line 986 "configparser.c"
break;
case 16:
-#line 270 "./configparser.y"
+#line 270 "../../src/configparser.y"
{
yygotominor.yy41 = (data_unset *)data_integer_init();
((data_integer *)(yygotominor.yy41))->value = strtol(yymsp[0].minor.yy0->ptr, NULL, 10);
@@ -996,7 +996,7 @@ static void yy_reduce(
#line 996 "configparser.c"
break;
case 17:
-#line 276 "./configparser.y"
+#line 276 "../../src/configparser.y"
{
yygotominor.yy41 = (data_unset *)data_array_init();
array_free(((data_array *)(yygotominor.yy41))->value);
@@ -1006,7 +1006,7 @@ static void yy_reduce(
#line 1006 "configparser.c"
break;
case 18:
-#line 282 "./configparser.y"
+#line 282 "../../src/configparser.y"
{
yygotominor.yy40 = array_init();
}
@@ -1015,7 +1015,7 @@ static void yy_reduce(
yy_destructor(9,&yymsp[0].minor);
break;
case 19:
-#line 285 "./configparser.y"
+#line 285 "../../src/configparser.y"
{
yygotominor.yy40 = yymsp[-1].minor.yy40;
yymsp[-1].minor.yy40 = NULL;
@@ -1025,7 +1025,7 @@ static void yy_reduce(
yy_destructor(9,&yymsp[0].minor);
break;
case 20:
-#line 290 "./configparser.y"
+#line 290 "../../src/configparser.y"
{
if (buffer_is_empty(yymsp[0].minor.yy41->key) ||
NULL == array_get_element(yymsp[-2].minor.yy40, yymsp[0].minor.yy41->key->ptr)) {
@@ -1046,7 +1046,7 @@ static void yy_reduce(
yy_destructor(10,&yymsp[-1].minor);
break;
case 21:
-#line 307 "./configparser.y"
+#line 307 "../../src/configparser.y"
{
yygotominor.yy40 = yymsp[-1].minor.yy40;
yymsp[-1].minor.yy40 = NULL;
@@ -1055,7 +1055,7 @@ static void yy_reduce(
yy_destructor(10,&yymsp[0].minor);
break;
case 22:
-#line 312 "./configparser.y"
+#line 312 "../../src/configparser.y"
{
yygotominor.yy40 = array_init();
array_insert_unique(yygotominor.yy40, yymsp[0].minor.yy41);
@@ -1064,7 +1064,7 @@ static void yy_reduce(
#line 1064 "configparser.c"
break;
case 23:
-#line 318 "./configparser.y"
+#line 318 "../../src/configparser.y"
{
yygotominor.yy41 = yymsp[0].minor.yy41;
yymsp[0].minor.yy41 = NULL;
@@ -1072,7 +1072,7 @@ static void yy_reduce(
#line 1072 "configparser.c"
break;
case 24:
-#line 322 "./configparser.y"
+#line 322 "../../src/configparser.y"
{
buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
buffer_free(yymsp[-2].minor.yy43);
@@ -1090,7 +1090,7 @@ static void yy_reduce(
case 26:
break;
case 27:
-#line 334 "./configparser.y"
+#line 334 "../../src/configparser.y"
{
data_config *dc;
dc = (data_config *)array_get_element(ctx->srv->config_context, "global");
@@ -1101,7 +1101,7 @@ static void yy_reduce(
yy_destructor(12,&yymsp[0].minor);
break;
case 28:
-#line 341 "./configparser.y"
+#line 341 "../../src/configparser.y"
{
data_config *cur;
@@ -1119,7 +1119,7 @@ static void yy_reduce(
yy_destructor(14,&yymsp[0].minor);
break;
case 29:
-#line 352 "./configparser.y"
+#line 352 "../../src/configparser.y"
{
if (yymsp[-3].minor.yy78->context_ndx >= yymsp[0].minor.yy78->context_ndx) {
fprintf(stderr, "unreachable else condition\n");
@@ -1136,7 +1136,7 @@ static void yy_reduce(
yy_destructor(15,&yymsp[-1].minor);
break;
case 30:
-#line 364 "./configparser.y"
+#line 364 "../../src/configparser.y"
{
yygotominor.yy78 = yymsp[0].minor.yy78;
yymsp[0].minor.yy78 = NULL;
@@ -1144,7 +1144,7 @@ static void yy_reduce(
#line 1144 "configparser.c"
break;
case 31:
-#line 369 "./configparser.y"
+#line 369 "../../src/configparser.y"
{
data_config *cur;
@@ -1162,7 +1162,7 @@ static void yy_reduce(
yy_destructor(14,&yymsp[0].minor);
break;
case 32:
-#line 380 "./configparser.y"
+#line 380 "../../src/configparser.y"
{
data_config *dc;
buffer *b, *rvalue, *op;
@@ -1318,7 +1318,7 @@ static void yy_reduce(
yy_destructor(19,&yymsp[-2].minor);
break;
case 33:
-#line 529 "./configparser.y"
+#line 529 "../../src/configparser.y"
{
yygotominor.yy27 = CONFIG_COND_EQ;
}
@@ -1326,7 +1326,7 @@ static void yy_reduce(
yy_destructor(20,&yymsp[0].minor);
break;
case 34:
-#line 532 "./configparser.y"
+#line 532 "../../src/configparser.y"
{
yygotominor.yy27 = CONFIG_COND_MATCH;
}
@@ -1334,7 +1334,7 @@ static void yy_reduce(
yy_destructor(21,&yymsp[0].minor);
break;
case 35:
-#line 535 "./configparser.y"
+#line 535 "../../src/configparser.y"
{
yygotominor.yy27 = CONFIG_COND_NE;
}
@@ -1342,7 +1342,7 @@ static void yy_reduce(
yy_destructor(22,&yymsp[0].minor);
break;
case 36:
-#line 538 "./configparser.y"
+#line 538 "../../src/configparser.y"
{
yygotominor.yy27 = CONFIG_COND_NOMATCH;
}
@@ -1350,7 +1350,7 @@ static void yy_reduce(
yy_destructor(23,&yymsp[0].minor);
break;
case 37:
-#line 542 "./configparser.y"
+#line 542 "../../src/configparser.y"
{
yygotominor.yy43 = NULL;
if (ctx->ok) {
@@ -1370,7 +1370,7 @@ static void yy_reduce(
#line 1370 "configparser.c"
break;
case 38:
-#line 559 "./configparser.y"
+#line 559 "../../src/configparser.y"
{
if (ctx->ok) {
if (0 != config_parse_file(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
@@ -1384,7 +1384,7 @@ static void yy_reduce(
yy_destructor(24,&yymsp[-1].minor);
break;
case 39:
-#line 569 "./configparser.y"
+#line 569 "../../src/configparser.y"
{
if (ctx->ok) {
if (0 != config_parse_cmd(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
@@ -1424,7 +1424,7 @@ static void yy_parse_failed(
while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
/* Here code is inserted which will be executed whenever the
** parser fails */
-#line 108 "./configparser.y"
+#line 108 "../../src/configparser.y"
ctx->ok = 0;
diff --git a/src/mod_ssi_exprparser.c b/src/mod_ssi_exprparser.c
index 36b0c74..6a0373d 100644
--- a/src/mod_ssi_exprparser.c
+++ b/src/mod_ssi_exprparser.c
@@ -4,7 +4,7 @@
/* First off, code is include which follows the "include" declaration
** in the input file. */
#include <stdio.h>
-#line 6 "./mod_ssi_exprparser.y"
+#line 6 "../../src/mod_ssi_exprparser.y"
#include "mod_ssi_expr.h"
#include "buffer.h"
@@ -347,7 +347,7 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
case 10:
case 11:
case 12:
-#line 22 "./mod_ssi_exprparser.y"
+#line 22 "../../src/mod_ssi_exprparser.y"
{ buffer_free((yypminor->yy0)); }
#line 352 "mod_ssi_exprparser.c"
break;
@@ -578,7 +578,7 @@ static void yy_reduce(
** break;
*/
case 0:
-#line 29 "./mod_ssi_exprparser.y"
+#line 29 "../../src/mod_ssi_exprparser.y"
{
ctx->val.bo = ssi_val_tobool(yymsp[0].minor.yy29);
ctx->val.type = SSI_TYPE_BOOL;
@@ -588,7 +588,7 @@ static void yy_reduce(
#line 588 "mod_ssi_exprparser.c"
break;
case 1:
-#line 36 "./mod_ssi_exprparser.y"
+#line 36 "../../src/mod_ssi_exprparser.y"
{
int cmp;
@@ -617,14 +617,14 @@ static void yy_reduce(
#line 617 "mod_ssi_exprparser.c"
break;
case 2:
-#line 61 "./mod_ssi_exprparser.y"
+#line 61 "../../src/mod_ssi_exprparser.y"
{
yygotominor.yy29 = yymsp[0].minor.yy29;
}
#line 624 "mod_ssi_exprparser.c"
break;
case 3:
-#line 64 "./mod_ssi_exprparser.y"
+#line 64 "../../src/mod_ssi_exprparser.y"
{
int e;
@@ -639,7 +639,7 @@ static void yy_reduce(
yy_destructor(1,&yymsp[-1].minor);
break;
case 4:
-#line 75 "./mod_ssi_exprparser.y"
+#line 75 "../../src/mod_ssi_exprparser.y"
{
int e;
@@ -654,7 +654,7 @@ static void yy_reduce(
yy_destructor(2,&yymsp[-1].minor);
break;
case 5:
-#line 86 "./mod_ssi_exprparser.y"
+#line 86 "../../src/mod_ssi_exprparser.y"
{
int e;
@@ -668,7 +668,7 @@ static void yy_reduce(
yy_destructor(9,&yymsp[-1].minor);
break;
case 6:
-#line 95 "./mod_ssi_exprparser.y"
+#line 95 "../../src/mod_ssi_exprparser.y"
{
yygotominor.yy29 = yymsp[-1].minor.yy29;
}
@@ -677,7 +677,7 @@ static void yy_reduce(
yy_destructor(11,&yymsp[0].minor);
break;
case 7:
-#line 99 "./mod_ssi_exprparser.y"
+#line 99 "../../src/mod_ssi_exprparser.y"
{
yygotominor.yy29 = ssi_val_init();
yygotominor.yy29->str = yymsp[0].minor.yy19;
@@ -686,14 +686,14 @@ static void yy_reduce(
#line 686 "mod_ssi_exprparser.c"
break;
case 8:
-#line 105 "./mod_ssi_exprparser.y"
+#line 105 "../../src/mod_ssi_exprparser.y"
{
yygotominor.yy19 = yymsp[0].minor.yy0;
}
#line 693 "mod_ssi_exprparser.c"
break;
case 9:
-#line 109 "./mod_ssi_exprparser.y"
+#line 109 "../../src/mod_ssi_exprparser.y"
{
yygotominor.yy19 = yymsp[-1].minor.yy19;
buffer_append_string_buffer(yygotominor.yy19, yymsp[0].minor.yy0);
@@ -702,37 +702,37 @@ static void yy_reduce(
#line 702 "mod_ssi_exprparser.c"
break;
case 10:
-#line 115 "./mod_ssi_exprparser.y"
+#line 115 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_EQ; }
#line 707 "mod_ssi_exprparser.c"
yy_destructor(3,&yymsp[0].minor);
break;
case 11:
-#line 116 "./mod_ssi_exprparser.y"
+#line 116 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_NE; }
#line 713 "mod_ssi_exprparser.c"
yy_destructor(4,&yymsp[0].minor);
break;
case 12:
-#line 117 "./mod_ssi_exprparser.y"
+#line 117 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_LE; }
#line 719 "mod_ssi_exprparser.c"
yy_destructor(8,&yymsp[0].minor);
break;
case 13:
-#line 118 "./mod_ssi_exprparser.y"
+#line 118 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_GE; }
#line 725 "mod_ssi_exprparser.c"
yy_destructor(6,&yymsp[0].minor);
break;
case 14:
-#line 119 "./mod_ssi_exprparser.y"
+#line 119 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_LT; }
#line 731 "mod_ssi_exprparser.c"
yy_destructor(7,&yymsp[0].minor);
break;
case 15:
-#line 120 "./mod_ssi_exprparser.y"
+#line 120 "../../src/mod_ssi_exprparser.y"
{ yygotominor.yy8 = SSI_COND_GT; }
#line 737 "mod_ssi_exprparser.c"
yy_destructor(5,&yymsp[0].minor);
@@ -764,7 +764,7 @@ static void yy_parse_failed(
while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
/* Here code is inserted which will be executed whenever the
** parser fails */
-#line 14 "./mod_ssi_exprparser.y"
+#line 14 "../../src/mod_ssi_exprparser.y"
ctx->ok = 0;
diff --git a/tests/core-404-handler.t b/tests/core-404-handler.t
index 599ade2..599ade2 100644..100755
--- a/tests/core-404-handler.t
+++ b/tests/core-404-handler.t
diff --git a/tests/symlink.t b/tests/symlink.t
index 9b275bd..9b275bd 100644..100755
--- a/tests/symlink.t
+++ b/tests/symlink.t