| |
| |
| // these have been taken from the rewrite module and http_script file |
| // because those functions are defined as being static - a patch will |
| // be provided later to un-define them as being static |
| |
| |
| uintptr_t ndk_http_script_exit_code = (uintptr_t) NULL; |
| |
| |
| char * |
| ndk_http_rewrite_value (ngx_conf_t *cf, ndk_http_rewrite_loc_conf_t *lcf, |
| ngx_str_t *value) |
| { |
| ngx_int_t n; |
| ngx_http_script_compile_t sc; |
| ngx_http_script_value_code_t *val; |
| ngx_http_script_complex_value_code_t *complex; |
| |
| n = ngx_http_script_variables_count(value); |
| |
| if (n == 0) { |
| val = ngx_http_script_start_code(cf->pool, &lcf->codes, |
| sizeof(ngx_http_script_value_code_t)); |
| if (val == NULL) { |
| return NGX_CONF_ERROR; |
| } |
| |
| n = ngx_atoi(value->data, value->len); |
| |
| if (n == NGX_ERROR) { |
| n = 0; |
| } |
| |
| val->code = ngx_http_script_value_code; |
| val->value = (uintptr_t) n; |
| val->text_len = (uintptr_t) value->len; |
| val->text_data = (uintptr_t) value->data; |
| |
| return NGX_CONF_OK; |
| } |
| |
| complex = ngx_http_script_start_code(cf->pool, &lcf->codes, |
| sizeof(ngx_http_script_complex_value_code_t)); |
| if (complex == NULL) { |
| return NGX_CONF_ERROR; |
| } |
| |
| complex->code = ngx_http_script_complex_value_code; |
| complex->lengths = NULL; |
| |
| ngx_memzero(&sc, sizeof(ngx_http_script_compile_t)); |
| |
| sc.cf = cf; |
| sc.source = value; |
| sc.lengths = &complex->lengths; |
| sc.values = &lcf->codes; |
| sc.variables = n; |
| sc.complete_lengths = 1; |
| |
| if (ngx_http_script_compile(&sc) != NGX_OK) { |
| return NGX_CONF_ERROR; |
| } |
| |
| return NGX_CONF_OK; |
| } |
| |
| |
| |
| ngx_int_t |
| ndk_http_rewrite_var (ngx_http_request_t *r, ngx_http_variable_value_t *v, |
| uintptr_t data) |
| { |
| ngx_http_variable_t *var; |
| ngx_http_core_main_conf_t *cmcf; |
| ndk_http_rewrite_loc_conf_t *rlcf; |
| |
| rlcf = ngx_http_get_module_loc_conf(r, ngx_http_rewrite_module); |
| |
| if (rlcf->uninitialized_variable_warn == 0) { |
| *v = ngx_http_variable_null_value; |
| return NGX_OK; |
| } |
| |
| cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); |
| |
| var = cmcf->variables.elts; |
| |
| /* |
| * the ngx_http_rewrite_module sets variables directly in r->variables, |
| * and they should be handled by ngx_http_get_indexed_variable(), |
| * so the handler is called only if the variable is not initialized |
| */ |
| |
| ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, |
| "using uninitialized \"%V\" variable", &var[data].name); |
| |
| *v = ngx_http_variable_null_value; |
| |
| return NGX_OK; |
| } |
| |
| |