changeset 1:dfc5ae42367a

Auth request: support switching off.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 26 Feb 2010 21:21:22 +0300
parents 436da5355bd5
children 187ac993cd15
files ngx_http_auth_request_module.c t/auth-request.t
diffstat 2 files changed, 36 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ngx_http_auth_request_module.c
+++ b/ngx_http_auth_request_module.c
@@ -27,15 +27,17 @@ static void *ngx_http_auth_request_creat
 static char *ngx_http_auth_request_merge_conf(ngx_conf_t *cf,
     void *parent, void *child);
 static ngx_int_t ngx_http_auth_request_init(ngx_conf_t *cf);
+static char *ngx_http_auth_request(ngx_conf_t *cf, ngx_command_t *cmd,
+    void *conf);
 
 
 static ngx_command_t  ngx_http_auth_request_commands[] = {
 
     { ngx_string("auth_request"),
       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
-      ngx_conf_set_str_slot,
+      ngx_http_auth_request,
       NGX_HTTP_LOC_CONF_OFFSET,
-      offsetof(ngx_http_auth_request_conf_t, uri),
+      0,
       NULL },
 
       ngx_null_command
@@ -231,3 +233,29 @@ ngx_http_auth_request_init(ngx_conf_t *c
 
     return NGX_OK;
 }
+
+
+static char *
+ngx_http_auth_request(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+    ngx_http_auth_request_conf_t *arcf = conf;
+
+    ngx_str_t        *value;
+
+    if (arcf->uri.data != NULL) {
+        return "is duplicate";
+    }
+
+    value = cf->args->elts;
+
+    if (ngx_strcmp(value[1].data, "off") == 0) {
+        arcf->uri.len = 0;
+        arcf->uri.data = (u_char *) "";
+
+        return NGX_CONF_OK;
+    }
+
+    arcf->uri = value[1];
+
+    return NGX_CONF_OK;
+}
--- a/t/auth-request.t
+++ b/t/auth-request.t
@@ -18,7 +18,7 @@ select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http rewrite proxy fastcgi auth_basic/)
-	->plan(13);
+	->plan(14);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -74,6 +74,10 @@ http {
             return 404;
         }
 
+        location /off {
+            auth_request off;
+        }
+
         location /proxy {
             auth_request /auth-proxy;
         }
@@ -109,6 +113,7 @@ like(http_get('/open'), qr/ 404 /, 'auth
 like(http_get('/unauthorized'), qr/ 401 /, 'auth unauthorized');
 like(http_get('/forbidden'), qr/ 403 /, 'auth forbidden');
 like(http_get('/error'), qr/ 500 /, 'auth error');
+like(http_get('/off'), qr/ 404 /, 'auth off');
 
 like(http_get('/open-static'), qr/ 404 /, 'auth open static');
 unlike(http_get('/open-static'), qr/INVISIBLE/, 'auth static no content');