diff options
Diffstat (limited to 'sbin/e2guardian-update-blacklists')
-rwxr-xr-x | sbin/e2guardian-update-blacklists | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/sbin/e2guardian-update-blacklists b/sbin/e2guardian-update-blacklists new file mode 100755 index 0000000..c58c96b --- /dev/null +++ b/sbin/e2guardian-update-blacklists @@ -0,0 +1,147 @@ +#!/bin/bash + +# Copyright (C) 2016 by Mike Gabriel <mike.gabriel@it-zukunft-schule.de> + +# This script is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This script is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +set -e + +unset http_proxy +unset https_proxy +unset ftp_proxy + +BLACKLIST_URL="http://dsi.ut-capitole.fr/blacklists/download/blacklists_for_dansguardian.tar.gz" + +function update_blacklists() { + mkdir -p /var/lib/e2guardian/ + curl "${BLACKLIST_URL}" 1> /var/lib/e2guardian/blacklists.tar.gz 2>/dev/null + + if [ -e /var/lib/e2guardian/.blacklists.new ]; then + rm -Rf /var/lib/e2guardian/.blacklists.new + fi + + mkdir -p /var/lib/e2guardian/.blacklists.new + + cd /var/lib/e2guardian/.blacklists.new + tar xzf /var/lib/e2guardian/blacklists.tar.gz + + mv blacklists/* . + rmdir blacklists/ + + cd - 1>/dev/null + + if [ -e /var/lib/e2guardian/blacklists.old ]; then + rm -Rf /var/lib/e2guardian/blacklists.old + fi + + if [ -d /var/lib/e2guardian/blacklists ]; then + mv /var/lib/e2guardian/blacklists /var/lib/e2guardian/blacklists.old + fi + + if [ ! -e /var/lib/e2guardian/blacklists ]; then + mv /var/lib/e2guardian/.blacklists.new /var/lib/e2guardian/blacklists + + LANG=C date 1> /var/lib/e2guardian/last-updated.txt + + chown root:root -Rf /var/lib/e2guardian/blacklists + chmod -Rf a+r /var/lib/e2guardian/blacklists + cd /var/lib/e2guardian/blacklists + find * -type d | while read dir; do + chmod a+x "${dir}" + done + cd - 1> /dev/null + + fi + + if [ -e /var/lib/e2guardian/blacklists.tar.gz ]; then + rm -f /var/lib/e2guardian/blacklists.tar.gz + fi +} + +function update_whitelists() { + if [ -d /var/lib/e2guardian/whitelists.old ]; then + rm -Rf /var/lib/e2guardian/whitelists.old + fi + if [ -d /var/lib/e2guardian/whitelists ]; then + mv /var/lib/e2guardian/whitelists /var/lib/e2guardian/whitelists.old + fi + + mkdir -p /var/lib/e2guardian/whitelists + find /var/lib/e2guardian/blacklists/*/usage | while read usage; do + # skip symlinked dirs + if [ -h "$(dirname "${usage}")" ]; then + continue + fi + if grep -q "white" < "${usage}" && ! grep -q "black" < "${usage}"; then + mv "$(dirname "${usage}")" /var/lib/e2guardian/whitelists + fi + done +} + +function init_config() { + if [ ! -e "/etc/debian-edu/e2guardian_blacklisted_categories" ]; then + find /var/lib/e2guardian/blacklists/* -maxdepth 1 -type d| cut -d "/" -f6 >> /etc/debian-edu/e2guardian_blacklisted_categories + fi + if [ ! -e "/etc/debian-edu/e2guardian_whitelisted_categories" ]; then + find /var/lib/e2guardian/whitelists/* -maxdepth 1 -type d| cut -d "/" -f6 >> /etc/debian-edu/e2guardian_whitelisted_categories + fi +} + +function rearrange_lists() { + cat "/etc/debian-edu/e2guardian_whitelisted_categories" | while read whitelisted; do + if [ -d "/var/lib/e2guardian/blacklists/${whitelisted}" ] && \ + [ ! -h "/var/lib/e2guardian/blacklists/${whitelisted}" ]; then + mv "/var/lib/e2guardian/blacklists/${whitelisted}" /var/lib/e2guardian/whitelists + fi + done + + cat "/etc/debian-edu/e2guardian_blacklisted_categories" | while read blacklisted; do + if [ -d "/var/lib/e2guardian/whitelists/${blacklisted}" ] && \ + [ ! -h "/var/lib/e2guardian/whitelists/${blacklisted}" ]; then + mv "/var/lib/e2guardian/whitelists/${blacklisted}" /var/lib/e2guardian/blacklists + fi + done +} + +function update_lists() { + action=${1} + type="${2}" + list="${3}" + + sed -i "/etc/e2guardian/lists/${list}" -Ee "/(#|).Include<.*\/${action}s\/.*>$/d" + + find /var/lib/e2guardian/${action}s/*/${type} -type f -maxdepth 1 2>/dev/null | sort | while read path; do + # ignore symlinks pointing to another category dir + if [ ! -h "$(echo $path | cut -d "/" -f 1-6)" ]; then + echo "#.Include<${path}>" >> "/etc/e2guardian/lists/${list}" + fi + done + + cat /etc/debian-edu/e2guardian_${action}ed_categories | grep -v "^#" | while read category; do + sed -i "/etc/e2guardian/lists/${list}" -Ee "s/#(.Include<.*\/${category}\/${type})/\1/" + done +} + +update_blacklists +update_whitelists +init_config +rearrange_lists +update_lists blacklist domains bannedsitelist +update_lists blacklist urls bannedurllist +update_lists blacklist expressions bannedregexpurllist +update_lists whitelist domains exceptionsitelist +update_lists whitelist urls exceptionurllist +#invoke-rc.d e2guardian restart 1>/dev/null 2>/dev/null |