-- shorewall model methods module (..., package.seeall) require("format") local baseurl = "/etc/shorewall/" local function file_info ( path ) require("posix") local filedetails = posix.stat(path) filedetails["owner"]=rawget((posix.getpasswd(filedetails["uid"])),"name") filedetails["group"]=rawget((posix.getgroup(filedetails["gid"])),"name") filedetails["atimelong"]=os.date("%c", filedetails["atime"]) filedetails["mtimelong"]=os.date("%c", filedetails["mtime"]) filedetails["longname"]=path filedetails["name"]=basename(path) if ( filedetails["size"] > 1073741824 ) then filedetails["size"]=((filedetails["size"]/1073741824) - (filedetails["size"]/1073741824%0.1)) .. "G" elseif ( filedetails["size"] > 1048576 ) then filedetails["size"]=((filedetails["size"]/1048576) - (filedetails["size"]/1048576%0.1)) .. "M" elseif ( filedetails["size"] > 1024 ) then filedetails["size"]=((filedetails["size"]/1024) - (filedetails["size"]/1024%0.1)) .. "k" else filedetails["size"]=filedetails["size"] end return filedetails end -- ################################################################################ -- PUBLIC FUNCTIONS 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 restart_service () local f,err = io.popen("/etc/init.d/shorewall restart") local restart = f:read("*a") f:close() local status = get_status() status.restart = restart return status end function get_status () local f,error = io.popen("/sbin/shorewall status") local fake = f:read("*l") local fake = f:read("*l") local programstatus = f:read("*l") local programstate = f:read("*l") f:close() local f,error = io.popen("/sbin/shorewall version") local programversion = "shorewall-" .. f:read("*l") f:close() return {version=programversion,status=programstatus,state=programstate} end function get_filelist () 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 = file_info(filepath .. name) table.insert ( listed_files , {name=name, longname=filepath .. name, filedetails=filedetails} ) end end table.sort(listed_files, function (a,b) return (a.name < b.name) end ) return listed_files end function get_filecontent (self, name) local path = baseurl .. name file_content = nil local available_files = get_filelist() for k,v in pairs(available_files) do if ( available_files[k].name == name ) then local file = io.open( path ) local file_result = file:read("*a") or "unknown" file:close() local filedetails = file_info(path) file_content = cfe{name=name, value=file_result, filedetails=filedetails} end end return file_content end function get_logfile () local me = {} local cmdtxt = "cat /var/log/messages | grep Shorewall" local cmd, error = io.popen(cmdtxt ,r) local cmdoutput = cmd:read("*a") cmd:close() me.value = cmdoutput me.cmd = cmdtxt return me end function update_filecontent (self, name, modifications) path = baseurl .. name local available_files = get_filelist() for k,v in pairs(available_files) do if ( available_files[k].name == name ) then local file = io.open( path, "w+" ) local file_result,err = file:write(format.dostounix(modifications)) file:close() if (err ~= nil) then local filedetails = file_info(path) file_content = {name=name, value=file_result, filedetails=filedetails, err=err} end end end return file_content end