71
71
static ngx_int_t ngx_http_ssi_output(ngx_http_request_t *r,
72
72
ngx_http_ssi_ctx_t *ctx);
73
static void ngx_http_ssi_buffered(ngx_http_request_t *r,
74
ngx_http_ssi_ctx_t *ctx);
73
75
static ngx_int_t ngx_http_ssi_parse(ngx_http_request_t *r,
74
76
ngx_http_ssi_ctx_t *ctx);
75
77
static ngx_str_t *ngx_http_ssi_get_variable(ngx_http_request_t *r,
346
348
ctx->params.nalloc = NGX_HTTP_SSI_PARAMS_N;
347
349
ctx->params.pool = r->pool;
349
ctx->timefmt.len = sizeof("%A, %d-%b-%Y %H:%M:%S %Z") - 1;
350
ctx->timefmt.data = (u_char *) "%A, %d-%b-%Y %H:%M:%S %Z";
353
sizeof("[an error occurred while processing the directive]") - 1;
354
ctx->errmsg.data = (u_char *)
355
"[an error occurred while processing the directive]";
351
ngx_str_set(&ctx->timefmt, "%A, %d-%b-%Y %H:%M:%S %Z");
352
ngx_str_set(&ctx->errmsg,
353
"[an error occurred while processing the directive]");
357
355
r->filter_need_in_memory = 1;
951
ngx_http_ssi_buffered(r, ctx);
958
ngx_http_ssi_buffered(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
952
960
if (ctx->in || ctx->buf) {
953
961
r->buffered |= NGX_HTTP_SSI_BUFFERED;
956
964
r->buffered &= ~NGX_HTTP_SSI_BUFFERED;
1904
1910
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1905
1911
"ssi include: \"%V\"", uri);
1913
ngx_str_null(&args);
1909
1914
flags = NGX_HTTP_LOG_UNSAFE;
1911
1916
if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
2452
u_char errstr[NGX_MAX_CONF_ERRSTR];
2454
err.len = NGX_MAX_CONF_ERRSTR;
2455
ngx_regex_compile_t rgc;
2456
u_char errstr[NGX_MAX_CONF_ERRSTR];
2457
2458
right.data[right.len] = '\0';
2459
regex = ngx_regex_compile(&right, 0, r->pool, &err);
2461
if (regex == NULL) {
2462
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%s", err.data);
2460
ngx_memzero(&rgc, sizeof(ngx_regex_compile_t));
2462
rgc.pattern = right;
2464
rgc.err.len = NGX_MAX_CONF_ERRSTR;
2465
rgc.err.data = errstr;
2467
if (ngx_regex_compile(&rgc) != NGX_OK) {
2468
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%V", &rgc.err);
2463
2469
return NGX_HTTP_SSI_ERROR;
2466
rc = ngx_regex_exec(regex, &left, NULL, 0);
2472
rc = ngx_regex_exec(rgc.regex, &left, NULL, 0);
2468
if (rc != NGX_REGEX_NO_MATCHED && rc < 0) {
2474
if (rc < NGX_REGEX_NO_MATCHED) {
2469
2475
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
2470
ngx_regex_exec_n " failed: %d on \"%V\" using \"%V\"",
2476
ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
2471
2477
rc, &left, &right);
2472
2478
return NGX_HTTP_SSI_ERROR;
2768
2774
ngx_conf_merge_size_value(conf->min_file_chunk, prev->min_file_chunk, 1024);
2769
2775
ngx_conf_merge_size_value(conf->value_len, prev->value_len, 256);
2771
if (ngx_http_merge_types(cf, conf->types_keys, &conf->types,
2772
prev->types_keys, &prev->types,
2777
if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types,
2778
&prev->types_keys, &prev->types,
2773
2779
ngx_http_html_default_types)