|
|
- 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) */
|