projects
/
project
/
luci.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6287015
)
* ffluci/core: dispatcher.lua: setgid() won't work after setuid() due to missing...
author
Jo-Philipp Wich
<jow@openwrt.org>
Sat, 24 May 2008 22:58:45 +0000
(22:58 +0000)
committer
Jo-Philipp Wich
<jow@openwrt.org>
Sat, 24 May 2008 22:58:45 +0000
(22:58 +0000)
core/src/dispatcher.lua
patch
|
blob
|
history
diff --git
a/core/src/dispatcher.lua
b/core/src/dispatcher.lua
index
e820a88
..
fce0ce2
100644
(file)
--- a/
core/src/dispatcher.lua
+++ b/
core/src/dispatcher.lua
@@
-12,9
+12,9
@@
Copyright 2008 Steven Barth <steven@midlink.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with 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 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,
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(...)
-- 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"
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
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")
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
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
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
for s in pathinfo:gmatch("/([%w-]+)") do
table.insert(request, s)
end
-
+
dispatch()
end
function dispatch()
local c = tree
local track = {}
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
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
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.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.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
if c and type(c.target) == "function" then
dispatched = c
-
+
stat, err = pcall(c.target)
if not stat then
error500(err)
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"
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)
)
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)
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)
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
c.target = target
c.title = title
c.order = order
-
+
for k,v in pairs(add) do
c[k] = v
end
for k,v in pairs(add) do
c[k] = v
end
-
+
return c
end
-- Fetch a dispatching node
function node(...)
local c = tree
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
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
for k,v in ipairs(arg) do
if not c.nodes[v] then
c.nodes[v] = {nodes={}}
end
-
+
c = c.nodes[v]
end
c = c.nodes[v]
end
-
+
return c
end
return c
end
@@
-195,22
+195,22
@@
end
function cbi(model)
require("ffluci.cbi")
require("ffluci.template")
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
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
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
ffluci.template.render("cbi/header")
res:render()
ffluci.template.render("cbi/footer")
end
-end
\ No newline at end of file
+end