* ffluci/core: dispatcher.lua: setgid() won't work after setuid() due to missing...
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 24 May 2008 22:58:45 +0000 (22:58 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 24 May 2008 22:58:45 +0000 (22:58 +0000)
core/src/dispatcher.lua

index e820a8864bb7a2387a0397bccc998f41e98e7ddd..fce0ce294c92f5fd92fff1e23681bc8fd8671425 100644 (file)
@@ -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.
-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