summaryrefslogtreecommitdiffstats
path: root/dansguardian-model.lua
diff options
context:
space:
mode:
authorAndreas Brodmann <andreas.brodmann@gmail.com>2008-01-18 10:52:39 +0000
committerAndreas Brodmann <andreas.brodmann@gmail.com>2008-01-18 10:52:39 +0000
commitbce897383c5090870e15f9ccd7d73922750d82ce (patch)
tree032495655383a3d826ce15afb48ca1248f86414a /dansguardian-model.lua
parenta8f1553596ca2214f920c5f00ab1c9d1c1eab3af (diff)
downloadacf-dansguardian-bce897383c5090870e15f9ccd7d73922750d82ce.tar.bz2
acf-dansguardian-bce897383c5090870e15f9ccd7d73922750d82ce.tar.xz
initial import of the dansguardian stuff after separation from squid
git-svn-id: svn://svn.alpinelinux.org/acf/dansguardian/trunk@615 ab2d0c66-481e-0410-8bed-d214d4d58bed
Diffstat (limited to 'dansguardian-model.lua')
-rw-r--r--dansguardian-model.lua354
1 files changed, 354 insertions, 0 deletions
diff --git a/dansguardian-model.lua b/dansguardian-model.lua
new file mode 100644
index 0000000..1abec68
--- /dev/null
+++ b/dansguardian-model.lua
@@ -0,0 +1,354 @@
+-- acf model for squid
+-- Copyright(c) 2007 A. Brodmann - Licensed under terms of GPL2
+module (..., package.seeall)
+
+require "posix"
+require "format"
+
+dansguardiancfg = "/etc/dansguardian/dansguardian.conf"
+dansguardiancfg2 = "/etc/dansguardian/dansguardianf1.conf"
+
+get_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/dansguardian " .. 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_dansguardian_version = function()
+
+ local retval = ""
+
+ local ptr = io.popen( "/usr/sbin/dansguardian -v" )
+ if ptr ~= nil then
+ retval = ptr:read( "*l" )
+ ptr:close()
+ else
+ retval = "Error - Failed to program version"
+ end
+
+ return retval
+end
+
+get_general_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 " .. dansguardiancfg .. " file!"
+ end
+
+ local fptr2 = io.open( dansguardiancfg2, "r" )
+ if fptr2 ~= nil then
+ local line = fptr2:read( "*l" )
+ while line ~= nil do
+ if string.sub( line, 1, 1 ) ~= "#" then
+ if string.sub( line, 1, 16 ) == "naughtynesslimit" then
+ retval.naughtynesslimit.value = get_cfg_value( line )
+ end
+ end
+ line = fptr2:read( "*l" ) -- read one config file line
+ end
+ fptr2:close()
+ else
+ error = "Failed to open " .. dansguardiancfg2 .. " file!"
+ end
+
+ return retval, error
+end
+
+get_plain_config = function()
+
+ local retval = ""
+ local error = ""
+
+ local fptr = io.open( dansguardiancfg, "r" )
+ if fptr ~= nil then
+ retval = fptr:read( "*a" )
+ fptr:close()
+ if retval == nil then
+ retval = ""
+ error = "Failed to read " .. dansguardiancfg .. " file!"
+ end
+ else
+ error = "Failed to open " .. dansguardiancfg .. " file!"
+ end
+
+ return retval, error
+end
+
+get_edit_config = function( name )
+
+ local retval = ""
+ local error = ""
+
+ if not is_valid_configfile( name ) then
+ return "", "Hacker"
+ end
+
+ local fptr = io.open( "/etc/dansguardian/" .. name )
+ if fptr ~= nil then
+ retval = fptr:read( "*a" )
+ fptr:close()
+ if retval == nil then
+ retval = ""
+ error = "Failed to read /etc/dansguardian/" .. name .. " file!"
+ end
+ else
+ error = "Failed to open /etc/dansguardian/" .. name .. " file!"
+ end
+
+ return retval, error
+end
+
+update_edit_config = function( name, config )
+
+ local retval = ""
+
+ if not is_valid_configfile( name ) then
+ return "", "Hacker"
+ end
+
+ local fptr = io.open( "/etc/dansguardian/" .. name, "wb+" )
+ if fptr ~= nil then
+ fptr:write( format.dostounix( config ) )
+ fptr:close()
+ retval = ""
+ else
+ error = "Failed to open /etc/dansguardian/" .. name .. " file!"
+ end
+
+ return retval
+end
+
+update_general_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 )
+
+ --- step 2 - dansguardiancfg2
+
+ tmpfile = io.open( tmpfilename, "wb+" )
+ if tmpfile == nil then
+ return "Failed to create temporary config file!"
+ end
+
+ cfgptr = io.open( dansguardiancfg2, "r" )
+ if cfgptr == nil then
+ tmpfile:close()
+ os.remove( tmpfilename )
+ return "Failed to open " .. dansguardiancfg2 .. "!"
+ end
+
+ line = cfgptr:read( "*l" )
+ while line ~= nil do
+ if string.sub( line, 1, 16 ) == "naughtynesslimit" then
+ tmpfile:write( "naughtynesslimit = " .. config.naughtynesslimit .. "\n" )
+ else
+ tmpfile:write( line .. "\n" )
+ end
+ line = cfgptr:read( "*l" )
+ end
+
+ tmpfile:close()
+ cfgptr:close()
+ os.rename( tmpfilename, dansguardiancfg2 )
+
+ return retval
+end
+
+update_plain_config = function( config )
+
+ local retval = ""
+ local cfgptr = -1
+ local error = ""
+
+ cfgptr = io.open( dansguardiancfg, "wb+" )
+ if cfgptr ~= nil then
+ cfgptr:write( config )
+ cfgptr:close()
+ else
+ retval = "Failed to open " .. dansguardiancfg .. " file!"
+ end
+
+ 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
+
+get_advanced_config = function()
+
+ local retval = { files = {} }
+ local errmsg = ""
+
+ get_file_tree( retval.files, "/etc/dansguardian", "" )
+
+ return retval, errmsg
+end
+
+get_file_tree = function( treetable, dir, prefix )
+
+ local entries = posix.dir( dir )
+ local k = ""
+ local v = ""
+ for k,v in ipairs( entries ) do
+ local attrs = posix.stat( dir .. "/" .. v )
+ if attrs.type == "regular" and string.sub( v, -4) ~= ".gif" then
+ table.insert( treetable, prefix .. v )
+ end
+ end
+
+ entries = posix.dir( dir )
+ for k,v in ipairs( entries ) do
+ local attrs = posix.stat( dir .. "/" .. v )
+ if attrs.type == "directory" and v~= "." and v~= ".." then
+ get_file_tree( treetable, dir .. "/" .. v, prefix .. v .. "/" )
+ end
+ end
+
+ return
+end
+
+is_valid_configfile = function( name )
+
+ local retval = false
+ local ftable = {}
+ local k
+ local v
+
+
+ get_file_tree( ftable, "/etc/dansguardian", "" )
+
+ for k,v in ipairs( ftable ) do
+ if v == name then
+ retval = true
+ end
+ end
+
+ return retval
+end
+