diff options
author | Mika Havela <mika.havela@gmail.com> | 2008-02-01 18:14:36 +0000 |
---|---|---|
committer | Mika Havela <mika.havela@gmail.com> | 2008-02-01 18:14:36 +0000 |
commit | 37b4a15a9a0e07504188b96567d500085b035b4d (patch) | |
tree | 9986b737683c22c8f5aafb47817ec1ab9b41efce /shorewall-model.lua | |
parent | 33dd344b2d2074c8838834e1c77336499b8cb068 (diff) | |
download | acf-shorewall-37b4a15a9a0e07504188b96567d500085b035b4d.tar.bz2 acf-shorewall-37b4a15a9a0e07504188b96567d500085b035b4d.tar.xz |
Changed shorewall so that it reports/uses cfe's instead!
git-svn-id: svn://svn.alpinelinux.org/acf/shorewall/trunk@682 ab2d0c66-481e-0410-8bed-d214d4d58bed
Diffstat (limited to 'shorewall-model.lua')
-rw-r--r-- | shorewall-model.lua | 278 |
1 files changed, 268 insertions, 10 deletions
diff --git a/shorewall-model.lua b/shorewall-model.lua index fe9c18e..cc6a85f 100644 --- a/shorewall-model.lua +++ b/shorewall-model.lua @@ -1,3 +1,270 @@ +module(..., package.seeall) + +require("fs") +require("procps") +require("getopts") +require("format") +require("daemoncontrol") +require("validator") + +local configfile = "/etc/shorewall/shorewall.conf" +local processname = "shorewall" +local baseurl = "/etc/shorewall/" + +local config = {} + +local function getloglevels() + local loglevels = {} + for i=1,8 do + table.insert(loglevels,i) + end + return loglevels +end + +local function getdetails() + local f,error = io.popen("/sbin/shorewall status") + local fake = f:read("*l") + local fake = f:read("*l") + local programstatus = f:read("*l") or "" + local programstate = f:read("*l") or "" + f:close() + local f,error = io.popen("/sbin/shorewall version") + local programversion = "shorewall-" .. f:read("*l") + f:close() + return programversion,programstatus,programstate +end + +-- ################################################################################ +-- PUBLIC FUNCTIONS + +-- action should be a CFE +function startstop_service ( self, action ) + local cmd = action.value + local cmdresult,cmdmessage,cmderror,cmdaction = daemoncontrol.daemoncontrol(processname, cmd) + action.descr=cmdmessage + action.errtxt=cmderror + -- Reporting back (true|false, the original acition) + return cmdresult,action + +end + +function getstatus() + local status = {} + local programversion,programstatus,programstate = getdetails() + status.version = cfe({ name = "version", + label="Program version", + value=programversion, + }) + status.status = cfe({ name="status", + label="Program status", + value=programstatus, + }) + status.state = cfe({ name="state", + label="Program reports", + value=programstate, + }) + + return status +end + +function configcheck () + local check = {} + local f,err = io.popen("/bin/echo -n '>> Check starts at: ';/bin/date; /bin/echo; /etc/init.d/shorewall check; /bin/echo; /bin/echo -n '>> Check stops at: '; /bin/date;") + local checkresult = f:read("*a") + f:close() + check.checkresult = cfe({ name = "checkresult", + type="longtext", + label="Result of checking config", + value=checkresult, + }) + return check +end + +function getlogfile () + local logfile = {} + local cmdaction = "cat /var/log/messages | grep Shorewall" + local f, error = io.popen(cmdaction ,r) + local checkresult = f:read("*a") + f:close() + logfile.checkresult = cfe({ name = "checkresult", + type="longtext", + label="Result of logfiles", + value=checkresult, + }) + logfile.filename = cfe({ + name="filename", + label="File name", + value=cmdaction, + }) + return logfile +end + +function getfilelist () + local filepath = baseurl + local listed_files = {} + + local k,v + for name in posix.files(filepath) do + if not string.match(name, "^%.") and not string.match(name, "^Makefile") then + local filedetails = fs.stat(filepath .. name) + table.insert ( listed_files , cfe({name=name, value=filepath .. name, mtime=filedetails.mtime, size=filedetails.size,}) ) + end + end + + table.sort(listed_files, function (a,b) return (a.name < b.name) end ) + + return listed_files +end + +function getfiledetails(self,search) + local file = {} + local path = nil + --Validate filename + local available_files = getfilelist() + for k,v in pairs(available_files) do + if ( tostring(available_files[k]["value"]) == tostring(search.value) ) then + path = tostring(search.value) + end + end + if not (path) or (path == "") then + file["filename"] = search + file["filename"]["label"] = "File name" + file["filename"]["errtxt"] = "Invalid path!" + return file + end + + local filedetails = fs.stat(path) + file["filename"] = cfe({ + name="filename", + label="File name", + value=path, + }) + file["filesize"] = cfe({ + name="filesize", + label="File size", + value=filedetails.size, + }) + file["mtime"] = cfe({ + name="mtime", + label="File name", + value=filedetails.mtime, + }) + file["filecontent"] = cfe({ + type="longtext", + name="filecontent", + label="File content", + value=fs.read_file(path), + }) + + return file +end + + +-- IMPORTANT! This function is a exception! It's not fed with CFE's +-- Parameter should be one of the ones defined in the variable 'variabletranslator'. +-- value should be whatever the new value should be. +function setconfigs(self,parameter,value) + -- Set variables + local variable = "SYSLOGD_OPTS" + local variabletranslator = ({ + logfile = "-O", + loglevel = "-l", + smallerlogs = "-S", + maxsize = "-s", + numrotate = "-b", + localandnetworklog = "-L", + remotelogging = "-R", + }) + cmdparameter = variabletranslator[parameter] + + -- Report a error if someone tryes to use a invalid parameter + if not (cmdparameter) then + local availablevariables = "" + for k,v in pairs(variabletranslator) do + availablevariables = k .. ", " .. availablevariables + end + parameter = parameter or "" + return false, cfe({ + name="syslog.model.setconfigs()", + errtxt="'" .. parameter .. "' is not a valid parameter!\nValid options are: " .. availablevariables, + }) + end + + --TODO: Validate so that user cant add values with '-' (could cause major breakage next time you do getopts) + + -- This config-file only accepts one type of parameters (report error if someone uses wrong parameter) + if not (string.find(cmdparameter, "-%a$")) then + return false, cfe({ + name="syslog.model.setconfigs()", + errtxt="Parameter must be formated '-a' (where a is one upper/lowercase letter [a-z])", + }) + end + + -- Validate userinput (if valid path/filename) + if (value) and (cmdparameter == "-O") then + local cmdresult, cmdmessage = validator.is_valid_filename(value, "/var/log" ) + if not (cmdresult) then + return false, cfe({ + name="syslog.model.setconfigs()", + errtxt=cmdmessage, + }) + end + end + + -- Validate userinput (Has the user entered a valid hostname and/or port) + if (value) and (cmdparameter == "-R") then + local hostport = format.string_to_table(value, ":") + local host = hostport[1] + local port = hostport[2] + if (port) and not (validator.is_port(port)) then + return false, cfe({ + name="syslog.model.setconfigs.getopts.setoptsinfile()", + errtxt="You entered '" .. tostring(port) .. "' as port - This is not valid!", + }) + end + end + + -- Set/Unset checkbox variables + if (value) and ((cmdparameter == "-S") or (cmdparameter == "-L")) then value = "" end + + local cmdresult, cmdmessage, cmderror = getopts.setoptsinfile(configfile,variable,cmdparameter,value) + if (cmderror) then + return false, cfe({ + name="syslog.model.setconfigs.getopts.setoptsinfile()", + errtxt=cmderror, + }) + end + return true, cfe({ + name="syslog.model.setconfigs()", + value=cmdmessage, + }) +end + +-- modifications should be a CFE +function updatefilecontent (self, filetochange) + local path = nil + --Validate filename + local available_files = getfilelist() + for k,v in pairs(available_files) do + if ( tostring(available_files[k]["value"]) == tostring(filetochange.name) ) then + path = tostring(filetochange.name) + end + end + if not (path) then + filetochange.errtxt = "Invalid path!" + return filetochange + end + + local file_result,err = fs.write_file(path, format.dostounix(filetochange.value)) + return file_result, err +end + + + + + +--[===[ + -- shorewall model methods module (..., package.seeall) require("format") @@ -13,15 +280,6 @@ function startstop_service ( self, state ) return daemoncontrol.daemoncontrol("shorewall", state) end -function check_config () - check = nil - check = {} - local f,err = io.popen("/bin/echo -n '>> Check starts at: ';/bin/date; /bin/echo; /etc/init.d/shorewall check; /bin/echo; /bin/echo -n '>> Check stops at: '; /bin/date;") - check.result = f:read("*a") - f:close() - check["error"]=err - return check -end function getstatus () local f,error = io.popen("/sbin/shorewall status") @@ -91,4 +349,4 @@ function update_filecontent (self, name, modifications) end return name, file_content end - +--]===] |