-- acf model for displaying logfiles recusivly module (..., package.seeall) -- no initializer in model - use controller.init for that local function set_skins(skin) cmdtxt = "/bin/sed -i 's/skin=.*/skin=" .. skin .. "/' /etc/acf/acf.conf" local cmd, error = io.popen ( cmdtxt ) local cmdoutput = cmd:read("*a") cmd:close() return cmdtxt end local function list_skins() local path = "/usr/share/acf/www/skins/" local skinarray = {} local skins = {} local k,v for k,v in pairs(posix.dir(path) or {}) do -- Ignore files that begins with a '.' and 'cgi-bin' and only list folders if not ((string.match(v, "^%.")) or (string.match(v, "^cgi[-]bin")) or (string.match(v, "^static")) or (posix.stat(path .. v).type ~= "directory")) then local f = v local current = conf.skin if (current == f) then table.insert(skinarray, {name=f, inuse="In use"}) else table.insert(skinarray, {name=f}) end end end return skinarray end get = function (self) return list_skins() end update = function (self,skin) -- Make sure no one can inject code into the model. local availableskins = list_skins() for i = 1 , table.maxn(availableskins) do if ( availableskins[i].name == skin) and (skin ~= nil) then return set_skins(skin) end end end