Hello,

I need to return HTTP 410 Gone to certain incoming requests. The
attached patch adds deny_status 410 to http-request-deny. It partly
fixes https://github.com/haproxy/haproxy/issues/80.

Best regards,

Florian
From 2336fe0d37a0edeb61ce39a6fe1c5477e6fe6e3d Mon Sep 17 00:00:00 2001
From: Florian Tham <t...@fidion.de>
Date: Wed, 8 Jan 2020 10:19:05 +0100
Subject: [PATCH] MINOR: http: Add 410 to http-request deny

This patch adds http status code 410 Gone to http-request deny.
---
 doc/configuration.txt |  8 +++++---
 include/common/http.h |  1 +
 src/http.c            | 11 +++++++++++
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/doc/configuration.txt b/doc/configuration.txt
index 9bc7d7150..69daaa8b7 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -374,6 +374,8 @@ HAProxy may emit the following status codes by itself :
         accessing the stats page)
    403  when a request is forbidden by a "http-request deny" rule
    408  when the request timeout strikes before the request is complete
+   410  when the requested resource is no longer available and will not
+        be available again
    500  when haproxy encounters an unrecoverable internal error, such as a
         memory allocation failure, which should never happen
    502  when the server returns an empty, invalid or incomplete response, or
@@ -3605,7 +3607,7 @@ errorfile <code> <file>
                                  yes   |    yes   |   yes  |   yes
   Arguments :
     <code>    is the HTTP status code. Currently, HAProxy is capable of
-              generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
+              generating codes 200, 400, 403, 405, 408, 410, 425, 429, 500, 502,
               503, and 504.
 
     <file>    designates a file containing the full HTTP response. It is
@@ -3654,7 +3656,7 @@ errorloc302 <code> <url>
                                  yes   |    yes   |   yes  |   yes
   Arguments :
     <code>    is the HTTP status code. Currently, HAProxy is capable of
-              generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
+              generating codes 200, 400, 403, 405, 408, 410, 425, 429, 500, 502,
               503, and 504.
 
     <url>     it is the exact contents of the "Location" header. It may contain
@@ -3686,7 +3688,7 @@ errorloc303 <code> <url>
                                  yes   |    yes   |   yes  |   yes
   Arguments :
     <code>    is the HTTP status code. Currently, HAProxy is capable of
-              generating codes 200, 400, 403, 405, 408, 425, 429, 500, 502,
+              generating codes 200, 400, 403, 405, 408, 410, 425, 429, 500, 502,
               503, and 504.
 
     <url>     it is the exact contents of the "Location" header. It may contain
diff --git a/include/common/http.h b/include/common/http.h
index 857c66e1d..2d9bad7ee 100644
--- a/include/common/http.h
+++ b/include/common/http.h
@@ -85,6 +85,7 @@ enum {
 	HTTP_ERR_403,
 	HTTP_ERR_405,
 	HTTP_ERR_408,
+	HTTP_ERR_410,
 	HTTP_ERR_421,
 	HTTP_ERR_425,
 	HTTP_ERR_429,
diff --git a/src/http.c b/src/http.c
index c9168669d..8aa6bf98b 100644
--- a/src/http.c
+++ b/src/http.c
@@ -218,6 +218,7 @@ const int http_err_codes[HTTP_ERR_SIZE] = {
 	[HTTP_ERR_403] = 403,
 	[HTTP_ERR_405] = 405,
 	[HTTP_ERR_408] = 408,
+	[HTTP_ERR_410] = 410,
 	[HTTP_ERR_421] = 421,
 	[HTTP_ERR_425] = 425,
 	[HTTP_ERR_429] = 429,
@@ -273,6 +274,15 @@ const char *http_err_msgs[HTTP_ERR_SIZE] = {
 	"\r\n"
 	"<html><body><h1>408 Request Time-out</h1>\nYour browser didn't send a complete request in time.\n</body></html>\n",
 
+	[HTTP_ERR_410] =
+	"HTTP/1.1 410 Gone\r\n"
+	"Content-length: 44\r\n"
+	"Cache-Control: no-cache\r\n"
+	"Connection: close\r\n"
+	"Content-Type: text/html\r\n"
+	"\r\n"
+	"<html><body><h1>410 Gone</h1></body></html>\n",
+
 	[HTTP_ERR_421] =
 	"HTTP/1.1 421 Misdirected Request\r\n"
 	"Content-length: 104\r\n"
@@ -379,6 +389,7 @@ int http_get_status_idx(unsigned int status)
 	case 403: return HTTP_ERR_403;
 	case 405: return HTTP_ERR_405;
 	case 408: return HTTP_ERR_408;
+	case 410: return HTTP_ERR_410;
 	case 421: return HTTP_ERR_421;
 	case 425: return HTTP_ERR_425;
 	case 429: return HTTP_ERR_429;
-- 
2.24.1

Reply via email to