Instructions to set up a basic LAMP+SSH server environment
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
2.2 KiB

Author: Pekka Helenius (~Fincer), 2018
This patch may break things badly, just be aware and proceed with care! Thanks.
This is an experimental patch, just introducing the principle of manipulating HTTP header response codes returned by
Apache HTTP server to a client. The patch is mainly for personal use, nothing else. If you see it worth it, feel free
to use it.
And absolutely, feel free to modify it! If you see it just awful, ignore it. Thanks.
The patch breaks HTTP standard by altering HTTP header response codes generated by Apache HTTP server. Generated codes are:
If client request generates HTTP response code 401, the server returns error code 401.
If client request generates HTTP response code 401->, the server returns error code 400.
If client request generates HTTP response code 500->, the server returns error code 400 instead.
Any other codes (100-308) will be returned normally, including 200 OK message.
Remember to comment any unsupported ErrorDocument directive fields from your VirtualHost configurations
before starting the server with this patch applied.
All Apache HTTP response codes are listed in 'modules/http/http_protocol.c' file.
--- a/modules/http/http_protocol.c
+++ b/modules/http/http_protocol.c
@@ -1003,7 +1003,20 @@ AP_DECLARE(int) ap_index_of_response(int
if (status < 100) {
pos = (status + shortcut[i]);
if (pos < shortcut[i + 1] && status_lines[pos] != NULL) {
- return pos;
+ if (shortcut[i] == LEVEL_400) { /* If code class is 400 */
+ if (pos != (1 + shortcut[i])) { /* If code in 400 class is not 401, then */
+ return (0 + shortcut[i]); /* Return 400 */
+ }
+ else {
+ return pos; /* Else return 401 */
+ }
+ }
+ else if (shortcut[i] == LEVEL_500) { /* If code class is 500 */
+ return (0 + shortcut[i - 1]); /* Return first value of previous code class 400 */
+ }
+ else {
+ return pos; /* Return normal code */
+ }
}
else {
return LEVEL_500; /* status unknown (falls in gap) */