# HG changeset patch
# User sfan5 <sf...@live.de>
# Date 1396194835 -7200
#      Sun Mar 30 17:53:55 2014 +0200
# Node ID 35328d85f9b629e3593b1f862af61af9bd743b3f
# Parent  a24f88eff684889a203b04e8be70ce0e3899dc30
HTTP: Add 'autoindex_max_length' directive

The 'autoindex_max_length' directive controls the length after which a filename is cut-off by the http_autoindex module.

diff -r a24f88eff684 -r 35328d85f9b6 src/http/modules/ngx_http_autoindex_module.c --- a/src/http/modules/ngx_http_autoindex_module.c Fri Mar 28 20:22:57 2014 +0400 +++ b/src/http/modules/ngx_http_autoindex_module.c Sun Mar 30 17:53:55 2014 +0200
@@ -40,13 +40,12 @@
     ngx_flag_t     enable;
     ngx_flag_t     localtime;
     ngx_flag_t     exact_size;
+    ngx_uint_t     max_length;
 } ngx_http_autoindex_loc_conf_t;


 #define NGX_HTTP_AUTOINDEX_PREALLOCATE  50

-#define NGX_HTTP_AUTOINDEX_NAME_LEN     50
-

 static int ngx_libc_cdecl ngx_http_autoindex_cmp_entries(const void *one,
     const void *two);
@@ -81,6 +80,13 @@
       offsetof(ngx_http_autoindex_loc_conf_t, exact_size),
       NULL },

+    { ngx_string("autoindex_max_length"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+      ngx_conf_set_num_slot,
+      NGX_HTTP_LOC_CONF_OFFSET,
+      offsetof(ngx_http_autoindex_loc_conf_t, max_length),
+      NULL },
+
       ngx_null_command
 };

@@ -380,7 +386,7 @@
             + sizeof("\">") - 1
             + entry[i].name.len - entry[i].utf_len
             + entry[i].escape_html
-            + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof("&gt;") - 2
+            + alcf->max_length + sizeof("&gt;") - 2
             + sizeof("</a>") - 1
             + sizeof(" 28-Sep-1970 12:00 ") - 1
+ 20 /* the file size */
@@ -442,11 +448,11 @@
         len = entry[i].utf_len;

         if (entry[i].name.len != len) {
-            if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
-                char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1;
+            if (len > alcf->max_length) {
+                char_len = alcf->max_length - 3 + 1;

             } else {
-                char_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1;
+                char_len = alcf->max_length + 1;
             }

             last = b->last;
@@ -462,8 +468,8 @@

         } else {
             if (entry[i].escape_html) {
-                if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
-                    char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3;
+                if (len > alcf->max_length) {
+                    char_len = alcf->max_length - 3;

                 } else {
                     char_len = len;
@@ -475,25 +481,25 @@

             } else {
                 b->last = ngx_cpystrn(b->last, entry[i].name.data,
-                                      NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
+                                      alcf->max_length + 1);
                 last = b->last - 3;
             }
         }

-        if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+        if (len > alcf->max_length) {
b->last = ngx_cpymem(last, "..&gt;</a>", sizeof("..&gt;</a>") - 1);

         } else {
-            if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+            if (entry[i].dir && alcf->max_length - len > 0) {
                 *b->last++ = '/';
                 len++;
             }

             b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);

-            if (NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
- ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len);
-                b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len;
+            if (alcf->max_length - len > 0) {
+                ngx_memset(b->last, ' ', alcf->max_length - len);
+                b->last += alcf->max_length - len;
             }
         }

@@ -667,6 +673,7 @@
     conf->enable = NGX_CONF_UNSET;
     conf->localtime = NGX_CONF_UNSET;
     conf->exact_size = NGX_CONF_UNSET;
+    conf->max_length = NGX_CONF_UNSET_UINT;

     return conf;
 }
@@ -681,6 +688,7 @@
     ngx_conf_merge_value(conf->enable, prev->enable, 0);
     ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
     ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1);
+    ngx_conf_merge_uint_value(conf->max_length, prev->max_length, 50);

     return NGX_CONF_OK;
 }

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to