-- acf model for squid -- Copyright(c) 2007 A. Brodmann - Licensed under terms of GPL2 module (..., package.seeall) dansguardiancfg = "/etc/dansguardian/dansguardian.conf" get_status = function() local retval = "stopped" local ptr = io.popen( "/bin/pidof squid" ) local pid = ptr:read( "*a" ) ptr:close() if pid ~= nil then if #pid > 1 then retval = "running" end end return retval end get_dansguardian_status = function() local retval = "stopped" local ptr = io.popen( "/bin/pidof dansguardian" ) local pid = ptr:read( "*a" ) ptr:close() if pid ~= nil then if #pid > 1 then retval = "running" end end return retval end service_control = function( control ) local retval = "" local ptr = io.popen( "/etc/init.d/squid " .. control, "r" ) if ptr ~= nil then local retmsg = ptr:read( "*a" ) ptr:close() if retmsg ~= nil then retval = retmsg else retval = "service_control(): Failed to read output from initscript!\n" end else retval = "service_control(): Failed to start/stop/restart service!\n" end return retval end get_adv_config = function() local retval = "" local ptr = io.open( "/etc/squid/squid.conf", "r" ) if ptr ~= nil then local retcfg = ptr:read( "*a" ) ptr:close() if retcfg == nil then retval = "\n\n Error: Failed to read /etc/squid/squid.conf!\n\n" else retval = retcfg end end return retval end get_filter_config = function() local retval = {} local error = "" retval = { filterip = { label="Filter IP", type="text", value="" }, filterport = { label="Filter Port", type="text", value="" }, proxyip = { label="Proxy IP", type="text", value="" }, proxyport = { label="Proxy Port", type="text", value="" }, accessdeniedaddress = { label="AccessDeniedAddress", type="text", value="" }, naughtynesslimit = { label="NaughtynessLimit", type="text", value="" } } local fptr = io.open( dansguardiancfg, "r" ) if fptr ~= nil then local line = fptr:read( "*l" ) while line ~= nil do if string.sub( line, 1, 1 ) ~= "#" then if string.sub( line, 1, 8 ) == "filterip" then retval.filterip.value = get_cfg_value( line ) elseif string.sub( line, 1, 10 ) == "filterport" then retval.filterport.value = get_cfg_value( line ) elseif string.sub( line, 1, 7 ) == "proxyip" then retval.proxyip.value = get_cfg_value( line ) elseif string.sub( line, 1, 9 ) == "proxyport" then retval.proxyport.value = get_cfg_value( line ) elseif string.sub( line, 1, 19 ) == "accessdeniedaddress" then retval.accessdeniedaddress.value = get_cfg_value( line ) end end line = fptr:read( "*l" ) -- read one config file end fptr:close() else error = "Failed to open /etc/dansguardian/dansguardian.conf file!" end return retval, error end update_filter_config = function( config ) local retval = "" local tmpfilename = os.tmpname() local tmpfile = -1 local cfgptr = -1 local line = "" tmpfile = io.open( tmpfilename, "wb+" ) if tmpfile == nil then return "Failed to create temporary config file!" end cfgptr = io.open( dansguardiancfg, "r" ) if cfgptr == nil then tmpfile:close() os.remove( tmpfilename ) return "Failed to open " .. dansguardiancfg .. "!" end line = cfgptr:read( "*l" ) while line ~= nil do if string.sub( line, 1, 8 ) == "filterip" then tmpfile:write( "filterip = " .. config.filterip .. "\n" ) elseif string.sub( line, 1, 10 ) == "filterport" then tmpfile:write( "filterport = " .. config.filterport .. "\n" ) elseif string.sub( line, 1, 7 ) == "proxyip" then tmpfile:write( "proxyip = " .. config.proxyip .. "\n" ) elseif string.sub( line, 1, 9 ) == "proxyport" then tmpfile:write( "proxyport = " .. config.proxyport .. "\n" ) elseif string.sub( line, 1, 19 ) == "accessdeniedaddress" then tmpfile:write( "accessdeniedaddress = " .. config.accessdeniedaddress .. "\n" ) else tmpfile:write( line .. "\n" ) end line = cfgptr:read( "*l" ) end tmpfile:close() cfgptr:close() os.rename( tmpfilename, dansguardiancfg ) return retval end get_cfg_value = function( str ) local retval = "" local pos = 1 local found = false local found2 = false while not found and pos < #str -1 do if string.sub( str, pos, pos ) == "=" then found = true end pos = pos + 1 end if found then pos = pos - 1 while not found2 and pos < #str -1 do if string.sub( str, pos+1, pos+1 ) ~= " " then found2 = true end pos = pos + 1 end end if found2 then retval = string.sub( str, pos ) end return retval end update_adv_config = function( config ) local retval = "Successfully updated /etc/squid/squid.conf!" local ptr = io.open( "/etc/squid/squid.conf", "wb+" ) if ptr ~= nil then ptr:write( config ) ptr:close() else retval = "update_config(): Error, failed to open /etc/squid/squid.conf!\n" end return retval end get_basic_config = function() local config = { proxyip = { value="", type="text", label="Proxy IP" }, proxyport = { value="", type="text", label="Proxy Port" }, filterip = { value="", type="text", label="Filter IP" }, filterport = { value="", type="text", label="Filter Port" }, filterregex = { value="", type="text", label="FilterRegex" }, safeports = { value="", type="text", label="Safe_ports" }, sslports = { value="", type="text", label="SSL_ports" }, accesslog = { value="", type="select", label="Access Logs", option={ "yes", "no" } }, diskcache = { value="", type="select", label="Disk Cache Parameters", option={ "yes", "no" } }, authmethod = { value="", type="select", label="Authentication Method", option={ "digest", "ntlm", "none" } } } config.proxyip.value = "192.168.83.129" config.proxyport.value = 8080 config.accesslog.value = "yes" return config end