From 85e1efcc212616b3b15b6f45a66969d45bf53a17 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Fri, 14 Dec 2012 15:03:40 +0000 Subject: Replace all io.popen calls with modelfunctions.run_executable --- lbu-controller.lua | 6 +-- lbu-model.lua | 125 ++++++++++++++++------------------------------------- 2 files changed, 39 insertions(+), 92 deletions(-) diff --git a/lbu-controller.lua b/lbu-controller.lua index d52b5dd..dfe484a 100644 --- a/lbu-controller.lua +++ b/lbu-controller.lua @@ -33,11 +33,7 @@ end function listbackups(self) return self.model.getbackupfiles() end ---[[ -function deletebackup(self) - return self.handle_form(self, self.model.get_deletebackup, self.model.deletebackupfile, self.clientdata, "Delete", "Delete backup file", "Backup file deleted") -end ---]] + function selectbackup(self) return self.handle_form(self, self.model.get_selectbackup, self.model.selectbackupfile, self.clientdata, "Revert") end diff --git a/lbu-model.lua b/lbu-model.lua index 14d025b..6cdd254 100644 --- a/lbu-model.lua +++ b/lbu-model.lua @@ -14,17 +14,14 @@ local configfile = "/etc/lbu/lbu.conf" -- LOCAL FUNCTIONS local function get_version () - local f,error = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu 2>&1") - local programversion = f:read("*l") - f:close() - return programversion + local programversion = modelfunctions.run_executable({"lbu"}, true) + return string.match(programversion, "^[^\n]*") end local function getLbuStatus() local ret = {} - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu status -v 2>&1", "r") - if not (f) then return ret end - for line in f:lines() do + local f = modelfunctions.run_executable({"lbu", "status", "-v"}, true) + for line in string.gmatch(f, "[^\n]+") do if (string.match(line, "^Include files")) then break end if (string.match(line, "^Exclude files")) then break end local status, name = string.match(line, "^(%S)%s+(.+)$") @@ -32,7 +29,6 @@ local function getLbuStatus() ret[string.gsub('/' .. name, "/+", "/")] = status end end - f:close() return ret end @@ -48,9 +44,7 @@ local function availablemedias() end end -- Then, look in result of 'mount' - local f = io.popen("mount") - local mount = f:read("*a") - f:close() + local mount = modelfunctions.run_executable({"mount"}) for media in string.gmatch(mount, "/media/(%w+)%s") do if not string.find(media, "^cdrom") and not string.find(media, "^dvd") and not found[media] then medias[#medias+1] = media @@ -63,23 +57,21 @@ end local function getLbuCommit(flag) local err = {} local ret = "" - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu commit " .. format.escapespecialcharacters(flag) .. " 2>&1", "r") - for line in f:lines() do + local f = modelfunctions.run_executable({"lbu", "commit", flag}, true) + for line in string.gmatch(f, "[^\n]+") do ret = ret .. line .. "\n" --Look for error messages in output local searchrow, search = string.match(line, "^(lbu.*(%-%a).*)") if (search) then err[search] = searchrow end end - f:close() return ret, err end local function getciphers() local opensslciphers = {} local watchdog = nil - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin openssl -v 2>&1", "r") - if not (f) then return ciphers end - for line in f:lines() do + local f = modelfunctions.run_executable({"openssl", "-v"}, true) + for line in string.gmatch(f, "[^\n]+") do if (watchdog) then for cipher in string.gmatch(line, "(%S+)") do table.insert(opensslciphers,tostring(cipher)) @@ -87,7 +79,6 @@ local function getciphers() end if (string.match(line, "^Cipher commands")) then watchdog="yes" end end - f:close() return opensslciphers end @@ -156,7 +147,7 @@ local function validatefilelist(filelist) if #errors ~= 0 then filelist.errtxt = table.concat(errors, "\n") end - return filelist + return files end local function validatefilecontent (filedetails) @@ -177,32 +168,7 @@ local function validatefilecontent (filedetails) return success, filedetails end ---[[ --- FIXME - now the USB is mounted readonly by default, so have to check that too -local was_mounted -local mnt -local function mount() - local configopts = format.parse_ini_file(fs.read_file(configfile) or "", "") or {} - mnt = "/media/"..configopts.LBU_MEDIA - local f = io.popen("grep "..mnt.." /proc/mounts") - local cmdresult = f:read("*a") - f:close() - if cmdresult ~= "" then - was_mounted = true - else - local g = io.popen("mount "..mnt) - g:close() - was_mounted = false - end -end -local function unmount() - if not was_mounted then - local g = io.popen("umount "..mnt) - g:close() - end -end ---]] -- ################################################################################ -- PUBLIC FUNCTIONS @@ -316,9 +282,7 @@ function getincluded () }) -- Read the list - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu include -l") - included.value = f:read("*a") or "" - f:close() + included.value = modelfunctions.run_executable({"lbu", "include", "-l"}) validatefilelist(included) @@ -326,14 +290,17 @@ function getincluded () end function setincluded (self, included) - validatefilelist(included.value.included) + local files = validatefilelist(included.value.included) if not included.value.included.errtxt then - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu include -l | xargs /sbin/lbu include -r 2>&1") - f:close() - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu include "..string.gsub(included.value.included.value, "[%s%c]+", " ") - f = io.popen(cmd) - included.descr = f:read("*a") - f:close() + local current = format.string_to_table(modelfunctions.run_executable({"lbu", "include", "-l"}), "\n") + table.insert(current, 1, "-r") + table.insert(current, 1, "include") + table.insert(current, 1, "lbu") + modelfunctions.run_executable(current) + + table.insert(files, 1, "include") + table.insert(files, 1, "lbu") + included.descr, included.errtxt = modelfunctions.run_executable(files) else included.errtxt = "Failed to set included" end @@ -348,9 +315,7 @@ function getexcluded () }) -- Read the list - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu exclude -l") - excluded.value = f:read("*a") or "" - f:close() + excluded.value = modelfunctions.run_executable({"lbu", "exclude", "-l"}) validatefilelist(excluded) @@ -358,14 +323,17 @@ function getexcluded () end function setexcluded (self, excluded) - validatefilelist(excluded.value.excluded) + local files = validatefilelist(excluded.value.excluded) if not excluded.value.excluded.errtxt then - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu exclude -l | xargs /sbin/lbu exclude -r 2>&1") - f:close() - local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu exclude "..string.gsub(excluded.value.excluded.value, "[%s%c]+", " ") - f = io.popen(cmd) - excluded.descr = f:read("*a") - f:close() + local current = format.string_to_table(modelfunctions.run_executable({"lbu", "exclude", "-l"}), "\n") + table.insert(current, 1, "-r") + table.insert(current, 1, "exclude") + table.insert(current, 1, "lbu") + modelfunctions.run_executable(current) + + table.insert(files, 1, "exclude") + table.insert(files, 1, "lbu") + excluded.descr, excluded.errtxt = modelfunctions.run_executable(files) else excluded.errtxt = "Failed to set excluded" end @@ -398,22 +366,10 @@ function commit(self, input) return input end ---[[ --- FIXME - create get_deletebackupfile function and modify for use with handle_form -function deletebackupfile(file) - mount() - if string.find(file, "^"..mnt) and fs.is_file(file) then - local f = io.popen("rm "..file) - f:close() - end - unmount() -end ---]] + function getbackupfiles() local files = {} - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu lb 2>/dev/null", "r") - local content = f:read("*a") or "" - f:close() + local content = modelfunctions.run_executable({"lbu", "lb"}) if not string.match(content, "usage: lbu") then for line in string.gmatch(content, "([^\n]+)\n?") do files[#files + 1] = line @@ -432,13 +388,10 @@ function selectbackupfile(self, backuprequest) local files = getbackupfiles() for i,file in ipairs(files.value) do if file == backuprequest.value.backup.value then - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu revert "..file.." 2>&1", "r") - backuprequest.errtxt = f:read("*a") - if "" == backuprequest.errtxt then - backuprequest.errtxt = nil + backuprequest.descr, backuprequest.errtxt = modelfunctions.run_executable({"lbu", "revert", file}) + if not backuprequest.errtxt and backuprequest.descr == "" then backuprequest.descr = "Reverted to backup "..file end - f:close() break end end @@ -453,12 +406,10 @@ function getpackage() tmp = "/tmp/"..session.random_hash(10) end posix.mkdir(tmp) - local f = io.popen("PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin lbu package "..tmp.." 2>&1") - local cmdresult = f:read("*a") - f:close() + local cmdresult, errtxt = modelfunctions.run_executable({"lbu", "package", tmp}, true) -- find and read the file - local package = cfe({ type="raw", label="error", option="application/x-gzip" }) + local package = cfe({ type="raw", label="error", option="application/x-gzip", errtxt=errtxt }) for name in fs.find(".*tar%.gz", tmp) do package.label = posix.basename(name) package.value = fs.read_file(name) or "" -- cgit v1.2.3