|
|
|
@ -203,8 +203,8 @@ ngx_http_fancyindex_handler(ngx_http_request_t *r)
|
|
|
|
|
ngx_http_fancyindex_entry_t *entry; |
|
|
|
|
ngx_http_fancyindex_loc_conf_t *alcf; |
|
|
|
|
|
|
|
|
|
static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
|
|
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; |
|
|
|
|
static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
|
|
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", }; |
|
|
|
|
|
|
|
|
|
if (r->uri.data[r->uri.len - 1] != '/') { |
|
|
|
|
return NGX_DECLINED; |
|
|
|
@ -455,11 +455,44 @@ skip_readme_len:
|
|
|
|
|
ngx_http_fancyindex_cmp_entries); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t01_head1); |
|
|
|
|
b->last = nfi_cpymem_str(b->last, r->uri); |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t02_head2); |
|
|
|
|
if (alcf->header.len > 0) { |
|
|
|
|
/* URI is configured, make Nginx take care of with a subrequest. */ |
|
|
|
|
ngx_http_request_t *sr; |
|
|
|
|
ngx_str_t *sr_uri = &alcf->header; |
|
|
|
|
ngx_str_t rel_uri; |
|
|
|
|
ngx_int_t rc; |
|
|
|
|
|
|
|
|
|
if (*sr_uri->data != '/') { |
|
|
|
|
/* Relative path */ |
|
|
|
|
rel_uri.len = r->uri.len + alcf->header.len; |
|
|
|
|
rel_uri.data = ngx_palloc(r->pool, rel_uri.len); |
|
|
|
|
if (rel_uri.data == NULL) { |
|
|
|
|
return NGX_HTTP_INTERNAL_SERVER_ERROR; |
|
|
|
|
} |
|
|
|
|
ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len), |
|
|
|
|
alcf->header.data, alcf->header.len); |
|
|
|
|
sr_uri = &rel_uri; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
|
|
|
|
"http fancyindex: header subrequest \"%V\"", sr_uri); |
|
|
|
|
|
|
|
|
|
rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0); |
|
|
|
|
if (rc == NGX_ERROR || rc == NGX_DONE) { |
|
|
|
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
|
|
|
|
"http fancyindex: header subrequest for \"%V\" failed", sr_uri); |
|
|
|
|
return rc; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
/* Otherwise, send the built-in header. */ |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t01_head1); |
|
|
|
|
b->last = nfi_cpymem_str(b->last, r->uri); |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t02_head2); |
|
|
|
|
|
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t03_body1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t03_body1); |
|
|
|
|
b->last = nfi_cpymem_str(b->last, r->uri); |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t04_body2); |
|
|
|
|
|
|
|
|
@ -643,7 +676,38 @@ skip_readme_bottom:
|
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t08_body4); |
|
|
|
|
|
|
|
|
|
/* Output page footer */ |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t09_foot1); |
|
|
|
|
if (alcf->footer.len > 0) { |
|
|
|
|
/* URI is configured, make Nginx take care of with a subrequest. */ |
|
|
|
|
ngx_http_request_t *sr; |
|
|
|
|
ngx_str_t *sr_uri = &alcf->footer; |
|
|
|
|
ngx_str_t rel_uri; |
|
|
|
|
ngx_int_t rc; |
|
|
|
|
|
|
|
|
|
if (*sr_uri->data != '/') { |
|
|
|
|
/* Relative path */ |
|
|
|
|
rel_uri.len = r->uri.len + alcf->footer.len; |
|
|
|
|
rel_uri.data = ngx_palloc(r->pool, rel_uri.len); |
|
|
|
|
if (rel_uri.data == NULL) { |
|
|
|
|
return NGX_HTTP_INTERNAL_SERVER_ERROR; |
|
|
|
|
} |
|
|
|
|
ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len), |
|
|
|
|
alcf->footer.data, alcf->footer.len); |
|
|
|
|
sr_uri = &rel_uri; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
|
|
|
|
"http fancyindex: footer subrequest \"%V\"", sr_uri); |
|
|
|
|
|
|
|
|
|
rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0); |
|
|
|
|
if (rc == NGX_ERROR || rc == NGX_DONE) { |
|
|
|
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
|
|
|
|
"http fancyindex: footer subrequest for \"%V\" failed", sr_uri); |
|
|
|
|
return rc; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
b->last = nfi_cpymem_ssz(b->last, t09_foot1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (r == r->main) { |
|
|
|
|
b->last_buf = 1; |
|
|
|
|