<?php require_once('config.inc'); define('VIRALATOR_DOWNLOADDIR', '/usr/local/www/viralator'); define('SQUIRM_CONF', '/usr/local/etc/squirm/squirm.conf'); define('SQUIRM_PATTERNS', '/usr/local/etc/squirm/squirm.patterns'); define('FORBIDDEN_EXTS', 'html htm css php pl js vbs jpg jpeg gif png'); function viralator_install_command() { if (!is_dir(VIRALATOR_DOWNLOADDIR)) mkdir(VIRALATOR_DOWNLOADDIR); if (!is_file(SQUIRM_CONF)) { $conf = <<<EOD begin network 0.0.0.0/0 pattern squirm.patterns get end EOD; file_put_contents(SQUIRM_CONF, $conf); } if (!is_dir(VIRALATOR_DOWNLOADDIR)) make_dirs(VIRALATOR_DOWNLOADDIR); } function viralator_validate_input($post, &$input_errors) { if (trim($post['http_otherexts'])) { foreach (explode(',', $post['http_otherexts']) as $ext) { $ext = trim($ext); if (in_array($ext, explode(' ', FORBIDDEN_EXTS))) $input_errors[] = "The HTTP virus scanner can't scan *.$ext files."; else if (!preg_match('/\w+/', $ext)) $input_errors[] = "*.ext is not a valid file extension."; } } } function viralator_get_real_lan_ip() { global $config; $lan_if = $config['interfaces']['lan']['if']; $line = trim(shell_exec("ifconfig $lan_if | grep inet | grep -v inet6")); list($dummy, $ip) = explode(' ', $line); return $ip; } function viralator_escape_dots($value) { return preg_replace('/\./', '\\.', $value); } function viralator_resync() { global $config; $settings = $config['installedpackages']['clamav']['config'][0]; $exts = (empty($settings['http_exts']) ? array() : explode(',', $settings['http_exts'])); if (trim($settings['http_otherexts'])) { foreach (explode(',', $settings['http_otherexts']) as $ext) $exts[] = trim($ext); } $towrite = ''; // TODO: Escape any interface Squid listens on $lan_ip = viralator_get_real_lan_ip(); if (is_ipaddr($lan_ip)) { $escaped = viralator_escape_dots($lan_ip); $towrite .= "abort regexi (^http://$escaped/.*)\n"; } foreach (explode(' ', FORBIDDEN_EXTS) as $ext) $towrite .= "abort .$ext\n"; foreach ($exts as $ext) $towrite .= "regexi (^.*\\.$ext\$) http://$lan_ip/viralator.pl?url=\\1\n"; file_put_contents(SQUIRM_PATTERNS, $towrite); if (is_package_installed('squid')) { require_once('squid.inc'); squid_resync(); } } ?>