summaryrefslogtreecommitdiffstats
path: root/lbu-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lbu-model.lua')
-rw-r--r--lbu-model.lua125
1 files changed, 38 insertions, 87 deletions
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 ""