[RFC] auth_request: Add auth_request_intercept_errors (on by default)

W. Trevor King wking at tremily.us
Sat Oct 25 16:19:02 UTC 2014


# HG changeset patch
# User W. Trevor King <wking at tremily.us>
# Date 1414251802 25200
#      Sat Oct 25 08:43:22 2014 -0700
# Node ID cffff97c4b7ce07175cf6ac1ac0c8b814d86d468
# Parent  973fded4f461f3a397779b3a1dc80881b1b34974
auth_request: Add auth_request_intercept_errors (on by default).

This allows you (with 'auth_request_intercept_errors off') to pass
through errors >= 400 from the auth_request endpoint.  You might want
to do this if you want to return more explicit information about what
went wrong (e.g., returning a 504 if the auth_request endpoint times
out).

diff -r 973fded4f461 -r cffff97c4b7c src/http/modules/ngx_http_auth_request_module.c
--- a/src/http/modules/ngx_http_auth_request_module.c	Wed Oct 15 22:57:23 2014 +0400
+++ b/src/http/modules/ngx_http_auth_request_module.c	Sat Oct 25 08:43:22 2014 -0700
@@ -12,6 +12,7 @@
 
 typedef struct {
     ngx_str_t                 uri;
+    ngx_flag_t                intercept_errors;
     ngx_array_t              *vars;
 } ngx_http_auth_request_conf_t;
 
@@ -63,6 +64,13 @@
       0,
       NULL },
 
+    { ngx_string("auth_request_intercept_errors"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_LOC_CONF_OFFSET,
+      offsetof(ngx_http_auth_request_conf_t, intercept_errors),
+      NULL },
+
       ngx_null_command
 };
 
@@ -167,6 +175,11 @@
             return NGX_OK;
         }
 
+        if (ctx->status >= NGX_HTTP_BAD_REQUEST
+            && !arcf->intercept_errors) {
+            return ctx->status;
+        }
+
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                       "auth request unexpected status: %d", ctx->status);
 
@@ -315,6 +328,7 @@
      *     conf->uri = { 0, NULL };
      */
 
+    conf->intercept_errors = NGX_CONF_UNSET;
     conf->vars = NGX_CONF_UNSET_PTR;
 
     return conf;
@@ -328,6 +342,7 @@
     ngx_http_auth_request_conf_t *conf = child;
 
     ngx_conf_merge_str_value(conf->uri, prev->uri, "");
+    ngx_conf_merge_value(conf->intercept_errors, prev->intercept_errors, 1);
     ngx_conf_merge_ptr_value(conf->vars, prev->vars, NULL);
 
     return NGX_CONF_OK;



More information about the nginx-devel mailing list