* 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 e820a88..fce0ce2 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.
 
 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