diff options
author | Andreas Brodmann <andreas.brodmann@gmail.com> | 2008-01-18 10:52:39 +0000 |
---|---|---|
committer | Andreas Brodmann <andreas.brodmann@gmail.com> | 2008-01-18 10:52:39 +0000 |
commit | bce897383c5090870e15f9ccd7d73922750d82ce (patch) | |
tree | 032495655383a3d826ce15afb48ca1248f86414a /dansguardian-model.lua | |
parent | a8f1553596ca2214f920c5f00ab1c9d1c1eab3af (diff) | |
download | acf-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.lua | 354 |
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 + |