#!/bin/bash . /etc/moblock/config CONF_DIR=/etc/moblock TEMP_DIR=$(/usr/bin/mktemp -t -d moblock-updateXXXXXXXX) LIST_FILE=banned.list USECOLOR="no" . /etc/rc.d/functions PREFIX_REG=" >" PREFIX_HL="::" function extract() { /usr/bin/find $TEMP_DIR -type f -name '*.gz' -o -name '*.zip' |\ while read N do case "$N" in *.zip) /usr/bin/unzip -oqq "$N" 2>/dev/null if [ $? -gt 0 ]; then rm -f "$N" return 1 else rm -f "$N" fi ;; *.gz) /bin/gunzip -f "$N" 2>/dev/null if [ $? -gt 0 ]; then rm -f "$N" return 1 fi ;; *) continue ;; esac done return 0 } cd $TEMP_DIR printf "${C_SEPARATOR} ------------------------------\n" printhl "Downloading and extracting files:\n" # Bluetack lists (with fallback) for i in ${BLUETACK[@]} do if [ $(echo $i | /bin/grep '^[^\!]' | /usr/bin/wc -l) -eq 1 ]; then stat_busy "BLUETACK '${i}'... " /usr/bin/wget ${WGET_OPTS} "http://www.bluetack.co.uk/config/${i}.gz" && extract if [ $? -gt 0 ] || [ ! -f ${i} ]; then stat_fail bfile=$i if [ "$bfile" = "ads-trackers-and-bad-pr0n" ]; then bfile="ads" elif [ "$bfile" = "Microsoft" ];then bfile="microsoft" fi stat_busy "[!!] BLUETACK '${i}' (fallback link)... " /usr/bin/wget ${WGET_OPTS} "http://list.iblocklist.com/?list=bt_${bfile%%-*}" -O "${i}.gz" && extract if [ $? -gt 0 ]; then stat_fail else stat_done fi else stat_done fi fi done # Blocklist lists for i in ${BLOCKLIST[@]} do if [ $(echo $i | /bin/grep '^[^\!]' | /usr/bin/wc -l) -eq 1 ]; then stat_busy "BLOCKLIST '${i}'... " /usr/bin/wget ${WGET_OPTS} "blocklist.org/${i}.p2b.gz" && extract if [ $? -gt 0 ]; then stat_fail else stat_done fi fi done # Old phoenixlabs.org lists for i in ${PHOENIXLABS[@]} do if [ $(echo $i | /bin/grep '^[^\!]' | /usr/bin/wc -l) -eq 1 ]; then stat_busy "PHOENIXLABS '${i}'... " /usr/bin/wget ${WGET_OPTS} "fox.phoenixlabs.org/${i}" && extract if [ $? -gt 0 ]; then stat_fail else stat_done fi fi done if [ $(/bin/cat "$TEMP_DIR"/* | /usr/bin/wc -l) -eq 0 ]; then printf "\n" printhl "ERROR: No files were downloaded" printf "${C_SEPARATOR} ------------------------------\n" exit 1 fi # Check files printsep printhl "Checking integrity of downloaded files:\n" /usr/bin/find -type f | while read N do stat_busy "File '$(echo $N | /bin/awk -F/ '{print $NF}')'... " scan1=$(/bin/cat "$N" | /usr/bin/wc -l) scan2=$(/bin/egrep -o ":[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" "$N" | /usr/bin/wc -l) if [ $scan1 -eq $scan2 ]; then stat_done else if [ $scan2 -gt 0 ]; then if [ $scan1 -gt $scan2 ]; then stat_append "$(($scan1-$scan2)) of $scan1 entries failed validation; keeping the file" stat_done fi else stat_fail stat_busy "[!!] Removing corrupted file... " rm "$N" 2>/dev/null if [ $? -gt 0 ]; then stat_fail exit 1 else stat_done fi fi fi done printsep printhl "Saving the list:\n" # Make backup if [ "$BACKUP_OLD_LIST" = "yes" ] && [ -f "$CONF_DIR"/"$LIST_FILE" ]; then stat_busy "Backing up old list to '$CONF_DIR/$LIST_FILE.gz'... " /bin/gzip -f "$CONF_DIR"/"$LIST_FILE" 2>/dev/null if [ $? -gt 0 ]; then stat_fail else stat_done fi fi # Save the list stat_busy "Saving new list to '$CONF_DIR/$LIST_FILE'... " /bin/cat "$TEMP_DIR"/* > "$CONF_DIR"/"$LIST_FILE" 2>&1 if [ $? -gt 0 ]; then stat_fail exit 1 else stat_done printf "\n" printhl "Saved `cat "$CONF_DIR"/"$LIST_FILE" | wc -l` ranges" printf "${C_SEPARATOR} ------------------------------\n" fi rm -rf "$TEMP_DIR" # Restart MoBlock if [ -f /var/run/moblock.pid ]; then /bin/kill -HUP `cat /var/run/moblock.pid` >/dev/null 2>&1 fi exit 0