Alejandro Mery
17 years ago
3 changed files with 6 additions and 208 deletions
@ -1,205 +0,0 @@ |
|||||||
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
||||||
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
||||||
#
|
|
||||||
# Filename: package/.../pound/pound-2.3.2-custom-redirect.patch
|
|
||||||
# Copyright (C) 2008 The OpenSDE Project
|
|
||||||
#
|
|
||||||
# More information can be found in the files COPYING and README.
|
|
||||||
#
|
|
||||||
# This patch file is dual-licensed. It is available under the license the
|
|
||||||
# patched project is licensed under, as long as it is an OpenSource license
|
|
||||||
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
||||||
# of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
||||||
|
|
||||||
Author: Chris Barnett <barn3y(at)gmail.com>
|
|
||||||
Initial Package Version: 2.3.2
|
|
||||||
Origin: http://www.apsis.ch/pound/pound_list/archive/2007/2007-09/1190613609000#1190613609000
|
|
||||||
Description: This patch adds the capability to configure 301 or 307 redirects.
|
|
||||||
|
|
||||||
Usage Information:
|
|
||||||
|
|
||||||
You can force a 301 Moved Permanently redirect like this:
|
|
||||||
|
|
||||||
ListenHTTP
|
|
||||||
Address 0.0.0.0
|
|
||||||
Port 80
|
|
||||||
|
|
||||||
Service
|
|
||||||
HeadRequire "Host: .*www.server0.com.*"
|
|
||||||
Redirect 301 "http://www.server1.com"
|
|
||||||
End
|
|
||||||
End
|
|
||||||
|
|
||||||
You can force a 302 Found or 307 Temporary Redirect in the same way.
|
|
||||||
|
|
||||||
The existing Redirect syntax still works as expected:
|
|
||||||
|
|
||||||
ListenHTTP
|
|
||||||
Address 0.0.0.0
|
|
||||||
Port 80
|
|
||||||
|
|
||||||
Service
|
|
||||||
HeadRequire "Host: .*www.server0.com.*"
|
|
||||||
Redirect "http://www.server1.com"
|
|
||||||
End
|
|
||||||
End
|
|
||||||
|
|
||||||
Will use a 302 Found redirect.
|
|
||||||
|
|
||||||
diff -Naur Pound-2.3.2/config.c Pound-2.3.2-custom-redirect/config.c
|
|
||||||
--- Pound-2.3.2/config.c 2007-05-18 18:34:53.000000000 +1000
|
|
||||||
+++ Pound-2.3.2-custom-redirect/config.c 2007-09-24 14:51:40.000000000 +1000
|
|
||||||
@@ -425,7 +425,9 @@
|
|
||||||
be->alive = 1;
|
|
||||||
pthread_mutex_init(&res->mut, NULL);
|
|
||||||
lin[matches[1].rm_eo] = '\0';
|
|
||||||
- if((be->url = strdup(lin + matches[1].rm_so)) == NULL) {
|
|
||||||
+ be->redir_type = atoi(lin + matches[1].rm_so);
|
|
||||||
+ lin[matches[3].rm_eo] = '\0';
|
|
||||||
+ if((be->url = strdup(lin + matches[3].rm_so)) == NULL) {
|
|
||||||
logmsg(LOG_ERR, "line %d: Redirector config: out of memory - aborted", n_lin);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
@@ -1083,7 +1085,7 @@
|
|
||||||
|| regcomp(&TimeOut, "^[ \t]*TimeOut[ \t]+([1-9][0-9]*)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
|| regcomp(&HAport, "^[ \t]*HAport[ \t]+([1-9][0-9]*)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
|| regcomp(&HAportAddr, "^[ \t]*HAport[ \t]+([^ \t]+)[ \t]+([1-9][0-9]*)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
- || regcomp(&Redirect, "^[ \t]*Redirect[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
+ || regcomp(&Redirect, "^[ \t]*Redirect[ \t]+((301|302|307)[ \t]+)?\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
|| regcomp(&Session, "^[ \t]*Session[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
|| regcomp(&Type, "^[ \t]*Type[ \t]+([^ \t]+)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
|| regcomp(&TTL, "^[ \t]*TTL[ \t]+([1-9][0-9]*)[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
|
|
||||||
diff -Naur Pound-2.3.2/http.c Pound-2.3.2-custom-redirect/http.c
|
|
||||||
--- Pound-2.3.2/http.c 2007-05-18 18:34:53.000000000 +1000
|
|
||||||
+++ Pound-2.3.2-custom-redirect/http.c 2007-09-24 15:07:20.000000000 +1000
|
|
||||||
@@ -52,23 +52,32 @@
|
|
||||||
* Reply with a redirect
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
-redirect_reply(BIO *const c, const char *url)
|
|
||||||
+redirect_reply(BIO *const c, const int redir_type, const char *url)
|
|
||||||
{
|
|
||||||
char rep[MAXBUF], cont[MAXBUF];
|
|
||||||
+ char *type_str;
|
|
||||||
|
|
||||||
snprintf(cont, sizeof(cont),
|
|
||||||
"<html><head><title>Redirect</title></head><body><h1>Redirect</h1><p>You should go to <a href=\"%s\">%s</a></p></body></html>",
|
|
||||||
url, url);
|
|
||||||
- /*
|
|
||||||
- * This really should be 307, but some HTTP/1.0 clients do not understand that, so we use 302
|
|
||||||
+
|
|
||||||
+ switch(redir_type) {
|
|
||||||
+ case 301:
|
|
||||||
+ type_str = "301 Moved Permanently";
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case 307:
|
|
||||||
+ type_str = "307 Temporary Redirect";
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ type_str = "302 Found";
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
snprintf(rep, sizeof(rep),
|
|
||||||
- "HTTP/1.0 307 Temporary Redirect\r\nLocation: %s\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n",
|
|
||||||
- url, strlen(cont));
|
|
||||||
- */
|
|
||||||
- snprintf(rep, sizeof(rep),
|
|
||||||
- "HTTP/1.0 302 Found\r\nLocation: %s\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n",
|
|
||||||
- url, strlen(cont));
|
|
||||||
+ "HTTP/1.0 %s\r\nLocation: %s\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n",
|
|
||||||
+ type_str, url, strlen(cont));
|
|
||||||
BIO_write(c, rep, strlen(rep));
|
|
||||||
BIO_write(c, cont, strlen(cont));
|
|
||||||
BIO_flush(c);
|
|
||||||
@@ -996,7 +1005,7 @@
|
|
||||||
snprintf(buf, sizeof(buf) - 1, "%s%s", cur_backend->url, url);
|
|
||||||
else
|
|
||||||
strncpy(buf, cur_backend->url, sizeof(buf) - 1);
|
|
||||||
- redirect_reply(cl, buf);
|
|
||||||
+ redirect_reply(cl, cur_backend->redir_type, buf);
|
|
||||||
addr2str(caddr, MAXBUF - 1, &from_host);
|
|
||||||
switch(lstn->log_level) {
|
|
||||||
case 0:
|
|
||||||
diff -Naur Pound-2.3.2/pound.8 Pound-2.3.2-custom-redirect/pound.8
|
|
||||||
--- Pound-2.3.2/pound.8 2007-05-18 18:34:53.000000000 +1000
|
|
||||||
+++ Pound-2.3.2-custom-redirect/pound.8 2007-09-24 15:06:14.000000000 +1000
|
|
||||||
@@ -544,11 +544,13 @@
|
|
||||||
.B Pound
|
|
||||||
will attempt to load-balance between them.
|
|
||||||
.TP
|
|
||||||
-\fBRedirect\fR "url"
|
|
||||||
+\fBRedirect\fR [301|302|307] "url"
|
|
||||||
This is a special type of back-end. Instead of sending the request to a back-end
|
|
||||||
.B Pound
|
|
||||||
-replies immediately with a redirection to the given URL. You may define multiple
|
|
||||||
-redirectors in a service, as well as mixing them with regular back-ends.
|
|
||||||
+replies immediately with a redirection to the given URL. You may specify the type
|
|
||||||
+of redirection used: 301 Moved Permanently, 302 Found (default if none specified),
|
|
||||||
+or 307 Temporary Redirect. You may define multiple redirectors in a service, as
|
|
||||||
+well as mixing them with regular back-ends.
|
|
||||||
.IP
|
|
||||||
The address the client is redirected to is determined by the actual
|
|
||||||
.I url
|
|
||||||
@@ -562,7 +564,7 @@
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
|
||||||
- Redirect "http://abc.example"
|
|
||||||
+ Redirect 307 "http://abc.example"
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
|
||||||
@@ -574,7 +576,7 @@
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
|
||||||
- Redirect "http://abc.example/index.html"
|
|
||||||
+ Redirect 307 "http://abc.example/index.html"
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
|
||||||
@@ -582,12 +584,11 @@
|
|
||||||
.IR "http://abc.example/index.html".
|
|
||||||
.IP
|
|
||||||
.IR "Technical note":
|
|
||||||
-in an ideal world
|
|
||||||
+Ideally, "307 Temporary Redirect" should be used instead of "302 Found".
|
|
||||||
+Unfortunately, that is not yet supported by all clients (in particular
|
|
||||||
+HTTP 1.0 ones), so
|
|
||||||
.B Pound
|
|
||||||
-should reply with a "307 Temporary Redirect" status. Unfortunately, that is not
|
|
||||||
-yet supported by all clients (in particular HTTP 1.0 ones), so
|
|
||||||
-.B Pound
|
|
||||||
-currently replies with a "302 Found" instead.
|
|
||||||
+currently defaults to "302 Found" instead.
|
|
||||||
.TP
|
|
||||||
\fBEmergency\fR
|
|
||||||
Directives enclosed between an
|
|
||||||
@@ -940,7 +941,7 @@
|
|
||||||
.br
|
|
||||||
Url "/forbidden.*"
|
|
||||||
.br
|
|
||||||
- Redirect "https://xyzzy.com"
|
|
||||||
+ Redirect 302 "https://xyzzy.com"
|
|
||||||
.br
|
|
||||||
End
|
|
||||||
.br
|
|
||||||
diff -Naur Pound-2.3.2/pound.h Pound-2.3.2-custom-redirect/pound.h
|
|
||||||
--- Pound-2.3.2/pound.h 2007-05-18 18:34:53.000000000 +1000
|
|
||||||
+++ Pound-2.3.2-custom-redirect/pound.h 2007-09-24 14:05:30.000000000 +1000
|
|
||||||
@@ -288,7 +288,8 @@
|
|
||||||
int priority; /* priority */
|
|
||||||
int to;
|
|
||||||
struct sockaddr_in HA; /* HA address & port */
|
|
||||||
- char *url; /* for redirectors */
|
|
||||||
+ char *url; /* (URL for redirectors) */
|
|
||||||
+ int redir_type; /* redirect type (for redirectors) */
|
|
||||||
int redir_req; /* the redirect should include the request path */
|
|
||||||
pthread_mutex_t mut; /* mutex for this back-end */
|
|
||||||
int n_requests; /* number of requests seen */
|
|
Loading…
Reference in new issue