changeset 5063:6b5c3eab095c stable-1.2

Merge of r5018: secure link: fixed configuration inheritance. The "secure_link_secret" directive was always inherited from the outer configuration level even when "secure_link" and "secure_link_md5" were specified on the inner level.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 11 Feb 2013 16:09:35 +0000
parents a095b3692ad1
children 10f5831cf56e
files src/http/modules/ngx_http_secure_link_module.c
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/modules/ngx_http_secure_link_module.c
+++ b/src/http/modules/ngx_http_secure_link_module.c
@@ -111,7 +111,7 @@ ngx_http_secure_link_variable(ngx_http_r
 
     conf = ngx_http_get_module_loc_conf(r, ngx_http_secure_link_module);
 
-    if (conf->secret.len) {
+    if (conf->secret.data) {
         return ngx_http_secure_link_old_variable(r, conf, v, data);
     }
 
@@ -318,7 +318,16 @@ ngx_http_secure_link_merge_conf(ngx_conf
     ngx_http_secure_link_conf_t *prev = parent;
     ngx_http_secure_link_conf_t *conf = child;
 
-    ngx_conf_merge_str_value(conf->secret, prev->secret, "");
+    if (conf->secret.data) {
+        if (conf->variable || conf->md5) {
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                               "\"secure_link_secret\" cannot be mixed with "
+                               "\"secure_link\" and \"secure_link_md5\"");
+            return NGX_CONF_ERROR;
+        }
+
+        return NGX_CONF_OK;
+    }
 
     if (conf->variable == NULL) {
         conf->variable = prev->variable;
@@ -328,6 +337,10 @@ ngx_http_secure_link_merge_conf(ngx_conf
         conf->md5 = prev->md5;
     }
 
+    if (conf->variable == NULL && conf->md5 == NULL) {
+        conf->secret = prev->secret;
+    }
+
     return NGX_CONF_OK;
 }