From: Jo-Philipp Wich Date: Sat, 24 May 2008 22:58:45 +0000 (+0000) Subject: * ffluci/core: dispatcher.lua: setgid() won't work after setuid() due to missing... X-Git-Tag: 0.8.0~999 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=32aa488d9b585bbeb8d880d763923f9f1c6cd0e2 * ffluci/core: dispatcher.lua: setgid() won't work after setuid() due to missing permission - swapped set*id() calls; whitespace cleanups --- diff --git a/core/src/dispatcher.lua b/core/src/dispatcher.lua index e820a8864..fce0ce294 100644 --- a/core/src/dispatcher.lua +++ b/core/src/dispatcher.lua @@ -12,9 +12,9 @@ Copyright 2008 Steven Barth Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -40,78 +40,78 @@ dispatched = nil -- Builds a URL function build_url(...) - return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/") + return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/") end -- Sends a 404 error code and renders the "error404" template if available function error404(message) ffluci.http.status(404, "Not Found") message = message or "Not Found" - + require("ffluci.template") if not pcall(ffluci.template.render, "error404") then ffluci.http.prepare_content("text/plain") print(message) end - return false + return false end -- Sends a 500 error code and renders the "error500" template if available function error500(message) ffluci.http.status(500, "Internal Server Error") - + require("ffluci.template") if not pcall(ffluci.template.render, "error500", {message=message}) then ffluci.http.prepare_content("text/plain") print(message) end - return false + return false end -- Dispatches a request depending on the PATH_INFO variable function httpdispatch() local pathinfo = ffluci.http.env.PATH_INFO or "" local c = tree - + for s in pathinfo:gmatch("/([%w-]+)") do table.insert(request, s) end - + dispatch() end function dispatch() local c = tree local track = {} - + for i, s in ipairs(request) do c = c.nodes[s] if not c then break - end - + end + for k, v in pairs(c) do track[k] = v end end - - + + if track.i18n then require("ffluci.i18n").loadc(track.i18n) end - - if track.setuser then - ffluci.sys.process.setuser(track.setuser) - end - + if track.setgroup then ffluci.sys.process.setgroup(track.setgroup) end - - + + if track.setuser then + ffluci.sys.process.setuser(track.setuser) + end + + if c and type(c.target) == "function" then dispatched = c - + stat, err = pcall(c.target) if not stat then error500(err) @@ -126,16 +126,16 @@ end function createindex() local root = ffluci.sys.libpath() .. "/controller/" local suff = ".lua" - + local controllers = ffluci.util.combine( ffluci.fs.glob(root .. "*" .. suff), ffluci.fs.glob(root .. "*/*" .. suff) ) - + for i,c in ipairs(controllers) do c = "ffluci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".") stat, mod = pcall(require, c) - + if stat and mod and type(mod.index) == "function" then ffluci.util.updfenv(mod.index, ffluci.dispatcher) pcall(mod.index) @@ -151,30 +151,30 @@ function entry(path, target, title, order, add) c.target = target c.title = title c.order = order - + for k,v in pairs(add) do c[k] = v end - + return c end -- Fetch a dispatching node function node(...) local c = tree - + if arg[1] and type(arg[1]) == "table" then arg = arg[1] end - + for k,v in ipairs(arg) do if not c.nodes[v] then c.nodes[v] = {nodes={}} end - + c = c.nodes[v] end - + return c end @@ -195,22 +195,22 @@ end function cbi(model) require("ffluci.cbi") require("ffluci.template") - + return function() local stat, res = pcall(ffluci.cbi.load, model) if not stat then error500(res) return true end - + local stat, err = pcall(res.parse, res) if not stat then error500(err) return true end - + ffluci.template.render("cbi/header") res:render() ffluci.template.render("cbi/footer") end -end \ No newline at end of file +end