* ffluci/core: dispatcher.lua: setgid() won't work after setuid() due to missing permission - swapped set*id() calls; whitespace cleanups
This commit is contained in:
parent
628701518a
commit
32aa488d9b
1 changed files with 35 additions and 35 deletions
|
@ -12,9 +12,9 @@ Copyright 2008 Steven Barth <steven@midlink.org>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with 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
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@ -40,78 +40,78 @@ dispatched = nil
|
||||||
|
|
||||||
-- Builds a URL
|
-- Builds a URL
|
||||||
function build_url(...)
|
function build_url(...)
|
||||||
return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/")
|
return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Sends a 404 error code and renders the "error404" template if available
|
-- Sends a 404 error code and renders the "error404" template if available
|
||||||
function error404(message)
|
function error404(message)
|
||||||
ffluci.http.status(404, "Not Found")
|
ffluci.http.status(404, "Not Found")
|
||||||
message = message or "Not Found"
|
message = message or "Not Found"
|
||||||
|
|
||||||
require("ffluci.template")
|
require("ffluci.template")
|
||||||
if not pcall(ffluci.template.render, "error404") then
|
if not pcall(ffluci.template.render, "error404") then
|
||||||
ffluci.http.prepare_content("text/plain")
|
ffluci.http.prepare_content("text/plain")
|
||||||
print(message)
|
print(message)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Sends a 500 error code and renders the "error500" template if available
|
-- Sends a 500 error code and renders the "error500" template if available
|
||||||
function error500(message)
|
function error500(message)
|
||||||
ffluci.http.status(500, "Internal Server Error")
|
ffluci.http.status(500, "Internal Server Error")
|
||||||
|
|
||||||
require("ffluci.template")
|
require("ffluci.template")
|
||||||
if not pcall(ffluci.template.render, "error500", {message=message}) then
|
if not pcall(ffluci.template.render, "error500", {message=message}) then
|
||||||
ffluci.http.prepare_content("text/plain")
|
ffluci.http.prepare_content("text/plain")
|
||||||
print(message)
|
print(message)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Dispatches a request depending on the PATH_INFO variable
|
-- Dispatches a request depending on the PATH_INFO variable
|
||||||
function httpdispatch()
|
function httpdispatch()
|
||||||
local pathinfo = ffluci.http.env.PATH_INFO or ""
|
local pathinfo = ffluci.http.env.PATH_INFO or ""
|
||||||
local c = tree
|
local c = tree
|
||||||
|
|
||||||
for s in pathinfo:gmatch("/([%w-]+)") do
|
for s in pathinfo:gmatch("/([%w-]+)") do
|
||||||
table.insert(request, s)
|
table.insert(request, s)
|
||||||
end
|
end
|
||||||
|
|
||||||
dispatch()
|
dispatch()
|
||||||
end
|
end
|
||||||
|
|
||||||
function dispatch()
|
function dispatch()
|
||||||
local c = tree
|
local c = tree
|
||||||
local track = {}
|
local track = {}
|
||||||
|
|
||||||
for i, s in ipairs(request) do
|
for i, s in ipairs(request) do
|
||||||
c = c.nodes[s]
|
c = c.nodes[s]
|
||||||
if not c then
|
if not c then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
for k, v in pairs(c) do
|
for k, v in pairs(c) do
|
||||||
track[k] = v
|
track[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if track.i18n then
|
if track.i18n then
|
||||||
require("ffluci.i18n").loadc(track.i18n)
|
require("ffluci.i18n").loadc(track.i18n)
|
||||||
end
|
end
|
||||||
|
|
||||||
if track.setuser then
|
|
||||||
ffluci.sys.process.setuser(track.setuser)
|
|
||||||
end
|
|
||||||
|
|
||||||
if track.setgroup then
|
if track.setgroup then
|
||||||
ffluci.sys.process.setgroup(track.setgroup)
|
ffluci.sys.process.setgroup(track.setgroup)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if track.setuser then
|
||||||
|
ffluci.sys.process.setuser(track.setuser)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
if c and type(c.target) == "function" then
|
if c and type(c.target) == "function" then
|
||||||
dispatched = c
|
dispatched = c
|
||||||
|
|
||||||
stat, err = pcall(c.target)
|
stat, err = pcall(c.target)
|
||||||
if not stat then
|
if not stat then
|
||||||
error500(err)
|
error500(err)
|
||||||
|
@ -126,16 +126,16 @@ end
|
||||||
function createindex()
|
function createindex()
|
||||||
local root = ffluci.sys.libpath() .. "/controller/"
|
local root = ffluci.sys.libpath() .. "/controller/"
|
||||||
local suff = ".lua"
|
local suff = ".lua"
|
||||||
|
|
||||||
local controllers = ffluci.util.combine(
|
local controllers = ffluci.util.combine(
|
||||||
ffluci.fs.glob(root .. "*" .. suff),
|
ffluci.fs.glob(root .. "*" .. suff),
|
||||||
ffluci.fs.glob(root .. "*/*" .. suff)
|
ffluci.fs.glob(root .. "*/*" .. suff)
|
||||||
)
|
)
|
||||||
|
|
||||||
for i,c in ipairs(controllers) do
|
for i,c in ipairs(controllers) do
|
||||||
c = "ffluci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".")
|
c = "ffluci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".")
|
||||||
stat, mod = pcall(require, c)
|
stat, mod = pcall(require, c)
|
||||||
|
|
||||||
if stat and mod and type(mod.index) == "function" then
|
if stat and mod and type(mod.index) == "function" then
|
||||||
ffluci.util.updfenv(mod.index, ffluci.dispatcher)
|
ffluci.util.updfenv(mod.index, ffluci.dispatcher)
|
||||||
pcall(mod.index)
|
pcall(mod.index)
|
||||||
|
@ -151,30 +151,30 @@ function entry(path, target, title, order, add)
|
||||||
c.target = target
|
c.target = target
|
||||||
c.title = title
|
c.title = title
|
||||||
c.order = order
|
c.order = order
|
||||||
|
|
||||||
for k,v in pairs(add) do
|
for k,v in pairs(add) do
|
||||||
c[k] = v
|
c[k] = v
|
||||||
end
|
end
|
||||||
|
|
||||||
return c
|
return c
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fetch a dispatching node
|
-- Fetch a dispatching node
|
||||||
function node(...)
|
function node(...)
|
||||||
local c = tree
|
local c = tree
|
||||||
|
|
||||||
if arg[1] and type(arg[1]) == "table" then
|
if arg[1] and type(arg[1]) == "table" then
|
||||||
arg = arg[1]
|
arg = arg[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
for k,v in ipairs(arg) do
|
for k,v in ipairs(arg) do
|
||||||
if not c.nodes[v] then
|
if not c.nodes[v] then
|
||||||
c.nodes[v] = {nodes={}}
|
c.nodes[v] = {nodes={}}
|
||||||
end
|
end
|
||||||
|
|
||||||
c = c.nodes[v]
|
c = c.nodes[v]
|
||||||
end
|
end
|
||||||
|
|
||||||
return c
|
return c
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -195,22 +195,22 @@ end
|
||||||
function cbi(model)
|
function cbi(model)
|
||||||
require("ffluci.cbi")
|
require("ffluci.cbi")
|
||||||
require("ffluci.template")
|
require("ffluci.template")
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
local stat, res = pcall(ffluci.cbi.load, model)
|
local stat, res = pcall(ffluci.cbi.load, model)
|
||||||
if not stat then
|
if not stat then
|
||||||
error500(res)
|
error500(res)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local stat, err = pcall(res.parse, res)
|
local stat, err = pcall(res.parse, res)
|
||||||
if not stat then
|
if not stat then
|
||||||
error500(err)
|
error500(err)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
ffluci.template.render("cbi/header")
|
ffluci.template.render("cbi/header")
|
||||||
res:render()
|
res:render()
|
||||||
ffluci.template.render("cbi/footer")
|
ffluci.template.render("cbi/footer")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue