aboutsummaryrefslogtreecommitdiffstats
path: root/packages/lighttpd/lighttpd/mod_redirect.c.patch
blob: 7bbdf32082e1f5293383438e1b5921127fa906e3 (plain)
1
2
3
4
5
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Backport support for url.redirect-code directive from 1.5 branch.

diff -urN lighttpd-1.4.18.orig/src/mod_redirect.c lighttpd-1.4.18/src/mod_redirect.c
--- lighttpd-1.4.18.orig/src/mod_redirect.c	2007-04-10 09:52:58.000000000 +0200
+++ lighttpd-1.4.18/src/mod_redirect.c	2008-06-11 17:38:50.000000000 +0200
@@ -16,6 +16,8 @@
 typedef struct {
 	pcre_keyvalue_buffer *redirect;
 	data_config *context; /* to which apply me */
+
+	unsigned short redirect_code;
 } plugin_config;
 
 typedef struct {
@@ -72,6 +74,7 @@
 
 	config_values_t cv[] = {
 		{ "url.redirect",               NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
+		{ "url.redirect-code",          NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
 		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
 	};
 
@@ -90,6 +93,7 @@
 		s->redirect   = pcre_keyvalue_buffer_init();
 
 		cv[0].destination = s->redirect;
+		cv[1].destination = &(s->redirect_code);
 
 		p->config_storage[i] = s;
 		ca = ((data_config *)srv->config_context->data[i])->value;
@@ -140,6 +144,7 @@
 	plugin_config *s = p->config_storage[0];
 
 	p->conf.redirect = s->redirect;
+	p->conf.redirect_code = s->redirect_code;
 	p->conf.context = NULL;
 
 	/* skip the first, the global context */
@@ -157,6 +162,8 @@
 			if (0 == strcmp(du->key->ptr, "url.redirect")) {
 				p->conf.redirect = s->redirect;
 				p->conf.context = dc;
+			} else if (0 == strcmp(du->key->ptr, "url.redirect-code")) {
+				p->conf.redirect_code = s->redirect_code;
 			}
 		}
 	}
@@ -250,7 +257,7 @@
 
 			response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->location));
 
-			con->http_status = 301;
+			con->http_status = p->conf.redirect_code > 99 && p->conf.redirect_code < 1000 ? p->conf.redirect_code : 301;
 			con->file_finished = 1;
 
 			return HANDLER_FINISHED;