return NGX_AGAIN;
}
- if (rc == NGX_HTTP_FORBIDDEN || rc == NGX_HTTP_UNAUTHORIZED) {
- if (r->access_code != NGX_HTTP_UNAUTHORIZED) {
+ if (rc == NGX_HTTP_FORBIDDEN
+ || rc == NGX_HTTP_UNAUTHORIZED
+ || rc == NGX_HTTP_PROXY_AUTH_REQUIRED)
+ {
+ if (r->access_code != NGX_HTTP_UNAUTHORIZED
+ && r->access_code != NGX_HTTP_PROXY_AUTH_REQUIRED)
+ {
r->access_code = rc;
}
/* rc == NGX_ERROR || rc == NGX_HTTP_... */
- if (rc == NGX_HTTP_UNAUTHORIZED) {
+ if (rc == NGX_HTTP_UNAUTHORIZED || rc == NGX_HTTP_PROXY_AUTH_REQUIRED) {
+ r->access_code = rc;
return ngx_http_core_auth_delay(r);
}
access_code = r->access_code;
if (access_code) {
- r->access_code = 0;
-
if (access_code == NGX_HTTP_FORBIDDEN) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"access forbidden by rule");
}
- if (access_code == NGX_HTTP_UNAUTHORIZED) {
+ if (access_code == NGX_HTTP_UNAUTHORIZED
+ || access_code == NGX_HTTP_PROXY_AUTH_REQUIRED)
+ {
return ngx_http_core_auth_delay(r);
}
+ r->access_code = 0;
+
ngx_http_finalize_request(r, access_code);
return NGX_OK;
}
static ngx_int_t
ngx_http_core_auth_delay(ngx_http_request_t *r)
{
+ ngx_int_t access_code;
ngx_http_core_loc_conf_t *clcf;
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
if (clcf->auth_delay == 0) {
- ngx_http_finalize_request(r, NGX_HTTP_UNAUTHORIZED);
+ access_code = r->access_code;
+ r->access_code = 0;
+
+ ngx_http_finalize_request(r, access_code);
return NGX_OK;
}
static void
ngx_http_core_auth_delay_handler(ngx_http_request_t *r)
{
+ ngx_int_t access_code;
ngx_event_t *wev;
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
return;
}
- ngx_http_finalize_request(r, NGX_HTTP_UNAUTHORIZED);
+ access_code = r->access_code;
+ r->access_code = 0;
+
+ ngx_http_finalize_request(r, access_code);
}