diff -r fb2982a359ef -r 3687ef725d90 src/http/modules/ngx_http_autoindex_module.c
|
a
|
b
|
|
| 39 | 39 | ngx_flag_t enable; |
| 40 | 40 | ngx_flag_t localtime; |
| 41 | 41 | ngx_flag_t exact_size; |
| | 42 | ngx_uint_t max_name_len; |
| 42 | 43 | } ngx_http_autoindex_loc_conf_t; |
| 43 | 44 | |
| 44 | 45 | |
| 45 | 46 | #define NGX_HTTP_AUTOINDEX_PREALLOCATE 50 |
| 46 | 47 | |
| 47 | | #define NGX_HTTP_AUTOINDEX_NAME_LEN 50 |
| 48 | | |
| 49 | 48 | |
| 50 | 49 | static int ngx_libc_cdecl ngx_http_autoindex_cmp_entries(const void *one, |
| 51 | 50 | const void *two); |
| … |
… |
|
| 80 | 79 | offsetof(ngx_http_autoindex_loc_conf_t, exact_size), |
| 81 | 80 | NULL }, |
| 82 | 81 | |
| | 82 | { ngx_string("autoindex_max_name_len"), |
| | 83 | NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, |
| | 84 | ngx_conf_set_size_slot, |
| | 85 | NGX_HTTP_LOC_CONF_OFFSET, |
| | 86 | offsetof(ngx_http_autoindex_loc_conf_t, max_name_len), |
| | 87 | NULL }, |
| | 88 | |
| 83 | 89 | ngx_null_command |
| 84 | 90 | }; |
| 85 | 91 | |
| … |
… |
|
| 374 | 380 | + 1 /* 1 is for "/" */ |
| 375 | 381 | + sizeof("\">") - 1 |
| 376 | 382 | + entry[i].name.len - entry[i].utf_len + entry[i].colon * 2 |
| 377 | | + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof(">") - 2 |
| | 383 | + alcf->max_name_len + sizeof(">") - 2 |
| 378 | 384 | + sizeof("</a>") - 1 |
| 379 | 385 | + sizeof(" 28-Sep-1970 12:00 ") - 1 |
| 380 | 386 | + 20 /* the file size */ |
| … |
… |
|
| 432 | 438 | len = entry[i].utf_len; |
| 433 | 439 | |
| 434 | 440 | if (entry[i].name.len != len) { |
| 435 | | if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) { |
| 436 | | utf_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1; |
| | 441 | if (len > alcf->max_name_len) { |
| | 442 | utf_len = alcf->max_name_len - 3 + 1; |
| 437 | 443 | |
| 438 | 444 | } else { |
| 439 | | utf_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1; |
| | 445 | utf_len = alcf->max_name_len + 1; |
| 440 | 446 | } |
| 441 | 447 | |
| 442 | 448 | b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data, |
| … |
… |
|
| 445 | 451 | |
| 446 | 452 | } else { |
| 447 | 453 | b->last = ngx_cpystrn(b->last, entry[i].name.data, |
| 448 | | NGX_HTTP_AUTOINDEX_NAME_LEN + 1); |
| | 454 | alcf->max_name_len + 1); |
| 449 | 455 | last = b->last - 3; |
| 450 | 456 | } |
| 451 | 457 | |
| 452 | | if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) { |
| | 458 | if (len > alcf->max_name_len) { |
| 453 | 459 | b->last = ngx_cpymem(last, "..></a>", sizeof("..></a>") - 1); |
| 454 | 460 | |
| 455 | 461 | } else { |
| 456 | | if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) { |
| | 462 | if (entry[i].dir && alcf->max_name_len - len > 0) { |
| 457 | 463 | *b->last++ = '/'; |
| 458 | 464 | len++; |
| 459 | 465 | } |
| 460 | 466 | |
| 461 | 467 | b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1); |
| 462 | | ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len); |
| 463 | | b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len; |
| | 468 | ngx_memset(b->last, ' ', (alcf->max_name_len - len)); |
| | 469 | b->last += (alcf->max_name_len - len); |
| 464 | 470 | } |
| 465 | 471 | |
| 466 | 472 | *b->last++ = ' '; |
| … |
… |
|
| 633 | 639 | conf->enable = NGX_CONF_UNSET; |
| 634 | 640 | conf->localtime = NGX_CONF_UNSET; |
| 635 | 641 | conf->exact_size = NGX_CONF_UNSET; |
| | 642 | conf->max_name_len = NGX_CONF_UNSET_UINT; |
| 636 | 643 | |
| 637 | 644 | return conf; |
| 638 | 645 | } |
| … |
… |
|
| 647 | 654 | ngx_conf_merge_value(conf->enable, prev->enable, 0); |
| 648 | 655 | ngx_conf_merge_value(conf->localtime, prev->localtime, 0); |
| 649 | 656 | ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1); |
| | 657 | ngx_conf_merge_uint_value(conf->max_name_len, prev->max_name_len, 50); |
| 650 | 658 | |
| 651 | 659 | return NGX_CONF_OK; |
| 652 | 660 | } |