summaryrefslogtreecommitdiffstats
path: root/postfix-model.lua
diff options
context:
space:
mode:
authorttrask <ttrask@ab2d0c66-481e-0410-8bed-d214d4d58bed>2009-03-18 15:51:29 +0000
committerttrask <ttrask@ab2d0c66-481e-0410-8bed-d214d4d58bed>2009-03-18 15:51:29 +0000
commit7ba853589ddcaaf1e768784af3bfeebd6dd5abfe (patch)
tree240850f6b14ac5ad70b4082c000f06fe1aacad25 /postfix-model.lua
parentf664556711a283133063ba51a031905d02cbb052 (diff)
downloadacf-postfix-7ba853589ddcaaf1e768784af3bfeebd6dd5abfe.tar.bz2
acf-postfix-7ba853589ddcaaf1e768784af3bfeebd6dd5abfe.tar.xz
Modified postfix to edit/create/delete files in /etc/postfix, and added button to rebuild databases.
git-svn-id: svn://svn.alpinelinux.org/acf/postfix/trunk@1731 ab2d0c66-481e-0410-8bed-d214d4d58bed
Diffstat (limited to 'postfix-model.lua')
-rw-r--r--postfix-model.lua83
1 files changed, 79 insertions, 4 deletions
diff --git a/postfix-model.lua b/postfix-model.lua
index 8676ecd..33d4520 100644
--- a/postfix-model.lua
+++ b/postfix-model.lua
@@ -2,14 +2,16 @@ module(..., package.seeall)
-- Load libraries
require("modelfunctions")
+require("posix")
require("fs")
require("format")
+require("validator")
-- Set variables
local processname = "postfix"
local packagename = "postfix"
local baseurl = "/etc/postfix/"
-local filelist = {baseurl.."main.cf", baseurl.."master.cf", baseurl.."saslpass"}
+local aliasesfile = "/etc/mail/aliases"
local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin "
@@ -54,10 +56,16 @@ function getstatusdetails()
return cfe({ type="longtext", value="", label="Postfix Status Details" })
end
+local function geteditablefilelist()
+ local listed_files = fs.find_files_as_array("[^%.].*", baseurl)
+ table.insert(listed_files, aliasesfile)
+ return listed_files
+end
+
function getfilelist()
local listed_files = {}
- for i,name in ipairs(filelist) do
+ for i,name in ipairs(geteditablefilelist()) do
local filedetails = fs.stat(name) or {}
table.insert ( listed_files , {filename=name, mtime=filedetails.mtime or "---", filesize=filedetails.size or "0"} )
end
@@ -68,9 +76,76 @@ function getfilelist()
end
function getfiledetails(filename)
- return modelfunctions.getfiledetails(filename, filelist)
+ return modelfunctions.getfiledetails(filename, geteditablefilelist())
end
function updatefiledetails(filedetails)
- return modelfunctions.setfiledetails(filedetails, filelist)
+ return modelfunctions.setfiledetails(filedetails, geteditablefilelist())
+end
+
+function getnewfile()
+ local options = {}
+ options.filename = cfe({ label="File Name" })
+ return cfe({ type="group", value=options, label="New File" })
+end
+
+function createfile(newfile)
+ newfile.errtxt = "Failed to create file"
+ local path = newfile.value.filename.value
+ if not string.find(path, "/") then
+ path = baseurl..path
+ end
+ if validator.is_valid_filename(path, baseurl) then
+ if posix.stat(path) then
+ newfile.value.filename.errtxt = "File already exists"
+ else
+ fs.create_file(path)
+ newfile.errtxt = nil
+ end
+ else
+ newfile.value.filename.errtxt = "Invalid filename"
+ end
+
+ return newfile
+end
+
+function deletefile(filename)
+ local result = cfe({ value="Failed to delete file", label="Delete file result" })
+ if not validator.is_valid_filename(filename, baseurl) then
+ result.errtxt = "Not a valid filename!"
+ elseif not fs.is_file(filename) then
+ result.errtxt = "File doesn't exist!"
+ else
+ os.remove(filename)
+ result.value = "File Deleted"
+ end
+ return result
+end
+
+function rebuild_databases()
+ local result = cfe({ value={"Rebuilding databases"}, label="Rebuild Databases result" })
+ table.insert(result.value, " See logfile for possible errors")
+ local cmd,f,cmdresult
+ -- parse main.cf looking for hash files
+ local config = format.parse_ini_file(fs.read_file("/etc/postfix/main.cf") or "", "") or {}
+ for name,val in pairs(config) do
+ -- run postmap on files
+ local filename = string.match(val, "hash:(.*)")
+ if filename and not string.find(filename, aliasesfile) then
+ cmd = "postmap "..filename
+ table.insert(result.value, "Running: "..cmd)
+ f = io.popen(format.escapespecialcharacters(path..cmd))
+ table.insert(result.value, f:read("*a"))
+ f:close()
+ end
+ end
+ -- finally, run newaliases
+ cmd = "newaliases"
+ table.insert(result.value, "Running: "..cmd)
+ f = io.popen(format.escapespecialcharacters(path..cmd))
+ table.insert(result.value, f:read("*a"))
+ f:close()
+
+ result.value = table.concat(result.value, "\n")
+ return result
end