util.prosodyctl: Handle os.execute in Lua 5.2 returning true when command terminates...
[prosody.git] / plugins / mod_http_files.lua
index 0c542714e711aea1f3e09e8dc5b37b1b1b89c4d0..3b60249559c6e7e42bee94699d0f14ba122f7c4b 100644 (file)
@@ -56,6 +56,7 @@ end
 
 local urldecode = require "util.http".urldecode;
 function sanitize_path(path)
+       if not path then return end
        local out = {};
 
        local c = 0;
@@ -74,6 +75,9 @@ function sanitize_path(path)
                        out[c] = component;
                end
        end
+       if path:sub(-1,-1) == "/" then
+               out[c+1] = "";
+       end
        return "/"..table.concat(out, "/");
 end
 
@@ -88,12 +92,13 @@ function serve(opts)
        local directory_index = opts.directory_index;
        local function serve_file(event, path)
                local request, response = event.request, event.response;
-               path = sanitize_path(path);
-               if not path then
+               local sanitized_path = sanitize_path(path);
+               if path and not sanitized_path then
                        return 400;
                end
+               path = sanitized_path;
                local orig_path = sanitize_path(request.path);
-               local full_path = base_path .. (path and "/"..path or ""):gsub("/", path_sep);
+               local full_path = base_path .. (path or ""):gsub("/", path_sep);
                local attr = stat(full_path:match("^.*[^\\/]")); -- Strip trailing path separator because Windows
                if not attr then
                        return 404;