module(..., package.seeall) -- Load libraries require("modelfunctions") require("fs") require("format") -- Set variables local processname = "postfix" local packagename = "postfix" local baseurl = "/etc/postfix/" local filelist = {baseurl.."main.cf", baseurl.."master.cf", baseurl.."saslpass"} local path = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin " -- ################################################################################ -- LOCAL FUNCTIONS -- ################################################################################ -- PUBLIC FUNCTIONS function startstop_service(action) return modelfunctions.startstop_service(processname, action) end function getstatus() local status = modelfunctions.getstatus(processname, packagename, "Postfix Status") -- Enabled status is unique for postfix -- Look for pid file stored in queue_directory .. /pid/ local config = format.parse_ini_file(fs.read_file(baseurl.."main.cf") or "", "") if config.queue_directory then local pidfiles = fs.find_files_as_array(".*\.pid", config.queue_directory.."/pid/") if pidfiles and pidfiles[1] then local file = pidfiles[1] -- check to see if there's a matching proc directory and that it was created slightly after the pid file -- this allows us to avoid the problem with proc numbers wrapping local tmp = string.match(fs.read_file(file) or "", "%d+") if tmp then local dir = "/proc/" .. tmp filetime = posix.stat(file, "ctime") dirtime = posix.stat(dir, "ctime") if dirtime and (tonumber(dirtime) - tonumber(filetime) < 100) then status.value.status.value = "Running" end end end end return status end function getstatusdetails() return cfe({ type="longtext", value="", label="Postfix Status Details" }) end function getfilelist() local listed_files = {} for i,name in ipairs(filelist) do local filedetails = fs.stat(name) or {} table.insert ( listed_files , {filename=name, mtime=filedetails.mtime or "---", filesize=filedetails.size or "0"} ) end table.sort(listed_files, function (a,b) return (a.filename < b.filename) end ) return cfe({ type="list", value=listed_files, label="Postfix File List" }) end function getfiledetails(filename) return modelfunctions.getfiledetails(filename, filelist) end function updatefiledetails(filedetails) return modelfunctions.setfiledetails(filedetails, filelist) end