diff --git a/advanced/Scripts/list.sh b/advanced/Scripts/list.sh old mode 100644 new mode 100755 index 5cee8b56..bb3a8a43 --- a/advanced/Scripts/list.sh +++ b/advanced/Scripts/list.sh @@ -50,9 +50,18 @@ EOM exit 0 } +EscapeRegexp() { + # This way we may safely insert an arbitrary + # string in our regular expressions + echo $* | sed "s/[]\\.|$(){}?+*^]/\\\\&/g" | sed "s/\\//\\\\\//g" +} + HandleOther(){ - #check validity of domain - validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') + # First, convert everything to lowercase + domain=$(sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" <<< "$1") + + #check validity of domain + validDomain=$(perl -ne "print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/" <<< "$domain") if [ -z "${validDomain}" ]; then echo "::: $1 is not a valid argument or domain name" else @@ -77,12 +86,12 @@ PoplistFile() { } AddDomain() { - list="$2" + domain=$(EscapeRegexp "$1") bool=true #Is the domain in the list we want to add it to? - grep -Ex -q "$1" ${list} > /dev/null 2>&1 || bool=false + grep -Ex -q "${domain}" ${list} > /dev/null 2>&1 || bool=false if [[ "${bool}" == false ]]; then #domain not found in the whitelist file, add it! @@ -101,14 +110,16 @@ AddDomain() { RemoveDomain() { list="$2" + domain=$(EscapeRegexp "$1") bool=true - #Is it in the other list? Logic follows that if its whitelisted it should not be blacklisted and vice versa - grep -Ex -q "$1" ${list} > /dev/null 2>&1 || bool=false + #Is it in the list? Logic follows that if its whitelisted it should not be blacklisted and vice versa + grep -Ex -q "${domain}" ${list} > /dev/null 2>&1 || bool=false if [[ "${bool}" == true ]]; then # Remove it from the other one echo "::: Removing $1 from $list..." - echo "$1" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' ${list} + # /I flag: search case-insensitive + sed -i "/${domain}/Id" ${list} reload=true else if [[ "${verbose}" == true ]]; then