Compare commits

...

853 Commits

Author SHA1 Message Date
Adam Warner
14944b0283 Merge pull request #3157 from pi-hole/release/v4.3.4
Release v4.3.4
2020-02-24 18:48:03 +00:00
Dan Schaper
0fbcc6d8b5 Compare daemons to expected results. (#3158)
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2020-02-24 17:38:37 +00:00
Adam Warner
707e21b927 :dominik: Detect binary name before calling FTLcheckUpdate in update.sh
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2020-02-24 12:10:36 +00:00
Adam Warner
545b6605bc 4.3.3 (#3154)
* Backport ee7090b8fc to v4 to prevent failures in FTL download
* update tests to reflect changes to FTL download URL
* backport `tbd` fix

Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2020-02-23 21:34:12 +00:00
Dan Schaper
e41c4b5bb6 Merge pull request #2881 from pi-hole/release/v4.3.2
Pi-hole Core v4.3.2
2019-09-15 08:52:21 -07:00
Dan Schaper
b209629579 Merge pull request #2909 from pi-hole/fix/domains_in_comment
Print messages only after removing possible matches in comments
2019-09-05 21:30:34 -07:00
Mark Drobnak
93ecc046ea Merge pull request #2912 from pi-hole/tweak/RemoveAdblockSupport
Remove adblock list style support
2019-09-03 20:51:09 -04:00
Adam Warner
8bef5dc805 remove n from -ne
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2019-09-03 23:56:23 +01:00
Adam Warner
ad41bcca5a Remove support for adblock style lists to prevent false positives
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2019-09-03 23:43:11 +01:00
DL6ER
aed2e35bc0 Print messages only after removing possible matches in comments.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-09-02 22:39:28 +02:00
Mark Drobnak
e7af42a9f8 Merge pull request #2897 from pi-hole/fix/readOnlyBin
Remove readonly attribute of the PI_HOLE_BIN_DIR declaration in pihole
2019-08-31 14:07:58 -04:00
Dan Schaper
b9fed8fca6 Merge pull request #2891 from niklasea/development
Restore 'pihole -q' hosts format support and improve matching in edge cases
2019-08-30 20:56:52 -07:00
Adam Warner
79b8dac0fa Remove readonly attribute of the PI_HOLE_BIN_DIR declaration in pihole
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2019-08-30 22:06:14 +01:00
DL6ER
d8eee47ca4 Add dhcp-ignore-names option when enabling DHCP service. We currently remove anything that starts with "dhcp-" to have a clean configuration and removed these lines without noticing when enabling the DHCP server.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-08-28 22:10:26 -07:00
Niklas Elmose Andersen
a3e32d9a15 Properly escape domain regex
Dots in domain names should not match any character.

Signed-off-by: Niklas Elmose Andersen <mail@niklasea.dk>
2019-08-27 12:13:28 +02:00
Niklas Elmose Andersen
989d1aff60 Restore and improve 'pihole -q' matching
Removes regex lookaround which 'grep -E' does not support.
Restores support for blocklists in hosts format.
Simplifies domain match cleanup logic by eliminating an if-condition.
Improves domain matching by eliminating commented domain names,
eliminating false positives in a few edge cases.

Signed-off-by: Niklas Elmose Andersen <mail@niklasea.dk>
2019-08-26 20:39:56 +02:00
Dan Schaper
76133074d1 Merge pull request #2886 from pi-hole/fix/fullpath
Call 'pihole' with full path in install and cronjobs.
2019-08-25 15:38:19 -07:00
Dan Schaper
4cfe463dfa Add back dropped binary call.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-08-24 04:57:23 -07:00
Dan Schaper
03c65dd0e9 Convert hardcoded /usr/local/bin to variable
Update pihole script with full path to 'pihole'

Variable for webpage.sh 'pihole' call.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-08-24 04:49:14 -07:00
Dan Schaper
1c50caa8ca Merge pull request #2882 from pi-hole/fix/FTL-latest-tag-not-found
Fix error when getting latest FTL tag
2019-08-21 15:31:04 -07:00
Mcat12
febdbceab1 Fix error when getting latest FTL tag
The headers containing the latest FTL tag were not properly input to the
command (`<` vs `<<<`). This caused Bash to try and open the file named
after the header string, which does not exist.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 10:03:54 -04:00
Mark Drobnak
597b4bfcca Merge pull request #2873 from pi-hole/fix/pihole_restartdns
Simplify restarting code for "pihole restartdns"
2019-08-21 08:57:44 -04:00
Dan Schaper
5c65006a66 Merge base branch changes
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-08-21 05:20:10 -07:00
David Haguenauer
34727c00c6 Drop indirection from install_dependent_packages
Previously, install_dependent_packages would receive an array variable
name as its single parameter, and would use variable indirection to
access it; this change simplifies that function so that it instead
receives the expanded array.

Signed-off-by: David Haguenauer <ml@kurokatta.org>
2019-08-21 04:41:45 -07:00
Andreas Kurth
352146ef92 Fix pihole manpage to match code.
The dry-run argument to pihole -up is "--check-only", not "--checkonly".

Signed-off-by: Andreas Kurth <github@akurth.de>
2019-08-21 04:39:13 -07:00
Mcat12
b107ae2ab9 Use the filtered IPv6 OpenDNS servers
The ones we were using previously were not filtered. See
https://support.opendns.com/hc/en-us/articles/227986667-Does-OpenDNS-Support-IPv6-

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:39:10 -07:00
Mcat12
d5d1a607ad Fix PKG_REMOVE array usage
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:39:07 -07:00
Mcat12
2594164772 Use an array for PKG_REMOVE
Fixes shellcheck warning.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:39:05 -07:00
Mcat12
209555c42e Fix uninstall causing 403 errors and not removing packages
The 403 lighttpd errors were caused by removing the lighttpd config
directory and not removing lighttpd itself. This caused a subsequent
Pi-hole reinstall to not have all of the required lighttpd config files.

The error while removing packages was caused by combining arguments into
a string instead of listing each argument.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:39:01 -07:00
DL6ER
e27f50b8e5 Try to obtain PID from PIDFILE. If this fails (file does not exist or is empty), fall back to using pidof + awk
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-08-21 04:38:58 -07:00
DL6ER
484f618685 Use last PID in case pidof returns multiple PIDs for pihole-FTL
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-08-21 04:38:55 -07:00
Mcat12
da398c3d9c Print an error message if the FTL release metadata download fails
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:38:51 -07:00
Mcat12
4e0ad52001 Fix ShellCheck issue by refactoring a bit
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:38:24 -07:00
Mcat12
c9829dd3e4 Fix pihole -up showing FTL update when network is down
Fixes #1877

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-21 04:38:04 -07:00
Dan Schaper
35cf863f4b Create FUNDING.yml
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-08-21 04:38:01 -07:00
Andreas
c53be459c6 quick fix for when dig also returns a CNAME
Signed-off-by: Andreas <ryrun@online.de>
2019-08-21 04:37:06 -07:00
B. Olausson
ab1ea5a366 This change fixes issue #145 "stty: standard input: Inappropriate ioctl for device ".It checks if a real terminal exist, if not it sets the screen size to a fixed value. This helps to avoid nasty and unnecessary logs when running "pihole -up" via e.g. cron.
Signed-off-by: B. Olausson <contactme@olausson.de>
2019-08-20 14:48:03 -07:00
bcambl
97e11bd94e ensure installation dependencies for FTL tests which rely on /etc/init.d
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2019-08-20 11:42:12 -07:00
bcambl
10de7f649b add chkconfig to INSTALLER_DEPS (CentOS/Fedora)
chkconfig is a dependency of spawn-fcgi which is a dependency of lighttpd which is installed via PIHOLE_WEB_DEPS in phase 2
adding chkconfig to INSTALLER_DEPS to ensure /etc/init.d is present during the installation prompts (phase 1)

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2019-08-20 11:42:09 -07:00
bcambl
d793ef1ab8 Merge conflict Fedora Dockerfile for tests pinned to 30
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-08-20 11:40:18 -07:00
Jeroen Baert
d3d45a8776 Fix 404 error when browsing to pi.hole (without /admin) (for fedora)
Signed-off-by: Jeroen Baert <3607063+Forceflow@users.noreply.github.com>
2019-08-20 11:29:20 -07:00
Jeroen Baert
9f86fd0cb4 Fix for 404 error when browsing to pi.hole (without /admin)
Signed-off-by: Jeroen Baert <3607063+Forceflow@users.noreply.github.com>
2019-08-20 11:29:17 -07:00
Mcat12
71d5b42726 Remove the ZeusTracker blocklist from the defaults
It is no longer served. Fixes #2843.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-08-20 11:05:06 -07:00
DL6ER
251c9fee98 Simplify restarting code for "pihole restartdns". This fixes #2869.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-08-14 21:14:55 +02:00
Mark Drobnak
1a741f696e Merge pull request #2816 from RamSet/hotfix/lighttpdMime
Fix lighttpd mime
2019-06-29 15:45:33 -04:00
RamSet
b5af125be6 Removed line
Signed-off-by: RamSet <RamSet@gmail.com>
2019-06-25 15:45:01 -06:00
RamSet
ecc49318f0 Fixed MIME related issue present in lighttpd/1.4.53
Signed-off-by: RamSet <RamSet@gmail.com>
2019-06-25 15:45:01 -06:00
Mark Drobnak
1d43c0a2fa Merge pull request #2693 from pi-hole/release/v4.3
Pi-hole Core v4.3
2019-05-18 16:08:49 -04:00
Mark Drobnak
ff5894d772 Merge pull request #2744 from pi-hole/fix/cron-job-errors-untagged
Fix for preventing git error message in cron logs
2019-05-11 22:59:32 -04:00
mpiederiet
3220e2b978 Fix for preventing git error message in cron logs
Fix to prevent "fatal: No names found, cannot describe anything" git message during scheduled update checks

Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-05-11 10:57:44 +02:00
DL6ER
54ae458b61 Merge pull request #2733 from pi-hole/fix/debug-curl
Pi-hole Debug - tricorder upload function calls
2019-05-11 10:54:30 +02:00
Mark Drobnak
55ab3b2dc7 Merge pull request #2739 from pi-hole/new/stickermule_reflink
README StickerMule URL
2019-05-07 23:26:20 -04:00
Mark Drobnak
bdc8cf2bc8 Merge pull request #2738 from pi-hole/fix/untagged_version_fresh_install
Fix Untagged display on new installs
2019-05-07 23:25:33 -04:00
Dan Schaper
74836bebe4 README StickerMule URL
Change StickerMule reflink to Team Pi-hole link.
2019-05-07 11:10:51 -07:00
DL6ER
95150a5d85 Clone twenty instead of only one commit when installing Pi-hole. This ensures that we clone at least one tagged commit in case we need to push changes to master.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-05-07 19:42:11 +02:00
DL6ER
8abeb2204b Merge pull request #2735 from pi-hole/fix/gravity-blocked-domain
Fix incorrect adlist query when an adlist is blocked during gravity
2019-05-04 23:14:49 +02:00
Mcat12
ec06fd0ad4 Fix incorrect adlist query when an adlist is blocked during gravity
hosts-file.net was hard-coded as the domain to check instead of the
actual domain.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-05-04 11:35:21 -07:00
Dan Schaper
5532df24e4 Pi-hole Debug - tricorder upload function calls
Fix tricorder upload function calls to use new curl function.
2019-05-03 02:46:27 -07:00
Dan Schaper
b3898b9b2a Merge pull request #2732 from pi-hole/dschaper-patch-1
Update cryptocoin addresses
2019-05-03 02:42:41 -07:00
Dan Schaper
9ce84714cd Update cryptocoin addresses
We no longer have access to the old coinbase account. Updating to new Coinbase Commerce account.
2019-05-02 18:08:10 -07:00
Mark Drobnak
6812e8880e Merge pull request #2705 from pi-hole/fix/chronometer-refresh-arg
Fix chronometer refresh incorrectly reading the long argument sleep time
2019-04-29 11:43:07 -04:00
Mark Drobnak
b27e4c3dc3 Merge pull request #2725 from pi-hole/fix/get-ip-similar-subnets
Fix getting IP address in the presence of similar subnets
2019-04-28 14:24:47 -04:00
Mcat12
b320e74921 Improve argument handling
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-04-27 14:05:04 -07:00
Mcat12
add5e4ca5e Explicitly allow only -r and --refresh in argument handler
It is already checked, but this make the code explicit.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-04-27 13:39:44 -07:00
Mcat12
466fd79c66 Fix getting IP address in the presence of similar subnets
Change was suggested by @computergeek125 in #2387

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-04-27 12:39:45 -07:00
DL6ER
e3d9cf0ac1 Merge pull request #2718 from Piskvor/basic-install-package-manager-typo
Show $UPDATE_PKG_CACHE content in error message.
2019-04-24 10:17:23 +02:00
Mark Drobnak
bd572d8843 Merge pull request #2717 from pi-hole/fix/teleporter-extension
Fix teleporter backup file extension
2019-04-23 13:23:43 -04:00
Jan Piskvor Martinec
037737d653 Show $UPDATE_PKG_CACHE content in error message.
Fixes the typo in update_package_cache(), where the error message
 contained the color code twice, instead of the $UPDATE_PKG_CACHE text.

Signed-off-by: Jan Piskvor Martinec <github@piskvor.org>
2019-04-23 16:02:25 +02:00
Mark Drobnak
d2c7c426de Fix teleporter backup file extension
Fixes #2714 

Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2019-04-22 19:43:26 -07:00
Mark Drobnak
1d09c6e47d Merge pull request #2709 from pi-hole/fix/checkout_indentation
Fix pihole checkout indentation
2019-04-16 22:51:01 -04:00
DL6ER
84244b7cd5 Fix indentation in display of branches available during pihole checkout
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-04-16 18:30:04 +02:00
Mcat12
422680ee9f Fix chronometer refresh incorrectly reading the long argument sleep time
`-r` worked, but `--refresh` did not.

Fixes #2703

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-04-14 13:03:25 -07:00
Mark Drobnak
42c7653e99 Merge pull request #2696 from pi-hole/tweak/FTL-privacy-doc-link
Add a link to the documentation on FTL privacy levels during install
2019-04-07 15:12:10 -04:00
Mcat12
78c0c58946 Add a link to the documentation on FTL privacy levels during install
Closes #2695

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-04-07 12:00:43 -07:00
Mark Drobnak
cae61614f4 Merge pull request #2688 from pi-hole/fix/2687
Add Check to `pihole -q -exact` to ensure there is no `#` char preceding a space before the domain
2019-03-28 23:20:41 -04:00
Adam Warner
a7f6c9b3a0 Ignore matches that start # using negative lookbehind
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
2019-03-29 00:08:04 +00:00
Mark Drobnak
5950b4bb78 Merge pull request #2646 from pi-hole/fix/FTL_arch_detect_rpm
Don't fail when trying to detect OS architecture on RPM-based systems
2019-03-24 15:23:05 -04:00
DL6ER
817b19888f Merge branch 'development' into fix/FTL_arch_detect_rpm 2019-03-23 08:55:46 +01:00
Mark Drobnak
b64fb578fc Merge pull request #2674 from NiGhTTraX/development
Fix uninstalling lighttpd when it's not installed
2019-03-15 22:11:34 -04:00
Andrei Picus
e9e92368b0 Fix uninstalling lighttpd when it's not installed
Signed-off-by: Andrei Picus <NiGhTTraX@users.noreply.github.com>
2019-03-15 15:05:58 +01:00
Dan Schaper
ffcb173a7f Merge pull request #2672 from pi-hole/fix/test-version-pinning
Pin Python package versions to the versions in the last successful build
2019-03-15 07:04:40 -07:00
Mcat12
b9c9c2797f Pin Python package versions to the versions in the last successful build
The last successful build was
https://travis-ci.org/pi-hole/pi-hole/builds/500825408

When `testinfra` became `2.0.0`, it removed the deprecated features that
the tests currently use.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-03-13 20:14:21 -07:00
Mark Drobnak
204a4e459b Merge pull request #2637 from TheNoim/patch-1
Support pi hole behind a reverse proxy with ssl
2019-03-13 22:12:00 -04:00
DL6ER
0a53e966ea Merge pull request #2659 from pi-hole/tweak/warn_if_FTL_not_on_master
Warn user during update if FTL is on a custom branch
2019-03-03 09:34:11 +01:00
DL6ER
2e17c23333 Don't warn if user is on development as this branch is constantly updated
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-03-02 16:40:59 +01:00
DL6ER
63f3381a2b Warn user if FTL is not on branch master
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-03-02 16:36:49 +01:00
Mark Drobnak
2292720fed Merge pull request #2650 from mmphego/patch-1
Update README.md
2019-03-01 13:19:31 -05:00
Mpho Mphego
b77efa521f Update README.md
Removed the extra double quote.

Signed-off-by: Mpho Mphego <mpho112@gmail.com>
2019-03-01 09:38:36 +02:00
Mpho Mphego
cfe221706b Update README.md
Changed badges from HTML code to markdown for consistency

Signed-off-by: Mpho Mphego <mpho112@gmail.com>
2019-02-27 09:57:23 +02:00
Dan Schaper
293e2a8e80 Merge pull request #2647 from pi-hole/feature/curl_debug
Use `curl` instead of `openssl` for debug upload.
2019-02-23 09:11:02 -08:00
Dan Schaper
71cd6c137b Use curl instead of openssl for transmission of unmodified
log file. We want ansi color codes to be sent.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2019-02-23 04:13:44 -08:00
DL6ER
9867b7fccf Don't fail when trying to detect OS architecture on RPM-based systems
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-02-22 18:41:01 +01:00
Mark Drobnak
58f198626a Merge pull request #2640 from pi-hole/new/DebugAdditions
Add git status/diff to debug log
2019-02-18 19:28:21 -05:00
Adam Warner
a145f1d931 Be more verbose with debug script output
If output of `git status -s` is non-null display changes
if output of `git diff` is non-null, display diff

Signed-off-by: Adam Warner <adamw@rner.email>
2019-02-18 22:32:53 +00:00
Mark Drobnak
9748f19172 Merge pull request #2639 from pi-hole/hotfix/v4.2.2
Update development from hotfix/v4.2.2
2019-02-18 13:54:08 -05:00
DL6ER
ba1e94d3d9 Merge pull request #2626 from pi-hole/hotfix/v4.2.2
Pi-hole Core v4.2.2
2019-02-18 18:36:13 +01:00
Nils Bergmann
cd9fadbc44 Remove protocol determination
No protocol determination is neede, if you just use double slash.

Signed-off-by: Nils Bergmann <nilsbergmann@noim.io>
2019-02-16 15:32:56 +01:00
Mark Drobnak
062a180a1c Merge pull request #2621 from cryptomilk/development-fix
A bunch of fixes for basic-install.sh
2019-02-10 20:06:26 -05:00
Andreas Schneider
860ec1a7c4 basic_install: Use install for sudoers
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-10 08:45:03 +01:00
DL6ER
5ca1bfc11c Delete /dev/shm/FTL-* files on (re)start of pihole-FTL
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-02-08 15:00:35 +01:00
Andreas Schneider
2f189cd076 basic_install: There is no pihole group, remove it
Only a user has been created beforehand. Only some distributions create
a group with the same name based on their configuration. We cannot
assume this is always the default.

Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-08 08:06:12 +01:00
Andreas Schneider
2f0e6a6dda basic_install: Make sure the PI_HOLE_CONFIG_DIR exists
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-08 08:06:12 +01:00
Andreas Schneider
f187b42a98 basic_install: Define webroot globally as a variable
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-08 08:06:02 +01:00
Andreas Schneider
838e1b19ec basic_install: Set permissons for PI_HOLE_DASHBOARD_DIR
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-06 10:41:37 +01:00
Andreas Schneider
d5bbb2b640 basic_install: Use a varibale for the pihole dashboard dir
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-06 10:40:47 +01:00
Andreas Schneider
dc91d4b1f9 basic_install: If a static interface is already set up we are done
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
2019-02-06 07:50:21 +01:00
Dan Schaper
e967fe2266 Merge pull request #2612 from pi-hole/hotfix/v4.2.1
Remove user/group from dnsmasq config
2019-02-03 11:36:57 -08:00
Dan Schaper
b5c7657e01 Merge pull request #2614 from pi-hole/hotfix/v4.2.1
Merge v4.2.1 hotfix to dev
2019-02-03 11:36:00 -08:00
Mcat12
680d6e2d31 Merge branch 'release/v4.2' into development
# Conflicts:
#	automated install/basic-install.sh
2019-02-03 11:14:09 -08:00
Mcat12
7a19d24058 Remove user/group from dnsmasq config
In the case that FTL is started under root, dnsmasq changes the user to
pihole due to this setting. The shared memory is created before this
switch, and may cause issues such as failing to delete or reallocate
the shared memory.

These config lines were necessary before dnsmasq became part of FTL, but
now since dnsmasq runs under FTL, we can configure the user/group
through FTL.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-02-03 10:55:18 -08:00
Dan Schaper
995ee41d6b Merge pull request #2600 from pi-hole/release/v4.2
Release v4.2
2019-02-03 08:52:07 -08:00
Mark Drobnak
69919ac85c Merge pull request #2610 from pi-hole/fix/dev-shm
Change /var/run/shm to /dev/shm
2019-02-02 13:44:39 -05:00
Mcat12
26f2410fe6 Change /var/run/shm to /dev/shm
The /var directory may not exist (does not exist on Fedora 29), and is
simply a symlink to /dev/shm.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-02-02 10:37:12 -08:00
Adam Warner
d43c32e9e8 Merge pull request #2609 from pi-hole/fix/start-service-ftl-checkout
Fix missed start_service -> restart_service call
2019-02-02 18:27:09 +00:00
Mcat12
5c4ee23795 Fix missed start_service -> restart_service call
start_service was changed to restart_service.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2019-02-02 10:19:44 -08:00
Dan Schaper
fb3d871553 Merge pull request #2602 from pi-hole/fix/download_FTL_earlier
Download FTL earlier in the installer
2019-02-02 06:43:16 -08:00
Adam Warner
ae654730c4 Update automated install/basic-install.sh
Co-Authored-By: DL6ER <DL6ER@users.noreply.github.com>
2019-02-02 08:00:58 +01:00
DL6ER
ec79e86bee We should really use stop_service as it also includes some nice output
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-02-01 18:06:57 +01:00
DL6ER
e8dabc71af Don't try to start pihole-FTL after it has been installed. This will be done a few moments later when gravity is invoked.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-02-01 17:54:21 +01:00
DL6ER
9c0de0f731 Try to stop pihole-FTL before and (re)start pihole-FTL after the install command
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-02-01 17:39:12 +01:00
DL6ER
4948862dce Fail hard if FTL binary could not be installed
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-31 20:10:52 +01:00
DL6ER
7479485d45 Add test for the case the binary variable is unset (defaults to "tbd" in this case)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-31 20:00:26 +01:00
Mark Drobnak
1e284f69ea Merge pull request #2587 from pi-hole/new/network-table
Download macvendor database
2019-01-28 20:27:13 -05:00
DL6ER
516ed83638 Add "|| true" to the curl command as a failed download is no show-stopper for the overall install process.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-28 20:48:30 +01:00
Mark Drobnak
26361883b4 Merge pull request #2601 from pi-hole/fix/double_disable_kills_gravity
Prevent double disabling/enabling
2019-01-27 13:54:33 -05:00
DL6ER
d26f2dcb2c Use global binary variable in tests for automated install
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:47:28 +01:00
DL6ER
cc657c0c26 Rename subroutine start_service() to restart_service() because this is what it does
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:37:03 +01:00
DL6ER
d90d7b6927 Call FTL download/installation early on in the installation process.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:36:27 +01:00
DL6ER
de6dc90575 Don't diable pihole-FTL before calling install. root should be able to overwrite the binary in any case. The binary has already been downloaded and hash-verified here so we don't expect any errors in this binary.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:32:33 +01:00
DL6ER
3cdd6204c5 Move dnsmasq disabling and config file rewriting into a dedicated subroutine
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:31:02 +01:00
DL6ER
d996e9c9ee Fix inconsistent handling of binary variable. get_binary_variable() stores the result into a global variable we pass later on as argument to FTLinstall() and define a local variable with the same name. This is fixed by only using the globa variable in all places not. This is still not a very elegant solution but it is also not subject of the current PR.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:28:09 +01:00
DL6ER
a4ba8d4b8f Prevent double disabling/enabling by checking BLOCKING_ENABLED value in setupVars.conf
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-24 09:16:24 +01:00
Mark Drobnak
f7ca74cf1d Merge pull request #2598 from pi-hole/fix/remove-norton
Remove Norton DNS
2019-01-19 20:52:37 -05:00
Mark Drobnak
ebba32e1c4 Remove Norton DNS
Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2019-01-19 20:45:19 -05:00
Mark Drobnak
7d2507527a Merge pull request #2593 from TheLastProject/feature/standardized-dns-list
Standardize DNS list and write to file for AdminLTE
2019-01-13 11:10:45 -08:00
Sylvia van Os
97decb3a73 Standardize DNS list and write to file for AdminLTE
Signed-off-by: Sylvia van Os <sylvia@hackerchick.me>
2019-01-13 19:38:04 +01:00
DL6ER
f360959efc Download macvendor database from ftl.pi-hole.net when downloading a new FTL binary. Users who want to update the database more frequently than on each FTL release can use the python script from the FTL repository to generate the database themselves. The macvendor database is an optional component so a failing download is no reason to interrupt the installer.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-09 19:26:19 +01:00
Mark Drobnak
465589c0fd Merge pull request #2575 from LudovicRousseau/fix2
Do not ask admin password just for help documentation
2019-01-07 00:07:53 -05:00
Mark Drobnak
9fcf7a2610 Merge pull request #2581 from bcambl/remove_bc_dep
remove unused dependency (bc)
2019-01-04 19:01:31 -05:00
bcambl
3035fbf468 remove unused dependency (bc)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2019-01-04 17:17:42 -06:00
DL6ER
c4c354bc4b Merge pull request #2578 from pi-hole/new/libcap-dev
Add libcap as dependency
2019-01-03 16:08:45 +01:00
DL6ER
c5da1bb952 Add libcap as Fedora dependency
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-03 10:39:46 +01:00
DL6ER
486c41a69a Add Debain dependency libcap2 needed for FTL's capability check on startup
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-03 10:39:10 +01:00
DL6ER
87800a3659 Merge pull request #2570 from pi-hole/tweak/wpad
Add wpad vulnerability fix as suggested by dnsmasq.conf.example
2019-01-03 00:10:31 +01:00
Ludovic Rousseau
d5fbe1b629 Do not ask admin password just for help documentation
It is not a good idea to ask for an admin password just to get the
command documentation.
"pihole -h" should return the arguments documentation with no need to
enter a password.

Without the patch I get:
$ ./pihole -h
Password:

It is easy to reproduce by invalidating the sudo password using
"sudo -k" before running pihole again.

Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2019-01-02 23:54:30 +01:00
Mark Drobnak
a3cee67a61 Merge pull request #2571 from pi-hole/tweak/debug/shm
List content of /var/run/shm in debugger
2019-01-02 15:12:54 -05:00
DL6ER
5ffc8c7443 List content of /var/run/shm in debugger
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-01 17:56:02 +01:00
DL6ER
04fd296ffe Add wpad vulnerability fix as suggested by dnsmasq.conf.example
Signed-off-by: DL6ER <dl6er@dl6er.de>
2019-01-01 17:13:43 +01:00
Mark Drobnak
262d5eea22 Merge pull request #2547 from pi-hole/fix/version-command-no-web
Don't show web version in pihole -v output if not installed
2018-12-27 23:20:16 -05:00
Mark Drobnak
ed5869646f Use source instead of dot for setupVars
Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2018-12-27 16:37:10 -05:00
Dan Schaper
b984fc4e0e Merge pull request #2564 from floek/development
Add a blank after printf to avoid 'Command not found' error
2018-12-25 00:12:50 -08:00
Florian Freund
0ef4901e48 Add a blank after printf to avoid 'Command not found' error
> curl -L https://install.pi-hole.net | bash /dev/stdin --i_do_not_follow_recommendations
...
/dev/stdin: Zeile 2449: printf  %b Skipping free disk space verification\n: Command not found.

Signed-off-by: Florian Freund <mail@floek.net>
2018-12-25 09:02:12 +01:00
Dan Schaper
8d85d46c1a Merge pull request #2556 from pi-hole/release/v4.1.1
Release v.4.1.1
2018-12-21 09:06:19 -08:00
bcambl
eca975a370 add sqlite3 dependency for fedora
`sqlite3` is provided by the `sqlite` package on CentOS & Fedora

Signed-off-by: bcambl <blayne@blaynecampbell.com>
(cherry picked from commit 724afc000f)
2018-12-19 10:20:47 -08:00
Mark Drobnak
3bb94d469d Merge pull request #2554 from bcambl/add_sqlite_dep
add sqlite3 dependency for fedora (#2552)
2018-12-18 12:03:26 -05:00
bcambl
724afc000f add sqlite3 dependency for fedora
`sqlite3` is provided by the `sqlite` package on CentOS & Fedora

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-12-17 21:03:54 -06:00
Mcat12
be2d494fcf Don't show web version in pihole -v output if not installed
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-12-12 14:55:09 -05:00
Mark Drobnak
a36734db66 Merge pull request #2543 from pi-hole/fix/privacy-level-4
Add privacy level 4 to all privacy level code
2018-12-10 11:48:25 -05:00
Mcat12
1cad069050 Add privacy level 4 to all privacy level code
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-12-10 10:18:25 -05:00
Mark Drobnak
d24e0a6060 Merge pull request #2540 from pi-hole/release/v4.1
Update development with final v4.1 changes
2018-12-09 22:24:42 -05:00
Jacob Salmela
f65f793a0d Merge pull request #2496 from pi-hole/release/v4.1
Release v4.1
2018-12-09 14:33:58 -06:00
Dan Schaper
f7ad489805 Merge pull request #2504 from bcambl/ifcfg_con_name
configure ifcfg network files by connection name when required
2018-12-08 10:44:45 -08:00
Dan Schaper
62459c4f00 Merge pull request #2532 from pi-hole/update/agent-string-12-2018
Update user agent string
2018-12-06 10:17:49 -08:00
DL6ER
05bd88b4d8 Update agent string: the selected string is the most abundant one on 06 Dec 2018 with a percentage of almost 10%
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-12-06 18:04:17 +01:00
Dan Schaper
0546fff1ce Merge pull request #2531 from pi-hole/fix/duplicate_dont_destroy
Don't `mv` `preEventHorizon`, copy it.
2018-12-06 08:40:02 -08:00
Adam Warner
83f7bd66e6 Don't mv preEventHorizon, copy it.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-12-05 22:29:01 +00:00
bcambl
14ebb2fb93 remove 'System' from NetworkManager connection name
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-12-01 12:08:48 -06:00
Dan Schaper
916b2920be Merge pull request #2525 from pi-hole/release/v4.1
Release/v4.1 to Development
2018-11-29 08:46:05 -08:00
Dan Schaper
a20963889c Merge pull request #2512 from kefnab/development
Added check for universe repo on ubuntu bionic.
2018-11-27 03:35:28 -08:00
Dan Schaper
4b77475807 Merge pull request #2520 from pi-hole/new/rfc4039
Backend changes for DHCPv4 rapid commit support
2018-11-27 03:34:54 -08:00
Dan Schaper
9f672593bc Update advanced/Scripts/webpage.sh
Co-Authored-By: DL6ER <DL6ER@users.noreply.github.com>
2018-11-26 20:01:41 +01:00
DL6ER
a285ae65fb Backend changes for DHCPv4 rapid commit support
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-11-25 08:39:58 +01:00
Dan Schaper
917a0239a9 Merge pull request #2514 from pi-hole/fix/suppress_warnings_initd
Suppress warning if Pi-hole is not used as DHCP server
2018-11-21 13:47:16 -08:00
Clayton Dobbs
3261c2e273 Added check for universe repo on ubuntu bionic with user prompts.
Signed-off-by: Clayton Dobbs <clayton.dobbs@gmail.com>
2018-11-20 21:39:01 -07:00
DL6ER
d0125d5aad Suppress warning if Pi-hole is not used as DHCP server (/etc/pihole/dhcp.leases is not present in this case)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-11-19 17:38:19 +01:00
Dan Schaper
65a3da92f1 Merge pull request #2505 from pi-hole/fix/DNS_with_hash
Account for non-standard ports in DNS server addresses.
2018-11-13 02:53:51 -08:00
Dan Schaper
5c621fa253 Lints
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-12 17:21:34 -08:00
Dan Schaper
f9e71bee0a Account for port, or lack of, in PIHOLE_DNS_1
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-12 17:15:24 -08:00
bcambl
c3804877ed linting: Double quote to prevent globbing and word splitting.
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-11-11 14:48:16 -06:00
Dan Schaper
35e53ab9c7 Merge pull request #2501 from pi-hole/fix/restart-dns-error-on-success
Fix restartDNS returning code 1 even when it worked
2018-11-10 10:10:49 -08:00
Dan Schaper
053987b9e1 Merge pull request #2500 from pi-hole/fix/debug-remove-dnsmasq
Remove dnsmasq checks from debugger
2018-11-10 10:10:05 -08:00
bcambl
c0bc93c7c4 break dhcpcd and ifcfg network configurations into separate functions
- move some logic from setStaticIPv4 to setDHCPCD
- breakout ifcfg configuration into separate function which takes a config path as an argument
- setStaticIPv4 now checks for configs and calls the appropriate function accordingly
- add logic to check ifcfg file by _connection name_ if file is not found by _interface name_

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-11-09 15:20:51 -06:00
Dan Schaper
1f596eb2bc Merge pull request #2502 from pi-hole/release/v4.1
Release/v4.1 backports to development
2018-11-09 12:49:32 -08:00
Mcat12
3f59b51be1 Fix restartDNS returning code 1 even when it worked
If stdout was not a terminal (the `-t 1` check), `restartDNS` would
return code 1 in the success case. This caused the API to fail whenever
it tried to restart the DNS server.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-11-08 22:00:13 -05:00
Mcat12
9d59da8974 Remove dnsmasq checks from debugger
This also fixes an issue where the port checks weren't running
(`compare_port_to_service_assigned`).

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-11-08 21:51:21 -05:00
DL6ER
51218bd1ad Merge pull request #2497 from pi-hole/fix/adlists.list_not_created
Bugfix for #2354
2018-11-08 20:37:28 +01:00
DL6ER
e1c3c53058 Merge branch 'release/v4.1' into fix/adlists.list_not_created 2018-11-08 20:29:07 +01:00
DL6ER
9fa497b056 Merge pull request #2498 from pi-hole/fix/IPv6_string
Change field from digit to string for printf
2018-11-08 20:28:24 +01:00
Dan Schaper
057fbfc2b9 Change field from digit to string for printf
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-08 11:10:09 -08:00
DL6ER
33156071cd Fix literal "choice" being passed to appendToListsFile()
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-11-08 19:43:35 +01:00
Mark Drobnak
bbb759c684 Merge pull request #2477 from bcambl/debug_init_service_check
fix debug service check via sysvinit
2018-11-07 17:50:32 -05:00
Mark Drobnak
f1a7bc9ecd Merge pull request #2481 from pi-hole/revert-2468-lighttpd-conf-enhancements
Revert "lighttpd conf enhancements"
2018-11-07 17:49:25 -05:00
Mark Drobnak
d514608f91 Merge pull request #2492 from pi-hole/fix/IPv4_detection
IPv4 detection improvements.
2018-11-07 17:48:34 -05:00
Dan Schaper
e8c2e26358 Override shellcheck with explanations.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-03 13:39:43 -07:00
Dan Schaper
61c67849d7 Support multiple distributions and release versions in find_IPv4_information().
Add basic sanity check to function, remove unused variable.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-03 13:20:40 -07:00
Mark Drobnak
2cdbb34763 Merge pull request #2488 from pi-hole/feature/command_function
Moved `command -v` calls to function in installer.
2018-11-02 22:16:44 -04:00
Dan Schaper
538ba918c1 Merge pull request #2490 from sadsfae/add_blog_guide_hobohouse
Add hobohouse blog/guide to coverage links.
2018-11-02 13:00:24 -07:00
Will Foster
c330df9700 Add hobohouse blog/guide to coverage links.
This is a link to an updated guide on setting up
Pi-hole on Raspberry Pi.  It also covers using the Tomato
router firmware and running things in a docker container
along with some tips, blocklist recommendations and usage.

Signed-off-by: Will Foster <sadsfae@funcamp.net>
2018-11-02 19:50:39 +00:00
Mark Drobnak
1789a2db29 Merge pull request #2384 from pi-hole/feature/install-privacy-level
Set FTL Privacy Level During Install
2018-11-01 15:16:11 -04:00
Dan Schaper
c270b83341 Use printf instead of echo
Co-Authored-By: Mcat12 <mark.drobnak@gmail.com>
2018-11-01 15:14:26 -04:00
Dan Schaper
02f0788033 Moved command -v calls to function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-01 12:00:08 -07:00
Dan Schaper
a2ea6e8d47 Merge pull request #2486 from pi-hole/feature/install_printf
Beginning steps to installer overhaul. Echos to Printf test.
2018-11-01 10:16:57 -07:00
Dan Schaper
a986f53134 Merge pull request #2436 from pi-hole/fix/password-read-error
Fix error when reading in new password
2018-11-01 07:05:27 -07:00
Dan Schaper
9d2d45b473 Query php directly for major and minor version id strings.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-11-01 05:59:14 -07:00
Dan Schaper
0c892e6b3a Addressed Stickler ShellCheck lints
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-10-31 14:35:55 -07:00
Dan Schaper
a0fc38d6a2 All terminal echo commands changed to printf.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-10-31 11:14:05 -07:00
Mcat12
28cbf45d1d Add explanatory comment for include_shell
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-10-30 21:52:42 -04:00
Dan Schaper
72829be281 Remove shellcheck overrides
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-10-26 12:14:10 -07:00
Adam Warner
d57f9906bd read -r -a, not read -a -r
Signed-off-by: Adam Warner <adamw@rner.email>
2018-10-26 19:24:43 +01:00
Adam Warner
3d4fea6510 Move -r to before the -p
Signed-off-by: Adam Warner <adamw@rner.email>
2018-10-26 19:17:49 +01:00
Adam Warner
f670644954 Revert "lighttpd conf enhancements" 2018-10-26 19:12:11 +01:00
Mark Drobnak
dd6821814a Merge pull request #2479 from pi-hole/fix/referral-readme
update broken link, add coverage, and fix formatting
2018-10-25 17:09:30 -04:00
Jacob Salmela
f33584511c update broken link, add coverage, and fix formatting
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-10-25 05:58:17 -05:00
bcambl
3ec84553ef fix debug service check via sysvinit
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-10-24 10:06:11 -06:00
Mark Drobnak
a301d4381f Merge pull request #2472 from pi-hole/fix-webpwexpansion
Prevent BASH from expanding Web Password
2018-10-22 22:18:32 -04:00
Mark Drobnak
49b8ad7e94 Merge pull request #2470 from jeremysherriff/patch-1
Silence updateGravity cron job unless errors occur
2018-10-21 14:04:39 -04:00
WaLLy3K
180d29c7b3 Prevent BASH from expanding Web Password
* Resolves issue #2471

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-10-21 11:08:22 +11:00
Mark Drobnak
a23ba91681 Merge pull request #2468 from gstrauss/lighttpd-conf-enhancements
lighttpd conf enhancements
2018-10-20 16:43:03 -04:00
jeremysherriff
d986da63a5 Pass gravity exit code back to caller to allow for cron error handling
Signed-off-by: jeremysherriff <jeremysherriff@gmail.com>
2018-10-19 19:10:37 +13:00
jeremysherriff
d3ac8bb6f8 Silence updateGravity job unless errors occur
No need for append/logrotate as we are only interested in the latest output
Signed-off-by: jeremysherriff <jeremysherriff@gmail.com>
2018-10-19 19:10:13 +13:00
Mark Drobnak
f87f3b9199 Merge pull request #2467 from pi-hole/fix/dnsmasq-license
Update dnsmasq config license
2018-10-17 11:56:41 -04:00
Glenn Strauss
67bdcbcf19 lighttpd: slightly more efficient sample config
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
2018-10-17 06:54:54 -04:00
Glenn Strauss
69b2a5a876 lighttpd: use file glob for optional external.conf
lighttpd 1.4.50 config parse will error if include_shell exits non-zero
and pi-hole sample config: include_shell "cat external.conf 2>/dev/null"
is an error if external.conf does not exist

Replace with: include "external*.conf"
file glob supported since lighttpd 1.4.40 and is not an error if there
is no file which matches the file glob

Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
2018-10-17 06:54:43 -04:00
Mark Drobnak
a79dff3d98 Merge pull request #2466 from pi-hole/readme-newcoverage
Update coverage links
2018-10-16 22:42:34 -04:00
Dan Schaper
c859a23136 Merge pull request #2462 from pi-hole/fix/updatecheck-curl-silent
Use curl -s instead of -q
2018-10-16 18:46:45 -07:00
WaLLy3K
7f92671765 Update dnsmasq config license
* Also updated "separate config" text

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-10-17 11:01:28 +11:00
WaLLy3K
ec38105b08 Update coverage links
Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-10-17 10:46:56 +11:00
Mark Drobnak
85dceb12a1 Use curl -s instead of -q
See #2416 

Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2018-10-12 23:53:21 -04:00
Mark Drobnak
5126c37c1e Merge pull request #2460 from bcambl/fix_create_pihole_user
fix pihole user creation function
2018-10-12 22:47:56 -04:00
bcambl
e7e03e36de fix pihole user creation function
- fix stdout newlines
 - catch failed user creation

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-10-12 11:05:44 -06:00
Mark Drobnak
13c393fc9d Merge pull request #2451 from pi-hole/fix/2450
fix for #2450
2018-10-07 21:02:39 -04:00
Adam Warner
cc2f375b13 fix for #2450
Signed-off-by: Adam Warner <adamw@rner.email>
2018-10-07 11:51:36 +01:00
Mark Drobnak
49d5109c96 Merge pull request #2446 from AndreasElia/development
Readme grammar fixes
2018-10-02 21:59:35 -04:00
Andreas Elia
e5c8f5e2fa Readme grammar fixes
Signed-off-by: Andreas Elia <andreaselia@live.co.uk>
2018-10-02 17:43:13 +01:00
Mark Drobnak
ff925a7578 Merge pull request #2437 from pi-hole/fix/version-files-overwritten
Append versions (after the first) instead of overwriting in updatecheck
2018-10-01 11:21:29 -04:00
Mark Drobnak
33939a30ea Merge pull request #2347 from Gusher123/patch-1
Don't let one blocklist block an other blocklist
2018-09-30 21:24:45 -04:00
Mark Drobnak
308b296285 Merge pull request #2401 from pi-hole/fix/checkout-readonly
Fix checkout error due to readonly variable
2018-09-30 21:05:11 -04:00
Mcat12
d55012f724 Append versions (after the first) instead of overwriting in updatecheck
Fixes an issue brought up in #2435

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-09-30 20:56:44 -04:00
Mcat12
7c6eecc9c8 Ignore shellcheck warning
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-09-30 18:16:08 -04:00
Mcat12
e4cbf5023a Fix error when reading in new password
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-09-30 18:09:59 -04:00
Mark Drobnak
46356d3027 Merge pull request #2434 from pi-hole/fix/2200
Only check web versions if web interface is installed
2018-09-30 17:57:54 -04:00
Mark Drobnak
958a263437 Merge pull request #2431 from pi-hole/fix/use_PHP_comments_in_pihole-FTL.conf_template
Improve pihole-FTL.conf template
2018-09-30 17:24:36 -04:00
Mark Drobnak
a89ae82270 Merge pull request #2430 from pi-hole/chrono-lc-all
Fix invalid numbers in Chronometer
2018-09-30 17:23:06 -04:00
Mark Drobnak
cedc39bf09 Merge pull request #2426 from mrmajik45/master
Read without -r will mangle backslashes. (Fix)
2018-09-30 17:19:56 -04:00
Adam Warner
0131055ec9 Submission stale, addressing @mcat12's comments
Signed-off-by: Adam Warner <adamw@rner.email>
2018-09-30 20:00:06 +01:00
Adam Warner
0627e68078 Shellcheck is not a fan of sourcing scripts it does not know about. Add Directive to stop shellcheck from checking this.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-09-30 19:45:04 +01:00
Adam Warner
7d78f6314a Source Setupvars file and only check local/remote Web branch/version if the web interface is installed.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-09-30 19:41:04 +01:00
mrmajik45
0f509f4a34 Update piholeDebug.sh 2018-09-28 17:22:31 -04:00
DL6ER
b043000044 Improve template by removing it. PHP cannot digest comments starting in "#" as of v7.0.0
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-09-28 12:08:39 +02:00
DL6ER
c338eab3c6 According to the PHP documentation, PHP 7.0.0+ does not longer recognize hash marks (#) as comments. As FTL has been trained to understand PHP-style (comment lines start with ";") as well, we switch to using them.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-09-28 11:11:30 +02:00
WaLLy3K
24e1dc92ba Resolve issue #2428
Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-09-28 10:34:49 +10:00
mrmajik45
00f98543ad read without -r will mangle backslashes. 2018-09-26 10:32:22 -04:00
mrmajik45
8684356b44 read without -r will mangle backslashes. 2018-09-26 10:31:44 -04:00
Mark Drobnak
a89615365e Merge pull request #2410 from stuartskelton/norton_dns_EOL_2018_11_15
Remove Norton Connect Safe as its EOL 2018-11-15
2018-09-10 17:52:09 -04:00
Stuart Skelton
3c36c22ca8 Remove Norton Connect Safe as its EOL 2018-11-15
Signed-off-by: Stuart Skelton <stuarts@broadbean.com>
2018-09-10 22:37:45 +01:00
Mark Drobnak
7a2f5f43f9 Merge pull request #2408 from pi-hole/fix/2299
Only get the first gateway for chronometer
2018-09-09 16:38:05 -04:00
Mark Drobnak
dac27f1f18 Only get the first gateway for chronometer
Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2018-09-09 15:12:48 -04:00
Mark Drobnak
6f276ae4bb Merge pull request #2299 from nullr0ute/net-tools
Use ip route rather than old net-tools route in  chronometer.sh
2018-09-09 15:11:19 -04:00
Mark Drobnak
537e288758 Merge pull request #2407 from pi-hole/fix/lighttpd-external-conf
Fix lighttpd v1.4.50 crashing on startup
2018-09-07 12:55:21 -04:00
Mark Drobnak
3cea1bd423 Fix lighttpd v1.4.50 crashing on startup
It has a bug/regression causing it to fail if external.conf does not exist,
so touch external.conf when installing lighttpd config

Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2018-09-07 12:09:37 -04:00
Mark Drobnak
c976bbcfd2 Fix checkout error due to readonly variable
Signed-off-by: Mark Drobnak <mark.drobnak@gmail.com>
2018-09-01 22:11:45 -04:00
Mark Drobnak
ec29829550 Merge pull request #2388 from Sh4d1/ipv6_brackets
Remove external Ipv6 brackets in servername if any
2018-09-01 19:44:29 -04:00
Mark Drobnak
cf7180af5b Merge pull request #2398 from pi-hole/rpm_distro_checks
WIP: Update RPM distro checks
2018-08-31 12:54:55 -04:00
bcambl
c58e3acc78 add unsupported RPM distro warnings
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-08-31 10:04:52 -06:00
DL6ER
b78aef1e7e Merge pull request #2356 from pi-hole/tweak/reload_on_enable_disable
Change the enable/disable method
2018-08-30 22:37:57 +02:00
DL6ER
f20e4ddf3b Change message for unknown state to something more useful
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-30 22:28:15 +02:00
DL6ER
40656641b6 Merge branch 'development' into tweak/reload_on_enable_disable 2018-08-30 22:26:57 +02:00
bcambl
6f8e8e98bb update centos version check test
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-08-29 22:16:11 -06:00
bcambl
24b4aabae9 allow installer to continue with additional rpm based distros
- FedBerry (Fedora based ARM image)
- Scientific Linux (CentOS based)
- Add prompt to continue installing on unsupported RPM based distros

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-08-29 20:49:06 -06:00
Mark Drobnak
a9c6d79cda Merge pull request #2394 from pi-hole/fix/pihole-FTL_owner_group
Ensure proper unprivileged user if pihole-FTL is started as root
2018-08-29 11:17:39 -04:00
DL6ER
45bf4b02e7 Ensure that when pihole-FTL is launched as user root, it will drop permissions as soon as this is possible. We tell pihole-FTL to change UID/GID to pihole:pihole instead of the default nobody:nogroup. This default causes conflicts with our SQLite3 database. See that corresponding pull request for further details.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-27 16:51:33 +02:00
Mark Drobnak
667c5138cc Merge pull request #2381 from pi-hole/fix/existing_dnsmasq.conf
Improve /etc/dnsmasq.conf handling
2018-08-25 18:55:12 -05:00
Patrik Cyvoct
85cf98888d Merge remote-tracking branch 'origin/development' into ipv6_brackets
Signed-off-by: Patrik Cyvoct <patrik@ptrk.io>
2018-08-22 09:31:54 +02:00
Patrik Cyvoct
048e5bb9a2 Remove external ipv6 brackets if any in servername
Signed-off-by: Patrik Cyvoct <patrik@ptrk.io>
2018-08-22 09:11:55 +02:00
DL6ER
b9d47d0dd2 Merge pull request #2378 from pi-hole/fix/pihole-FTL-no-caps
Start pihole-FTL as root if capabilities are not supported by the system
2018-08-21 14:11:24 +02:00
DL6ER
1813c25117 If config file was backed up: Print info message
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-21 13:07:23 +02:00
DL6ER
940c9c3bae Merge pull request #2383 from pi-hole/feature/privacy-level-4
Add support for privacy level 4
2018-08-21 13:03:41 +02:00
Mcat12
5d0d7336ff Echo with newline when setting privacy level
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-20 20:21:03 -04:00
Mcat12
6a26a05dbf Fix privacy level whiptail option format
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-20 19:40:43 -04:00
Mcat12
c22e94c9c7 Update test to include empty FTL config
The installer ensures that an FTL config will exist, and creates an
empty file if it doesn't.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-20 19:33:15 -04:00
Mcat12
4aafa8cf47 Set the FTL privacy level during install
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-20 19:20:29 -04:00
Mark Drobnak
9235a11d5f Merge pull request #2382 from pi-hole/tweak/no-extra-logging
Don't use extra query logging
2018-08-20 18:33:42 -04:00
Mcat12
f141b9f778 Add support for privacy level 4
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-20 17:36:16 -04:00
DL6ER
1dca1efbc6 Don't use extra query logging
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-20 23:11:23 +02:00
DL6ER
28c6b1393f Backup existing /etc/dnsmasq.conf if present and ensure that /etc/dnsmasq.conf contains only "conf-dir=/etc/dnsmasq.d"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-20 22:52:22 +02:00
DL6ER
6c97b8b875 Merge pull request #2377 from pi-hole/fix/service-touch-leases
Touch dhcp.leases to ensure it exists
2018-08-20 11:24:44 +02:00
DL6ER
ec2426b24d Add clarifying comments
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-19 19:55:47 +02:00
DL6ER
5cd3b11391 Start pihole-FTL as root if capabilities are not supported by the system
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-19 14:32:19 +02:00
DL6ER
d30b565d98 Touch dhcp.leases to ensure it exists. There are some systems out there where the installer didn't finish on the first run and some users don't have this file being created. Although /etc/pihole should be owned by pihole:pihole, pihole-FTL sometimes fails to open this file and - if this is the case and DHCP is enabled - refuses to start altogether.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-19 13:53:34 +02:00
Mark Drobnak
74008d28a7 Merge pull request #2367 from realtebo/fix-enabling-ftl
Fix to enable pihole-FTL service before starting it
2018-08-16 16:15:46 -04:00
Realtebo
0d1b3cee4f Enable FTL service before starting it
Signed-off-by: Realtebo <mirkotebaldi@yahoo.it>
2018-08-16 17:52:47 +02:00
Realtebo
0b44cb4426 Merge branch 'development' of https://github.com/pi-hole/pi-hole into development 2018-08-16 17:48:35 +02:00
Mark Drobnak
eb8e4496b2 Merge pull request #2354 from realtebo/development
Create adlist file while running unattended setup
2018-08-16 11:26:07 -04:00
Realtebo
30f45d4df7 Merge branch 'development' of https://github.com/pi-hole/pi-hole into development 2018-08-16 16:52:18 +02:00
Mark Drobnak
24e1c78d52 Merge pull request #2358 from pi-hole/fix/restart_FTl_on_logflush
Restart pihole-FTL after log flushing
2018-08-16 10:34:25 -04:00
Mirko Tebaldi
476fecbcf5 Fixed typos as suggestes
Signed-off-by: Realtebo <mirkotebaldi@yahoo.it>
2018-08-14 15:04:42 +02:00
Mirko Tebaldi
327b58fa03 Merge pull request #1 from pi-hole/development
Merge with current main development branch
2018-08-14 14:55:18 +02:00
DL6ER
d3eea9404d Merge pull request #2331 from pi-hole/tweak/improve_FTL_download_errormsg
Improve error message when downloading FTL failed
2018-08-14 13:20:47 +02:00
DL6ER
ca309d3b28 Restart pihole-FTL after log flushing to force reloading history. Fixes #2339
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-14 13:16:17 +02:00
DL6ER
0ebd68f17f Review comments
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-14 09:55:16 +02:00
Mark Drobnak
3696373609 Merge pull request #2345 from pi-hole/NXDOMAIN-tail
Fix colour tail for use with new blocking methods
2018-08-13 15:01:35 -04:00
DL6ER
165affc39b list.sh writes into blacklist.txt not black.list so does not need to account for a possibly changed list location
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 18:53:31 +02:00
DL6ER
f794018e0c Acknowledge temporary file if disabled for "pihole -b" command
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 18:17:14 +02:00
DL6ER
337cc5ca18 BLOCKING -> BLOCKING_ENABLED
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 17:22:10 +02:00
DL6ER
4e4d6b5d1f Adjust "pihole status" command
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 15:02:00 +02:00
DL6ER
b011adc453 Use new setupVars BLOCKING variable to determine which file to update via gravity
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 14:19:59 +02:00
DL6ER
d8abc1d266 Storing BLOCKING=true/false in setupVars.conf
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 13:49:47 +02:00
DL6ER
6cde066edd Have gravity detect the presence of files like gravity.list.bck and update this file if present (assuming blocking is disabled)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-13 13:43:14 +02:00
WaLLy3K
d163e38380 Ensure regex-blocked lines are red
* Add `regex.list` to seds list

Signed-off-by: WaLLy3K <wally3k@pihole.net>
2018-08-13 14:56:38 +10:00
Realtbo
d9195970b7 Create adlist file while running unattended setup
Signed-off-by: Realtebo <mirkotebaldi@yahoo.it>
2018-08-12 23:21:01 +02:00
DL6ER
20b946eae5 Instead of changing the dnsmasq configuration, we replace gravity.list and black.list by empty files for disabling. When pihole-FTL receives SIGHUP, it will clear its cache and reload all configured lists. If the files are empty, blocking will be disabled as no content to be blocked will be imported.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-12 19:31:00 +02:00
DL6ER
c00357663b Reload pihole-FTL instead of restart the entire service on "pihole enable/disable"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-12 19:17:20 +02:00
Gusher123
2feb5f22cc Signed-off-by
This is my commit message

Signed-off-by: Gusher123 <t.siebeling@gmail.com>
2018-08-12 10:05:58 +02:00
Gusher123
f3aee056ad Merge branch 'patch-1' of https://github.com/Gusher123/pi-hole into patch-1 2018-08-12 09:59:34 +02:00
Gusher123
91ff5ca0ca Merge branch 'patch-1' of https://github.com/Gusher123/pi-hole into patch-1
Signed-off-by: Gusher123 <t.siebeling@gmail.com>
2018-08-12 09:58:45 +02:00
Gusher123
4238e36d7f Merge branch 'patch-1' of https://github.com/Gusher123/pi-hole into patch-1 2018-08-12 03:07:07 +02:00
Gusher123
03a9d3bc5b Not hardcoding dns and covering all blockingmodes
Using double brackets

Mode double brackets
2018-08-12 03:05:53 +02:00
Gusher123
fe46dee194 Mode double brackets 2018-08-12 02:06:32 +02:00
Gusher123
1c6c35f861 Using double brackets 2018-08-12 01:50:23 +02:00
Gusher123
926b25fd54 Not hardcoding dns and covering all blockingmodes 2018-08-12 01:15:42 +02:00
Gusher123
e58142b4ac Added comments 2018-08-11 15:14:45 +02:00
Gusher123
3e5c6afaee Don't let one blocklist, block an other
If a blocklist is blocked by an other and 'pihole -g' is run, update the blocked blocklist by useing an alternate dns server (in this case 1.1.1.1) to acquire the IP adres and download the blocklist using the 'curl --resolve' (https://curl.haxx.se/docs/manpage.html#--resolve)
2018-08-11 14:33:33 +02:00
WaLLy3K
a1bf9fad98 Fix colour tail for use with new blocking methods
Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-08-11 12:55:18 +10:00
Mark Drobnak
afdc4219d0 Merge pull request #2343 from pi-hole/tweak/audit_log
Add facility to add multiple audit list entries at once and to nuke audit list
2018-08-10 18:06:23 -04:00
DL6ER
94e4ed6644 Add facility to add multiple audit list entries at once and to nuke audit list
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-10 18:22:55 +02:00
Mark Drobnak
ef8aaba014 Merge pull request #2320 from TronPaul/fix/no-tty
set noninteractive during unattended install
2018-08-08 19:28:12 -04:00
Mark Drobnak
d2ae07e69b Merge pull request #2334 from pi-hole/fix/gravity-count-regex
Fix gravity's regex counting logic
2018-08-08 16:22:50 -04:00
DL6ER
760dd01b50 Use grep invert-match
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-07 18:36:06 +02:00
DL6ER
5bf90cb77d Use alternative logic for counting regex file entries, skipping commented out lines
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-07 18:02:01 +02:00
DL6ER
f5c3dc5d9d Improve download error message that is shown when downloading or verifying the binary failed
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-08-07 16:51:58 +02:00
DL6ER
f2b820079a Merge pull request #2329 from pi-hole/tweak/remove-ppc
Remove PowerPC from FTL binaries
2018-08-07 16:02:11 +02:00
WaLLy3K
083024496a Merge pull request #2327 from pi-hole/header-fix
Fix Chronometer heading
2018-08-07 12:29:45 +10:00
Mcat12
e01eea8ba8 Remove PowerPC from FTL binaries
It is no longer built, and may cause 404 errors if it attempts to
download the binary.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-08-06 21:15:16 -04:00
WaLLy3K
eef948d797 Fix header newlines
* Added \\n to each $xxx_ver_str, resolving issue #2325

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2018-08-07 10:45:30 +10:00
DL6ER
8017be7d09 Merge pull request #2322 from pi-hole/release/v4.0
Git Flow - Release/v4.0 merge back to development.
2018-08-06 09:57:28 +02:00
Dan Schaper
5b628a4c77 Merge branch 'development' into release/v4.0 2018-08-05 21:16:19 -07:00
Dan Schaper
ddbdb51d20 Merge pull request #2308 from pi-hole/release/v4.0
Release/v4.0
2018-08-05 10:40:22 -07:00
Mark McGuire
0081a7ca92 set noninteractive during unattended install
Signed-off-by: Mark McGuire <mark.b.mcg@gmail.com>
2018-08-05 10:12:43 -05:00
Dan Schaper
e80ae4906f Merge pull request #2318 from pi-hole/tweak/wildcard-regex-format
Use simpler regex format for wildcards
2018-08-01 01:01:08 -07:00
Mcat12
e4e22fb58e Fix permissive regex
The `\.?` is too permissive, letting in anything that ends in the domain

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-31 22:16:40 -04:00
Mcat12
7086a400e8 Use simpler regex format for wildcards
Use `\.?domain\.com$` instead of `((^)|(\.))domain\.com$`

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-31 21:36:29 -04:00
Mark Drobnak
a25a13fde0 Merge pull request #2317 from pi-hole/fix/parse_pihole-FTL.conf
Add empty pihole-FTL.conf file
2018-07-31 19:51:34 -04:00
Dan Schaper
993beab3b7 Changed wording.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-31 11:14:26 -07:00
Dan Schaper
06875f2cc9 Merge branch 'release/v4.0' into fix/parse_pihole-FTL.conf 2018-07-30 14:32:29 -07:00
Dan Schaper
448fc7231c Installed to /etc/pihole as PI_HOLE_CONFIG_DIR variable.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-30 14:26:07 -07:00
Dan Schaper
d0d030bafc Moved file creation to proper function. Included bash variables for file
location. Set to pihole:pihole ownership with 644 permissions.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-30 14:02:18 -07:00
Dan Schaper
833131e15f Merge pull request #2315 from pi-hole/fix/regex-file-ownership
Allow PHP to edit the regex file if web is installed
2018-07-30 06:36:20 -07:00
Dan Schaper
fb2810557a Allow web user group to access regex.list
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-29 16:09:03 -07:00
Dan Schaper
82a64db42b Merge pull request #2313 from pi-hole/fix/pihole-man-usage
Fix wildcard/regex usage formatting
2018-07-29 15:43:19 -07:00
Mcat12
57af0ba0a4 Use install to make the regex file
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-29 18:26:00 -04:00
Dan Schaper
17c1e64f7e Moved FTL configuration copy in to scripts copy function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-29 09:06:51 -07:00
Dan Schaper
af13ceac24 Touch file as ${USER} instead of copying template.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-29 08:42:59 -07:00
Dan Schaper
af2ec61965 Convert [] to ()
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-29 08:17:57 -07:00
Mcat12
a55cc55338 Only touch the regex file if it doesn't already exist
The other permission calls will always be run so that the file is in the
expected state after install and repair.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-28 23:07:35 -04:00
Dan Schaper
b2fb3fd35a Merge pull request #2310 from pi-hole/feature/pihole-FTL.conf
Include template pihole-FTL.conf
2018-07-28 20:04:39 -07:00
Dan Schaper
94b7c8eb59 Added header for file. Not using standard Pi-hole copyright header.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-28 19:58:23 -07:00
Dan Schaper
6d671007dd Merge pull request #2314 from pi-hole/fix/ftl-install-error-output
Fix FTL install leaking error output
2018-07-28 19:53:04 -07:00
Mcat12
1a8d5fb4a9 Allow PHP to edit the regex file if installed
Fixes permissions error on the web interface when modifying the regex.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-28 21:57:39 -04:00
Dan Schaper
f90c412b35 nroff checked pihole.8 for formatting. nroff -man pihole.8
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-28 18:28:25 -07:00
Mcat12
c73b5456eb Fix "which" error leaking
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-28 21:12:05 -04:00
Mcat12
3d87398721 Fix check_service_active leaking error output
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-28 20:50:04 -04:00
Mcat12
96681887b8 Fix wildcard/regex usage formatting
Fix whitespace issue and missing backslashes in the regex example.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-28 20:35:15 -04:00
Dan Schaper
f2c675cff6 Formatted pihole-FTL.conf for readability.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-28 16:16:16 -07:00
Dan Schaper
1844bf17a7 Merge pull request #2311 from pi-hole/fix/git-head-flag
Fix wrong git command flag
2018-07-28 10:48:29 -07:00
Mark Drobnak
47b56d6123 Fix wrong git command flag
I could not find documentation on a `--head` flag, but there is a `--heads` flag which does the same thing.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-27 23:27:44 -04:00
Mark Drobnak
814d5f6d6c Merge pull request #2307 from borats/development
Change the word "folder" to "directory" since the pi-hole is intended…
2018-07-27 22:36:20 -04:00
Dan Schaper
512d2dd5f8 Source git repo and not /opt location.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-27 15:47:20 -07:00
Dan Schaper
ad20d5ac1c Remove -t SOURCE and DIRECTORY reversal flag on install.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-27 15:39:37 -07:00
Dan Schaper
b79ff05e29 Move template files to own subdir. Include pihole-FTL.conf in templates.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-27 15:21:25 -07:00
Borats Nolan
32b50f8188 Change the word "folder" to "directory" since the pi-hole is intended to run on rpi with Linux on it.
Signed-off-by: Borats Nolan <borats@i.dont.use.email>
2018-07-28 02:35:39 +10:00
Dan Schaper
a44096a26d Merge pull request #2303 from pi-hole/development
Update release/v4.0 with latest development changes
2018-07-26 22:30:51 -07:00
Dan Schaper
32cf94fc74 Merge pull request #2297 from pi-hole/bugfix/locales
Fixed locale issue, do not parse for string.
2018-07-26 16:44:52 -07:00
Dan Schaper
39e28cd80a Merge pull request #2302 from pi-hole/revert/2282
Revert #2282
2018-07-26 16:38:44 -07:00
Adam Warner
9b1356ad01 Revert #2282
Signed-off-by: Adam Warner <adamw@rner.email>
2018-07-27 00:27:06 +01:00
Peter Robinson
45521b377a Use ip route rather than old net-tools route in chronometer.sh
The only use of net-tools is the use of route in chronometer.sh so
instead use the same method as used in piholeDebug.sh to get the
default gateway so there's no need to depend on net-tools anylonger.

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
2018-07-26 17:46:51 +01:00
Dan Schaper
46a366635c Fixed locale issue, do not parse for string.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-26 05:30:05 -07:00
Dan Schaper
384b588a2d Merge pull request #2291 from pi-hole/merge/FTLDNS-to-development
Fix merge conflict in #2276
2018-07-24 11:51:56 -07:00
Mcat12
03e5a78d8f Merge remote-tracking branch 'origin/FTLDNS' into development
# Conflicts:
#	advanced/Scripts/piholeDebug.sh
2018-07-22 15:18:26 -04:00
Dan Schaper
e32c76b059 Merge pull request #2289 from pi-hole/feature/space_tab
Adjusting spacing for utility scripts.
2018-07-20 19:23:50 -07:00
Dan Schaper
ba7782f867 Space/Tab piholeDebug.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 15:25:35 -07:00
Dan Schaper
c5091b0e49 Space/Tab wildcard_regex_converter.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 14:00:34 -07:00
Dan Schaper
b54e32f0ca Space/Tab webpage.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:57:15 -07:00
Dan Schaper
328e7738d5 Space/Tab version.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:27:30 -07:00
Dan Schaper
aca359c2e2 Space/Tab updatecheck.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:24:05 -07:00
Dan Schaper
1cd40dc9e5 Space/Tab update.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:22:37 -07:00
Dan Schaper
dc9407281f Space/Tab setupLCD.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:17:10 -07:00
Dan Schaper
8f727c1f35 Space/Tab query.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:13:42 -07:00
Dan Schaper
a08ea28feb Space/Tab piholeLogFlush.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 13:07:54 -07:00
Dan Schaper
c5535dd9a0 Space/Tab piholeCheckout.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 12:54:24 -07:00
Dan Schaper
3519cc5e44 Space/Tab list.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 12:42:11 -07:00
Dan Schaper
d251bbbb05 Space/Tab chronometer.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 12:29:09 -07:00
Dan Schaper
1fc3ec9029 Merge pull request #2287 from pi-hole/feature/clean_comments
Remove empty comment lines in basic-install.sh
2018-07-20 11:37:15 -07:00
Dan Schaper
1877128fc4 Removes empty comment lines in basic-install.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-20 10:38:13 -07:00
Dan Schaper
76c5b4a06b Merge pull request #2118 from pi-hole/fix/debug-shellcheck
fix some shellcheck/stickler compaints in debug script
2018-07-19 05:18:40 -07:00
Mark Drobnak
9cd674b528 Merge pull request #2282 from RamSet/tweak/Port53
Updated port 53 check #2
2018-07-18 22:56:33 -04:00
RamSet
5aea7eb860 corrected function indentation
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-17 20:46:18 -06:00
Mark Drobnak
ec30df2020 Merge pull request #2277 from bcambl/centos_fedora_fixes
Installer fixes for Fedora & CentOS
2018-07-17 22:06:25 -04:00
RamSet
bb33427c79 fixed parsing error
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-17 18:09:25 -06:00
RamSet
28a16cebda Addressed lint errors.
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-17 18:06:32 -06:00
RamSet
49c79405bc changed flag and variable name
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-17 18:04:50 -06:00
RamSet
3098f32a07 Fixed intentation and corrected comments.
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-17 17:56:13 -06:00
Dan Schaper
b1e9c05bee Merge pull request #2284 from pi-hole/bugfix/source_webpage
Added missing `.` for sourced file.
2018-07-17 06:38:32 -07:00
Dan Schaper
69e06d89ff Added missing for sourced file.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-07-16 22:36:58 -07:00
RamSet
56b04017e7 Port 53 check updated with 4 spaces.
Signed-off-by: RamSet <RamSet@gmail.com>
2018-07-16 11:29:12 -06:00
RamSet
3af61c031d Merge pull request #1 from pi-hole/development
Development
2018-07-16 11:20:49 -06:00
Dan Schaper
f42a57088f Merge pull request #2280 from rrobgill/development
Add regex option to autocomplete
2018-07-16 09:34:22 -07:00
WaLLy3K
4834452875 Merge pull request #2278 from pi-hole/fix/missing-wildlist-help-and-double-dash
Add back --wild list.sh help and use -- for long params like --regex
2018-07-16 14:55:05 +10:00
Rob Gill
c5b9d99b48 Add regex option to autocomplete
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-07-16 10:50:05 +10:00
Mcat12
f8d4c36f6d Add back --wild list.sh help and use -- for long params like --regex
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-15 18:59:25 -04:00
bcambl
fa9ecbdb81 add php-json to Fedora web deps
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-15 15:41:04 -06:00
bcambl
2bf6b29b8f trigger an install/upgrade of PHP after enabling the Remi repository
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-15 15:40:44 -06:00
Dan Schaper
25812f88f6 Merge pull request #2262 from bcambl/additional_tests
additonal test coverage for installer
2018-07-15 09:03:52 -07:00
Dan Schaper
037989b8e4 Merge pull request #2271 from pi-hole/feature/installer_spacing
Start changes to new code style for repository. Revise basic installer.sh spacing.
2018-07-14 19:55:13 -07:00
Dan Schaper
dbc82cfb6a Merge pull request #2236 from pi-hole/new/regex-lists
Use regex lists instead of wildcards for blocking
2018-07-14 06:10:44 -07:00
Mcat12
941a766aa3 Replace -wild and -regex with --wild and --regex
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-12 21:38:43 -04:00
Mcat12
72be7ad5f0 Don't count commented out regex lines
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-12 21:21:06 -04:00
Mcat12
b2a36f71a0 Fix wildcard description in pihole man page
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-12 21:17:32 -04:00
Adam Hill
6b17620389 Update .travis.yml 2018-07-12 10:24:01 -05:00
Adam Hill
b04195041a Update README.md 2018-07-12 10:22:50 -05:00
Adam Hill
8ca4c66e3c make smarter assertions rathe than largestring not in string
Signed-off-by: Adam Hill <adam@diginc.us>
2018-07-12 00:03:25 -05:00
Adam Hill
449b7bf6e4 reduce the amount of strict not in checks
Signed-off-by: Adam Hill <adam@diginc.us>
2018-07-11 23:25:16 -05:00
Adam Hill
88e4b6390c Tox!
Signed-off-by: Adam Hill <adam@diginc.us>
2018-07-11 23:24:28 -05:00
Dan Schaper
de92bd1884 Merge pull request #2268 from pi-hole/fix/add-back-conditional-forwarding
Add back conditional forwarding to webpage.sh
2018-07-09 18:27:09 -07:00
Mcat12
1b276a74fe Display all lines of a list, even if there is no newline at the end
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 16:03:16 -04:00
bcambl
fff31558a0 assert REMI repository is not installed for Fedora
- fix whiptail mock comments to clarify continue vs cancel

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-08 14:02:31 -06:00
Mcat12
8084c4b2a3 Fix regex period substitution due to switching to bashism
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 15:56:15 -04:00
Mcat12
1ca852191f Fix stickler complaints
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 15:50:05 -04:00
Mcat12
af5fc6547a Fix echoing wrong domain when converting wildcard
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 15:47:18 -04:00
Mcat12
70f2b26c86 Escape periods in wildcard converted regex filters.
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 15:45:06 -04:00
Mcat12
cfd95dbe87 Fix incorrect variable usage
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 15:38:44 -04:00
Mcat12
c5bb404d6a Emulate wildcard blacklisting via -wild and move regex to -regex
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-08 14:37:33 -04:00
bcambl
4c23964964 ensure images are build prior to running tests
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-07 18:43:11 -06:00
bcambl
e4a6dcd35c update travis.yml to run tests in parallel
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-07 17:51:36 -06:00
bcambl
d4addd53ad Add tests for Fedora/CentOS distro_check
- test to ensure installer behavior with unsupported CentOS releases
- test to ensure repository enablement
- test to ensure PHP upgrade opt-in/opt-out behavior

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-07 17:44:05 -06:00
Mcat12
d21298c156 Add back conditional forwarding to webpage.sh
This was accidentally removed in a previous PR.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-07-07 15:23:47 -04:00
Dan Schaper
9dba9fb366 Convert multiline echos to individual echo statements so they don't lead with different amounts of space.
Signed-off-by: Dan Schaper <dan.schaper@pihole.net>
2018-07-06 21:29:20 -07:00
bcambl
09d40679c0 add test for unsupported distro checking
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-06 10:07:43 -06:00
Dan Schaper
a323b126e5 Finished space conversion
Signed-off-by: Dan Schaper <dan.schaper@pihole.net>
2018-07-05 23:47:55 -07:00
bcambl
553aad6ed2 add Fedora container to test matrix
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-05 18:12:39 -06:00
bcambl
5ca2ad6148 move test globals & mock commands to conftest
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-05 18:10:43 -06:00
bcambl
40537e1522 python linting: missing whitespace after ',' (E231)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:43:24 -06:00
bcambl
064a75b21b python linting: missing whitespace around operator (E225)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:43:18 -06:00
bcambl
1d3445bc0f python linting: whitespace after '(' and before ')' (E201 & E202)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:43:09 -06:00
bcambl
79232d02c9 python linting: 'pytest' imported but unused (F401)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:30:00 -06:00
bcambl
9bd4986781 python linting: whitespace before ':' (E203)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:21:57 -06:00
bcambl
c3d443aaff python linting: lines > 79 characters (E501)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-03 00:09:56 -06:00
WaLLy3K
b087888f94 Merge pull request #2261 from pi-hole/fix-no-protocol
Treat adlists URLs without a protocol as HTTP
2018-07-03 09:58:29 +10:00
bcambl
da3dfd0998 python linting: missing whitespace after ':' (E231)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-02 15:25:51 -06:00
bcambl
4468d81472 python linting: 2 lines prior to defs (E302)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-07-02 14:54:19 -06:00
WaLLy3K
7ddae8f2eb Treat URLs without a protocol as HTTP
Signed off by WaLLy3K <wally3k@pi-hole.net>
2018-07-02 19:59:22 +10:00
Mark Drobnak
6b2851a671 Merge pull request #2257 from pi-hole/fix/query-process-wildcards
Move processWildcards to query.sh
2018-06-30 22:18:46 -04:00
Mcat12
4763969c8f Move processWildcards to query.sh
Closes #2255

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-30 22:03:53 -04:00
Mark Drobnak
f9b75e486c Merge pull request #2256 from pi-hole/fix/query-lists-variable-substitution
Fix incorrect variable string substitution
2018-06-30 15:56:22 -04:00
Mcat12
f868052062 Fix incorrect variable string substitution
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-30 15:50:43 -04:00
Mcat12
61f0cbe10a Update pihole man page for regex
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-29 23:34:15 -04:00
Mcat12
0f4968d75c Merge remote-tracking branch 'origin/development' into new/regex-lists 2018-06-29 23:12:34 -04:00
Mcat12
3077c22e4f Change help strings from wildcard to regex blacklist
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-29 23:10:49 -04:00
Mcat12
0decc37b5a Appease stickler
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-29 22:55:00 -04:00
Mcat12
4a953b66e0 Make removing regex domains work correctly
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-29 22:51:37 -04:00
Mcat12
8435eeed4d Don't validate regex domains
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-28 23:31:50 -04:00
Mcat12
cffb4de83b Use strict grep instead of regex for duplicates
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-28 23:01:27 -04:00
Mcat12
55175087c4 Set regex file permissions for web access
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-28 22:52:44 -04:00
Dan Schaper
0ddfa8ad10 Merge pull request #2254 from andrewjanke/patch-1
typo fix
2018-06-28 07:34:35 -07:00
Andrew Janke
b74fb3f179 typo fix 2018-06-29 00:28:43 +10:00
bcambl
9d3d33b6a2 add tests for selinux checking
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-06-26 00:09:30 -06:00
Dan Schaper
2abaa60c2e Merge pull request #2249 from pi-hole/revert-2069-fix/nullbyte
Revert "Fix error: /opt/pihole/gravity.sh: 385: Warning: command substitution: ignored null byte in input"
2018-06-25 08:35:09 -07:00
Dan Schaper
d5547f5c7c Revert "Fix error: /opt/pihole/gravity.sh: 385: Warning: command substitution: ignored null byte in input" 2018-06-24 16:06:55 -07:00
Mark Drobnak
061510098c Merge pull request #2246 from pi-hole/fix/debug-simple-gravity-list
Update debug script for simple list format
2018-06-22 22:41:36 -04:00
Mark Drobnak
4fc3546887 Merge pull request #2069 from pi-hole/fix/nullbyte
Fix error: /opt/pihole/gravity.sh: 385: Warning: command substitution: ignored null byte in input
2018-06-20 20:42:24 -04:00
Mcat12
868948509a Split declaration and assignment of random_url
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-20 20:30:42 -04:00
Mark Drobnak
e71492a2b3 Update debug script for simple list format
Gravity is now just a list of domains, not IP addresses and domains separated by a space.

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-06-20 20:29:32 -04:00
Mark Drobnak
c2055f3514 Merge pull request #2240 from pi-hole/tweak/warn_on_tail_if_log_disabled
pihole -t: Warn user if Pi-hole's logging is disabled
2018-06-17 11:23:27 -04:00
DL6ER
2809579dd7 Refine regex filter generation
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-17 14:59:21 +02:00
DL6ER
c7afe3e9a4 Please stickler by making clear that the variable regexFile is declared outside of this routine
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-17 14:46:26 +02:00
DL6ER
cd026cd865 Add comment where regexList is defined
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-17 14:43:33 +02:00
DL6ER
bc705aac03 Add automated wildcard list -> regex filter conversion
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-17 14:39:19 +02:00
DL6ER
a7c73036f0 pihole -t: Warn user if Pi-hole's logging is disabled
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-17 13:37:41 +02:00
Mark Drobnak
e80d27f273 Merge pull request #2234 from rrobgill/split-query-functions
Fix grep query leak & relocate query
2018-06-15 19:25:32 -04:00
Rob Gill
23adbf9540 remove quotes
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-15 14:45:27 +10:00
Rob Gill
a7347238e6 $adListsList replace filename in text
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-15 14:42:30 +10:00
Rob Gill
bf55666492 Appease stickler.
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 16:29:07 +10:00
Rob Gill
8ab0b0e460 colfile
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 16:25:43 +10:00
Rob Gill
b8e1849cec wildcardlist
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 16:19:07 +10:00
Rob Gill
2255d05664 Remove scanlist(), now in query.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 16:09:49 +10:00
Rob Gill
45a8eda49b Stop grep leak in query
Fix grep error leak from #1805

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 16:08:21 +10:00
Rob Gill
b1207949ac Call query.sh to replace queryFunc()
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 15:49:52 +10:00
Rob Gill
d61fd01d61 Split queryFunc() into query.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-13 15:47:08 +10:00
Mark Drobnak
4d5d3108fb Merge pull request #2231 from alexvy86/patch-1
Remove error text from message when next whitelist request succeeds
2018-06-11 19:41:48 -04:00
Alex Villarreal
e422f4154f Clean error message on successful response
Signed-off-by: Alejandro Villarreal <alex@alexvy86.com>
2018-06-11 12:59:53 -05:00
Mark Drobnak
0651f1bcd4 Merge pull request #2220 from rrobgill/installedphpcheck
Bugfix - Check version of installed php
2018-06-08 23:31:40 -04:00
Rob Gill
11f0ade921 comments
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-09 13:18:36 +10:00
Mark Drobnak
5cab2e1c43 Merge pull request #2224 from rrobgill/bashcompletion
Bashcompletion
2018-06-08 21:45:03 -04:00
Rob Gill
6381bdbf33 don't use major.minor for PHP 5
Signed-off-by: <rrobgill@protonmail.com>
2018-06-09 11:35:30 +10:00
Mark Drobnak
c8bcd4af2d Merge pull request #2004 from pi-hole/tweak/32bitOS_on_64bitCPU
Install 32bit FTL on 32bit OS (even if 64bit architecture is detected)
2018-06-08 20:56:36 -04:00
Rob Gill
cabb06230c --json not --jason
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-09 10:30:04 +10:00
Mcat12
4a75566a3b Merge remote-tracking branch 'origin/development' into tweak/32bitOS_on_64bitCPU 2018-06-08 20:20:57 -04:00
Mark Drobnak
d9c924b472 Merge pull request #2225 from rrobgill/ftlinstall-local-vars
remove duplicate declaration in ftlinstall()
2018-06-06 19:51:06 -04:00
Rob Gill
52aa52c3b1 remove duplicate declaration
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-07 08:19:26 +10:00
DL6ER
d254d6075a First step from wildcards to regex lists for blocking
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-06-06 19:26:56 +02:00
Rob Gill
8004080643 Additional command-line completion
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-06 22:37:43 +10:00
Rob Gill
13878974a6 Merge pull request #4 from pi-hole/development
Development
2018-06-06 14:21:50 +10:00
Mark Drobnak
6689e00e6a Merge pull request #2212 from rrobgill/man-pages
Man page for pilhole-FTL
2018-06-05 21:33:54 -04:00
Mark Drobnak
9b8a108f86 Merge pull request #2221 from pi-hole/tweak/statsnologs
Stats can still be generated without logging, no need for this sentence
2018-06-05 18:39:44 -04:00
Rob Gill
a3569d88c9 Version strings & bash.
Fixed up the version checking. Thanks for your help @dschaper.

No longer uses the version string as returned, but uses the major and minor version numbers extracted from it, against the minimum of 5.5. 

Tested against real install of php 7.0, (and the version check logic separately tested against a variety of artificial version numbers, of multiple digits for both major and minor version. - Lesson learned, I'm never trusting bash again)

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 21:42:42 +10:00
Adam Warner
f2f6b6ede9 stickler complaints
Signed-off-by: Adam Warner <adamw@rner.email>
2018-06-05 09:29:03 +01:00
Adam Warner
7f81cfd45a Stats can still be generated without logging, no need for this sentence
Signed-off-by: Adam Warner <adamw@rner.email>
2018-06-05 09:09:35 +01:00
Rob Gill
13b8e1a2ae quotes.
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 15:09:07 +10:00
Rob Gill
36dbdf955d Update basic-install.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 14:48:24 +10:00
Rob Gill
714b6c98ef codacy
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 14:45:01 +10:00
Rob Gill
7181d7ae6a Left that fi
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 14:30:18 +10:00
Rob Gill
9422d57283 Check version of installed php
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 12:08:27 +10:00
Jacob Salmela
5724cec1e5 Merge pull request #2219 from pi-hole/tweak/readme
Add coverage, remove projects, add Patreon link
2018-06-04 20:12:18 -05:00
Jacob Salmela
35ca54d98f add patreon and adjust affiliate links
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-06-04 20:00:26 -05:00
Jacob Salmela
7398a9ebf9 remove projects that are not compliant with our trademarks
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-06-04 19:59:23 -05:00
Rob Gill
4188fb536e Privacy levels
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 10:25:51 +10:00
Rob Gill
a11e5e2deb dnsmasq
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-05 10:23:23 +10:00
Mark Drobnak
5dd7e8c4d9 Merge pull request #2215 from rrobgill/web-console
Changes to --help text
2018-06-04 18:20:57 -04:00
Rob Gill
40bc390c3b Admin Console -> "Web Interface"
User facing --help text changes
Admin Console --> Web Interface
and additional branch option

Signed-Off-By: Rob Gill <rrobgill@protonmail.com>
2018-06-04 13:34:42 +10:00
Rob Gill
8776348a80 Merge pull request #2 from pi-hole/development
Development
2018-06-04 10:05:58 +10:00
Rob Gill
49fb4421dd Requested changes to manpages - now align with docs.pi-hole.net/ftldns. weird bolding issues fixed
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-04 09:54:53 +10:00
Mark Drobnak
d232f08933 Merge pull request #2208 from pi-hole/tweak/checkout
Don't run the installer when doing ftl checkout, instead just run the…
2018-06-03 14:35:35 -04:00
Dan Schaper
feba4da0b8 Merge pull request #2161 from pi-hole/centos_remi-php7
CentOS install re-worked to provide PHP7 via Remi Repository
2018-06-03 10:54:32 -07:00
Dan Schaper
928d7186b5 Merge pull request #2214 from pi-hole/fix/gravity-comment
Fix gravity_ParseFileIntoDomains Awk comment
2018-06-03 10:52:46 -07:00
Mark Drobnak
3149a95d6a Fix gravity_ParseFileIntoDomains Awk comment
Signed-off-by: Mark Drobnak <newtoncat12@yahoo.com>
2018-06-03 13:33:33 -04:00
Rob Gill
ed7ebfd58d man page for pihole-FTL
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-03 22:15:26 +10:00
Rob Gill
808e310799 Merge pull request #1 from pi-hole/development
Development
2018-06-03 20:54:03 +10:00
Mark Drobnak
23fbb3cf22 Merge pull request #2205 from rrobgill/manual-page
Manual page
2018-06-02 21:11:21 -04:00
Mark Drobnak
c11e643f13 Merge pull request #2207 from rrobgill/service-pihole-FTL-status-(sysV)
Fix service pihole-FTL status (sysV)
2018-06-02 11:23:38 -04:00
Adam Warner
f5541860bc Don't run the installer when doing ftl checkout, instead just run the ftl install functions
Signed-off-by: Adam Warner <adamw@rner.email>
2018-06-02 09:56:08 +01:00
Rob Gill
83ff0055b6 Test and indicate status
This added function tests if pihole-FTL is running when the sysV.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 15:30:51 +10:00
Rob Gill
213f23aaf6 wildcard & space
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 14:46:45 +10:00
Rob Gill
9970f3786f Requested change
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 14:14:55 +10:00
Rob Gill
d01a568b8b Requested changes (also tabs -> spaces)
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 14:13:30 +10:00
Mark Drobnak
e397884e1e Merge pull request #2206 from rrobgill/lighttpd-service-test-cleanup
Lighttpd service test
2018-06-01 22:08:53 -04:00
Rob Gill
ef65bac79b change status from INFO to CROSS
Signed-Off-By: Rob Gill <rrobgill@protonmail.com>
2018-06-02 11:27:35 +10:00
Rob Gill
c0837c726f blank space
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 11:18:13 +10:00
Rob Gill
ce5429aba7 stickler
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 11:02:06 +10:00
Rob Gill
aa191e9202 Update basic-install.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 10:46:07 +10:00
Rob Gill
a8f0283e93 Update basic-install.sh
This hands checking of lighttpd's status over to the existing check_service_active() function.

All other checks of service status within the install script are handled by this function.

Use of existing function:
Avoids duplication of service detection logic.
Uses return code to determine status, thereby avoids parsing text to determine status, and reliance on English language locale to determine activity, (which may also be broken on some systems (# 2204)

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 10:11:11 +10:00
Rob Gill
999e47a26c Remove manual page
Tests for presence of pihole man page.
If it is present, deletes it and runs man-db to rebuild manual database.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 09:50:52 +10:00
Rob Gill
a8103ca22d Manual page install function
Function to install man page.
Verifies that man pages are installed, and correct directory for the pihole manpage is present.
Copies file, and runs man-db to update man page database.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 09:45:04 +10:00
Rob Gill
ef17f4913b Create pihole.8
Linux man page for pihole

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-02 09:39:51 +10:00
Mark Drobnak
1a30043776 Merge pull request #1768 from Al2Klimov/bugfix/install-invalid-user
basic-install.sh: fix "install: invalid user ''"
2018-06-01 19:27:51 -04:00
Mark Drobnak
b7e8b91eec Merge pull request #2196 from rrobgill/uninstall-formatting
Style: uninstall.sh (Tabs to spaces)
2018-06-01 17:27:58 -04:00
Alexander A. Klimov
3be1904653 basic-install.sh: fix "install: invalid user ''"
refs #1767
2018-06-01 10:20:40 +02:00
Rob Gill
cadd0e4244 move code back to correct location
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-01 14:03:13 +10:00
Rob Gill
f35ea9a3ca replace code i missed during merge
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-06-01 11:57:59 +10:00
Rob Gill
0971630e01 Merge branch 'development' into uninstall-formatting 2018-06-01 07:17:02 +10:00
Rob Gill
b60a9fa371 merge (#2)
* remove package_check to avoid situations like #1760

Signed-off-by: Adam Warner <adamw@rner.email>

* Prevent redundant entries in to adlists.list

Grep ${args[3]} and only add if grep -c -eq 0

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>

* lan to local

Reduced differences.

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>

* Require exact match

Updated to require an exact match to reduce false-positives, as suggested by DL6ER.

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>

* fix empty ports on some systems

Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>

* debug user locale; improve function to parse variables and files

Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>

* Split declaration and population for stickler.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

* implement dschapers suggestions--better command, less subshells, and finer formatting

Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>

* flip uninstall compatability check

Signed-off-by: bcambl <blayne@blaynecampbell.com>

* Update index.php

Avoiding calling empty() on a function allows this to work under PHP5. Making the check for blocklist generation in this way instead is compatible with both PHP5 and PHP7.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* Update index.php

thanks stickler-ci  .......

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* changes as requested 

changes as requested 

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* oh stickler bot...

accidentally a space

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* linting: Double quote to prevent globbing and word splitting

Signed-off-by: bcambl <blayne@blaynecampbell.com>

* unbind resolved on ubuntu 18.04

Stop systemd-resolved from interfering with dnsmasq/ftl
Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* restore resolvd.conf

If dnsmasq is removed, resolved will need to be restored.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* Update uninstall.sh

Signed-off-by: Rob Gill <rrobgill@protonmail.com>>

* Minor correction for double instance of the word "found".

Signed-off-by: RamSet <RamSet@gmail.com>

* message text

Signed-off-by: Rob Gill <rrobgill@protonmail.com>>

* relocate as function

The check for systemd-resolved DNSStubListener, and disabling as necessary is a new function, called just prior to start_service pihole-FTL.
The check for ubuntu bionic 18.04 specifically is removed.
The check if resolved is enabled is made with check_service_active()
An additional check that the dnsstublistener is enabled is made.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* Regex & case fix

grep & sed regexes  match commented or uncommented

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* Update basic-install.sh

Force reloading of relsolved config where available

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* reload resloved

reload resolved config if possible, restart otherwise

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* user-facing messages

Signed-off-by: Rob Gill <rrobgill@protonmail.com>

* move & clarify comments
2018-06-01 07:14:54 +10:00
Mark Drobnak
ab45360808 Merge pull request #1954 from ryanknapper/adlist.lists
Prevent redundant entries from being added to Adlists.list
2018-05-31 14:58:16 -04:00
Mark Drobnak
8523c0da32 Merge pull request #2180 from rrobgill/resolved/ubuntu-bionic
Disable SystemD's DNS Stub Resolver On Install
2018-05-31 09:32:49 -04:00
Rob Gill
f0dfa4d53d Stickler-bot...
Signed-Off-By: Rob Gill <rrobgill@protonmail.com>
2018-05-31 13:43:49 +10:00
Rob Gill
f2bedddce4 Changes from #2167 converted to spaces
Signed-Off-By: Rob Gill <rrobgill@protonmail.com>
2018-05-31 13:37:52 +10:00
Rob Gill
552138e851 Appease stickler-bot.
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-31 13:24:09 +10:00
Rob Gill
ff71379a8e Convert from two to four space indetation
Signed-Off-By: Rob Gill <rrobgill@protonmail.com>
2018-05-31 13:14:18 +10:00
Mark Drobnak
23a7feeb6e Merge pull request #2167 from pi-hole/uninstall_compat_check
flip uninstall compatability check
2018-05-30 22:13:21 -04:00
Mcat12
34f5db9ed4 Merge branch 'development' into uninstall_compat_check
# Conflicts:
#	automated install/uninstall.sh
2018-05-30 22:08:20 -04:00
Mark Drobnak
9fd70cbdf9 Merge pull request #2057 from pi-hole/fix/debug-empty-ports
debug script: fix empty ports on some systems
2018-05-30 21:48:53 -04:00
Mark Drobnak
87506852d1 Merge pull request #1761 from pi-hole/tweak/Uninstall
Tweak/uninstall
2018-05-30 21:19:59 -04:00
Rob Gill
e6893bc419 Update uninstall.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-29 19:03:00 +10:00
Rob Gill
ebeab06710 Appease Stickler-bot
So... originally no changes were made to the code, but Stickler-bot was unimpressed, so I've followed its suggestions.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-29 18:59:55 +10:00
Rob Gill
1911c3690d Style/Tabs to spaces
uninstall.sh contains a mix of tabs and spaces for indentation in different parts of the file.

Everywhere that used tabs has been converted to spaces, compatible with the indentation style used in basic_install.sh

No code has been altered, only the use of tabs and spaces in indention.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-29 17:59:39 +10:00
Mark Drobnak
3f3254a4df Merge pull request #2176 from rrobgill/php5fix
Fix block page crash on PHP 5.4
2018-05-22 23:21:20 -04:00
Rob Gill
20ccb7b558 move & clarify comments 2018-05-21 08:16:53 +10:00
Rob Gill
8cfe89604a user-facing messages
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-17 07:44:07 +10:00
Rob Gill
15f0ba839f reload resloved
reload resolved config if possible, restart otherwise

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-16 07:35:22 +10:00
Rob Gill
c400b914e5 Update basic-install.sh
Force reloading of relsolved config where available

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-16 07:28:32 +10:00
Rob Gill
a431c829cb Regex & case fix
grep & sed regexes  match commented or uncommented

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-16 07:11:23 +10:00
Rob Gill
25d0e125e5 relocate as function
The check for systemd-resolved DNSStubListener, and disabling as necessary is a new function, called just prior to start_service pihole-FTL.
The check for ubuntu bionic 18.04 specifically is removed.
The check if resolved is enabled is made with check_service_active()
An additional check that the dnsstublistener is enabled is made.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-15 20:23:36 +10:00
Rob Gill
b89a78ce17 message text
Signed-off-by: Rob Gill <rrobgill@protonmail.com>>
2018-05-15 19:42:18 +10:00
Mark Drobnak
f568012b9d Merge pull request #2070 from pi-hole/new/debug-locale
Get user locale when debugging
2018-05-14 16:43:05 -04:00
Adam Warner
328fb70e54 Merge pull request #2182 from RamSet/tweak/removeDoubleFound
Minor correction for double instance of the word "found".
2018-05-14 19:29:57 +01:00
RamSet
2f24e5ceb7 Minor correction for double instance of the word "found".
Signed-off-by: RamSet <RamSet@gmail.com>
2018-05-14 12:21:20 -06:00
Rob Gill
97809277df Update uninstall.sh
Signed-off-by: Rob Gill <rrobgill@protonmail.com>>
2018-05-14 19:50:58 +10:00
Rob Gill
3d3e7a330c restore resolvd.conf
If dnsmasq is removed, resolved will need to be restored.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-14 19:44:23 +10:00
Rob Gill
adf2275018 unbind resolved on ubuntu 18.04
Stop systemd-resolved from interfering with dnsmasq/ftl
Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-14 19:38:12 +10:00
bcambl
c1ecfbfe63 linting: Double quote to prevent globbing and word splitting
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-05-12 19:39:17 -06:00
Adam Warner
a7e7680789 Merge pull request #2158 from pi-hole/development
Update FTLDNS from dev
2018-05-12 23:17:43 +01:00
Rob Gill
382c19024f oh stickler bot...
accidentally a space

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-12 10:53:44 +10:00
Rob Gill
9379487942 changes as requested
changes as requested 

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-12 10:49:01 +10:00
Rob Gill
5e99baf7b9 Update index.php
thanks stickler-ci  .......

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-11 14:52:30 +10:00
Rob Gill
31951dae4c Update index.php
Avoiding calling empty() on a function allows this to work under PHP5. Making the check for blocklist generation in this way instead is compatible with both PHP5 and PHP7.

Signed-off-by: Rob Gill <rrobgill@protonmail.com>
2018-05-11 14:31:42 +10:00
Adam Warner
b1ab7f46e0 Merge pull request #2169 from pi-hole/tweak/customportsDNS
Remove LOCAL_DNS_PORT support
2018-05-10 22:25:29 +01:00
Adam Warner
4e0c7ed5a6 Merge pull request #2163 from pi-hole/fix/supressDnsmasqWarning
Fix for an error message introduced in #2162
2018-05-07 20:44:39 +01:00
DL6ER
2ef76d5e31 Remove LOCAL_DNS_PORT support
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-05-04 22:19:39 +02:00
bcambl
d3dda443cd flip uninstall compatability check
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-05-04 00:02:47 -06:00
bcambl
ec3802c180 add 'which' dependency (missing on Fedora minimal)
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-05-03 23:41:42 -06:00
Adam Warner
76654c7856 Actually check for dnsmasq's existence before attempting to interact with it's service
Signed-off-by: Adam Warner <adamw@rner.email>
2018-05-03 21:16:31 +01:00
Adam Warner
90239bb969 Merge pull request #2162 from pi-hole/fix/ifFtlExists
Don't attempt to download non-existent FTL Binary
2018-05-03 11:07:12 +01:00
Adam Warner
a6e4b0fea5 - Test for existence of remote non-master branch of FTL before attemtping to check for update
- Move some functions from checkout to basic-install
- provide helpful error message on downlaod not existing

Signed-off-by: Adam Warner <adamw@rner.email>
2018-05-01 23:15:26 +01:00
bcambl
8ad37af70e CentOS install re-worked to include PHP7 via Remi repository
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-05-01 00:58:21 -06:00
Mark Drobnak
c102d359f8 Merge pull request #2159 from pi-hole/tweak/removeDnsmasqRefs
Tweak/remove dnsmasq refs
2018-04-30 19:26:59 -04:00
Adam Warner
a07891e3e6 0 is not 1!!
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-30 23:53:51 +01:00
Adam Warner
e946a35b18 Move dnsmasq check into FTLcheckUpdate
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-30 23:50:35 +01:00
Adam Warner
68d7337f98 switch up dnsmasq detection logic
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-30 23:42:41 +01:00
Adam Warner
8b4198fd8d Merge pull request #1835 from Fauxsys/development
Fix for unattended installations #1767 #1768 #1834
2018-04-30 23:06:46 +01:00
Adam Warner
9c795fa40d Merge pull request #2157 from pi-hole/fix/EmptyAdlist
Allow for empty/non existent adlist file
2018-04-30 22:02:34 +01:00
Adam Warner
5f2217a079 Fix for gravity.list not being emptied with an empty/missing adlist file.
Variable output depending on content of /existence of adlist

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-30 21:56:33 +01:00
Adam Warner
0cda4b7f23 Merge pull request #2123 from pi-hole/new/RemoveDefaultBlocklists
Remove default blocklists from install
2018-04-29 22:06:47 +01:00
Adam Warner
e17e69604c Merge branch 'development' into new/RemoveDefaultBlocklists 2018-04-29 18:40:53 +01:00
Adam Warner
e1bf4d4344 Merge pull request #2155 from pi-hole/tweak/DontStopServices
No need to stop services
2018-04-29 18:38:34 +01:00
Adam Warner
0c8a32b9ae No need to stop services
This causes issues on a `pihole -r reconfigure`

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-29 18:27:10 +01:00
Adam Warner
d8c60aaae7 Merge pull request #2142 from bcambl/fix_fedora_ip_check
Fix static IP checking on Fedora
2018-04-29 14:36:07 +01:00
Adam Warner
3216d65353 Merge branch 'development' into new/RemoveDefaultBlocklists 2018-04-29 13:39:17 +01:00
Mark Drobnak
0df8d0a4e2 Merge pull request #2153 from MichaIng/patch-1
"INSTALL_WEB" renamed to "INSTALL_WEB_INTERFACE" #2115
2018-04-28 20:17:18 -04:00
MichaIng
43f19034b9 "INSTALL_WEB" renamed to "INSTALL_WEB_INTERFACE" #2115
+ Small fix, as due to PR https://github.com/pi-hole/pi-hole/pull/2115 variable "INSTALL_WEB" was renamed into "INSTALL_WEB_INTERFACE".
2018-04-28 15:17:29 +02:00
Adam Warner
2e6a937240 Merge pull request #2151 from pi-hole/FTLDNS-gravity-simplelists
Update FTLDNS branch
2018-04-25 06:57:49 +01:00
Adam Warner
05d8a7f6be Merge pull request #2147 from pi-hole/fix/borkedUpdate
Restore functionality to `pihole -up` broken in #2115
2018-04-23 21:14:26 +01:00
Adam Warner
ceaf4bc6bc Some extra code made it's way into the dev branch. Not entirely sure how that happened... related to #2115
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-23 20:46:57 +01:00
Adam Warner
f2cc2f433c Merge pull request #2140 from pi-hole/FTLDNS-gravity-simplelists
Use domain list format for black.list and gravity.list
2018-04-23 20:29:32 +01:00
Dan Schaper
858aa6255c Merge pull request #2145 from pi-hole/fix/2115
Add missing `/` to line 1511
2018-04-23 07:19:14 -07:00
bcambl
1d8ea9e869 Fix static IP checking on Fedora
This bug was introduced by #1758 where the CIDR was removed from the static IP check.
The CIDR was acting as a boundary so we need to test for a boundary or a slash character.

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-04-23 06:42:36 -06:00
Adam Warner
8ead0b5483 @fourdee dropped this: /
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-23 11:59:39 +01:00
Fauxsys
72c081cfd6 Fix for unattended installations #1767 #1768 #1834
Removed updatePihole() function and updated if/then statements in installPihole() and main(). Corrected minor typos.

Signed-off-by: Fauxsys <fiber.cipher@gmail.com>
2018-04-23 04:53:57 -04:00
Mark Drobnak
1f701c94a7 Merge pull request #2115 from Fourdee/Install-Web-Server
--disable-install-webserver
2018-04-22 15:56:11 -04:00
Dan
acfc49fd41 Merge branch 'development' into Install-Web-Server 2018-04-22 09:23:11 +01:00
Adam Warner
9c29bd627e fix user blacklisting 2018-04-21 23:55:33 +01:00
DL6ER
d24b141d8b Get rid of numBlocked file, FTLDNS can now determine number of domains thanks to the new lists format
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-21 23:58:42 +02:00
DL6ER
bac9e005ae Generate gravity.list and black.list in simple domain lists format for FTLDNS. Leave local.list in HOSTS format
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-21 23:27:36 +02:00
Daniel (Fourdee)
60bcca54eb Minor
+ indentation
2018-04-21 08:29:21 +01:00
Daniel (Fourdee)
eccea8a911 Minor
+ Fix indentation
+ Stick with case, add "On" to provide INFO print out, although its not
technically required as INSTALL_WEB_SERVER=true is default value.
2018-04-21 08:27:31 +01:00
Mark Drobnak
0833d0d8d5 Merge pull request #2133 from mbologna/patch-1
Fix: add psmisc as dependency
2018-04-20 13:17:46 -04:00
Michele Bologna
55fce489bc Fix: add psmisc as dependency
Debian 9.4 does not install `psmisc` by default and the following error will happen during installation:

```
  [✗] /usr/local/bin/pihole: line 353: killall: command not found
/usr/local/bin/pihole: line 364: killall: command not found
```

This patch adds `psmisc` (that contains `killall`) as dependency

Signed-off-by: Michele Bologna <michele.bologna@gmail.com>
2018-04-19 23:41:23 +02:00
Adam Warner
2ce40c3c07 Merge pull request #2132 from rwky/development
Fixed typo in README
2018-04-19 19:49:29 +01:00
Rowan
255cfb7d62 Fixed typo in README
Signed-off-by: Rowan Wookey <admin@rwky.net>
2018-04-19 19:45:11 +01:00
Adam Warner
8a327be400 Merge pull request #2130 from pi-hole/FTLDNS
Internal FTLDNS -> dev
2018-04-18 22:09:31 +01:00
DL6ER
1cae76b443 Merge pull request #2126 from pi-hole/FTLDNS-recursive-resolver
Add backend changes for supporting a local DNS server
2018-04-18 22:01:43 +02:00
DL6ER
828e8d2ae4 Merge pull request #2040 from pi-hole/FTLDNS
FTLDNS Integration
2018-04-18 20:20:39 +02:00
DL6ER
ce35509a40 Change command to "pihole -a localdnsport X"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-18 17:30:51 +02:00
DL6ER
24b8b4e904 Add backend changes for supporting a local recursive DNS server
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-18 17:12:20 +02:00
Daniel (Fourdee)
c2c1dc7469 Ensuring bot pleasure
https://github.com/pi-hole/pi-hole/pull/2115#pullrequestreview-113066748
2018-04-18 04:38:07 +01:00
Daniel (Fourdee)
47c1071bb8 Minor
+ Add info in regards to disabling web server install:
https://github.com/pi-hole/pi-hole/pull/2115
2018-04-18 04:24:48 +01:00
Daniel (Fourdee)
e401651f09 Update https://github.com/pi-hole/pi-hole/pull/2115
+ Patch existing systems with the new variable changes using
'accountForRefactor'
+ Prompt user to install webserver
2018-04-18 04:11:32 +01:00
Mark Drobnak
1449def040 Merge pull request #2049 from pi-hole/tweak/readme
update donation and affiliate links. also link to trademark guideline…
2018-04-17 20:25:09 -04:00
Dan Schaper
d4d1ec2568 Merge pull request #2124 from pi-hole/development
Internal
2018-04-17 11:54:50 -07:00
Adam Warner
7455ac9bfb Run chooseBlocklists on EVERY reconfigure, not only if the adlist file does not esist.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-17 19:46:36 +01:00
Adam Warner
b6b1dcb275 delete adlists.list if user cancels out of this dialog
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-17 19:35:46 +01:00
Adam Warner
2e4f49a223 Default all to on, change up wording. This commit can be rolled back, it's just an option!
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-17 17:10:53 +01:00
Adam Warner
88d4108f92 - Add new whipstail to choose from example blocklists on new install
- remove adlists.default
- do not copy non-existent adlists.default on run of gravity

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-17 10:33:06 +01:00
Dan Schaper
c9f3c02cb7 Merge pull request #2027 from ravron/ravron-urls-in-query-strings
Prevent inadvertent blocking of good domains appearing in query strings
2018-04-16 17:31:51 -07:00
Dan Schaper
557372b312 Merge pull request #2119 from pi-hole/new/sticklerCI-extras
add some more linters to stickler
2018-04-15 18:28:00 -07:00
Adam Warner
18b24535fe Lets try the correct name for csslint
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 23:46:52 +01:00
Adam Warner
20e0bca71d add some more linters to stickler
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 23:45:36 +01:00
Adam Warner
6977f655e3 fix a typo
comment out some unused variables, but not deleting them in case there is a plan for them in future...

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 22:08:55 +01:00
Adam Warner
e6fc9dc75d disable 2016 in two places and declare local variables
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 22:00:14 +01:00
Adam Warner
b57b3f4588 Disable SC2001 for generation of the_os
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 21:36:50 +01:00
Adam Warner
776ae92416 fix some shellcheck/stickler compaints in debug script
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 21:33:10 +01:00
Adam Warner
6ba53c1ac0 Merge branch 'development' into FTLDNS 2018-04-15 20:46:13 +01:00
Adam Warner
699d419c71 Merge pull request #2116 from pi-hole/FTLDNS_UpdateCheck
Check for new updates without actually updating
2018-04-15 20:42:29 +01:00
Mark Drobnak
d4870b3854 Merge pull request #2053 from pi-hole/tweak/debug-logs
Get head and tail of pihole-FTL.log during debug process
2018-04-15 14:23:25 -04:00
Adam Warner
e49a9096a5 accidentally a 'shift'
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 18:46:35 +01:00
Adam Warner
33148ba832 Add help text to pihole command to document new flag
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 18:30:13 +01:00
Adam Warner
bca23dd896 Allow passing of --check-only to update script.
Don't run installer for updating web files, it's handled by getGitFiles.
I think this works...

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-15 18:25:35 +01:00
Daniel (Fourdee)
3a483a1b20 install_web_server
+ Splits web interface and server into two variables.
+ Option to disable forced install of Lighttpd.
2018-04-15 02:08:16 +01:00
Adam Warner
310d33b8ee Merge dev > FTLDNS fix merge conflicts
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-13 17:01:54 +01:00
Adam Warner
8b5dcc3872 Match change made by 7edab27 to prevent merge conflict
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-13 16:53:57 +01:00
Adam Warner
36d9af10f0 Merge pull request #2108 from LudovicRousseau/fix_No_such_file_or_directory
Fix sed: can't read /etc/pihole/pihole-FTL.conf: No such file or directory
2018-04-13 16:47:59 +01:00
Dan Schaper
0c8fcbc684 Merge pull request #2105 from pi-hole/feature/self_dco
Do not require DCO for Pi-hole Org members with GPG signed commits.
2018-04-13 05:42:04 -07:00
Ludovic Rousseau
7edab27e53 Stylistic change to use an explicit if/then/fi
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-04-13 12:19:55 +02:00
Ludovic Rousseau
9b3531f634 Fix stylistic issue
Expand variable using ${FTLconf}

Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-04-13 11:48:34 +02:00
Ludovic Rousseau
d8f85a8981 Avoid a "No such file or directory" error
Check the file /etc/pihole/pihole-FTL.conf exists before trying to use
it.
without the patch I get, each day, in my logs:
sed: can't read /etc/pihole/pihole-FTL.conf: No such file or directory

I use a variable FTLconf to not repeat the file name twice.

Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-04-13 11:16:58 +02:00
Ludovic Rousseau
3b229489c2 Fix regex to find DBFILE= from configuration file
The regex ^\s^.DBFILE\s*=\s* does not work to match "DBFILE="
I don't know what the second '^' is used for.

With the change I now have the results:

DBFILE=/foo/bar
-> /foo/bar

  DBFILE=/foo/bar
-> /foo/bar

 # DBFILE=/foo/bar
-> /etc/pihole/pihole-FTL.db

xDBFILE=/foo/bar
-> /etc/pihole/pihole-FTL.db

Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-04-13 11:16:50 +02:00
Mark Drobnak
c2fcbbb0c6 Merge pull request #2090 from Razvici/master
Update pihole locahost probe for DNS status
2018-04-12 11:17:33 -04:00
Jacob Salmela
8e82bf69d8 update wallet addresses
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-04-11 20:40:35 -05:00
Jacob Salmela
284f9e3f2f implement mcats request. removed 'the'
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-04-11 20:38:56 -05:00
Jacob Salmela
5ffc3561ed implement dschapers suggestions--better command, less subshells, and finer formatting
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-04-11 20:35:51 -05:00
Dan Schaper
952f1271b4 Do not require DCO for Pi-hole Org members with GPG signed commits.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-04-11 10:13:09 -07:00
Dan Schaper
250b445eee Split declaration and population for stickler.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-04-10 21:37:04 -07:00
Mark Drobnak
331472b592 Merge pull request #1999 from pi-hole/tweak/RedundantInstallCode
adlists.default no longer used. No need to reference it.
2018-04-06 00:17:45 -04:00
DL6ER
82d5afe996 Silence error in log flush subroutine when no pihole-FTL.conf can be found
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-05 22:28:55 +02:00
Razvan Radu
7361d5d3ea Update pihole lolcahost probe for DNS status
Signed-off-by: Razvan Radu <ramset@gmail.com>
2018-04-05 11:14:39 -06:00
DL6ER
6086614274 Add "-l, privacylevel" description to "pihole -a"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-04 18:10:23 +02:00
Adam Warner
6bb4780d32 Merge pull request #2077 from pi-hole/tweak/FTLDNSExperiments
FTLDNS tweaks
2018-04-04 17:00:03 +01:00
Adam Warner
631f5b4848 Change order of updatable components to match the end output
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-04 16:35:11 +01:00
DL6ER
0f17712f6c Merge pull request #2085 from pi-hole/FTLDNS-privacylevels
Backend changes needed to be able to set the privacy level
2018-04-04 14:41:16 +02:00
DL6ER
4941e0f8ad Backend changes needed to be able to set the privacy level
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-04-04 13:12:39 +02:00
Jacob Salmela
fbee18e24d Merge pull request #2056 from pi-hole/release/v3.3.1
Pi-hole core v3.3.1
2018-04-02 19:29:39 -05:00
Adam Warner
f37b2bc7c1 move call to get_binary_name into FTLcheckUpdate() to avoid having to run that first
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-02 23:22:06 +01:00
Adam Warner
56278c6394 Fix shellcheck complaints
Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-02 22:06:36 +01:00
Adam Warner
b1d6c03190 Break out binary name funtion to it's own function
Remove duplicate code. get_binary_name is now in the install script
Add some "version" checking to ftl download when using an alt branch, uses checksum
Greatly simplify update process. Source pihole-FTL version checker from basic-install.sh
Always run install script to finalise changes.
Install script now outputs versions after an update
(This is a Squash of previous work into one commit)

Signed-off-by: Adam Warner <adamw@rner.email>
2018-04-02 21:53:32 +01:00
Mark Drobnak
1200a77b22 Merge pull request #2075 from everettsouthwick/development
Add support for public Cloudflare DNS servers.
2018-04-02 00:03:50 -04:00
Mark Drobnak
bb9a18ef08 Merge pull request #1987 from ryanknapper/patch-1
Proper output for debug CPU detection
2018-04-02 00:00:14 -04:00
Everett Southwick
a8b493cb7d Add support for public Cloudflare DNS servers.
Signed-off-by: Everett Southwick <everett@everettsouthwick.com>
2018-04-01 17:59:16 -05:00
Jacob Salmela
1a275ba184 debug user locale; improve function to parse variables and files
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-04-01 06:40:48 -05:00
Jacob Salmela
187848660c try another fix for #2028
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-31 16:12:29 -05:00
Jacob Salmela
c3f391dc5a maybe fixes #2028 by deleting null bytes
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-31 14:08:48 -05:00
Mark Drobnak
971e6f2664 Merge pull request #2064 from Perflyst/chronometer-1
Add RaspberryPi 3B+ to Chronometer
2018-03-30 17:42:50 -04:00
Mark Drobnak
a1d6ef04ec Merge pull request #1758 from mettacrawler/fix-for-RHELish-ifcfg
basic-install.sh - no CIDR in ifcfg-*
2018-03-30 17:28:52 -04:00
DL6ER
ff47ab12fb Save number of effectively blocked domains in /etc/pihole/numBlocked
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-03-30 21:01:51 +02:00
Dan Schaper
a97e361661 Merge pull request #2061 from dflamand/development
Remove dead link from CONTRIBUTING.md
2018-03-28 20:10:11 -07:00
Dan Schaper
34d84522dd Merge pull request #2054 from theLMGN/patch-1
Link to the admin panel on the splash page.
2018-03-28 20:08:39 -07:00
Perflyst
3390fbf238 Add RaspberryPi 3B+
Signed-off-by: Perflyst <mail@perflyst.de>
2018-03-27 12:23:01 +02:00
Mark Drobnak
98ad1feaeb Merge pull request #2060 from pi-hole/tweak/debug-xheader
add label to x-header so you know which one is being evaluated
2018-03-26 13:23:31 -04:00
Dillon Flamand
37e8a91d5b Remove dead link from CONTRIBUTING.md
Removed a link to a github repo that no longer exists.

Signed-off-by: D. Flamand <dflamand@users.noreply.github.com>
2018-03-25 21:59:35 -07:00
Jacob Salmela
68c27eb2a1 add label to x-header so you know which one is being evaluated
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-25 21:27:40 -05:00
Jacob Salmela
143e75d213 fix empty ports on some systems
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-25 09:39:29 -05:00
DL6ER
295ac49f83 Add capability CAP_NET_RAW to allow pihole-FTL to use RAW sockets for being able to create an ICMPv6 socket for IPv6 handling in the DHCP service
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-03-25 09:58:22 +02:00
Mark Drobnak
d31a498e6c Merge pull request #2031 from pi-hole/tweak/BegonePullApprove
Remove PA YAML file
2018-03-23 22:16:12 -04:00
Adam Warner
2fd88a1c6a Merge branch 'FTLDNS' of github.com:pi-hole/pi-hole into FTLDNS 2018-03-23 22:47:13 +00:00
Adam Warner
fbab930cb1 Allow install script to install FTL instead of the checkout script. Utilises the /etc/pihole/ftlbranch file.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-23 22:46:41 +00:00
Leo MG Nesfield (LMGN)
bfcbd72e4b Link to the admin panel on the splash page. 2018-03-23 16:17:31 +00:00
Jacob Salmela
d9d3caec22 new head tail function and get head tail of pihole-FTL.log instead of just head
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-23 06:56:40 -05:00
Adam Warner
238a56cac3 Remove CreateLogFile function, as this is handled by the FTL service
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-23 10:53:22 +00:00
Adam Warner
51765b1f65 chown pihole log to pihole:pihole, rather than pihole:root
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-23 10:15:40 +00:00
Jacob Salmela
7159ecb632 reduce ping times for faster script completion
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-23 00:11:21 -05:00
Jacob Salmela
11f3425876 update donation and affiliate links. also link to trademark guidelines. update an image. and add a project.
Signed-off-by: Jacob Salmela <jacob.salmela@pi-hole.net>
2018-03-22 23:51:12 -05:00
Mark Drobnak
e131395cce Merge pull request #2037 from justinamcafee/master
Adds FamilyShield DNS server address to the "Choose DNS" screen in installer.
2018-03-21 17:47:24 -04:00
Adam Warner
d26ea2b948 remove trailing whitespace
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-18 00:38:34 +00:00
Adam Warner
5584a9ce5d Merge branch 'development' into FTLDNS 2018-03-18 00:29:08 +00:00
Adam Warner
e2e8b733a8 tidy up function
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-18 00:13:10 +00:00
Adam Warner
f18bf35b20 use systemctl is-enabled to check enabled status of service
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-17 22:56:50 +00:00
Adam Warner
44d8cb77e3 Kill off mask_service function
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-17 22:48:11 +00:00
Adam Warner
fc10e3fcac Merge pull request #2025 from pi-hole/FTLDNSremoveDnsmasq
Disable dnsmasq FTLDNS
2018-03-16 11:27:52 +00:00
Adam Warner
b92ccb2de4 Additionally mask the dnsmasq service on systems with systemctl
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-14 20:01:06 +00:00
justinamcafee
30af6e73be added ;; to line 825
Misformated case. Updated correct case
2018-03-10 17:36:47 -06:00
justinamcafee
2895b9bfb7 Added support for FamilyShield from OpenDNS
With a very minor code change, individuals can now implement restrictions on dangers, disturbing, or otherwise adult oriented content without the need for managed restrictions.
This is a fairly non-invasive change and will benefit users who intend to use VPN for home or small business uses where access to such material may be undesirable.
2018-03-10 17:33:31 -06:00
Adam Warner
84bd86f1ee - Test to see if dnsmasq service is enabled before stopping and disabling it.
- Some formatting tweaks to the `start_service` `stop_`service` `disable_service` and `enable_service` commands

Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 23:31:28 +00:00
Adam Warner
7193f40b87 remove libnettle, missed a >/dev/null
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 22:23:05 +00:00
Adam Warner
acd69fa4b0 silence push/popd
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 22:21:09 +00:00
Adam Warner
71d8f5f96f remove PA YAML file
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 22:00:14 +00:00
Adam Warner
856a2096eb Merge pull request #2030 from pi-hole/new/StickFTLCheckoutBranch
Store checked out FTL branch in /etc/pihole/ftlbranch
2018-03-07 21:51:52 +00:00
Adam Warner
76cb129d3c don't forget master and development branches!
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 21:48:09 +00:00
Adam Warner
246d5cd587 store checked out FTL branch in /etc/pihole/ftlbranch
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-07 21:41:00 +00:00
Riley Avron
f390671018 Improve scheme matching to avoid inadvertent blocking
Signed-off-by: Riley Avron <riley.avron@gmail.com>
2018-03-06 22:03:56 -08:00
Riley Avron
512ec7fb87 Remove unneeded ifs in awk
Signed-off-by: Riley Avron <riley.avron@gmail.com>
2018-03-06 22:03:43 -08:00
Adam Warner
24219422df Merge branch 'development' into FTLDNSremoveDnsmasq 2018-03-06 20:43:27 +00:00
Adam Warner
aed20cf7c6 Merge pull request #2017 from pi-hole/fix/NoWhitelistGravity
Gravity falls over when there is no whitelist file
2018-03-06 20:39:32 +00:00
Adam Warner
6584933e92 fix stickler complaints
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-06 18:51:02 +00:00
Adam Warner
8cf8da4c78 - Check file /etc/pihole/ftlbranch for current FTL branch, download from github if master, or pi-hole.net if other
- Check if downloaded binary file can resolve queries, if so stop and disable dnsmasq
- Add service_disable function
- Add dependency libcap2-bin on debian to enable setcap. Need to check other distos
-Always download FTL binary if /etc/pihole/ftlbranch does not contain "master"
- Change some strings/variables that reference dnsmasq and change them to pihole/pihole-FTL

Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-06 18:44:57 +00:00
Adam Warner
ad1f210528 As we no longer add source lists to the whitelist by default, gravity falls over on new installs.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-06 18:29:28 +00:00
Adam Warner
cadab61a21 Merge branch 'development' into FTLDNS 2018-03-05 21:33:53 +00:00
Adam Warner
0b87f489d5 Look for pihole-FTL, not dnsmasq!
Signed-off-by: Adam Warner <adamw@rner.email>
2018-03-03 15:59:56 +00:00
Mark Drobnak
e3e5e016d5 Merge pull request #2016 from pi-hole/bugfix/mktemp
Bugfix mktmp > mktemp
2018-03-02 16:03:11 -05:00
Dan Schaper
3425b9a82e Fix mktmp > mktemp
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-03-02 12:28:53 -08:00
Ryan Knapper
5ecfc58e5f Require exact match
Updated to require an exact match to reduce false-positives, as suggested by DL6ER.

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>
2018-02-28 13:06:07 -05:00
Dan Schaper
6011dd7372 Merge pull request #2000 from pi-hole/fix/FTL_Install
Use pushd/popd and create random temporary directory
2018-02-26 21:55:12 -08:00
DL6ER
7ed45d26c2 Remove " " at some places where they shouldn't be
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-26 17:26:51 +01:00
DL6ER
fcdc85eab8 Remove dnsmasq from dependencies
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-25 23:47:11 +01:00
DL6ER
56a2924a33 Unprivileged processes are subject to full permission checking based on the process's credentials, we have to explicitly allow pihole-FTL to bind to ports < 1024 (port 53 for DNS) and for various advanced network-related operations (to allow for handling DHCP requests)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-25 23:42:26 +01:00
DL6ER
09886a3f11 Add resolveconf config to pihole-FTL.service
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-25 10:11:11 +01:00
DL6ER
e8ec0dc701 Use pihole-FTL resolver in pihole and gravity
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-25 09:34:04 +01:00
Dan Schaper
41d9d57c84 Merge pull request #1996 from pi-hole/fix/AlternativeWhitelistFromWebFix
Specifty `LC_ALL=C` when dealing with sorted lists.
2018-02-24 07:22:44 -08:00
DL6ER
b87bcc8f5f Modifications in pihole-FTL.service for FTLDNS
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-24 13:23:06 +01:00
DL6ER
0541d8f1c5 Try to determine if the user is running a 32bit OS on a 64bit system. If so, download the 32bit binary as we cannot expect the 64bit libraries to be present.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-24 11:13:33 +01:00
Dan Schaper
4606693e62 Use pushd/popd and create random temporary directory to prevent potential backdoor binary injection.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-02-22 20:13:38 -08:00
Adam Warner
e61d8e4fb8 adlists.default no longer used. No need to reference it.
Use --force switch of gravity to force the cache refresh

Signed-off-by: Adam Warner <adamw@rner.email>
2018-02-22 14:45:31 +00:00
Adam Warner
6b4685b333 much more elegant to export LC_ALL at the beginning of the script!
Signed-off-by: Adam Warner <adamw@rner.email>
2018-02-21 11:33:29 +00:00
Adam Warner
d4ac818a0b Specifty LC_ALL=C when dealing with sorted lists.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-02-21 11:23:07 +00:00
Ryan Knapper
c17d95bfed Proper output for debug CPU detection
Inserted "log_write" to properly output CPU detection lines.

Signed-off-by: Ryan Knapper (ryanknapper@gmail.com>
2018-02-19 10:22:28 -05:00
Mark Drobnak
f14184df30 Merge pull request #1982 from LudovicRousseau/master
Create blacklist.txt if not existant
2018-02-18 15:32:01 -05:00
Ludovic Rousseau
47bbea9ba7 Use " " to protect parameter substitution
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-02-18 21:20:04 +01:00
Mark Drobnak
7265935cd4 Merge pull request #1915 from ryanknapper/development
Add conditional forwarding options to webpage.sh
2018-02-18 12:51:46 -05:00
DL6ER
40bda4b3d1 Merge pull request #1981 from pi-hole/fix/always_repair_pihole-FTL.service
Always replace pihole-FTL.service
2018-02-18 17:26:17 +01:00
Ludovic Rousseau
b7891f92a5 Create blacklist.txt if not existant
Closes: https://github.com/pi-hole/pi-hole/issues/1888

Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
2018-02-18 14:19:49 +01:00
DL6ER
8b79017d0f Always replace pihole-FTL.service
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-18 13:07:22 +01:00
DL6ER
5465ac9ba0 Merge pull request #1929 from pi-hole/fix/flushDB
pihole -f: Flush database
2018-02-17 17:45:15 +01:00
DL6ER
b8eaa9a527 Use double quotes to precent globbing and word splitting
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-17 13:01:00 +01:00
DL6ER
5d274008db Use possibly user-defined database location when flushing
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-17 12:58:57 +01:00
DL6ER
220e755596 Merge pull request #1973 from pi-hole/tweak/stop-autowhitelisting
Don't auto-whitelist blocking list domains
2018-02-17 12:23:14 +01:00
DL6ER
fc5034696d Don't auto-whitelist blocking list domains
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-02-16 19:42:33 +01:00
DL6ER
4a6f77bc59 Merge pull request #1967 from pi-hole/master
Git flow Pi-hole v3.3
2018-02-15 21:09:22 +01:00
Dan Schaper
1e87850952 Merge pull request #1943 from pi-hole/release/3.3
Pi-hole v3.3
2018-02-14 12:48:40 -08:00
Mark Drobnak
3472241289 Merge pull request #1962 from floek/master
Fixes https://github.com/pi-hole/pi-hole/issues/1772
2018-02-14 13:02:56 -05:00
Florian Freund
a944b6ff79 Fixes https://github.com/pi-hole/pi-hole/issues/1772 2018-02-12 21:28:43 +01:00
Mark Drobnak
6c4741bc61 Merge pull request #1730 from pi-hole/tweak/block-page-no-password
Disable password field on block page if no password is set
2018-02-11 22:15:20 -05:00
Mcat12
8a42ef431b Fix Javascript warning when no password is set
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-02-11 21:49:12 -05:00
Mcat12
2cf1f0e8fc Hide the password input when there is no password
Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2018-02-11 14:07:02 -05:00
Mcat12
55e50eced6 Merge branch 'development' into tweak/block-page-no-password 2018-02-11 13:49:36 -05:00
Adam Warner
30a2923380 Merge pull request #1952 from smopucilowski/fixes
Trivial spelling mistakes in basic-install.sh comments
2018-02-11 10:43:33 +00:00
Ryan Knapper
f2b3752f3d lan to local
Reduced differences.

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>
2018-02-07 17:08:55 -05:00
Ryan Knapper
36945a67d0 Prevent redundant entries in to adlists.list
Grep ${args[3]} and only add if grep -c -eq 0

Signed-off-by: Ryan Knapper <ryanknapper@gmail.com>
2018-02-07 17:04:10 -05:00
Sebastian Pucilowski
c5a2ca5c98 Trivial spelling mistakes in basic-install.sh comments
Signed-off-by: Sebastian Pucilowski <smopucilowski@gmail.com>
2018-02-07 16:56:21 +11:00
Dan Schaper
9f2ce0e296 Merge pull request #1910 from pi-hole/fix/BinaryFileLineInGravity
Potential fix for #1909
2018-01-28 03:23:19 -08:00
Adam Warner
55e10d8287 replace another grep -F as pointed out by @StarPicard
Signed-off-by: Adam Warner <adamw@rner.email>
2018-01-28 00:50:15 +00:00
Dan Schaper
94c772e1a8 Merge pull request #1936 from theel0ja/patch-fix-typo
Fixed a typo
2018-01-27 04:45:53 -08:00
Elias Ojala
2b6d9c34c9 Fixed a typo
Signed-off-by: Elias Ojala <ojala.s.elias@gmail.com>
2018-01-27 14:36:11 +02:00
Mcat12
1a5c86d32e Revert "Hide password textbox if there is no password"
This reverts commit 009fa2f1b7.
2018-01-23 20:28:43 -05:00
Mcat12
c7219fbdff Merge remote-tracking branch 'origin/development' into tweak/block-page-no-password 2018-01-21 09:09:36 -05:00
DL6ER
4c249a1186 Flush most recent 24 hours from FTL's database
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-21 13:48:13 +01:00
DL6ER
158ea1d43b Add sqlite3 dependency
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-21 11:54:49 +01:00
Mark Drobnak
535b8458d4 Merge pull request #1901 from bcambl/epel_check
Fix epel-release install for CentOS
2018-01-20 14:03:24 -05:00
Dan Schaper
49b3f82675 Merge pull request #1925 from pi-hole/feature/installtweaks
Install log security
2018-01-20 08:59:49 -08:00
Dan Schaper
9543203610 Echo the right location for the log.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-20 08:45:41 -08:00
Dan Schaper
cacfe4d387 Linting changes
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-20 07:39:11 -08:00
Dan Schaper
a7f0137e5f Use more secure installation log process.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-20 05:55:48 -08:00
Dan Schaper
b2eb364a4b Update header
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-20 05:36:28 -08:00
Dan Schaper
bb3b1bc6ba Move ascii berry to after root check, stops the double berry for the sudo refire.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-20 05:13:55 -08:00
Dan Schaper
ae8eb3f177 Merge pull request #1920 from pi-hole/feature/pr_template
Internal - GitHub template edit.
2018-01-20 03:48:51 -08:00
DL6ER
27c7325174 Merge pull request #1918 from pi-hole/tweak/lan
Use "lan" as fallback TLD for DHCP generated domains
2018-01-20 10:29:11 +01:00
DL6ER
8ee3d810b0 Merge pull request #1922 from pi-hole/tweak/logging-noflush
Add "pihole logging off noflush" command
2018-01-20 10:21:23 +01:00
DL6ER
d7dde06552 Add "pihole logging off noflush" command
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-18 17:08:46 +01:00
Dan Schaper
448495a4a3 Remove references to issues.
Modify code blocks to italics and reformat the layout.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-16 14:56:15 -08:00
DL6ER
52cc8e2fcf Use "lan" as fallback TLD for DHCP generated domains
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-16 22:10:27 +01:00
Dan Schaper
fb9cdea008 Merge pull request #1914 from deathbybandaid/development
Update README.md
2018-01-15 11:08:43 -08:00
Adam Warner
6c54bf036c Merge pull request #1913 from pi-hole/tweak/GravityFunctionNames
proposed gravity function renames
2018-01-15 17:51:19 +00:00
Deathbybandaid
657bc4edcd Update README.md
Signed-off-by: deathbybandaid
2018-01-15 08:05:43 -05:00
Deathbybandaid
b75dd5ff73 needed sign-off
Signed-off-by:
2018-01-15 08:04:27 -05:00
ryanknapper
607664c860 Update webpage.sh
Updated webpage.sh to include conditional forwarding options.
2018-01-14 21:01:08 -05:00
Deathbybandaid
094bd49f35 Update README.md 2018-01-14 20:29:20 -05:00
Adam Warner
18fbe60381 Merge pull request #1908 from pi-hole/tweak/RemoveCronPiholeUpdate
If this line is uncommented, it is re-commented on the next update an…
2018-01-14 20:58:58 +00:00
Adam Warner
f1956119fb proposed gravity function renames
Signed-off-by: Adam Warner <adamw@rner.email>
2018-01-14 20:38:39 +00:00
Adam Warner
876170767c Print actual domain instead of grep output of "Binary file /etc/pihole/list.preEventHorizon matches" when a domain with a unicode char is in a source list.
Signed-off-by: Adam Warner <adamw@rner.email>
2018-01-13 16:43:20 +00:00
Dan Schaper
f4f77ec88b Merge pull request #1900 from roots84/patch-1
Update README.md
2018-01-13 05:03:29 -08:00
Stefan
9ba2038702 Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1
Signed-off-by: Stefan <roots84@noreply.users.github.com>
2018-01-12 21:25:09 +01:00
Stefan
b176ba9e80 Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1
Signed-off-by: Stefan <roots84@noreply.users.github.com>
2018-01-12 21:24:39 +01:00
Stefan
cacb47ca7e Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1
Signed-off-by: Stefan <roots84@noreply.users.github.com>
2018-01-12 21:23:36 +01:00
Stefan
500e424fee Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1
Signed-off-by: Stefan <roots84@noreply.users.github.com>
2018-01-12 21:22:43 +01:00
Stefan
f1b02c0cab Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1 2018-01-12 21:21:26 +01:00
Stefan
828302702b Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1
Signed-off-by: Stefan <roots84@users.noreply.github.com>
2018-01-12 21:20:39 +01:00
Stefan
0827d4fe40 Merge branch 'patch-1' of https://github.com/roots84/pi-hole into patch-1 2018-01-12 21:18:30 +01:00
Stefan
ebff965414 Update README.md
Adding DNS-Swapper Project back after it was accidently removed

Signed-off-by: roots84 <stefan.bautz@gmail.com>
2018-01-12 21:17:10 +01:00
Dan Schaper
b45954c560 Merge pull request #1895 from pi-hole/feature/PR_templateDCO
Update PULL_REQUEST_TEMPLATE.md
2018-01-12 08:14:51 -08:00
Adam Warner
80307a3bcd Remove update line from cron
Signed-off-by: Adam Warner <adamw@rner.email>
2018-01-12 15:43:15 +00:00
Adam Warner
e8acb5967b Merge pull request #1904 from vgerak/patch-1
piholeDebug.sh: Correct typo mistake
2018-01-12 15:04:27 +00:00
Vasilis Gerakaris
939806f021 piholeDebug.sh: Correct typo mistake
Signed-off-by: Vasilis Gerakaris <vgerak@gmail.com>

**By submitting this pull request, I confirm the following:** 
`{please fill any appropriate checkboxes, e.g: [X]}`

- [x] I have read and understood the [contributors guide](https://github.com/pi-hole/pi-hole/blob/master/CONTRIBUTING.md), as well as this entire template.
- [x] I have made only one major change in my proposed changes.
- [] I have commented my proposed changes within the code.
- [] I have tested my proposed changes, and have included unit tests where possible.
- [] I am willing to help maintain this change if there are issues with it later.
- [x] I give this submission freely and claim no ownership.
- [x] It is compatible with the [EUPL 1.2 license](https://opensource.org/licenses/EUPL-1.1)
- [x] I have squashed any insignificant commits. ([`git rebase`](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html))
2018-01-12 02:17:31 +02:00
bcambl
cc47bf8f6c Fix epel-release install for CentOS
Signed-off-by: bcambl <blayne@blaynecampbell.com>
2018-01-07 22:21:04 -06:00
Stefan
8b80aaebf5 Update README.md
Adding DNS-Swapper Project back after it was accidently removed
2018-01-07 22:54:53 +01:00
DL6ER
8f35ebc0c2 Merge pull request #1897 from pi-hole/fix/webpage.sh_interface_setting
Add fallback interface in DNS settings
2018-01-07 16:56:01 +01:00
DL6ER
793bdd9743 No need for cat | sed here as we source setupVars.conf, so we can use interface="${PIHOLE_INTERFACE}"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-07 14:36:03 +01:00
DL6ER
9d50f52bb2 Add fallback interface for DNS listening behavior in case PIHOLE_INTERFACE is not set in setupVars.conf
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-07 14:34:02 +01:00
Dan Schaper
db62afbb64 Update PULL_REQUEST_TEMPLATE.md
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-06 07:28:26 -08:00
DL6ER
3dc3e8e40e Merge pull request #1885 from pi-hole/new/FTL_Usocket
Create directories /etc/{var,log}/pihole on startup of pihole-FTL
2018-01-04 14:05:18 +01:00
Dan Schaper
c79fc81292 Merge pull request #1891 from pi-hole/feature/DCO_doc
Link to DCO wiki entry.
2018-01-03 16:31:06 -08:00
Dan Schaper
62a6a878d4 Link to DCO wiki entry.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2018-01-03 16:20:57 -08:00
DL6ER
4efb533d2e Create directories /etc/{var,log}/pihole on startup of pihole-FTL and set proper ownership
Signed-off-by: DL6ER <dl6er@dl6er.de>
2018-01-01 11:26:03 +01:00
Mark Drobnak
891473c7fc Merge pull request #1882 from pi-hole/tweak/jetbrains_codestyle
Just ignore the whole .idea directory, execpt for the codeStyles
2017-12-30 15:32:19 -05:00
Dan Schaper
81e8ef5c40 Just ignore the whole .idea directory, execpt for the codeStyles and the
legacy codeStyelSettings.xml.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-12-30 12:23:46 -08:00
Mark Drobnak
e17885088b Merge pull request #1881 from pi-hole/tweak/jetbrains_codestyle
Jetbrains has moved codestyle locations. Development Internal
2017-12-30 14:38:24 -05:00
Dan Schaper
494340fe67 Add other JetBrains stuff to ignore 2017-12-30 10:37:17 -08:00
Dan Schaper
01625dfd49 JetBrains new codestyle storage location 2017-12-30 10:33:41 -08:00
DL6ER
a154f1540f Merge pull request #1778 from loganaden/development
Add secondary quad9 server
2017-12-30 18:19:55 +01:00
DL6ER
5254fc6efe Merge pull request #1880 from pi-hole/fix/chronometer_localhost
Small improvement for Chronometer
2017-12-30 17:51:59 +01:00
DL6ER
afa2e9c2f7 Exchange hard-coded domain "localhost" by hard-coded address "127.0.0.1"
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-30 17:44:59 +01:00
DL6ER
a4c8f1a0a4 Merge pull request #1859 from pi-hole/new/extra-logging
Enable dnsmasq's extra logging feature
2017-12-28 22:49:43 +01:00
Mark Drobnak
d5a9a9a2d8 Merge pull request #1878 from pi-hole/tweak/run_updatechecker_after_install
Force update of update checker for new installs
2017-12-28 14:43:28 -05:00
DL6ER
3b8f8fb0ef Merge pull request #1874 from pi-hole/uninitiate
Grammar change in debug script
2017-12-28 18:47:47 +01:00
DL6ER
677033afca Force update of "remote" part in th update checker (may take up to 24hrs for new installs otherwise)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-28 18:41:22 +01:00
Adam Warner
8e0d76b63b initiated -> initialized
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-24 13:26:32 +00:00
Adam Warner
64df41ed90 Merge pull request #1873 from pi-hole/fix/1871
Source setup vars before we attempt to do anything on an update/repair
2017-12-24 13:21:45 +00:00
Adam Warner
442a372142 Merge pull request #1870 from pi-hole/docs/gitsignoff
Add more informative link for Git Signoff
2017-12-24 13:16:37 +00:00
Adam Warner
95e5baa967 Source setup vars before we attempt to do anything on an update/repair
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-24 13:09:45 +00:00
Dan Schaper
b80edfb996 Add more informative link for Git Signoff
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-12-23 17:48:15 -08:00
Mark Drobnak
e06543bd17 Merge pull request #1866 from pi-hole/fix/FTL_branch_version_display
Store fourth entry in versions/branches files
2017-12-23 11:32:57 -05:00
DL6ER
cca8412921 Use "echo -n" to avoid haveing newlines in the files
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-23 11:52:27 +01:00
DL6ER
d15a5ad5c1 Add required documentation in the source code
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-23 00:46:51 +01:00
DL6ER
8ed75dd176 Add extra entry to the end of the saved branches and versions such that PHP's explode() subroutine can correctly disentangle the first three entries and does not get confused by the newline character at the end of the FTL version/branch...
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-23 00:42:41 +01:00
DL6ER
d43ad263ea Merge pull request #1863 from pi-hole/master
Sync with development branch
2017-12-22 22:00:49 +01:00
DL6ER
5c2dcb5e74 Enable dnsmasq's extra logging feature
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-21 16:42:55 +01:00
Loganaden Velvindron
9c8526db49 Add secondary quad9 server 2017-11-20 22:05:41 +04:00
Adam Warner
2c8dcd86e5 remove package_check to avoid situations like #1760
Signed-off-by: Adam Warner <adamw@rner.email>
2017-11-09 20:47:15 +00:00
mettacrawler
35dc4800e0 basic-install.sh - no CIDR in ifcfg-*
Do not expect CIDR format IP addresses in /etc/sysconfig/network-scripts/ifcfg-* files as it is not a requirement.
Expect only:
IPADDR=10.10.10.10
Do not expect:
IPADDR=10.10.10.10/24
2017-11-05 15:28:44 -05:00
Mcat12
009fa2f1b7 Hide password textbox if there is no password 2017-11-01 21:30:14 -04:00
Mcat12
e7589945a2 Disable password field if no password is set
For someone to actually whitelist a domain without a password, more changes will
be needed on the PHP side.
2017-10-07 16:41:30 -04:00
52 changed files with 7206 additions and 5199 deletions

View File

@@ -9,7 +9,7 @@ end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = tab
tab_width = 2
tab_width = 4
charset = utf-8
trim_trailing_whitespace = true

4
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
# These are supported funding model platforms
patreon: pihole
custom: https://pi-hole.net/donate

View File

@@ -1,32 +1,31 @@
**By submitting this pull request, I confirm the following:** `{please fill any appropriate checkboxes, e.g: [X]}`
**By submitting this pull request, I confirm the following:**
*please fill any appropriate checkboxes, e.g: [X]*
`{Please ensure that your pull request is for the 'development' branch!}`
- [ ] I have read and understood the [contributors guide](https://github.com/pi-hole/pi-hole/blob/master/CONTRIBUTING.md), as well as this entire template.
- [ ] I have made only one major change in my proposed changes.
- [ ] I have commented my proposed changes within the code.
- [ ] I have tested my proposed changes, and have included unit tests where possible.
- [ ] I am willing to help maintain this change if there are issues with it later.
- [ ] I give this submission freely and claim no ownership.
- [ ] It is compatible with the [EUPL 1.2 license](https://opensource.org/licenses/EUPL-1.1)
- [ ] I have squashed any insignificant commits. ([`git rebase`](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html))
- [] I have read and understood the [contributors guide](https://github.com/pi-hole/pi-hole/blob/master/CONTRIBUTING.md), as well as this entire template.
- [] I have made only one major change in my proposed changes.
- [] I have commented my proposed changes within the code.
- [] I have tested my proposed changes, and have included unit tests where possible.
- [] I am willing to help maintain this change if there are issues with it later.
- [] I give this submission freely and claim no ownership.
- [] It is compatible with the [EUPL 1.2 license](https://opensource.org/licenses/EUPL-1.1)
- [] I have squashed any insignificant commits. ([`git rebase`](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html))
- [] I have Signed Off all commits. ([`git commit --signoff`](https://git-scm.com/docs/git-commit#git-commit---signoff))
Please make sure you [Sign Off](https://github.com/pi-hole/pi-hole/wiki/How-to-signoff-your-commits.) all commits. Pi-hole enforces the [DCO](https://github.com/pi-hole/pi-hole/wiki/Contributing-to-the-project).
---
**What does this PR aim to accomplish?:**
*A detailed description, screenshots (if necessary), as well as links to any relevant GitHub issues*
`{A detailed description, screenshots (if necessary), as well as links to any relevant GitHub issues}`
**How does this PR accomplish the above?:**
*A detailed description (such as a changelog) and screenshots (if necessary) of the implemented fix*
`{A detailed description (such as a changelog) and screenshots (if necessary) of the implemented fix}`
**What documentation changes (if any) are needed to support this PR?:**
*A detailed list of any necessary changes*
`{A detailed list of any necessary changes}`
> * `{Please delete this quoted section when opening your pull request}`
> * You must follow the template instructions. Failure to do so will result in your issue being closed.
> * Please respect that Pi-hole is developed by volunteers, who can only reply in their spare time.
> * Detail helps us understand an issue quicker, but please ensure it's relevant.
---
* You must follow the template instructions. Failure to do so will result in your pull request being closed.
* Please respect that Pi-hole is developed by volunteers, who can only reply in their spare time.

2
.github/dco.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
require:
members: false

71
.gitignore vendored
View File

@@ -3,3 +3,74 @@
*.swp
__pycache__
.cache
.pytest_cache
.tox
.eggs
*.egg-info
# Created by https://www.gitignore.io/api/jetbrains+iml
### JetBrains+iml ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# All idea files, with execptions
.idea
!.idea/codeStyles/*
!.idea/codeStyleSettings.xml
# Sensitive or high-churn files:
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
# Gradle:
.idea/**/gradle.xml
.idea/**/libraries
# CMake
cmake-build-debug/
# Mongo Explorer plugin:
.idea/**/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Ruby plugin and RubyMine
/.rakeTasks
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### JetBrains+iml Patch ###
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
*.iml
.idea/misc.xml
*.ipr
# End of https://www.gitignore.io/api/jetbrains+iml

7
.idea/codeStyles/Project.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@@ -1,38 +0,0 @@
version: 2
always_pending:
title_regex: '(WIP|wip)'
labels:
- wip
explanation: 'This PR is a work in progress...'
group_defaults:
reset_on_push:
enabled: true
reject_value: -2
approve_regex: '^(Approved|:shipit:|:\+1:|Engage|:taco:)'
reject_regex: '^(Rejected|:-1:|Borg)'
author_approval:
auto: true
groups:
development:
approve_by_comment:
enabled: true
conditions:
branches:
- development
required: 2
teams:
- approvers
master:
approve_by_comment:
enabled: true
conditions:
branches:
- master
required: 4
teams:
- approvers

View File

@@ -1,3 +1,6 @@
linters:
shellcheck:
shell: bash
phpcs:
csslint:
flake8:

View File

@@ -7,4 +7,6 @@ python:
install:
- pip install -r requirements.txt
script: py.test -vv
script:
# tox.ini handles setup, ordering of docker build first, and then run tests
- tox

View File

@@ -1,5 +1,3 @@
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._
# Contributors Guide
Please read and understand the contribution guide before creating an issue or pull request.
@@ -28,6 +26,7 @@ When requesting or submitting new features, first consider whether it might be u
- Check the codebase to ensure that your feature doesn't already exist.
- Check the pull requests to ensure that another person hasn't already submitted the feature or fix.
- Read and understand the [DCO guidelines](https://github.com/pi-hole/pi-hole/wiki/Contributing-to-the-project) for the project.
## Technical Requirements

126
README.md
View File

@@ -3,7 +3,7 @@
<b>Network-wide ad blocking via your own Linux hardware</b><br/>
</p>
The Pi-hole is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
The Pi-hole[®](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
- **Easy-to-install**: our versatile installer walks you through the process, and [takes less than ten minutes](https://www.youtube.com/watch?v=vKWjx1AQYgs)
- **Resolute**: content is blocked in _non-browser locations_, such as ad-laden mobile apps and smart TVs
@@ -17,17 +17,17 @@ The Pi-hole is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that
- **Free**: open source software which helps ensure _you_ are the sole person in control of your privacy
-----
<a href="https://www.codacy.com/app/Pi-hole/pi-hole?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=pi-hole/pi-hole&amp;utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/c558a0f8d7124c99b02b84f0f5564238" alt="Codacy Grade"/></a>
<a href="https://travis-ci.org/pi-hole/pi-hole"><img src="https://travis-ci.org/pi-hole/pi-hole.svg?branch=development" alt="Travis Build Status"/></a>
<a href="https://www.bountysource.com/trackers/3011939-pi-hole-pi-hole?utm_source=3011939&utm_medium=shield&utm_campaign=TRACKER_BADGE"><img src="https://www.bountysource.com/badge/tracker?tracker_id=3011939" alt="BountySource"/></a>
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/c558a0f8d7124c99b02b84f0f5564238)](https://www.codacy.com/app/Pi-hole/pi-hole?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=pi-hole/pi-hole&amp;utm_campaign=Badge_Grade)
[![Build Status](https://travis-ci.org/pi-hole/pi-hole.svg?branch=development)](https://travis-ci.org/pi-hole/pi-hole)
[![BountySource](https://www.bountysource.com/badge/tracker?tracker_id=3011939)](https://www.bountysource.com/trackers/3011939-pi-hole-pi-hole?utm_source=3011939&utm_medium=shield&utm_campaign=TRACKER_BADGE)
## One-Step Automated Install
Those who want to get started quickly and conveniently, may install Pi-hole using the following command:
Those who want to get started quickly and conveniently may install Pi-hole using the following command:
#### `curl -sSL https://install.pi-hole.net | bash`
## Alternative Install Methods
[Piping to `bash` is controversial](https://pi-hole.net/2016/07/25/curling-and-piping-to-bash), as it prevents you from [reading code that is about to run](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) on your system. Therefore, we provide these alternative installation methods which allow code review before installation:
[Piping to `bash` is controversial](https://pi-hole.net/2016/07/25/curling-and-piping-to-bash), as it prevents you from [reading code that is about to run](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) on your system. Therefore, we provide these alternative installation methods which allow code review before installation:
### Method 1: Clone our repository and run
```
@@ -46,30 +46,32 @@ sudo bash basic-install.sh
Once the installer has been run, you will need to [configure your router to have **DHCP clients use Pi-hole as their DNS server**](https://discourse.pi-hole.net/t/how-do-i-configure-my-devices-to-use-pi-hole-as-their-dns-server/245) which ensures that all devices connecting to your network will have content blocked without any further intervention.
If your router does not support setting the DNS server, you can [use Pi-hole's built in DHCP server](https://discourse.pi-hole.net/t/how-do-i-use-pi-holes-built-in-dhcp-server-and-why-would-i-want-to/3026); just be sure to disable DHCP on your router first (if it has that feature available).
If your router does not support setting the DNS server, you can [use Pi-hole's built-in DHCP server](https://discourse.pi-hole.net/t/how-do-i-use-pi-holes-built-in-dhcp-server-and-why-would-i-want-to/3026); just be sure to disable DHCP on your router first (if it has that feature available).
As a last resort, you can always manually set each device to use Pi-hole as their DNS server.
-----
## Pi-hole is free, but powered by your support
There are many reoccurring costs involved with maintaining free, open source, and privacy respecting software; expenses which [our volunteer developers](https://github.com/orgs/pi-hole/people) pitch in to cover out-of-pocket. This is just one example of how strongly we feel about our software, as well as the importance of keeping it maintained.
There are many reoccurring costs involved with maintaining free, open source, and privacy-respecting software; expenses which [our volunteer developers](https://github.com/orgs/pi-hole/people) pitch in to cover out-of-pocket. This is just one example of how strongly we feel about our software, as well as the importance of keeping it maintained.
Make no mistake: **your support is absolutely vital to help keep us innovating!**
### Donations
Sending a donation using our links below is **extremely helpful** in offsetting a portion of our monthly expenses:
&nbsp;<img src="https://pi-hole.github.io/graphics/Badges/paypal-badge-black.svg" width="24" height="24" alt="PP"/> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY">Donate via PayPal</a><br/>
&nbsp;<img src="https://pi-hole.github.io/graphics/Badges/bitcoin-badge-black.svg" width="24" height="24" alt="BTC"/> Bitcoin Address: <code>1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL</code>
- <img src="https://pi-hole.github.io/graphics/Badges/paypal-badge-black.svg" width="24" height="24" alt="PP"/> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY">Donate via PayPal</a><br/>
- <img src="https://pi-hole.github.io/graphics/Badges/bitcoin-badge-black.svg" width="24" height="24" alt="BTC"/> [Bitcoin, Bitcoin Cash, Ethereum, Litecoin](https://commerce.coinbase.com/checkout/dd304d04-f324-4a77-931b-0db61c77a41b)
### Alternative support
If you'd rather not donate (_which is okay!_), there are other ways you can help support us:
- [Digital Ocean](http://www.digitalocean.com/?refcode=344d234950e1) affiliate link
- [Vultr](http://www.vultr.com/?ref=7190426) affiliate link
- [UNIXstickers.com](http://unixstickers.refr.cc/jacobs) affiliate link
- [Pi-hole Swag Store](https://pi-hole.net/shop/)
If you'd rather not [donate](https://pi-hole.net/donate/) (_which is okay!_), there are other ways you can help support us:
- [Patreon](https://patreon.com/pihole) _Become a patron for rewards_
- [Digital Ocean](http://www.digitalocean.com/?refcode=344d234950e1) _affiliate link_
- [Stickermule](https://www.stickermule.com/unlock?ref_id=9127301701&utm_medium=link&utm_source=invite) _earn a $10 credit after your first purchase_
- [Pi-hole Swag Store](https://pi-hole.net/shop/) _affiliate link_
- [Amazon](http://www.amazon.com/exec/obidos/redirect-home/pihole09-20) _affiliate link_
- [DNS Made Easy](https://cp.dnsmadeeasy.com/u/133706) _affiliate link_
- [Vultr](http://www.vultr.com/?ref=7190426) _affiliate link_
- Spreading the word about our software, and how you have benefited from it
### Contributing via GitHub
@@ -77,7 +79,7 @@ We welcome _everyone_ to contribute to issue reports, suggest new features, and
If you have something to add - anything from a typo through to a whole new feature, we're happy to check it out! Just make sure to fill out our template when submitting your request; the questions that it asks will help the volunteers quickly understand what you're aiming to achieve.
You'll find that the [install script](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) and the [debug script](https://github.com/pi-hole/pi-hole/blob/master/advanced/Scripts/piholeDebug.sh) have an abundance of comments, which will help you better understand how Pi-hole works. They're also a valuable resource to those who want to learn how to write scripts or code a program! We encourage anyone who likes to tinker to read through it, and submit a pull request for us to review.
You'll find that the [install script](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) and the [debug script](https://github.com/pi-hole/pi-hole/blob/master/advanced/Scripts/piholeDebug.sh) have an abundance of comments, which will help you better understand how Pi-hole works. They're also a valuable resource to those who want to learn how to write scripts or code a program! We encourage anyone who likes to tinker to read through it and submit a pull request for us to review.
### Presentations about Pi-hole
Word-of-mouth continues to help our project grow immensely, and so we are helping make this easier for people.
@@ -93,9 +95,6 @@ While we are primarily reachable on our <a href="https://discourse.pi-hole.net/"
<li><a href="https://discourse.pi-hole.net/c/faqs">Frequently Asked Questions</a></li>
<li><a href="https://github.com/pi-hole/pi-hole/wiki">Pi-hole Wiki</a></li>
<li><a href="https://discourse.pi-hole.net/c/feature-requests?order=votes">Feature Requests</a></li>
</ul>
<br/>
<ul>
<li><a href="https://discourse.pi-hole.net/">Discourse User Forum</a></li>
<li><a href="https://www.reddit.com/r/pihole/">Reddit</a></li>
<li><a href="https://gitter.im/pi-hole/pi-hole">Gitter</a> (Real-time chat)</li>
@@ -108,7 +107,7 @@ While we are primarily reachable on our <a href="https://discourse.pi-hole.net/"
## Breakdown of Features
### The Command Line Interface
The `pihole` command has all the functionality necessary to be able to fully administer the Pi-hole, without the need of the Web Interface. It's fast, user-friendly, and auditable by anyone with understanding of `bash`.
The `pihole` command has all the functionality necessary to be able to fully administer the Pi-hole, without the need of the Web Interface. It's fast, user-friendly, and auditable by anyone with an understanding of `bash`.
<a href="https://pi-hole.github.io/graphics/Screenshots/blacklist-cli.gif"><img src="https://pi-hole.github.io/graphics/Screenshots/blacklist-cli.gif" alt="Pi-hole Blacklist Demo"/></a>
@@ -127,7 +126,7 @@ You can read our [Core Feature Breakdown](https://github.com/pi-hole/pi-hole/wik
### The Web Interface Dashboard
This [optional dashboard](https://github.com/pi-hole/AdminLTE) allows you to view stats, change settings, and configure your Pi-hole. It's the power of the Command Line Interface, with none of the learning curve!
<a href="https://pi-hole.github.io/graphics/Screenshots/dashboard.png"><img src="https://pi-hole.github.io/graphics/Screenshots/dashboard.png" width="888" height="522" alt="Pi-hole Dashboard"/></a>
<img src="https://pi-hole.github.io/graphics/Screenshots/pihole-dashboard.png" alt="Pi-hole Dashboard"/></a>
Some notable features include:
* Mobile friendly interface
@@ -135,18 +134,18 @@ Some notable features include:
* Detailed graphs and doughnut charts
* Top lists of domains and clients
* A filterable and sortable query log
* Long Term Statistics to view data over user defined time ranges
* Long Term Statistics to view data over user-defined time ranges
* The ability to easily manage and configure Pi-hole features
* ... and all the main features of the Command Line Interface!
There are several ways to [access the dashboard](https://discourse.pi-hole.net/t/how-do-i-access-pi-holes-dashboard-admin-interface/3168):
1. `http://<IP_ADDPRESS_OF_YOUR_PI_HOLE>/admin/`
2. `http:/pi.hole/admin/` (when using Pi-hole as your DNS server)
2. `http://pi.hole/admin/` (when using Pi-hole as your DNS server)
3. `http://pi.hole/` (when using Pi-hole as your DNS server)
## The Faster-Than-Light Engine
The [FTL Engine](https://github.com/pi-hole/FTL) is a lightweight, purpose-built daemon used to provide statistics needed for the Web Interface, and its API can be easily integrated into your own projects. As the name implies, FTL does this all *very quickly*!
## Faster-than-light Engine
FTLDNS is a lightweight, purpose-built daemon used to provide statistics needed for the Web Interface, and its API can be easily integrated into your own projects. As the name implies, FTLDNS does this all *very quickly*!
Some of the statistics you can integrate include:
* Total number of domains being blocked
@@ -163,55 +162,52 @@ The API can be accessed via [`telnet`](https://github.com/pi-hole/FTL), the Web
-----
## The Origin Of Pi-hole
Pi-hole being a **advertising-aware DNS/Web server**, makes use of the following technologies:
Pi-hole being an **advertising-aware DNS/Web server**, makes use of the following technologies:
* [`dnsmasq`](http://www.thekelleys.org.uk/dnsmasq/doc.html) - a lightweight DNS and DHCP server
* [`curl`](https://curl.haxx.se) - A command line tool for transferring data with URL syntax
* [`lighttpd`](https://www.lighttpd.net) - webserver designed and optimized for high performance
* [`lighttpd`](https://www.lighttpd.net) - web server designed and optimized for high performance
* [`php`](https://secure.php.net) - a popular general-purpose web scripting language
* [AdminLTE Dashboard](https://github.com/almasaeed2010/AdminLTE) - premium admin control panel based on Bootstrap 3.x
While quite outdated at this point, [this original blog post about Pi-hole](https://jacobsalmela.com/2015/06/16/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0/) goes into **great detail** about how Pi-hole was originally setup and how it works. Syntactically, it's no longer accurate, but the same basic principles and logic still apply to Pi-hole's current state.
While quite outdated at this point, [this original blog post about Pi-hole](https://jacobsalmela.com/2015/06/16/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0/) goes into **great detail** about how Pi-hole was originally set up and how it works. Syntactically, it's no longer accurate, but the same basic principles and logic still apply to Pi-hole's current state.
-----
## Coverage
- [Lifehacker: Turn A Raspberry Pi Into An Ad Blocker With A Single Command](https://www.lifehacker.com.au/2015/02/turn-a-raspberry-pi-into-an-ad-blocker-with-a-single-command/) (Feburary, 2015)
- [MakeUseOf: Adblock Everywhere: The Raspberry Pi-Hole Way](http://www.makeuseof.com/tag/adblock-everywhere-raspberry-pi-hole-way/) (March, 2015)
- [Catchpoint: Ad-Blocking on Apple iOS9: Valuing the End User Experience](http://blog.catchpoint.com/2015/09/14/ad-blocking-apple/) (September, 2015)
- [Security Now Netcast: Pi-hole](https://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s) (October, 2015)
- [TekThing: Raspberry Pi-Hole Makes Ads Disappear!](https://youtu.be/8Co59HU2gY0?t=2m) (December, 2015)
- [Foolish Tech Show](https://youtu.be/bYyena0I9yc?t=2m4s) (December, 2015)
- [Block Ads on All Home Devices for $53.18](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d) (December, 2015)
- [Pi-Hole for Ubuntu 14.04](http://www.boyter.org/2015/12/pi-hole-ubuntu-14-04/) (December, 2015)
- [MacObserver Podcast 585](https://www.macobserver.com/tmo/podcast/macgeekgab-585) (December, 2015)
- [The Defrag Show: Endoscope USB Camera, The Final [HoloLens] Vote, Adblock Pi and more](https://channel9.msdn.com/Shows/The-Defrag-Show/Defrag-Endoscope-USB-Camera-The-Final-HoloLens-Vote-Adblock-Pi-and-more?WT.mc_id=dlvr_twitter_ch9#time=20m39s) (January, 2016)
- [Adafruit: Pi-hole is a black hole for internet ads](https://blog.adafruit.com/2016/03/04/pi-hole-is-a-black-hole-for-internet-ads-piday-raspberrypi-raspberry_pi/) (March, 2016)
- [Digital Trends: 5 Fun, Easy Projects You Can Try With a $35 Raspberry Pi](https://youtu.be/QwrKlyC2kdM?t=1m42s) (March, 2016)
- [Adafruit: Raspberry Pi Quick Look at Pi Hole ad blocking server with Tony D](https://www.youtube.com/watch?v=eg4u2j1HYlI) (June, 2016)
- [Devacron: OrangePi Zero as an Ad-Block server with Pi-Hole](http://www.devacron.com/orangepi-zero-as-an-ad-block-server-with-pi-hole/) (December, 2016)
- [Linux Pro: The Hole Truth](http://www.linuxpromagazine.com/Issues/2017/200/The-sysadmin-s-daily-grind-Pi-hole) (July, 2017)
- [Adafruit: installing Pi-hole on a Pi Zero W](https://learn.adafruit.com/pi-hole-ad-blocker-with-pi-zero-w/install-pi-hole) (August, 2017)
- [CryptoAUSTRALIA: How We Tried 5 Privacy Focused Raspberry Pi Projects](https://blog.cryptoaustralia.org.au/2017/10/05/5-privacy-focused-raspberry-pi-projects/) (October, 2017)
- [CryptoAUSTRALIA: Pi-hole Workshop](https://blog.cryptoaustralia.org.au/2017/11/02/pi-hole-network-wide-ad-blocker/) (November, 2017)
- [Know How 355: Killing ads with a Raspberry Pi-Hole!](https://www.twit.tv/shows/know-how/episodes/355) (November, 2017)
- [Hobohouse: Block Advertising on your Network with Pi-hole and Raspberry Pi](https://hobo.house/2018/02/27/block-advertising-with-pi-hole-and-raspberry-pi/) (March, 2018)
- [Scott Helme: Securing DNS across all of my devices with Pi-Hole + DNS-over-HTTPS + 1.1.1.1](https://scotthelme.co.uk/securing-dns-across-all-of-my-devices-with-pihole-dns-over-https-1-1-1-1/) (April, 2018)
- [Scott Helme: Catching and dealing with naughty devices on my home network](https://scotthelme.co.uk/catching-naughty-devices-on-my-home-network/) (April, 2018)
- [Bloomberg Business Week: Brotherhood of the Ad blockers](https://www.bloomberg.com/news/features/2018-05-10/inside-the-brotherhood-of-pi-hole-ad-blockers) (May, 2018)
- [Software Engineering Daily: Interview with the creator of Pi-hole](https://softwareengineeringdaily.com/2018/05/29/pi-hole-ad-blocker-hardware-with-jacob-salmela/) (May, 2018)
- [Raspberry Pi: Block ads at home using Pi-hole and a Raspberry Pi](https://www.raspberrypi.org/blog/pi-hole-raspberry-pi/) (July, 2018)
- [Troy Hunt: Mmm... Pi-hole...](https://www.troyhunt.com/mmm-pi-hole/) (September, 2018)
- [PEBKAK Podcast: Interview With Jacob Salmela](https://www.jerseystudios.net/2018/10/11/150-pi-hole/) (October, 2018)
-----
## Pi-hole Projects
- [The Big Blocklist Collection](https://wally3k.github.io)
- [Docker Pi-hole container (x86 and ARM)](https://hub.docker.com/r/diginc/pi-hole/)
- [Pi-Hole in the cloud](http://blog.codybunch.com/2015/07/28/Pi-Hole-in-the-cloud/)
- [Pie in the Sky-Hole [A Pi-Hole in the cloud for ad-blocking via DNS]](https://dlaa.me/blog/post/skyhole)
- [Pi-hole Enable/Disable Button](http://thetimmy.silvernight.org/pages/endisbutton/)
- [Minibian Pi-hole](https://munkjensen.net/wiki/index.php/See_my_Pi-Hole#Minibian_Pi-hole)
- [CHiP-hole: Network-wide Ad-blocker](https://www.hackster.io/jacobsalmela/chip-hole-network-wide-ad-blocker-98e037)
- [Chrome Extension: Pi-Hole List Editor](https://chrome.google.com/webstore/detail/pi-hole-list-editor/hlnoeoejkllgkjbnnnhfolapllcnaglh) ([Source Code](https://github.com/packtloss/pihole-extension))
- [Splunk: Pi-hole Visualiser](https://splunkbase.splunk.com/app/3023/)
- [Adblocking with P-hole and Ubuntu 14.04 on VirtualBox](https://hbalagtas.blogspot.com.au/2016/02/adblocking-with-pi-hole-and-ubuntu-1404.html)
- [Pi-hole stats in your Mac's menu bar](https://getbitbar.com/plugins/Network/pi-hole.1m.py)
- [Pi-hole unRAID Template](https://forums.lime-technology.com/topic/36810-support-spants-nodered-mqtt-dashing-couchdb/)
- [Pie in the Sky-Hole](https://dlaa.me/blog/post/skyhole)
- [Copernicus: Windows Tray Application](https://github.com/goldbattle/copernicus)
- [Let your blink1 device blink when Pi-hole filters ads](https://gist.github.com/elpatron68/ec0b4c582e5abf604885ac1e068d233f)
- [Pi-hole metrics](https://github.com/nlamirault/pihole_exporter) exporter for [Prometheus](https://prometheus.io/)
- [Magic Mirror with DNS Filtering](https://zonksec.com/blog/magic-mirror-dns-filtering/#dnssoftware)
- [Pi-hole Droid: Android client](https://github.com/friimaind/pi-hole-droid)
-----
## Coverage
- [Lifehacker: Turn A Raspberry Pi Into An Ad Blocker With A Single Command](https://www.lifehacker.com.au/2015/02/turn-a-raspberry-pi-into-an-ad-blocker-with-a-single-command/)
- [MakeUseOf: Adblock Everywhere: The Raspberry Pi-Hole Way](http://www.makeuseof.com/tag/adblock-everywhere-raspberry-pi-hole-way/)
- [Catchpoint: Ad-Blocking on Apple iOS9: Valuing the End User Experience](http://blog.catchpoint.com/2015/09/14/ad-blocking-apple/)
- [Security Now Netcast: Pi-hole](https://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s)
- [TekThing: Raspberry Pi-Hole Makes Ads Disappear!](https://youtu.be/8Co59HU2gY0?t=2m)
- [Foolish Tech Show](https://youtu.be/bYyena0I9yc?t=2m4s)
- [Block Ads on All Home Devices for $53.18](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d)
- [Pi-Hole for Ubuntu 14.04](http://www.boyter.org/2015/12/pi-hole-ubuntu-14-04/)
- [MacObserver Podcast 585](https://www.macobserver.com/tmo/podcast/macgeekgab-585)
- [The Defrag Show: Endoscope USB Camera, The Final [HoloLens] Vote, Adblock Pi and more](https://channel9.msdn.com/Shows/The-Defrag-Show/Defrag-Endoscope-USB-Camera-The-Final-HoloLens-Vote-Adblock-Pi-and-more?WT.mc_id=dlvr_twitter_ch9#time=20m39s)
- [Adafruit: Pi-hole is a black hole for internet ads](https://blog.adafruit.com/2016/03/04/pi-hole-is-a-black-hole-for-internet-ads-piday-raspberrypi-raspberry_pi/)
- [Digital Trends: 5 Fun, Easy Projects You Can Try With a $35 Raspberry Pi](https://youtu.be/QwrKlyC2kdM?t=1m42s)
- [Adafruit: Raspberry Pi Quick Look at Pi Hole ad blocking server with Tony D](https://www.youtube.com/watch?v=eg4u2j1HYlI)
- [Devacron: OrangePi Zero as an Ad-Block server with Pi-Hole](http://www.devacron.com/orangepi-zero-as-an-ad-block-server-with-pi-hole/)
- [Linux Pro: The Hole Truth](http://www.linuxpromagazine.com/Issues/2017/200/The-sysadmin-s-daily-grind-Pi-hole)
- [CryptoAUSTRALIA: How We Tried 5 Privacy Focused Raspberry Pi Projects](https://blog.cryptoaustralia.org.au/2017/10/05/5-privacy-focused-raspberry-pi-projects/)
- [CryptoAUSTRALIA: Pi-hole Workshop](https://blog.cryptoaustralia.org.au/2017/11/02/pi-hole-network-wide-ad-blocker/)
- [Know How 355: Killing ads with a Raspberry Pi-Hole!](https://www.twit.tv/shows/know-how/episodes/355)
- [Windows DNS Swapper](https://github.com/roots84/DNS-Swapper)

View File

@@ -1,23 +0,0 @@
# The below list amalgamates several lists we used previously.
# See `https://github.com/StevenBlack/hosts` for details
##StevenBlack's list
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
##MalwareDomains
https://mirror1.malwaredomains.com/files/justdomains
##Cameleon
http://sysctl.org/cameleon/hosts
##Zeustracker
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
##Disconnect.me Tracking
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
##Disconnect.me Ads
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
##Hosts-file.net
https://hosts-file.net/ad_servers.txt

View File

@@ -1,13 +1,11 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2015, 2016 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# dnsmasq config for Pi-hole
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Pi-hole 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.
# Dnsmasq config for Pi-hole's FTLDNS
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY POPULATED BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
@@ -16,8 +14,8 @@
# IF YOU WISH TO CHANGE THE UPSTREAM SERVERS, CHANGE THEM IN: #
# /etc/pihole/setupVars.conf #
# #
# ANY OTHER CHANGES SHOULD BE MADE IN A SEPERATE CONFIG FILE #
# OR IN /etc/dnsmasq.conf #
# ANY OTHER CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE #
# WITHIN /etc/dnsmasq.d/yourname.conf #
###############################################################################
addn-hosts=/etc/pihole/gravity.list

File diff suppressed because it is too large Load Diff

View File

@@ -10,13 +10,15 @@
# Globals
basename=pihole
piholeDir=/etc/${basename}
whitelist=${piholeDir}/whitelist.txt
blacklist=${piholeDir}/blacklist.txt
readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
piholeDir=/etc/"${basename}"
whitelist="${piholeDir}"/whitelist.txt
blacklist="${piholeDir}"/blacklist.txt
readonly regexlist="/etc/pihole/regex.list"
reload=false
addmode=true
verbose=true
wildcard=false
domList=()
@@ -28,16 +30,19 @@ source ${colfile}
helpFunc() {
if [[ "${listMain}" == "${whitelist}" ]]; then
param="w"
type="white"
elif [[ "${listMain}" == "${wildcardlist}" ]]; then
param="wild"
type="wildcard black"
else
param="b"
type="black"
fi
if [[ "${listMain}" == "${whitelist}" ]]; then
param="w"
type="white"
elif [[ "${listMain}" == "${regexlist}" && "${wildcard}" == true ]]; then
param="-wild"
type="wildcard black"
elif [[ "${listMain}" == "${regexlist}" ]]; then
param="-regex"
type="regex black"
else
param="b"
type="black"
fi
echo "Usage: pihole -${param} [options] <domain> <domain2 ...>
Example: 'pihole -${param} site.com', or 'pihole -${param} site1.com site2.com'
@@ -55,207 +60,216 @@ Options:
}
EscapeRegexp() {
# This way we may safely insert an arbitrary
# string in our regular expressions
# Also remove leading "." if present
echo $* | sed 's/^\.*//' | sed "s/[]\.|$(){}?+*^]/\\\\&/g" | sed "s/\\//\\\\\//g"
# This way we may safely insert an arbitrary
# string in our regular expressions
# This sed is intentionally executed in three steps to ease maintainability
# The first sed removes any amount of leading dots
echo $* | sed 's/^\.*//' | sed "s/[]\.|$(){}?+*^]/\\\\&/g" | sed "s/\\//\\\\\//g"
}
HandleOther() {
# Convert to lowercase
domain="${1,,}"
# Convert to lowercase
domain="${1,,}"
# Check validity of domain
if [[ "${#domain}" -le 253 ]]; then
validDomain=$(grep -P "^((-|_)*[a-z\d]((-|_)*[a-z\d])*(-|_)*)(\.(-|_)*([a-z\d]((-|_)*[a-z\d])*))*$" <<< "${domain}") # Valid chars check
validDomain=$(grep -P "^[^\.]{1,63}(\.[^\.]{1,63})*$" <<< "${validDomain}") # Length of each label
fi
# Check validity of domain (don't check for regex entries)
if [[ "${#domain}" -le 253 ]]; then
if [[ "${listMain}" == "${regexlist}" && "${wildcard}" == false ]]; then
validDomain="${domain}"
else
validDomain=$(grep -P "^((-|_)*[a-z\\d]((-|_)*[a-z\\d])*(-|_)*)(\\.(-|_)*([a-z\\d]((-|_)*[a-z\\d])*))*$" <<< "${domain}") # Valid chars check
validDomain=$(grep -P "^[^\\.]{1,63}(\\.[^\\.]{1,63})*$" <<< "${validDomain}") # Length of each label
fi
fi
if [[ -n "${validDomain}" ]]; then
domList=("${domList[@]}" ${validDomain})
else
echo -e " ${CROSS} ${domain} is not a valid argument or domain name!"
fi
if [[ -n "${validDomain}" ]]; then
domList=("${domList[@]}" ${validDomain})
else
echo -e " ${CROSS} ${domain} is not a valid argument or domain name!"
fi
}
PoplistFile() {
# Check whitelist file exists, and if not, create it
if [[ ! -f ${whitelist} ]]; then
touch ${whitelist}
fi
for dom in "${domList[@]}"; do
# Logic: If addmode then add to desired list and remove from the other; if delmode then remove from desired list but do not add to the other
if ${addmode}; then
AddDomain "${dom}" "${listMain}"
RemoveDomain "${dom}" "${listAlt}"
if [[ "${listMain}" == "${whitelist}" || "${listMain}" == "${blacklist}" ]]; then
RemoveDomain "${dom}" "${wildcardlist}"
fi
else
RemoveDomain "${dom}" "${listMain}"
# Check whitelist file exists, and if not, create it
if [[ ! -f "${whitelist}" ]]; then
touch "${whitelist}"
fi
# Check blacklist file exists, and if not, create it
if [[ ! -f "${blacklist}" ]]; then
touch "${blacklist}"
fi
for dom in "${domList[@]}"; do
# Logic: If addmode then add to desired list and remove from the other; if delmode then remove from desired list but do not add to the other
if ${addmode}; then
AddDomain "${dom}" "${listMain}"
RemoveDomain "${dom}" "${listAlt}"
else
RemoveDomain "${dom}" "${listMain}"
fi
done
}
AddDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
list="$2"
domain=$(EscapeRegexp "$1")
[[ "${list}" == "${whitelist}" ]] && listname="whitelist"
[[ "${list}" == "${blacklist}" ]] && listname="blacklist"
[[ "${list}" == "${wildcardlist}" ]] && listname="wildcard blacklist"
[[ "${list}" == "${whitelist}" ]] && listname="whitelist"
[[ "${list}" == "${blacklist}" ]] && listname="blacklist"
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
[[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
[[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
bool=true
# Is the domain in the list we want to add it to?
grep -Ex -q "${domain}" "${list}" > /dev/null 2>&1 || bool=false
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
[[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
[[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
bool=true
# Is the domain in the list we want to add it to?
grep -Ex -q "${domain}" "${list}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == false ]]; then
# Domain not found in the whitelist file, add it!
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} Adding $1 to $listname..."
fi
reload=true
# Add it to the list we want to add it to
echo "$1" >> "${list}"
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} already exists in ${listname}, no need to add!"
fi
if [[ "${bool}" == false ]]; then
# Domain not found in the whitelist file, add it!
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} Adding ${1} to ${listname}..."
fi
reload=true
# Add it to the list we want to add it to
echo "$1" >> "${list}"
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} already exists in ${listname}, no need to add!"
fi
fi
elif [[ "${list}" == "${regexlist}" ]]; then
[[ -z "${type}" ]] && type="--wildcard-only"
bool=true
domain="${1}"
[[ "${wildcard}" == true ]] && domain="(^|\\.)${domain//\./\\.}$"
# Is the domain in the list?
# Search only for exactly matching lines
grep -Fx "${domain}" "${regexlist}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == false ]]; then
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} Adding ${domain} to regex list..."
fi
reload="restart"
echo "$domain" >> "${regexlist}"
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${domain} already exists in regex list, no need to add!"
fi
fi
fi
elif [[ "${list}" == "${wildcardlist}" ]]; then
source "${piholeDir}/setupVars.conf"
# Remove the /* from the end of the IP addresses
IPV4_ADDRESS=${IPV4_ADDRESS%/*}
IPV6_ADDRESS=${IPV6_ADDRESS%/*}
[[ -z "${type}" ]] && type="--wildcard-only"
bool=true
# Is the domain in the list?
grep -e "address=\/${domain}\/" "${wildcardlist}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == false ]]; then
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} Adding $1 to wildcard blacklist..."
fi
reload="restart"
echo "address=/$1/${IPV4_ADDRESS}" >> "${wildcardlist}"
if [[ "${#IPV6_ADDRESS}" > 0 ]]; then
echo "address=/$1/${IPV6_ADDRESS}" >> "${wildcardlist}"
fi
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} already exists in wildcard blacklist, no need to add!"
fi
fi
fi
}
RemoveDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
list="$2"
domain=$(EscapeRegexp "$1")
[[ "${list}" == "${whitelist}" ]] && listname="whitelist"
[[ "${list}" == "${blacklist}" ]] && listname="blacklist"
[[ "${list}" == "${wildcardlist}" ]] && listname="wildcard blacklist"
[[ "${list}" == "${whitelist}" ]] && listname="whitelist"
[[ "${list}" == "${blacklist}" ]] && listname="blacklist"
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
bool=true
[[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
[[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
# 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 -e " ${INFO} Removing $1 from $listname..."
# /I flag: search case-insensitive
sed -i "/${domain}/Id" "${list}"
reload=true
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
fi
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
bool=true
[[ "${list}" == "${whitelist}" && -z "${type}" ]] && type="--whitelist-only"
[[ "${list}" == "${blacklist}" && -z "${type}" ]] && type="--blacklist-only"
# 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 -e " ${INFO} Removing $1 from ${listname}..."
# /I flag: search case-insensitive
sed -i "/${domain}/Id" "${list}"
reload=true
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
fi
fi
elif [[ "${list}" == "${regexlist}" ]]; then
[[ -z "${type}" ]] && type="--wildcard-only"
domain="${1}"
[[ "${wildcard}" == true ]] && domain="(^|\\.)${domain//\./\\.}$"
bool=true
# Is it in the list?
grep -Fx "${domain}" "${regexlist}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == true ]]; then
# Remove it from the other one
echo -e " ${INFO} Removing $domain from regex list..."
local lineNumber
lineNumber=$(grep -Fnx "$domain" "${list}" | cut -f1 -d:)
sed -i "${lineNumber}d" "${list}"
reload=true
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${domain} does not exist in regex list, no need to remove!"
fi
fi
fi
elif [[ "${list}" == "${wildcardlist}" ]]; then
[[ -z "${type}" ]] && type="--wildcard-only"
bool=true
# Is it in the list?
grep -e "address=\/${domain}\/" "${wildcardlist}" > /dev/null 2>&1 || bool=false
if [[ "${bool}" == true ]]; then
# Remove it from the other one
echo -e " ${INFO} Removing $1 from $listname..."
# /I flag: search case-insensitive
sed -i "/address=\/${domain}/Id" "${list}"
reload=true
else
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
fi
fi
fi
}
# Update Gravity
Reload() {
echo ""
pihole -g --skip-download "${type:-}"
echo ""
pihole -g --skip-download "${type:-}"
}
Displaylist() {
if [[ -f ${listMain} ]]; then
if [[ "${listMain}" == "${whitelist}" ]]; then
string="gravity resistant domains"
if [[ -f ${listMain} ]]; then
if [[ "${listMain}" == "${whitelist}" ]]; then
string="gravity resistant domains"
else
string="domains caught in the sinkhole"
fi
verbose=false
echo -e "Displaying $string:\n"
count=1
while IFS= read -r RD || [ -n "${RD}" ]; do
echo " ${count}: ${RD}"
count=$((count+1))
done < "${listMain}"
else
string="domains caught in the sinkhole"
echo -e " ${COL_LIGHT_RED}${listMain} does not exist!${COL_NC}"
fi
verbose=false
echo -e "Displaying $string:\n"
count=1
while IFS= read -r RD; do
echo " ${count}: ${RD}"
count=$((count+1))
done < "${listMain}"
else
echo -e " ${COL_LIGHT_RED}${listMain} does not exist!${COL_NC}"
fi
exit 0;
exit 0;
}
NukeList() {
if [[ -f "${listMain}" ]]; then
# Back up original list
cp "${listMain}" "${listMain}.bck~"
# Empty out file
echo "" > "${listMain}"
fi
if [[ -f "${listMain}" ]]; then
# Back up original list
cp "${listMain}" "${listMain}.bck~"
# Empty out file
echo "" > "${listMain}"
fi
}
for var in "$@"; do
case "${var}" in
"-w" | "whitelist" ) listMain="${whitelist}"; listAlt="${blacklist}";;
"-b" | "blacklist" ) listMain="${blacklist}"; listAlt="${whitelist}";;
"-wild" | "wildcard" ) listMain="${wildcardlist}";;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) Displaylist;;
"--nuke" ) NukeList;;
* ) HandleOther "${var}";;
esac
case "${var}" in
"-w" | "whitelist" ) listMain="${whitelist}"; listAlt="${blacklist}";;
"-b" | "blacklist" ) listMain="${blacklist}"; listAlt="${whitelist}";;
"--wild" | "wildcard" ) listMain="${regexlist}"; wildcard=true;;
"--regex" | "regex" ) listMain="${regexlist}";;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) Displaylist;;
"--nuke" ) NukeList;;
* ) HandleOther "${var}";;
esac
done
shift
if [[ $# = 0 ]]; then
helpFunc
helpFunc
fi
PoplistFile
if [[ "${reload}" != false ]]; then
# Ensure that "restart" is used for Wildcard updates
Reload "${reload}"
# Ensure that "restart" is used for Wildcard updates
Reload "${reload}"
fi

View File

@@ -17,343 +17,182 @@ source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"
# piholeGitURL set in basic-install.sh
# is_repo() sourced from basic-install.sh
# setupVars set in basic-install.sh
# check_download_exists sourced from basic-install.sh
# fully_fetch_repo sourced from basic-install.sh
# get_available_branches sourced from basic-install.sh
# fetch_checkout_pull_branch sourced from basic-install.sh
# checkout_pull_branch sourced from basic-install.sh
source "${setupVars}"
update="false"
coltable="/opt/pihole/COL_TABLE"
source ${coltable}
check_download_exists() {
status=$(curl --head --silent "https://ftl.pi-hole.net/${1}" | head -n 1)
if grep -q "404" <<< "$status"; then
return 1
else
return 0
fi
}
FTLinstall() {
# Download and install FTL binary
local binary
binary="${1}"
local path
path="${2}"
local str
str="Installing FTL"
echo -ne " ${INFO} ${str}..."
if curl -sSL --fail "https://ftl.pi-hole.net/${path}" -o "/tmp/${binary}"; then
# Get sha1 of the binary we just downloaded for verification.
curl -sSL --fail "https://ftl.pi-hole.net/${path}.sha1" -o "/tmp/${binary}.sha1"
# Check if we just downloaded text, or a binary file.
cd /tmp || return 1
if sha1sum --status --quiet -c "${binary}".sha1; then
echo -n "transferred... "
stop_service pihole-FTL &> /dev/null
install -T -m 0755 "/tmp/${binary}" "/usr/bin/pihole-FTL"
rm "/tmp/${binary}" "/tmp/${binary}.sha1"
start_service pihole-FTL &> /dev/null
echo -e "${OVER} ${TICK} ${str}"
return 0
else
echo -e "${OVER} ${CROSS} ${str}"
echo -e " ${COL_LIGHT_RED}Error: Download of binary from ftl.pi-hole.net failed${COL_NC}"
return 1
fi
else
echo -e "${OVER} ${CROSS} ${str}"
echo -e " ${COL_LIGHT_RED}Error: URL not found${COL_NC}"
fi
}
get_binary_name() {
local machine
machine=$(uname -m)
local str
str="Detecting architecture"
echo -ne " ${INFO} ${str}..."
if [[ "${machine}" == "arm"* || "${machine}" == *"aarch"* ]]; then
# ARM
local rev
rev=$(uname -m | sed "s/[^0-9]//g;")
local lib
lib=$(ldd /bin/ls | grep -E '^\s*/lib' | awk '{ print $1 }')
if [[ "${lib}" == "/lib/ld-linux-aarch64.so.1" ]]; then
echo -e "${OVER} ${TICK} Detected ARM-aarch64 architecture"
binary="pihole-FTL-aarch64-linux-gnu"
elif [[ "${lib}" == "/lib/ld-linux-armhf.so.3" ]]; then
if [[ "$rev" -gt "6" ]]; then
echo -e "${OVER} ${TICK} Detected ARM-hf architecture (armv7+)"
binary="pihole-FTL-arm-linux-gnueabihf"
else
echo -e "${OVER} ${TICK} Detected ARM-hf architecture (armv6 or lower) Using ARM binary"
binary="pihole-FTL-arm-linux-gnueabi"
fi
else
echo -e "${OVER} ${TICK} Detected ARM architecture"
binary="pihole-FTL-arm-linux-gnueabi"
fi
elif [[ "${machine}" == "ppc" ]]; then
# PowerPC
echo -e "${OVER} ${TICK} Detected PowerPC architecture"
binary="pihole-FTL-powerpc-linux-gnu"
elif [[ "${machine}" == "x86_64" ]]; then
# 64bit
echo -e "${OVER} ${TICK} Detected x86_64 architecture"
binary="pihole-FTL-linux-x86_64"
else
# Something else - we try to use 32bit executable and warn the user
if [[ ! "${machine}" == "i686" ]]; then
echo -e "${OVER} ${CROSS} ${str}...
${COL_LIGHT_RED}Not able to detect architecture (unknown: ${machine}), trying 32bit executable
Contact support if you experience issues (e.g: FTL not running)${COL_NC}"
else
echo -e "${OVER} ${TICK} Detected 32bit (i686) architecture"
fi
binary="pihole-FTL-linux-x86_32"
fi
}
fully_fetch_repo() {
# Add upstream branches to shallow clone
local directory="${1}"
cd "${directory}" || return 1
if is_repo "${directory}"; then
git remote set-branches origin '*' || return 1
git fetch --quiet || return 1
else
return 1
fi
return 0
}
get_available_branches() {
# Return available branches
local directory
directory="${1}"
local output
cd "${directory}" || return 1
# Get reachable remote branches, but store STDERR as STDOUT variable
output=$( { git remote show origin | grep 'tracked' | sed 's/tracked//;s/ //g'; } 2>&1 )
echo "$output"
return
}
fetch_checkout_pull_branch() {
# Check out specified branch
local directory
directory="${1}"
local branch
branch="${2}"
# Set the reference for the requested branch, fetch, check it put and pull it
cd "${directory}" || return 1
git remote set-branches origin "${branch}" || return 1
git stash --all --quiet &> /dev/null || true
git clean --quiet --force -d || true
git fetch --quiet || return 1
checkout_pull_branch "${directory}" "${branch}" || return 1
}
checkout_pull_branch() {
# Check out specified branch
local directory
directory="${1}"
local branch
branch="${2}"
local oldbranch
cd "${directory}" || return 1
oldbranch="$(git symbolic-ref HEAD)"
str="Switching to branch: '${branch}' from '${oldbranch}'"
echo -ne " ${INFO} $str"
git checkout "${branch}" --quiet || return 1
echo -e "${OVER} ${TICK} $str"
if [[ "$(git diff "${oldbranch}" | grep -c "^")" -gt "0" ]]; then
update="true"
fi
git_pull=$(git pull || return 1)
if [[ "$git_pull" == *"up-to-date"* ]]; then
echo -e " ${INFO} ${git_pull}"
else
echo -e "$git_pull\\n"
fi
return 0
}
warning1() {
echo " Please note that changing branches severely alters your Pi-hole subsystems"
echo " Features that work on the master branch, may not on a development branch"
echo -e " ${COL_LIGHT_RED}This feature is NOT supported unless a Pi-hole developer explicitly asks!${COL_NC}"
read -r -p " Have you read and understood this? [y/N] " response
case "${response}" in
[yY][eE][sS]|[yY])
echo ""
return 0
;;
*)
echo -e "\\n ${INFO} Branch change has been cancelled"
return 1
;;
esac
echo " Please note that changing branches severely alters your Pi-hole subsystems"
echo " Features that work on the master branch, may not on a development branch"
echo -e " ${COL_LIGHT_RED}This feature is NOT supported unless a Pi-hole developer explicitly asks!${COL_NC}"
read -r -p " Have you read and understood this? [y/N] " response
case "${response}" in
[yY][eE][sS]|[yY])
echo ""
return 0
;;
*)
echo -e "\\n ${INFO} Branch change has been cancelled"
return 1
;;
esac
}
checkout() {
local corebranches
local webbranches
local corebranches
local webbranches
# Avoid globbing
set -f
# Check if FTL is installed - do this early on as FTL is a hard dependency for Pi-hole
local funcOutput
funcOutput=$(get_binary_name) #Store output of get_binary_name here
local binary
binary="pihole-FTL${funcOutput##*pihole-FTL}" #binary name will be the last line of the output of get_binary_name (it always begins with pihole-FTL)
# This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e " ${COL_LIGHT_RED}Error: Core Pi-hole repo is missing from system!
Please re-run install script from https://github.com/pi-hole/pi-hole${COL_NC}"
exit 1;
fi
if [[ "${INSTALL_WEB}" == "true" ]]; then
if ! is_repo "${webInterfaceDir}" ; then
echo -e " ${COL_LIGHT_RED}Error: Web Admin repo is missing from system!
Please re-run install script from https://github.com/pi-hole/pi-hole${COL_NC}"
exit 1;
# Avoid globbing
set -f
# This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e " ${COL_LIGHT_RED}Error: Core Pi-hole repo is missing from system!"
echo -e " Please re-run install script from https://github.com/pi-hole/pi-hole${COL_NC}"
exit 1;
fi
fi
if [[ -z "${1}" ]]; then
echo -e " ${COL_LIGHT_RED}Invalid option${COL_NC}
Try 'pihole checkout --help' for more information."
exit 1
fi
if ! warning1 ; then
exit 1
fi
if [[ "${1}" == "dev" ]] ; then
# Shortcut to check out development branches
echo -e " ${INFO} Shortcut \"dev\" detected - checking out development / devel branches..."
echo ""
echo -e " ${INFO} Pi-hole Core"
fetch_checkout_pull_branch "${PI_HOLE_FILES_DIR}" "development" || { echo " ${CROSS} Unable to pull Core developement branch"; exit 1; }
if [[ "${INSTALL_WEB}" == "true" ]]; then
echo ""
echo -e " ${INFO} Web interface"
fetch_checkout_pull_branch "${webInterfaceDir}" "devel" || { echo " ${CROSS} Unable to pull Web development branch"; exit 1; }
fi
#echo -e " ${TICK} Pi-hole Core"
get_binary_name
local path
path="development/${binary}"
FTLinstall "${binary}" "${path}"
elif [[ "${1}" == "master" ]] ; then
# Shortcut to check out master branches
echo -e " ${INFO} Shortcut \"master\" detected - checking out master branches..."
echo -e " ${INFO} Pi-hole core"
fetch_checkout_pull_branch "${PI_HOLE_FILES_DIR}" "master" || { echo " ${CROSS} Unable to pull Core master branch"; exit 1; }
if [[ ${INSTALL_WEB} == "true" ]]; then
echo -e " ${INFO} Web interface"
fetch_checkout_pull_branch "${webInterfaceDir}" "master" || { echo " ${CROSS} Unable to pull Web master branch"; exit 1; }
fi
#echo -e " ${TICK} Web Interface"
get_binary_name
local path
path="master/${binary}"
FTLinstall "${binary}" "${path}"
elif [[ "${1}" == "core" ]] ; then
str="Fetching branches from ${piholeGitUrl}"
echo -ne " ${INFO} $str"
if ! fully_fetch_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e "${OVER} ${CROSS} $str"
exit 1
fi
corebranches=($(get_available_branches "${PI_HOLE_FILES_DIR}"))
if [[ "${corebranches[*]}" == *"master"* ]]; then
echo -e "${OVER} ${TICK} $str
${INFO} ${#corebranches[@]} branches available for Pi-hole Core"
else
# Print STDERR output from get_available_branches
echo -e "${OVER} ${CROSS} $str\\n\\n${corebranches[*]}"
exit 1
if [[ "${INSTALL_WEB_INTERFACE}" == "true" ]]; then
if ! is_repo "${webInterfaceDir}" ; then
echo -e " ${COL_LIGHT_RED}Error: Web Admin repo is missing from system!"
echo -e " Please re-run install script from https://github.com/pi-hole/pi-hole${COL_NC}"
exit 1;
fi
fi
echo ""
# Have the user choose the branch they want
if ! (for e in "${corebranches[@]}"; do [[ "$e" == "${2}" ]] && exit 0; done); then
echo -e " ${INFO} Requested branch \"${2}\" is not available"
echo -e " ${INFO} Available branches for Core are:"
for e in "${corebranches[@]}"; do echo " - $e"; done
exit 1
fi
checkout_pull_branch "${PI_HOLE_FILES_DIR}" "${2}"
elif [[ "${1}" == "web" ]] && [[ "${INSTALL_WEB}" == "true" ]] ; then
str="Fetching branches from ${webInterfaceGitUrl}"
echo -ne " ${INFO} $str"
if ! fully_fetch_repo "${webInterfaceDir}" ; then
echo -e "${OVER} ${CROSS} $str"
exit 1
fi
webbranches=($(get_available_branches "${webInterfaceDir}"))
if [[ "${webbranches[*]}" == *"master"* ]]; then
echo -e "${OVER} ${TICK} $str
${INFO} ${#webbranches[@]} branches available for Web Admin"
else
# Print STDERR output from get_available_branches
echo -e "${OVER} ${CROSS} $str\\n\\n${webbranches[*]}"
exit 1
fi
echo ""
# Have the user choose the branch they want
if ! (for e in "${webbranches[@]}"; do [[ "$e" == "${2}" ]] && exit 0; done); then
echo -e " ${INFO} Requested branch \"${2}\" is not available"
echo -e " ${INFO} Available branches for Web Admin are:"
for e in "${webbranches[@]}"; do echo " - $e"; done
exit 1
fi
checkout_pull_branch "${webInterfaceDir}" "${2}"
elif [[ "${1}" == "ftl" ]] ; then
get_binary_name
local path
path="${2}/${binary}"
if check_download_exists "$path"; then
echo " ${TICK} Branch ${2} exists"
FTLinstall "${binary}" "${path}"
else
echo " ${CROSS} Requested branch \"${2}\" is not available"
ftlbranches=( $(git ls-remote https://github.com/pi-hole/ftl | grep 'heads' | sed 's/refs\/heads\///;s/ //g' | awk '{print $2}') )
echo -e " ${INFO} Available branches for FTL are:"
for e in "${ftlbranches[@]}"; do echo " - $e"; done
if [[ -z "${1}" ]]; then
echo -e " ${COL_LIGHT_RED}Invalid option${COL_NC}"
echo -e " Try 'pihole checkout --help' for more information."
exit 1
fi
else
echo -e " ${INFO} Requested option \"${1}\" is not available"
exit 1
fi
# Force updating everything
if [[ ( ! "${1}" == "web" && ! "${1}" == "ftl" ) && "${update}" == "true" ]]; then
echo -e " ${INFO} Running installer to upgrade your installation"
if "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh" --unattended; then
exit 0
else
echo -e " ${COL_LIGHT_RED} Error: Unable to complete update, please contact support${COL_NC}"
exit 1
if ! warning1 ; then
exit 1
fi
if [[ "${1}" == "dev" ]] ; then
# Shortcut to check out development branches
echo -e " ${INFO} Shortcut \"dev\" detected - checking out development / devel branches..."
echo ""
echo -e " ${INFO} Pi-hole Core"
fetch_checkout_pull_branch "${PI_HOLE_FILES_DIR}" "development" || { echo " ${CROSS} Unable to pull Core developement branch"; exit 1; }
if [[ "${INSTALL_WEB_INTERFACE}" == "true" ]]; then
echo ""
echo -e " ${INFO} Web interface"
fetch_checkout_pull_branch "${webInterfaceDir}" "devel" || { echo " ${CROSS} Unable to pull Web development branch"; exit 1; }
fi
#echo -e " ${TICK} Pi-hole Core"
local path
path="development/${binary}"
echo "development" > /etc/pihole/ftlbranch
elif [[ "${1}" == "master" ]] ; then
# Shortcut to check out master branches
echo -e " ${INFO} Shortcut \"master\" detected - checking out master branches..."
echo -e " ${INFO} Pi-hole core"
fetch_checkout_pull_branch "${PI_HOLE_FILES_DIR}" "master" || { echo " ${CROSS} Unable to pull Core master branch"; exit 1; }
if [[ ${INSTALL_WEB_INTERFACE} == "true" ]]; then
echo -e " ${INFO} Web interface"
fetch_checkout_pull_branch "${webInterfaceDir}" "master" || { echo " ${CROSS} Unable to pull Web master branch"; exit 1; }
fi
#echo -e " ${TICK} Web Interface"
local path
path="master/${binary}"
echo "master" > /etc/pihole/ftlbranch
elif [[ "${1}" == "core" ]] ; then
str="Fetching branches from ${piholeGitUrl}"
echo -ne " ${INFO} $str"
if ! fully_fetch_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e "${OVER} ${CROSS} $str"
exit 1
fi
corebranches=($(get_available_branches "${PI_HOLE_FILES_DIR}"))
if [[ "${corebranches[*]}" == *"master"* ]]; then
echo -e "${OVER} ${TICK} $str"
echo -e " ${INFO} ${#corebranches[@]} branches available for Pi-hole Core"
else
# Print STDERR output from get_available_branches
echo -e "${OVER} ${CROSS} $str\\n\\n${corebranches[*]}"
exit 1
fi
echo ""
# Have the user choose the branch they want
if ! (for e in "${corebranches[@]}"; do [[ "$e" == "${2}" ]] && exit 0; done); then
echo -e " ${INFO} Requested branch \"${2}\" is not available"
echo -e " ${INFO} Available branches for Core are:"
for e in "${corebranches[@]}"; do echo " - $e"; done
exit 1
fi
checkout_pull_branch "${PI_HOLE_FILES_DIR}" "${2}"
elif [[ "${1}" == "web" ]] && [[ "${INSTALL_WEB_INTERFACE}" == "true" ]] ; then
str="Fetching branches from ${webInterfaceGitUrl}"
echo -ne " ${INFO} $str"
if ! fully_fetch_repo "${webInterfaceDir}" ; then
echo -e "${OVER} ${CROSS} $str"
exit 1
fi
webbranches=($(get_available_branches "${webInterfaceDir}"))
if [[ "${webbranches[*]}" == *"master"* ]]; then
echo -e "${OVER} ${TICK} $str"
echo -e " ${INFO} ${#webbranches[@]} branches available for Web Admin"
else
# Print STDERR output from get_available_branches
echo -e "${OVER} ${CROSS} $str\\n\\n${webbranches[*]}"
exit 1
fi
echo ""
# Have the user choose the branch they want
if ! (for e in "${webbranches[@]}"; do [[ "$e" == "${2}" ]] && exit 0; done); then
echo -e " ${INFO} Requested branch \"${2}\" is not available"
echo -e " ${INFO} Available branches for Web Admin are:"
for e in "${webbranches[@]}"; do echo " - $e"; done
exit 1
fi
checkout_pull_branch "${webInterfaceDir}" "${2}"
elif [[ "${1}" == "ftl" ]] ; then
local path
path="${2}/${binary}"
if check_download_exists "$path"; then
echo " ${TICK} Branch ${2} exists"
echo "${2}" > /etc/pihole/ftlbranch
FTLinstall "${binary}"
restart_service pihole-FTL
enable_service pihole-FTL
else
echo " ${CROSS} Requested branch \"${2}\" is not available"
ftlbranches=( $(git ls-remote https://github.com/pi-hole/ftl | grep 'heads' | sed 's/refs\/heads\///;s/ //g' | awk '{print $2}') )
echo -e " ${INFO} Available branches for FTL are:"
for e in "${ftlbranches[@]}"; do echo " - $e"; done
exit 1
fi
else
echo -e " ${INFO} Requested option \"${1}\" is not available"
exit 1
fi
# Force updating everything
if [[ ! "${1}" == "web" && ! "${1}" == "ftl" ]]; then
echo -e " ${INFO} Running installer to upgrade your installation"
if "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh" --unattended; then
exit 0
else
echo -e " ${COL_LIGHT_RED} Error: Unable to complete update, please contact support${COL_NC}"
exit 1
fi
fi
fi
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,38 +11,58 @@
colfile="/opt/pihole/COL_TABLE"
source ${colfile}
if [[ "$@" != *"quiet"* ]]; then
echo -ne " ${INFO} Flushing /var/log/pihole.log ..."
# Determine database location
# Obtain DBFILE=... setting from pihole-FTL.db
# Constructed to return nothing when
# a) the setting is not present in the config file, or
# b) the setting is commented out (e.g. "#DBFILE=...")
FTLconf="/etc/pihole/pihole-FTL.conf"
if [ -e "$FTLconf" ]; then
DBFILE="$(sed -n -e 's/^\s*DBFILE\s*=\s*//p' ${FTLconf})"
fi
if [[ "$@" == *"once"* ]]; then
# Nightly logrotation
if command -v /usr/sbin/logrotate >/dev/null; then
# Logrotate once
/usr/sbin/logrotate --force /etc/pihole/logrotate
else
# Copy pihole.log over to pihole.log.1
# and empty out pihole.log
# Note that moving the file is not an option, as
# dnsmasq would happily continue writing into the
# moved file (it will have the same file handler)
cp /var/log/pihole.log /var/log/pihole.log.1
echo " " > /var/log/pihole.log
fi
else
# Manual flushing
if command -v /usr/sbin/logrotate >/dev/null; then
# Logrotate twice to move all data out of sight of FTL
/usr/sbin/logrotate --force /etc/pihole/logrotate; sleep 3
/usr/sbin/logrotate --force /etc/pihole/logrotate
else
# Flush both pihole.log and pihole.log.1 (if existing)
echo " " > /var/log/pihole.log
if [ -f /var/log/pihole.log.1 ]; then
echo " " > /var/log/pihole.log.1
fi
fi
# Test for empty string. Use standard path in this case.
if [ -z "$DBFILE" ]; then
DBFILE="/etc/pihole/pihole-FTL.db"
fi
if [[ "$@" != *"quiet"* ]]; then
echo -e "${OVER} ${TICK} Flushed /var/log/pihole.log"
echo -ne " ${INFO} Flushing /var/log/pihole.log ..."
fi
if [[ "$@" == *"once"* ]]; then
# Nightly logrotation
if command -v /usr/sbin/logrotate >/dev/null; then
# Logrotate once
/usr/sbin/logrotate --force /etc/pihole/logrotate
else
# Copy pihole.log over to pihole.log.1
# and empty out pihole.log
# Note that moving the file is not an option, as
# dnsmasq would happily continue writing into the
# moved file (it will have the same file handler)
cp /var/log/pihole.log /var/log/pihole.log.1
echo " " > /var/log/pihole.log
fi
else
# Manual flushing
if command -v /usr/sbin/logrotate >/dev/null; then
# Logrotate twice to move all data out of sight of FTL
/usr/sbin/logrotate --force /etc/pihole/logrotate; sleep 3
/usr/sbin/logrotate --force /etc/pihole/logrotate
else
# Flush both pihole.log and pihole.log.1 (if existing)
echo " " > /var/log/pihole.log
if [ -f /var/log/pihole.log.1 ]; then
echo " " > /var/log/pihole.log.1
fi
fi
# Delete most recent 24 hours from FTL's database, leave even older data intact (don't wipe out all history)
deleted=$(sqlite3 "${DBFILE}" "DELETE FROM queries WHERE timestamp >= strftime('%s','now')-86400; select changes() from queries limit 1")
# Restart pihole-FTL to force reloading history
sudo pihole restartdns
fi
if [[ "$@" != *"quiet"* ]]; then
echo -e "${OVER} ${TICK} Flushed /var/log/pihole.log"
echo -e " ${TICK} Deleted ${deleted} queries from database"
fi

239
advanced/Scripts/query.sh Normal file
View File

@@ -0,0 +1,239 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090
# Pi-hole: A black hole for Internet advertisements
# (c) 2018 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Query Domain Lists
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
# Globals
piholeDir="/etc/pihole"
adListsList="$piholeDir/adlists.list"
wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
options="$*"
adlist=""
all=""
exact=""
blockpage=""
matchType="match"
colfile="/opt/pihole/COL_TABLE"
source "${colfile}"
# Print each subdomain
# e.g: foo.bar.baz.com = "foo.bar.baz.com bar.baz.com baz.com com"
processWildcards() {
IFS="." read -r -a array <<< "${1}"
for (( i=${#array[@]}-1; i>=0; i-- )); do
ar=""
for (( j=${#array[@]}-1; j>${#array[@]}-i-2; j-- )); do
if [[ $j == $((${#array[@]}-1)) ]]; then
ar="${array[$j]}"
else
ar="${array[$j]}.${ar}"
fi
done
echo "${ar}"
done
}
# Scan an array of files for matching strings
scanList(){
# Escape full stops
local domain="${1//./\\.}" lists="${2}" type="${3:-}"
# Prevent grep from printing file path
cd "$piholeDir" || exit 1
# Prevent grep -i matching slowly: http://bit.ly/2xFXtUX
export LC_CTYPE=C
# /dev/null forces filename to be printed when only one list has been generated
# shellcheck disable=SC2086
case "${type}" in
"exact" ) grep -i -E "(^|\\s)${domain}($|\\s|#)" ${lists} /dev/null 2>/dev/null;;
"wc" ) grep -i -o -m 1 "/${domain}/" ${lists} 2>/dev/null;;
* ) grep -i "${domain}" ${lists} /dev/null 2>/dev/null;;
esac
}
if [[ "${options}" == "-h" ]] || [[ "${options}" == "--help" ]]; then
echo "Usage: pihole -q [option] <domain>
Example: 'pihole -q -exact domain.com'
Query the adlists for a specified domain
Options:
-adlist Print the name of the block list URL
-exact Search the block lists for exact domain matches
-all Return all query matches within a block list
-h, --help Show this help dialog"
exit 0
fi
if [[ ! -e "$adListsList" ]]; then
echo -e "${COL_LIGHT_RED}The file $adListsList was not found${COL_NC}"
exit 1
fi
# Handle valid options
if [[ "${options}" == *"-bp"* ]]; then
exact="exact"; blockpage=true
else
[[ "${options}" == *"-adlist"* ]] && adlist=true
[[ "${options}" == *"-all"* ]] && all=true
if [[ "${options}" == *"-exact"* ]]; then
exact="exact"; matchType="exact ${matchType}"
fi
fi
# Strip valid options, leaving only the domain and invalid options
# This allows users to place the options before or after the domain
options=$(sed -E 's/ ?-(bp|adlists?|all|exact) ?//g' <<< "${options}")
# Handle remaining options
# If $options contain non ASCII characters, convert to punycode
case "${options}" in
"" ) str="No domain specified";;
*" "* ) str="Unknown query option specified";;
*[![:ascii:]]* ) domainQuery=$(idn2 "${options}");;
* ) domainQuery="${options}";;
esac
if [[ -n "${str:-}" ]]; then
echo -e "${str}${COL_NC}\\nTry 'pihole -q --help' for more information."
exit 1
fi
# Scan Whitelist and Blacklist
lists="whitelist.txt blacklist.txt"
mapfile -t results <<< "$(scanList "${domainQuery}" "${lists}" "${exact}")"
if [[ -n "${results[*]}" ]]; then
wbMatch=true
# Loop through each result in order to print unique file title once
for result in "${results[@]}"; do
fileName="${result%%.*}"
if [[ -n "${blockpage}" ]]; then
echo "π ${result}"
exit 0
elif [[ -n "${exact}" ]]; then
echo " ${matchType^} found in ${COL_BOLD}${fileName^}${COL_NC}"
else
# Only print filename title once per file
if [[ ! "${fileName}" == "${fileName_prev:-}" ]]; then
echo " ${matchType^} found in ${COL_BOLD}${fileName^}${COL_NC}"
fileName_prev="${fileName}"
fi
echo " ${result#*:}"
fi
done
fi
# Scan Wildcards
if [[ -e "${wildcardlist}" ]]; then
# Determine all subdomains, domain and TLDs
mapfile -t wildcards <<< "$(processWildcards "${domainQuery}")"
for match in "${wildcards[@]}"; do
# Search wildcard list for matches
mapfile -t results <<< "$(scanList "${match}" "${wildcardlist}" "wc")"
if [[ -n "${results[*]}" ]]; then
if [[ -z "${wcMatch:-}" ]] && [[ -z "${blockpage}" ]]; then
wcMatch=true
echo " ${matchType^} found in ${COL_BOLD}Wildcards${COL_NC}:"
fi
case "${blockpage}" in
true ) echo "π ${wildcardlist##*/}"; exit 0;;
* ) echo " *.${match}";;
esac
fi
done
fi
# Get version sorted *.domains filenames (without dir path)
lists=("$(cd "$piholeDir" || exit 0; printf "%s\\n" -- *.domains | sort -V)")
# Query blocklists for occurences of domain
mapfile -t results <<< "$(scanList "${domainQuery}" "${lists[*]}" "${exact}")"
# Remove unwanted content from $results
# Each line in $results is formatted as such: [fileName]:[line]
# 1. Delete lines starting with #
# 2. Remove comments after domain
# 3. Remove hosts format IP address
# 4. Remove any lines that no longer contain the queried domain name (in case the matched domain name was in a comment)
esc_domain="${domainQuery//./\\.}"
mapfile -t results <<< "$(IFS=$'\n'; sed \
-e "/:#/d" \
-e "s/[ \\t]#.*//g" \
-e "s/:.*[ \\t]/:/g" \
-e "/${esc_domain}/!d" \
<<< "${results[*]}")"
# Handle notices
if [[ -z "${wbMatch:-}" ]] && [[ -z "${wcMatch:-}" ]] && [[ -z "${results[*]}" ]]; then
echo -e " ${INFO} No ${exact/t/t }results found for ${COL_BOLD}${domainQuery}${COL_NC} within the block lists"
exit 0
elif [[ -z "${results[*]}" ]]; then
# Result found in WL/BL/Wildcards
exit 0
elif [[ -z "${all}" ]] && [[ "${#results[*]}" -ge 100 ]]; then
echo -e " ${INFO} Over 100 ${exact/t/t }results found for ${COL_BOLD}${domainQuery}${COL_NC}
This can be overridden using the -all option"
exit 0
fi
# Get adlist file content as array
if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then
for adlistUrl in $(< "${adListsList}"); do
if [[ "${adlistUrl:0:4}" =~ (http|www.) ]]; then
adlists+=("${adlistUrl}")
fi
done
fi
# Print "Exact matches for" title
if [[ -n "${exact}" ]] && [[ -z "${blockpage}" ]]; then
plural=""; [[ "${#results[*]}" -gt 1 ]] && plural="es"
echo " ${matchType^}${plural} for ${COL_BOLD}${domainQuery}${COL_NC} found in:"
fi
for result in "${results[@]}"; do
fileName="${result/:*/}"
# Determine *.domains URL using filename's number
if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then
fileNum="${fileName/list./}"; fileNum="${fileNum%%.*}"
fileName="${adlists[$fileNum]}"
# Discrepency occurs when adlists has been modified, but Gravity has not been run
if [[ -z "${fileName}" ]]; then
fileName="${COL_LIGHT_RED}(no associated adlists URL found)${COL_NC}"
fi
fi
if [[ -n "${blockpage}" ]]; then
echo "${fileNum} ${fileName}"
elif [[ -n "${exact}" ]]; then
echo " ${fileName}"
else
if [[ ! "${fileName}" == "${fileName_prev:-}" ]]; then
count=""
echo " ${matchType^} found in ${COL_BOLD}${fileName}${COL_NC}:"
fileName_prev="${fileName}"
fi
: $((count++))
# Print matching domain if $max_count has not been reached
[[ -z "${all}" ]] && max_count="50"
if [[ -z "${all}" ]] && [[ "${count}" -ge "${max_count}" ]]; then
[[ "${count}" -gt "${max_count}" ]] && continue
echo " ${COL_GRAY}Over ${count} results found, skipping rest of file${COL_NC}"
else
echo " ${result#*:}"
fi
fi
done
exit 0

View File

@@ -15,28 +15,28 @@
# Borrowed from adafruit-pitft-helper < borrowed from raspi-config
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L324-L334
getInitSys() {
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
SYSTEMD=1
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
SYSTEMD=0
else
echo "Unrecognised init system"
return 1
fi
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
SYSTEMD=1
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
SYSTEMD=0
else
echo "Unrecognised init system"
return 1
fi
}
# Borrowed from adafruit-pitft-helper:
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L274-L285
autoLoginPiToConsole() {
if [ -e /etc/init.d/lightdm ]; then
if [ ${SYSTEMD} -eq 1 ]; then
systemctl set-default multi-user.target
ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
else
update-rc.d lightdm disable 2
sed /etc/inittab -i -e "s/1:2345:respawn:\/sbin\/getty --noclear 38400 tty1/1:2345:respawn:\/bin\/login -f pi tty1 <\/dev\/tty1 >\/dev\/tty1 2>&1/"
fi
fi
if [ -e /etc/init.d/lightdm ]; then
if [ ${SYSTEMD} -eq 1 ]; then
systemctl set-default multi-user.target
ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
else
update-rc.d lightdm disable 2
sed /etc/inittab -i -e "s/1:2345:respawn:\/sbin\/getty --noclear 38400 tty1/1:2345:respawn:\/bin\/login -f pi tty1 <\/dev\/tty1 >\/dev\/tty1 2>&1/"
fi
fi
}
######### SCRIPT ###########

View File

@@ -19,6 +19,9 @@ readonly PI_HOLE_FILES_DIR="/etc/.pihole"
# shellcheck disable=SC2034
PH_TEST=true
# when --check-only is passed to this script, it will not perform the actual update
CHECK_ONLY=false
# shellcheck disable=SC1090
source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"
# shellcheck disable=SC1091
@@ -28,201 +31,187 @@ source "/opt/pihole/COL_TABLE"
# make_repo() sourced from basic-install.sh
# update_repo() source from basic-install.sh
# getGitFiles() sourced from basic-install.sh
# FTLcheckUpdate() sourced from basic-install.sh
GitCheckUpdateAvail() {
local directory="${1}"
curdir=$PWD
cd "${directory}" || return
local directory
directory="${1}"
curdir=$PWD
cd "${directory}" || return
# Fetch latest changes in this repo
git fetch --quiet origin
# Fetch latest changes in this repo
git fetch --quiet origin
# @ alone is a shortcut for HEAD. Older versions of git
# need @{0}
LOCAL="$(git rev-parse "@{0}")"
# @ alone is a shortcut for HEAD. Older versions of git
# need @{0}
LOCAL="$(git rev-parse "@{0}")"
# The suffix @{upstream} to a branchname
# (short form <branchname>@{u}) refers
# to the branch that the branch specified
# by branchname is set to build on top of#
# (configured with branch.<name>.remote and
# branch.<name>.merge). A missing branchname
# defaults to the current one.
REMOTE="$(git rev-parse "@{upstream}")"
# The suffix @{upstream} to a branchname
# (short form <branchname>@{u}) refers
# to the branch that the branch specified
# by branchname is set to build on top of#
# (configured with branch.<name>.remote and
# branch.<name>.merge). A missing branchname
# defaults to the current one.
REMOTE="$(git rev-parse "@{upstream}")"
if [[ "${#LOCAL}" == 0 ]]; then
echo -e "\\n ${COL_LIGHT_RED}Error: Local revision could not be obtained, please contact Pi-hole Support
Additional debugging output:${COL_NC}"
git status
exit
fi
if [[ "${#REMOTE}" == 0 ]]; then
echo -e "\\n ${COL_LIGHT_RED}Error: Remote revision could not be obtained, please contact Pi-hole Support
Additional debugging output:${COL_NC}"
git status
exit
fi
if [[ "${#LOCAL}" == 0 ]]; then
echo -e "\\n ${COL_LIGHT_RED}Error: Local revision could not be obtained, please contact Pi-hole Support"
echo -e " Additional debugging output:${COL_NC}"
git status
exit
fi
if [[ "${#REMOTE}" == 0 ]]; then
echo -e "\\n ${COL_LIGHT_RED}Error: Remote revision could not be obtained, please contact Pi-hole Support"
echo -e " Additional debugging output:${COL_NC}"
git status
exit
fi
# Change back to original directory
cd "${curdir}" || exit
# Change back to original directory
cd "${curdir}" || exit
if [[ "${LOCAL}" != "${REMOTE}" ]]; then
# Local branch is behind remote branch -> Update
return 0
else
# Local branch is up-to-date or in a situation
# where this updater cannot be used (like on a
# branch that exists only locally)
return 1
fi
}
FTLcheckUpdate() {
local FTLversion
FTLversion=$(/usr/bin/pihole-FTL tag)
local FTLlatesttag
FTLlatesttag=$(curl -sI https://github.com/pi-hole/FTL/releases/latest | grep 'Location' | awk -F '/' '{print $NF}' | tr -d '\r\n')
if [[ "${FTLversion}" != "${FTLlatesttag}" ]]; then
return 0
else
return 1
fi
if [[ "${LOCAL}" != "${REMOTE}" ]]; then
# Local branch is behind remote branch -> Update
return 0
else
# Local branch is up-to-date or in a situation
# where this updater cannot be used (like on a
# branch that exists only locally)
return 1
fi
}
main() {
local pihole_version_current
local web_version_current
local basicError="\\n ${COL_LIGHT_RED}Unable to complete update, please contact Pi-hole Support${COL_NC}"
# shellcheck disable=1090,2154
source "${setupVars}"
local basicError="\\n ${COL_LIGHT_RED}Unable to complete update, please contact Pi-hole Support${COL_NC}"
local core_update
local web_update
local FTL_update
# This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e "\\n ${COL_LIGHT_RED}Error: Core Pi-hole repo is missing from system!
Please re-run install script from https://pi-hole.net${COL_NC}"
exit 1;
fi
echo -e " ${INFO} Checking for updates..."
if GitCheckUpdateAvail "${PI_HOLE_FILES_DIR}" ; then
core_update=true
echo -e " ${INFO} Pi-hole Core:\\t${COL_YELLOW}update available${COL_NC}"
else
core_update=false
echo -e " ${INFO} Pi-hole Core:\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
fi
if FTLcheckUpdate ; then
FTL_update=true
echo -e " ${INFO} FTL:\\t\\t${COL_YELLOW}update available${COL_NC}"
else
web_update=false
FTL_update=false
echo -e " ${INFO} FTL:\\t\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
fi
# Logic: Don't update FTL when there is a core update available
# since the core update will run the installer which will itself
# re-install (i.e. update) FTL
if ${FTL_update} && ! ${core_update}; then
echo ""
echo -e " ${INFO} FTL out of date"
FTLdetect
echo ""
fi
# shellcheck disable=1090,2154
source "${setupVars}"
if [[ "${INSTALL_WEB}" == true ]]; then
if ! is_repo "${ADMIN_INTERFACE_DIR}" ; then
echo -e "\\n ${COL_LIGHT_RED}Error: Web Admin repo is missing from system!
Please re-run install script from https://pi-hole.net${COL_NC}"
exit 1;
# This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" ; then
echo -e "\\n ${COL_LIGHT_RED}Error: Core Pi-hole repo is missing from system!"
echo -e " Please re-run install script from https://pi-hole.net${COL_NC}"
exit 1;
fi
if GitCheckUpdateAvail "${ADMIN_INTERFACE_DIR}" ; then
web_update=true
echo -e " ${INFO} Web Interface:\\t${COL_YELLOW}update available${COL_NC}"
echo -e " ${INFO} Checking for updates..."
if GitCheckUpdateAvail "${PI_HOLE_FILES_DIR}" ; then
core_update=true
echo -e " ${INFO} Pi-hole Core:\\t${COL_YELLOW}update available${COL_NC}"
else
web_update=false
echo -e " ${INFO} Web Interface:\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
core_update=false
echo -e " ${INFO} Pi-hole Core:\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
fi
# Logic
# If Core up to date AND web up to date:
# Do nothing
# If Core up to date AND web NOT up to date:
# Pull web repo
# If Core NOT up to date AND web up to date:
# pull pihole repo, run install --unattended -- reconfigure
# if Core NOT up to date AND web NOT up to date:
# pull pihole repo run install --unattended
if [[ "${INSTALL_WEB_INTERFACE}" == true ]]; then
if ! is_repo "${ADMIN_INTERFACE_DIR}" ; then
echo -e "\\n ${COL_LIGHT_RED}Error: Web Admin repo is missing from system!"
echo -e " Please re-run install script from https://pi-hole.net${COL_NC}"
exit 1;
fi
if ! ${core_update} && ! ${web_update} ; then
if ! ${FTL_update} ; then
if GitCheckUpdateAvail "${ADMIN_INTERFACE_DIR}" ; then
web_update=true
echo -e " ${INFO} Web Interface:\\t${COL_YELLOW}update available${COL_NC}"
else
web_update=false
echo -e " ${INFO} Web Interface:\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
fi
fi
local funcOutput
funcOutput=$(get_binary_name) #Store output of get_binary_name here
local binary
binary="pihole-FTL${funcOutput##*pihole-FTL}" #binary name will be the last line of the output of get_binary_name (it always begins with pihole-FTL)
if FTLcheckUpdate "${binary}" > /dev/null; then
FTL_update=true
echo -e " ${INFO} FTL:\\t\\t${COL_YELLOW}update available${COL_NC}"
else
case $? in
1)
echo -e " ${INFO} FTL:\\t\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
;;
2)
echo -e " ${INFO} FTL:\\t\\t${COL_LIGHT_RED}Branch is not available.${COL_NC}\\n\\t\\t\\tUse ${COL_LIGHT_GREEN}pihole checkout ftl [branchname]${COL_NC} to switch to a valid branch."
;;
*)
echo -e " ${INFO} FTL:\\t\\t${COL_LIGHT_RED}Something has gone wrong, contact support${COL_NC}"
esac
FTL_update=false
fi
# Determine FTL branch
local ftlBranch
if [[ -f "/etc/pihole/ftlbranch" ]]; then
ftlBranch=$(</etc/pihole/ftlbranch)
else
ftlBranch="master"
fi
if [[ ! "${ftlBranch}" == "master" && ! "${ftlBranch}" == "development" ]]; then
# Notify user that they are on a custom branch which might mean they they are lost
# behind if a branch was merged to development and got abandoned
printf " %b %bWarning:%b You are using FTL from a custom branch (%s) and might be missing future releases.\\n" "${INFO}" "${COL_LIGHT_RED}" "${COL_NC}" "${ftlBranch}"
fi
if [[ "${core_update}" == false && "${web_update}" == false && "${FTL_update}" == false ]]; then
echo ""
echo -e " ${TICK} Everything is up to date!"
exit 0
fi
elif ! ${core_update} && ${web_update} ; then
echo ""
echo -e " ${INFO} Pi-hole Web Admin files out of date"
getGitFiles "${ADMIN_INTERFACE_DIR}" "${ADMIN_INTERFACE_GIT_URL}"
elif ${core_update} && ! ${web_update} ; then
echo ""
echo -e " ${INFO} Pi-hole core files out of date"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
${PI_HOLE_FILES_DIR}/automated\ install/basic-install.sh --reconfigure --unattended || \
echo -e "${basicError}" && exit 1
elif ${core_update} && ${web_update} ; then
echo ""
echo -e " ${INFO} Updating Pi-hole core and web admin files"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
${PI_HOLE_FILES_DIR}/automated\ install/basic-install.sh --unattended || \
echo -e "${basicError}" && exit 1
else
echo -e " ${COL_LIGHT_RED}Update script has malfunctioned, please contact Pi-hole Support${COL_NC}"
exit 1
fi
else # Web Admin not installed, so only verify if core is up to date
if ! ${core_update}; then
if ! ${FTL_update} ; then
if [[ "${CHECK_ONLY}" == true ]]; then
echo ""
echo -e " ${INFO} Everything is up to date!"
exit 0
fi
else
echo ""
echo -e " ${INFO} Pi-hole Core files out of date"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
${PI_HOLE_FILES_DIR}/automated\ install/basic-install.sh --reconfigure --unattended || \
fi
if [[ "${core_update}" == true ]]; then
echo ""
echo -e " ${INFO} Pi-hole core files out of date, updating local repo."
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
echo -e " ${INFO} If you had made any changes in '/etc/.pihole/', they have been stashed using 'git stash'"
fi
if [[ "${web_update}" == true ]]; then
echo ""
echo -e " ${INFO} Pi-hole Web Admin files out of date, updating local repo."
getGitFiles "${ADMIN_INTERFACE_DIR}" "${ADMIN_INTERFACE_GIT_URL}"
echo -e " ${INFO} If you had made any changes in '/var/www/html/admin/', they have been stashed using 'git stash'"
fi
if [[ "${FTL_update}" == true ]]; then
echo ""
echo -e " ${INFO} FTL out of date, it will be updated by the installer."
fi
if [[ "${FTL_update}" == true || "${core_update}" == true ]]; then
${PI_HOLE_FILES_DIR}/automated\ install/basic-install.sh --reconfigure --unattended || \
echo -e "${basicError}" && exit 1
fi
fi
if [[ "${web_update}" == true ]]; then
web_version_current="$(/usr/local/bin/pihole version --admin --current)"
if [[ "${FTL_update}" == true || "${core_update}" == true || "${web_update}" == true ]]; then
# Force an update of the updatechecker
/opt/pihole/updatecheck.sh
/opt/pihole/updatecheck.sh x remote
echo -e " ${INFO} Local version file information updated."
fi
echo ""
echo -e " ${INFO} Web Admin version is now at ${web_version_current/* v/v}
${INFO} If you had made any changes in '/var/www/html/admin/', they have been stashed using 'git stash'"
fi
if [[ "${core_update}" == true ]]; then
pihole_version_current="$(/usr/local/bin/pihole version --pihole --current)"
echo ""
echo -e " ${INFO} Pi-hole version is now at ${pihole_version_current/* v/v}
${INFO} If you had made any changes in '/etc/.pihole/', they have been stashed using 'git stash'"
fi
if [[ "${FTL_update}" == true ]]; then
FTL_version_current="$(/usr/bin/pihole-FTL tag)"
echo -e "\\n ${INFO} FTL version is now at ${FTL_version_current/* v/v}"
start_service pihole-FTL
enable_service pihole-FTL
fi
echo ""
exit 0
exit 0
}
if [[ "$1" == "--check-only" ]]; then
CHECK_ONLY=true
fi
main

View File

@@ -10,57 +10,82 @@
# Credit: https://stackoverflow.com/a/46324904
function json_extract() {
local key=$1
local json=$2
local key=$1
local json=$2
local string_regex='"([^"\]|\\.)*"'
local number_regex='-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?'
local value_regex="${string_regex}|${number_regex}|true|false|null"
local pair_regex="\"${key}\"[[:space:]]*:[[:space:]]*(${value_regex})"
local string_regex='"([^"\]|\\.)*"'
local number_regex='-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?'
local value_regex="${string_regex}|${number_regex}|true|false|null"
local pair_regex="\"${key}\"[[:space:]]*:[[:space:]]*(${value_regex})"
if [[ ${json} =~ ${pair_regex} ]]; then
echo $(sed 's/^"\|"$//g' <<< "${BASH_REMATCH[1]}")
else
return 1
fi
if [[ ${json} =~ ${pair_regex} ]]; then
echo $(sed 's/^"\|"$//g' <<< "${BASH_REMATCH[1]}")
else
return 1
fi
}
function get_local_branch() {
# Return active branch
cd "${1}" 2> /dev/null || return 1
git rev-parse --abbrev-ref HEAD || return 1
# Return active branch
cd "${1}" 2> /dev/null || return 1
git rev-parse --abbrev-ref HEAD || return 1
}
function get_local_version() {
# Return active branch
cd "${1}" 2> /dev/null || return 1
git describe --long --dirty --tags || return 1
# Return active branch
cd "${1}" 2> /dev/null || return 1
git describe --long --dirty --tags 2> /dev/null || return 1
}
# Source the setupvars config file
# shellcheck disable=SC1091
. /etc/pihole/setupVars.conf
if [[ "$2" == "remote" ]]; then
if [[ "$3" == "reboot" ]]; then
sleep 30
fi
if [[ "$3" == "reboot" ]]; then
sleep 30
fi
GITHUB_CORE_VERSION="$(json_extract tag_name "$(curl -q 'https://api.github.com/repos/pi-hole/pi-hole/releases/latest' 2> /dev/null)")"
GITHUB_WEB_VERSION="$(json_extract tag_name "$(curl -q 'https://api.github.com/repos/pi-hole/AdminLTE/releases/latest' 2> /dev/null)")"
GITHUB_FTL_VERSION="$(json_extract tag_name "$(curl -q 'https://api.github.com/repos/pi-hole/FTL/releases/latest' 2> /dev/null)")"
GITHUB_VERSION_FILE="/etc/pihole/GitHubVersions"
echo "${GITHUB_CORE_VERSION} ${GITHUB_WEB_VERSION} ${GITHUB_FTL_VERSION}" > "/etc/pihole/GitHubVersions"
GITHUB_CORE_VERSION="$(json_extract tag_name "$(curl -s 'https://api.github.com/repos/pi-hole/pi-hole/releases/latest' 2> /dev/null)")"
echo -n "${GITHUB_CORE_VERSION}" > "${GITHUB_VERSION_FILE}"
if [[ "${INSTALL_WEB_INTERFACE}" == true ]]; then
GITHUB_WEB_VERSION="$(json_extract tag_name "$(curl -s 'https://api.github.com/repos/pi-hole/AdminLTE/releases/latest' 2> /dev/null)")"
echo -n " ${GITHUB_WEB_VERSION}" >> "${GITHUB_VERSION_FILE}"
fi
GITHUB_FTL_VERSION="$(json_extract tag_name "$(curl -s 'https://api.github.com/repos/pi-hole/FTL/releases/latest' 2> /dev/null)")"
echo -n " ${GITHUB_FTL_VERSION}" >> "${GITHUB_VERSION_FILE}"
else
CORE_BRANCH="$(get_local_branch /etc/.pihole)"
WEB_BRANCH="$(get_local_branch /var/www/html/admin)"
FTL_BRANCH="$(pihole-FTL branch)"
LOCAL_BRANCH_FILE="/etc/pihole/localbranches"
echo "${CORE_BRANCH} ${WEB_BRANCH} ${FTL_BRANCH}" > "/etc/pihole/localbranches"
CORE_BRANCH="$(get_local_branch /etc/.pihole)"
echo -n "${CORE_BRANCH}" > "${LOCAL_BRANCH_FILE}"
CORE_VERSION="$(get_local_version /etc/.pihole)"
WEB_VERSION="$(get_local_version /var/www/html/admin)"
FTL_VERSION="$(pihole-FTL version)"
if [[ "${INSTALL_WEB_INTERFACE}" == true ]]; then
WEB_BRANCH="$(get_local_branch /var/www/html/admin)"
echo -n " ${WEB_BRANCH}" >> "${LOCAL_BRANCH_FILE}"
fi
echo "${CORE_VERSION} ${WEB_VERSION} ${FTL_VERSION}" > "/etc/pihole/localversions"
FTL_BRANCH="$(pihole-FTL branch)"
echo -n " ${FTL_BRANCH}" >> "${LOCAL_BRANCH_FILE}"
LOCAL_VERSION_FILE="/etc/pihole/localversions"
CORE_VERSION="$(get_local_version /etc/.pihole)"
echo -n "${CORE_VERSION}" > "${LOCAL_VERSION_FILE}"
if [[ "${INSTALL_WEB_INTERFACE}" == true ]]; then
WEB_VERSION="$(get_local_version /var/www/html/admin)"
echo -n " ${WEB_VERSION}" >> "${LOCAL_VERSION_FILE}"
fi
FTL_VERSION="$(pihole-FTL version)"
echo -n " ${FTL_VERSION}" >> "${LOCAL_VERSION_FILE}"
fi

View File

@@ -14,135 +14,143 @@ COREGITDIR="/etc/.pihole/"
WEBGITDIR="/var/www/html/admin/"
getLocalVersion() {
# FTL requires a different method
if [[ "$1" == "FTL" ]]; then
pihole-FTL version
# FTL requires a different method
if [[ "$1" == "FTL" ]]; then
pihole-FTL version
return 0
fi
# Get the tagged version of the local repository
local directory="${1}"
local version
cd "${directory}" 2> /dev/null || { echo "${DEFAULT}"; return 1; }
version=$(git describe --tags --always || echo "$DEFAULT")
if [[ "${version}" =~ ^v ]]; then
echo "${version}"
elif [[ "${version}" == "${DEFAULT}" ]]; then
echo "ERROR"
return 1
else
echo "Untagged"
fi
return 0
fi
# Get the tagged version of the local repository
local directory="${1}"
local version
cd "${directory}" 2> /dev/null || { echo "${DEFAULT}"; return 1; }
version=$(git describe --tags --always || echo "$DEFAULT")
if [[ "${version}" =~ ^v ]]; then
echo "${version}"
elif [[ "${version}" == "${DEFAULT}" ]]; then
echo "ERROR"
return 1
else
echo "Untagged"
fi
return 0
}
getLocalHash() {
# Local FTL hash does not exist on filesystem
if [[ "$1" == "FTL" ]]; then
echo "N/A"
return 0
fi
# Get the short hash of the local repository
local directory="${1}"
local hash
# Local FTL hash does not exist on filesystem
if [[ "$1" == "FTL" ]]; then
echo "N/A"
return 0
fi
cd "${directory}" 2> /dev/null || { echo "${DEFAULT}"; return 1; }
hash=$(git rev-parse --short HEAD || echo "$DEFAULT")
if [[ "${hash}" == "${DEFAULT}" ]]; then
echo "ERROR"
return 1
else
echo "${hash}"
fi
return 0
# Get the short hash of the local repository
local directory="${1}"
local hash
cd "${directory}" 2> /dev/null || { echo "${DEFAULT}"; return 1; }
hash=$(git rev-parse --short HEAD || echo "$DEFAULT")
if [[ "${hash}" == "${DEFAULT}" ]]; then
echo "ERROR"
return 1
else
echo "${hash}"
fi
return 0
}
getRemoteHash(){
# Remote FTL hash is not applicable
if [[ "$1" == "FTL" ]]; then
echo "N/A"
# Remote FTL hash is not applicable
if [[ "$1" == "FTL" ]]; then
echo "N/A"
return 0
fi
local daemon="${1}"
local branch="${2}"
hash=$(git ls-remote --heads "https://github.com/pi-hole/${daemon}" | \
awk -v bra="$branch" '$0~bra {print substr($0,0,8);exit}')
if [[ -n "$hash" ]]; then
echo "$hash"
else
echo "ERROR"
return 1
fi
return 0
fi
local daemon="${1}"
local branch="${2}"
hash=$(git ls-remote --heads "https://github.com/pi-hole/${daemon}" | \
awk -v bra="$branch" '$0~bra {print substr($0,0,8);exit}')
if [[ -n "$hash" ]]; then
echo "$hash"
else
echo "ERROR"
return 1
fi
return 0
}
getRemoteVersion(){
# Get the version from the remote origin
local daemon="${1}"
local version
# Get the version from the remote origin
local daemon="${1}"
local version
version=$(curl --silent --fail "https://api.github.com/repos/pi-hole/${daemon}/releases/latest" | \
awk -F: '$1 ~/tag_name/ { print $2 }' | \
tr -cd '[[:alnum:]]._-')
if [[ "${version}" =~ ^v ]]; then
echo "${version}"
else
echo "ERROR"
return 1
fi
return 0
version=$(curl --silent --fail "https://api.github.com/repos/pi-hole/${daemon}/releases/latest" | \
awk -F: '$1 ~/tag_name/ { print $2 }' | \
tr -cd '[[:alnum:]]._-')
if [[ "${version}" =~ ^v ]]; then
echo "${version}"
else
echo "ERROR"
return 1
fi
return 0
}
versionOutput() {
[[ "$1" == "pi-hole" ]] && GITDIR=$COREGITDIR
[[ "$1" == "AdminLTE" ]] && GITDIR=$WEBGITDIR
[[ "$1" == "FTL" ]] && GITDIR="FTL"
[[ "$2" == "-c" ]] || [[ "$2" == "--current" ]] || [[ -z "$2" ]] && current=$(getLocalVersion $GITDIR)
[[ "$2" == "-l" ]] || [[ "$2" == "--latest" ]] || [[ -z "$2" ]] && latest=$(getRemoteVersion "$1")
if [[ "$2" == "-h" ]] || [[ "$2" == "--hash" ]]; then
[[ "$3" == "-c" ]] || [[ "$3" == "--current" ]] || [[ -z "$3" ]] && curHash=$(getLocalHash "$GITDIR")
[[ "$3" == "-l" ]] || [[ "$3" == "--latest" ]] || [[ -z "$3" ]] && latHash=$(getRemoteHash "$1" "$(cd "$GITDIR" 2> /dev/null && git rev-parse --abbrev-ref HEAD)")
fi
[[ "$1" == "pi-hole" ]] && GITDIR=$COREGITDIR
[[ "$1" == "AdminLTE" ]] && GITDIR=$WEBGITDIR
[[ "$1" == "FTL" ]] && GITDIR="FTL"
if [[ -n "$current" ]] && [[ -n "$latest" ]]; then
output="${1^} version is $current (Latest: $latest)"
elif [[ -n "$current" ]] && [[ -z "$latest" ]]; then
output="Current ${1^} version is $current"
elif [[ -z "$current" ]] && [[ -n "$latest" ]]; then
output="Latest ${1^} version is $latest"
elif [[ "$curHash" == "N/A" ]] || [[ "$latHash" == "N/A" ]]; then
output="${1^} hash is not applicable"
elif [[ -n "$curHash" ]] && [[ -n "$latHash" ]]; then
output="${1^} hash is $curHash (Latest: $latHash)"
elif [[ -n "$curHash" ]] && [[ -z "$latHash" ]]; then
output="Current ${1^} hash is $curHash"
elif [[ -z "$curHash" ]] && [[ -n "$latHash" ]]; then
output="Latest ${1^} hash is $latHash"
else
errorOutput
fi
[[ "$2" == "-c" ]] || [[ "$2" == "--current" ]] || [[ -z "$2" ]] && current=$(getLocalVersion $GITDIR)
[[ "$2" == "-l" ]] || [[ "$2" == "--latest" ]] || [[ -z "$2" ]] && latest=$(getRemoteVersion "$1")
if [[ "$2" == "-h" ]] || [[ "$2" == "--hash" ]]; then
[[ "$3" == "-c" ]] || [[ "$3" == "--current" ]] || [[ -z "$3" ]] && curHash=$(getLocalHash "$GITDIR")
[[ "$3" == "-l" ]] || [[ "$3" == "--latest" ]] || [[ -z "$3" ]] && latHash=$(getRemoteHash "$1" "$(cd "$GITDIR" 2> /dev/null && git rev-parse --abbrev-ref HEAD)")
fi
[[ -n "$output" ]] && echo " $output"
if [[ -n "$current" ]] && [[ -n "$latest" ]]; then
output="${1^} version is $current (Latest: $latest)"
elif [[ -n "$current" ]] && [[ -z "$latest" ]]; then
output="Current ${1^} version is $current"
elif [[ -z "$current" ]] && [[ -n "$latest" ]]; then
output="Latest ${1^} version is $latest"
elif [[ "$curHash" == "N/A" ]] || [[ "$latHash" == "N/A" ]]; then
output="${1^} hash is not applicable"
elif [[ -n "$curHash" ]] && [[ -n "$latHash" ]]; then
output="${1^} hash is $curHash (Latest: $latHash)"
elif [[ -n "$curHash" ]] && [[ -z "$latHash" ]]; then
output="Current ${1^} hash is $curHash"
elif [[ -z "$curHash" ]] && [[ -n "$latHash" ]]; then
output="Latest ${1^} hash is $latHash"
else
errorOutput
fi
[[ -n "$output" ]] && echo " $output"
}
errorOutput() {
echo " Invalid Option! Try 'pihole -v --help' for more information."
exit 1
echo " Invalid Option! Try 'pihole -v --help' for more information."
exit 1
}
defaultOutput() {
versionOutput "pi-hole" "$@"
versionOutput "AdminLTE" "$@"
versionOutput "FTL" "$@"
# Source the setupvars config file
# shellcheck disable=SC1091
source /etc/pihole/setupVars.conf
versionOutput "pi-hole" "$@"
if [[ "${INSTALL_WEB_INTERFACE}" == true ]]; then
versionOutput "AdminLTE" "$@"
fi
versionOutput "FTL" "$@"
}
helpFunc() {
echo "Usage: pihole -v [repo | option] [option]
echo "Usage: pihole -v [repo | option] [option]
Example: 'pihole -v -p -l'
Show Pi-hole, Admin Console & FTL versions
@@ -150,7 +158,7 @@ Repositories:
-p, --pihole Only retrieve info regarding Pi-hole repository
-a, --admin Only retrieve info regarding AdminLTE repository
-f, --ftl Only retrieve info regarding FTL repository
Options:
-c, --current Return the current version
-l, --latest Return the latest version
@@ -160,9 +168,9 @@ Options:
}
case "${1}" in
"-p" | "--pihole" ) shift; versionOutput "pi-hole" "$@";;
"-a" | "--admin" ) shift; versionOutput "AdminLTE" "$@";;
"-f" | "--ftl" ) shift; versionOutput "FTL" "$@";;
"-h" | "--help" ) helpFunc;;
* ) defaultOutput "$@";;
"-p" | "--pihole" ) shift; versionOutput "pi-hole" "$@";;
"-a" | "--admin" ) shift; versionOutput "AdminLTE" "$@";;
"-f" | "--ftl" ) shift; versionOutput "FTL" "$@";;
"-h" | "--help" ) helpFunc;;
* ) defaultOutput "$@";;
esac

View File

@@ -13,16 +13,18 @@
readonly setupVars="/etc/pihole/setupVars.conf"
readonly dnsmasqconfig="/etc/dnsmasq.d/01-pihole.conf"
readonly dhcpconfig="/etc/dnsmasq.d/02-pihole-dhcp.conf"
readonly FTLconf="/etc/pihole/pihole-FTL.conf"
# 03 -> wildcards
readonly dhcpstaticconfig="/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
readonly PI_HOLE_BIN_DIR="/usr/local/bin"
coltable="/opt/pihole/COL_TABLE"
if [[ -f ${coltable} ]]; then
source ${coltable}
source ${coltable}
fi
helpFunc() {
echo "Usage: pihole -a [options]
echo "Usage: pihole -a [options]
Example: pihole -a -p password
Set options for the Admin Console
@@ -35,236 +37,279 @@ Options:
-e, email Set an administrative contact address for the Block Page
-h, --help Show this help dialog
-i, interface Specify dnsmasq's interface listening behavior
Add '-h' for more info on interface usage"
exit 0
-l, privacylevel Set privacy level (0 = lowest, 4 = highest)"
exit 0
}
add_setting() {
echo "${1}=${2}" >> "${setupVars}"
echo "${1}=${2}" >> "${setupVars}"
}
delete_setting() {
sed -i "/${1}/d" "${setupVars}"
sed -i "/${1}/d" "${setupVars}"
}
change_setting() {
delete_setting "${1}"
add_setting "${1}" "${2}"
delete_setting "${1}"
add_setting "${1}" "${2}"
}
addFTLsetting() {
echo "${1}=${2}" >> "${FTLconf}"
}
deleteFTLsetting() {
sed -i "/${1}/d" "${FTLconf}"
}
changeFTLsetting() {
deleteFTLsetting "${1}"
addFTLsetting "${1}" "${2}"
}
add_dnsmasq_setting() {
if [[ "${2}" != "" ]]; then
echo "${1}=${2}" >> "${dnsmasqconfig}"
else
echo "${1}" >> "${dnsmasqconfig}"
fi
if [[ "${2}" != "" ]]; then
echo "${1}=${2}" >> "${dnsmasqconfig}"
else
echo "${1}" >> "${dnsmasqconfig}"
fi
}
delete_dnsmasq_setting() {
sed -i "/${1}/d" "${dnsmasqconfig}"
sed -i "/${1}/d" "${dnsmasqconfig}"
}
SetTemperatureUnit() {
change_setting "TEMPERATUREUNIT" "${unit}"
echo -e " ${TICK} Set temperature unit to ${unit}"
change_setting "TEMPERATUREUNIT" "${unit}"
echo -e " ${TICK} Set temperature unit to ${unit}"
}
HashPassword() {
# Compute password hash twice to avoid rainbow table vulnerability
return=$(echo -n ${1} | sha256sum | sed 's/\s.*$//')
return=$(echo -n ${return} | sha256sum | sed 's/\s.*$//')
echo ${return}
# Compute password hash twice to avoid rainbow table vulnerability
return=$(echo -n ${1} | sha256sum | sed 's/\s.*$//')
return=$(echo -n ${return} | sha256sum | sed 's/\s.*$//')
echo ${return}
}
SetWebPassword() {
if [ "${SUDO_USER}" == "www-data" ]; then
echo "Security measure: user www-data is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
if [ "${SUDO_USER}" == "lighttpd" ]; then
echo "Security measure: user lighttpd is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
if (( ${#args[2]} > 0 )) ; then
readonly PASSWORD="${args[2]}"
readonly CONFIRM="${PASSWORD}"
else
# Prevents a bug if the user presses Ctrl+C and it continues to hide the text typed.
# So we reset the terminal via stty if the user does press Ctrl+C
trap '{ echo -e "\nNo password will be set" ; stty sane ; exit 1; }' INT
read -s -p "Enter New Password (Blank for no password): " PASSWORD
echo ""
if [ "${PASSWORD}" == "" ]; then
change_setting "WEBPASSWORD" ""
echo -e " ${TICK} Password Removed"
exit 0
if [ "${SUDO_USER}" == "www-data" ]; then
echo "Security measure: user www-data is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
read -s -p "Confirm Password: " CONFIRM
echo ""
fi
if [ "${SUDO_USER}" == "lighttpd" ]; then
echo "Security measure: user lighttpd is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
if [ "${PASSWORD}" == "${CONFIRM}" ] ; then
hash=$(HashPassword "${PASSWORD}")
# Save hash to file
change_setting "WEBPASSWORD" "${hash}"
echo -e " ${TICK} New password set"
else
echo -e " ${CROSS} Passwords don't match. Your password has not been changed"
exit 1
fi
if (( ${#args[2]} > 0 )) ; then
readonly PASSWORD="${args[2]}"
readonly CONFIRM="${PASSWORD}"
else
# Prevents a bug if the user presses Ctrl+C and it continues to hide the text typed.
# So we reset the terminal via stty if the user does press Ctrl+C
trap '{ echo -e "\nNo password will be set" ; stty sane ; exit 1; }' INT
read -s -r -p "Enter New Password (Blank for no password): " PASSWORD
echo ""
if [ "${PASSWORD}" == "" ]; then
change_setting "WEBPASSWORD" ""
echo -e " ${TICK} Password Removed"
exit 0
fi
read -s -r -p "Confirm Password: " CONFIRM
echo ""
fi
if [ "${PASSWORD}" == "${CONFIRM}" ] ; then
# We do not wrap this in brackets, otherwise BASH will expand any appropriate syntax
hash=$(HashPassword "$PASSWORD")
# Save hash to file
change_setting "WEBPASSWORD" "${hash}"
echo -e " ${TICK} New password set"
else
echo -e " ${CROSS} Passwords don't match. Your password has not been changed"
exit 1
fi
}
ProcessDNSSettings() {
source "${setupVars}"
source "${setupVars}"
delete_dnsmasq_setting "server"
delete_dnsmasq_setting "server"
COUNTER=1
while [[ 1 ]]; do
var=PIHOLE_DNS_${COUNTER}
if [ -z "${!var}" ]; then
break;
fi
add_dnsmasq_setting "server" "${!var}"
let COUNTER=COUNTER+1
done
COUNTER=1
while [[ 1 ]]; do
var=PIHOLE_DNS_${COUNTER}
if [ -z "${!var}" ]; then
break;
fi
add_dnsmasq_setting "server" "${!var}"
let COUNTER=COUNTER+1
done
delete_dnsmasq_setting "domain-needed"
# The option LOCAL_DNS_PORT is deprecated
# We apply it once more, and then convert it into the current format
if [ ! -z "${LOCAL_DNS_PORT}" ]; then
add_dnsmasq_setting "server" "127.0.0.1#${LOCAL_DNS_PORT}"
add_setting "PIHOLE_DNS_${COUNTER}" "127.0.0.1#${LOCAL_DNS_PORT}"
delete_setting "LOCAL_DNS_PORT"
fi
if [[ "${DNS_FQDN_REQUIRED}" == true ]]; then
add_dnsmasq_setting "domain-needed"
fi
delete_dnsmasq_setting "domain-needed"
delete_dnsmasq_setting "bogus-priv"
if [[ "${DNS_FQDN_REQUIRED}" == true ]]; then
add_dnsmasq_setting "domain-needed"
fi
if [[ "${DNS_BOGUS_PRIV}" == true ]]; then
add_dnsmasq_setting "bogus-priv"
fi
delete_dnsmasq_setting "bogus-priv"
delete_dnsmasq_setting "dnssec"
delete_dnsmasq_setting "trust-anchor="
if [[ "${DNS_BOGUS_PRIV}" == true ]]; then
add_dnsmasq_setting "bogus-priv"
fi
if [[ "${DNSSEC}" == true ]]; then
echo "dnssec
delete_dnsmasq_setting "dnssec"
delete_dnsmasq_setting "trust-anchor="
if [[ "${DNSSEC}" == true ]]; then
echo "dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
" >> "${dnsmasqconfig}"
fi
fi
delete_dnsmasq_setting "host-record"
delete_dnsmasq_setting "host-record"
if [ ! -z "${HOSTRECORD}" ]; then
add_dnsmasq_setting "host-record" "${HOSTRECORD}"
fi
if [ ! -z "${HOSTRECORD}" ]; then
add_dnsmasq_setting "host-record" "${HOSTRECORD}"
fi
# Setup interface listening behavior of dnsmasq
delete_dnsmasq_setting "interface"
delete_dnsmasq_setting "local-service"
# Setup interface listening behavior of dnsmasq
delete_dnsmasq_setting "interface"
delete_dnsmasq_setting "local-service"
if [[ "${DNSMASQ_LISTENING}" == "all" ]]; then
# Listen on all interfaces, permit all origins
add_dnsmasq_setting "except-interface" "nonexisting"
elif [[ "${DNSMASQ_LISTENING}" == "local" ]]; then
# Listen only on all interfaces, but only local subnets
add_dnsmasq_setting "local-service"
else
# Listen only on one interface
add_dnsmasq_setting "interface" "${PIHOLE_INTERFACE}"
fi
if [[ "${DNSMASQ_LISTENING}" == "all" ]]; then
# Listen on all interfaces, permit all origins
add_dnsmasq_setting "except-interface" "nonexisting"
elif [[ "${DNSMASQ_LISTENING}" == "local" ]]; then
# Listen only on all interfaces, but only local subnets
add_dnsmasq_setting "local-service"
else
# Listen only on one interface
# Use eth0 as fallback interface if interface is missing in setupVars.conf
if [ -z "${PIHOLE_INTERFACE}" ]; then
PIHOLE_INTERFACE="eth0"
fi
add_dnsmasq_setting "interface" "${PIHOLE_INTERFACE}"
fi
if [[ "${CONDITIONAL_FORWARDING}" == true ]]; then
add_dnsmasq_setting "server=/${CONDITIONAL_FORWARDING_DOMAIN}/${CONDITIONAL_FORWARDING_IP}"
add_dnsmasq_setting "server=/${CONDITIONAL_FORWARDING_REVERSE}/${CONDITIONAL_FORWARDING_IP}"
fi
}
SetDNSServers() {
# Save setting to file
delete_setting "PIHOLE_DNS"
IFS=',' read -r -a array <<< "${args[2]}"
for index in "${!array[@]}"
do
add_setting "PIHOLE_DNS_$((index+1))" "${array[index]}"
done
# Save setting to file
delete_setting "PIHOLE_DNS"
IFS=',' read -r -a array <<< "${args[2]}"
for index in "${!array[@]}"
do
add_setting "PIHOLE_DNS_$((index+1))" "${array[index]}"
done
if [[ "${args[3]}" == "domain-needed" ]]; then
change_setting "DNS_FQDN_REQUIRED" "true"
else
change_setting "DNS_FQDN_REQUIRED" "false"
fi
if [[ "${args[3]}" == "domain-needed" ]]; then
change_setting "DNS_FQDN_REQUIRED" "true"
else
change_setting "DNS_FQDN_REQUIRED" "false"
fi
if [[ "${args[4]}" == "bogus-priv" ]]; then
change_setting "DNS_BOGUS_PRIV" "true"
else
change_setting "DNS_BOGUS_PRIV" "false"
fi
if [[ "${args[4]}" == "bogus-priv" ]]; then
change_setting "DNS_BOGUS_PRIV" "true"
else
change_setting "DNS_BOGUS_PRIV" "false"
fi
if [[ "${args[5]}" == "dnssec" ]]; then
change_setting "DNSSEC" "true"
else
change_setting "DNSSEC" "false"
fi
if [[ "${args[5]}" == "dnssec" ]]; then
change_setting "DNSSEC" "true"
else
change_setting "DNSSEC" "false"
fi
ProcessDNSSettings
if [[ "${args[6]}" == "conditional_forwarding" ]]; then
change_setting "CONDITIONAL_FORWARDING" "true"
change_setting "CONDITIONAL_FORWARDING_IP" "${args[7]}"
change_setting "CONDITIONAL_FORWARDING_DOMAIN" "${args[8]}"
change_setting "CONDITIONAL_FORWARDING_REVERSE" "${args[9]}"
else
change_setting "CONDITIONAL_FORWARDING" "false"
delete_setting "CONDITIONAL_FORWARDING_IP"
delete_setting "CONDITIONAL_FORWARDING_DOMAIN"
delete_setting "CONDITIONAL_FORWARDING_REVERSE"
fi
# Restart dnsmasq to load new configuration
RestartDNS
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
}
SetExcludeDomains() {
change_setting "API_EXCLUDE_DOMAINS" "${args[2]}"
change_setting "API_EXCLUDE_DOMAINS" "${args[2]}"
}
SetExcludeClients() {
change_setting "API_EXCLUDE_CLIENTS" "${args[2]}"
change_setting "API_EXCLUDE_CLIENTS" "${args[2]}"
}
Poweroff(){
nohup bash -c "sleep 5; poweroff" &> /dev/null </dev/null &
nohup bash -c "sleep 5; poweroff" &> /dev/null </dev/null &
}
Reboot() {
nohup bash -c "sleep 5; reboot" &> /dev/null </dev/null &
nohup bash -c "sleep 5; reboot" &> /dev/null </dev/null &
}
RestartDNS() {
/usr/local/bin/pihole restartdns
"${PI_HOLE_BIN_DIR}"/pihole restartdns
}
SetQueryLogOptions() {
change_setting "API_QUERY_LOG_SHOW" "${args[2]}"
change_setting "API_QUERY_LOG_SHOW" "${args[2]}"
}
ProcessDHCPSettings() {
source "${setupVars}"
source "${setupVars}"
if [[ "${DHCP_ACTIVE}" == "true" ]]; then
interface=$(grep 'PIHOLE_INTERFACE=' /etc/pihole/setupVars.conf | sed "s/.*=//")
if [[ "${DHCP_ACTIVE}" == "true" ]]; then
interface="${PIHOLE_INTERFACE}"
# Use eth0 as fallback interface
if [ -z ${interface} ]; then
interface="eth0"
interface="eth0"
fi
if [[ "${PIHOLE_DOMAIN}" == "" ]]; then
PIHOLE_DOMAIN="local"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
PIHOLE_DOMAIN="lan"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
fi
if [[ "${DHCP_LEASETIME}" == "0" ]]; then
leasetime="infinite"
leasetime="infinite"
elif [[ "${DHCP_LEASETIME}" == "" ]]; then
leasetime="24"
change_setting "DHCP_LEASETIME" "${leasetime}"
leasetime="24"
change_setting "DHCP_LEASETIME" "${leasetime}"
elif [[ "${DHCP_LEASETIME}" == "24h" ]]; then
#Installation is affected by known bug, introduced in a previous version.
#This will automatically clean up setupVars.conf and remove the unnecessary "h"
leasetime="24"
change_setting "DHCP_LEASETIME" "${leasetime}"
#Installation is affected by known bug, introduced in a previous version.
#This will automatically clean up setupVars.conf and remove the unnecessary "h"
leasetime="24"
change_setting "DHCP_LEASETIME" "${leasetime}"
else
leasetime="${DHCP_LEASETIME}h"
leasetime="${DHCP_LEASETIME}h"
fi
# Write settings to file
@@ -279,12 +324,18 @@ dhcp-leasefile=/etc/pihole/dhcp.leases
#quiet-dhcp
" > "${dhcpconfig}"
if [[ "${PIHOLE_DOMAIN}" != "none" ]]; then
echo "domain=${PIHOLE_DOMAIN}" >> "${dhcpconfig}"
fi
if [[ "${PIHOLE_DOMAIN}" != "none" ]]; then
echo "domain=${PIHOLE_DOMAIN}" >> "${dhcpconfig}"
fi
# Sourced from setupVars
# shellcheck disable=SC2154
if [[ "${DHCP_rapid_commit}" == "true" ]]; then
echo "dhcp-rapid-commit" >> "${dhcpconfig}"
fi
if [[ "${DHCP_IPv6}" == "true" ]]; then
echo "#quiet-dhcp6
echo "#quiet-dhcp6
#enable-ra
dhcp-option=option6:dns-server,[::]
dhcp-range=::100,::1ff,constructor:${interface},ra-names,slaac,${leasetime}
@@ -292,158 +343,169 @@ ra-param=*,0,0
" >> "${dhcpconfig}"
fi
else
if [[ -f "${dhcpconfig}" ]]; then
rm "${dhcpconfig}" &> /dev/null
fi
fi
else
if [[ -f "${dhcpconfig}" ]]; then
rm "${dhcpconfig}" &> /dev/null
fi
fi
}
EnableDHCP() {
change_setting "DHCP_ACTIVE" "true"
change_setting "DHCP_START" "${args[2]}"
change_setting "DHCP_END" "${args[3]}"
change_setting "DHCP_ROUTER" "${args[4]}"
change_setting "DHCP_LEASETIME" "${args[5]}"
change_setting "PIHOLE_DOMAIN" "${args[6]}"
change_setting "DHCP_IPv6" "${args[7]}"
change_setting "DHCP_ACTIVE" "true"
change_setting "DHCP_START" "${args[2]}"
change_setting "DHCP_END" "${args[3]}"
change_setting "DHCP_ROUTER" "${args[4]}"
change_setting "DHCP_LEASETIME" "${args[5]}"
change_setting "PIHOLE_DOMAIN" "${args[6]}"
change_setting "DHCP_IPv6" "${args[7]}"
change_setting "DHCP_rapid_commit" "${args[8]}"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
ProcessDHCPSettings
# If a DHCP client claims that its name is "wpad", ignore that.
# This fixes a security hole. see CERT Vulnerability VU#598349
# We also ignore "localhost" as Windows behaves strangely if a
# device claims this host name
add_dnsmasq_setting "dhcp-name-match=set:hostname-ignore,wpad
dhcp-name-match=set:hostname-ignore,localhost
dhcp-ignore-names=tag:hostname-ignore"
RestartDNS
ProcessDHCPSettings
RestartDNS
}
DisableDHCP() {
change_setting "DHCP_ACTIVE" "false"
change_setting "DHCP_ACTIVE" "false"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
ProcessDHCPSettings
ProcessDHCPSettings
RestartDNS
RestartDNS
}
SetWebUILayout() {
change_setting "WEBUIBOXEDLAYOUT" "${args[2]}"
change_setting "WEBUIBOXEDLAYOUT" "${args[2]}"
}
CustomizeAdLists() {
list="/etc/pihole/adlists.list"
list="/etc/pihole/adlists.list"
if [[ "${args[2]}" == "enable" ]]; then
sed -i "\\@${args[3]}@s/^#http/http/g" "${list}"
elif [[ "${args[2]}" == "disable" ]]; then
sed -i "\\@${args[3]}@s/^http/#http/g" "${list}"
elif [[ "${args[2]}" == "add" ]]; then
echo "${args[3]}" >> ${list}
elif [[ "${args[2]}" == "del" ]]; then
var=$(echo "${args[3]}" | sed 's/\//\\\//g')
sed -i "/${var}/Id" "${list}"
else
echo "Not permitted"
return 1
fi
if [[ "${args[2]}" == "enable" ]]; then
sed -i "\\@${args[3]}@s/^#http/http/g" "${list}"
elif [[ "${args[2]}" == "disable" ]]; then
sed -i "\\@${args[3]}@s/^http/#http/g" "${list}"
elif [[ "${args[2]}" == "add" ]]; then
if [[ $(grep -c "^${args[3]}$" "${list}") -eq 0 ]] ; then
echo "${args[3]}" >> ${list}
fi
elif [[ "${args[2]}" == "del" ]]; then
var=$(echo "${args[3]}" | sed 's/\//\\\//g')
sed -i "/${var}/Id" "${list}"
else
echo "Not permitted"
return 1
fi
}
SetPrivacyMode() {
if [[ "${args[2]}" == "true" ]]; then
change_setting "API_PRIVACY_MODE" "true"
else
change_setting "API_PRIVACY_MODE" "false"
fi
if [[ "${args[2]}" == "true" ]]; then
change_setting "API_PRIVACY_MODE" "true"
else
change_setting "API_PRIVACY_MODE" "false"
fi
}
ResolutionSettings() {
typ="${args[2]}"
state="${args[3]}"
typ="${args[2]}"
state="${args[3]}"
if [[ "${typ}" == "forward" ]]; then
change_setting "API_GET_UPSTREAM_DNS_HOSTNAME" "${state}"
elif [[ "${typ}" == "clients" ]]; then
change_setting "API_GET_CLIENT_HOSTNAME" "${state}"
fi
if [[ "${typ}" == "forward" ]]; then
change_setting "API_GET_UPSTREAM_DNS_HOSTNAME" "${state}"
elif [[ "${typ}" == "clients" ]]; then
change_setting "API_GET_CLIENT_HOSTNAME" "${state}"
fi
}
AddDHCPStaticAddress() {
mac="${args[2]}"
ip="${args[3]}"
host="${args[4]}"
mac="${args[2]}"
ip="${args[3]}"
host="${args[4]}"
if [[ "${ip}" == "noip" ]]; then
# Static host name
echo "dhcp-host=${mac},${host}" >> "${dhcpstaticconfig}"
elif [[ "${host}" == "nohost" ]]; then
# Static IP
echo "dhcp-host=${mac},${ip}" >> "${dhcpstaticconfig}"
else
# Full info given
echo "dhcp-host=${mac},${ip},${host}" >> "${dhcpstaticconfig}"
fi
if [[ "${ip}" == "noip" ]]; then
# Static host name
echo "dhcp-host=${mac},${host}" >> "${dhcpstaticconfig}"
elif [[ "${host}" == "nohost" ]]; then
# Static IP
echo "dhcp-host=${mac},${ip}" >> "${dhcpstaticconfig}"
else
# Full info given
echo "dhcp-host=${mac},${ip},${host}" >> "${dhcpstaticconfig}"
fi
}
RemoveDHCPStaticAddress() {
mac="${args[2]}"
sed -i "/dhcp-host=${mac}.*/d" "${dhcpstaticconfig}"
mac="${args[2]}"
sed -i "/dhcp-host=${mac}.*/d" "${dhcpstaticconfig}"
}
SetHostRecord() {
if [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]; then
echo "Usage: pihole -a hostrecord <domain> [IPv4-address],[IPv6-address]
if [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]; then
echo "Usage: pihole -a hostrecord <domain> [IPv4-address],[IPv6-address]
Example: 'pihole -a hostrecord home.domain.com 192.168.1.1,2001:db8:a0b:12f0::1'
Add a name to the DNS associated to an IPv4/IPv6 address
Options:
\"\" Empty: Remove host record
-h, --help Show this help dialog"
exit 0
fi
exit 0
fi
if [[ -n "${args[3]}" ]]; then
change_setting "HOSTRECORD" "${args[2]},${args[3]}"
echo -e " ${TICK} Setting host record for ${args[2]} to ${args[3]}"
else
change_setting "HOSTRECORD" ""
echo -e " ${TICK} Removing host record"
fi
if [[ -n "${args[3]}" ]]; then
change_setting "HOSTRECORD" "${args[2]},${args[3]}"
echo -e " ${TICK} Setting host record for ${args[2]} to ${args[3]}"
else
change_setting "HOSTRECORD" ""
echo -e " ${TICK} Removing host record"
fi
ProcessDNSSettings
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
# Restart dnsmasq to load new configuration
RestartDNS
}
SetAdminEmail() {
if [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]; then
echo "Usage: pihole -a email <address>
if [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]; then
echo "Usage: pihole -a email <address>
Example: 'pihole -a email admin@address.com'
Set an administrative contact address for the Block Page
Options:
\"\" Empty: Remove admin contact
-h, --help Show this help dialog"
exit 0
fi
exit 0
fi
if [[ -n "${args[2]}" ]]; then
change_setting "ADMIN_EMAIL" "${args[2]}"
echo -e " ${TICK} Setting admin contact to ${args[2]}"
else
change_setting "ADMIN_EMAIL" ""
echo -e " ${TICK} Removing admin contact"
fi
if [[ -n "${args[2]}" ]]; then
change_setting "ADMIN_EMAIL" "${args[2]}"
echo -e " ${TICK} Setting admin contact to ${args[2]}"
else
change_setting "ADMIN_EMAIL" ""
echo -e " ${TICK} Removing admin contact"
fi
}
SetListeningMode() {
source "${setupVars}"
source "${setupVars}"
if [[ "$3" == "-h" ]] || [[ "$3" == "--help" ]]; then
echo "Usage: pihole -a -i [interface]
if [[ "$3" == "-h" ]] || [[ "$3" == "--help" ]]; then
echo "Usage: pihole -a -i [interface]
Example: 'pihole -a -i local'
Specify dnsmasq's network interface listening behavior
@@ -452,74 +514,93 @@ Interfaces:
devices that are at most one hop away (local devices)
single Listen only on ${PIHOLE_INTERFACE} interface
all Listen on all interfaces, permit all origins"
exit 0
exit 0
fi
if [[ "${args[2]}" == "all" ]]; then
echo -e " ${INFO} Listening on all interfaces, permiting all origins. Please use a firewall!"
change_setting "DNSMASQ_LISTENING" "all"
elif [[ "${args[2]}" == "local" ]]; then
echo -e " ${INFO} Listening on all interfaces, permiting origins from one hop away (LAN)"
change_setting "DNSMASQ_LISTENING" "local"
else
echo -e " ${INFO} Listening only on interface ${PIHOLE_INTERFACE}"
change_setting "DNSMASQ_LISTENING" "single"
fi
if [[ "${args[2]}" == "all" ]]; then
echo -e " ${INFO} Listening on all interfaces, permiting all origins. Please use a firewall!"
change_setting "DNSMASQ_LISTENING" "all"
elif [[ "${args[2]}" == "local" ]]; then
echo -e " ${INFO} Listening on all interfaces, permiting origins from one hop away (LAN)"
change_setting "DNSMASQ_LISTENING" "local"
else
echo -e " ${INFO} Listening only on interface ${PIHOLE_INTERFACE}"
change_setting "DNSMASQ_LISTENING" "single"
fi
# Don't restart DNS server yet because other settings
# will be applied afterwards if "-web" is set
if [[ "${args[3]}" != "-web" ]]; then
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
fi
# Don't restart DNS server yet because other settings
# will be applied afterwards if "-web" is set
if [[ "${args[3]}" != "-web" ]]; then
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
fi
}
Teleporter() {
local datetimestamp=$(date "+%Y-%m-%d_%H-%M-%S")
php /var/www/html/admin/scripts/pi-hole/php/teleporter.php > "pi-hole-teleporter_${datetimestamp}.zip"
local datetimestamp=$(date "+%Y-%m-%d_%H-%M-%S")
php /var/www/html/admin/scripts/pi-hole/php/teleporter.php > "pi-hole-teleporter_${datetimestamp}.tar.gz"
}
audit()
addAudit()
{
echo "${args[2]}" >> /etc/pihole/auditlog.list
shift # skip "-a"
shift # skip "audit"
for var in "$@"
do
echo "${var}" >> /etc/pihole/auditlog.list
done
}
clearAudit()
{
echo -n "" > /etc/pihole/auditlog.list
}
SetPrivacyLevel() {
# Set privacy level. Minimum is 0, maximum is 4
if [ "${args[2]}" -ge 0 ] && [ "${args[2]}" -le 4 ]; then
changeFTLsetting "PRIVACYLEVEL" "${args[2]}"
fi
}
main() {
args=("$@")
args=("$@")
case "${args[1]}" in
"-p" | "password" ) SetWebPassword;;
"-c" | "celsius" ) unit="C"; SetTemperatureUnit;;
"-f" | "fahrenheit" ) unit="F"; SetTemperatureUnit;;
"-k" | "kelvin" ) unit="K"; SetTemperatureUnit;;
"setdns" ) SetDNSServers;;
"setexcludedomains" ) SetExcludeDomains;;
"setexcludeclients" ) SetExcludeClients;;
"poweroff" ) Poweroff;;
"reboot" ) Reboot;;
"restartdns" ) RestartDNS;;
"setquerylog" ) SetQueryLogOptions;;
"enabledhcp" ) EnableDHCP;;
"disabledhcp" ) DisableDHCP;;
"layout" ) SetWebUILayout;;
"-h" | "--help" ) helpFunc;;
"privacymode" ) SetPrivacyMode;;
"resolve" ) ResolutionSettings;;
"addstaticdhcp" ) AddDHCPStaticAddress;;
"removestaticdhcp" ) RemoveDHCPStaticAddress;;
"-r" | "hostrecord" ) SetHostRecord "$3";;
"-e" | "email" ) SetAdminEmail "$3";;
"-i" | "interface" ) SetListeningMode "$@";;
"-t" | "teleporter" ) Teleporter;;
"adlist" ) CustomizeAdLists;;
"audit" ) audit;;
* ) helpFunc;;
esac
case "${args[1]}" in
"-p" | "password" ) SetWebPassword;;
"-c" | "celsius" ) unit="C"; SetTemperatureUnit;;
"-f" | "fahrenheit" ) unit="F"; SetTemperatureUnit;;
"-k" | "kelvin" ) unit="K"; SetTemperatureUnit;;
"setdns" ) SetDNSServers;;
"setexcludedomains" ) SetExcludeDomains;;
"setexcludeclients" ) SetExcludeClients;;
"poweroff" ) Poweroff;;
"reboot" ) Reboot;;
"restartdns" ) RestartDNS;;
"setquerylog" ) SetQueryLogOptions;;
"enabledhcp" ) EnableDHCP;;
"disabledhcp" ) DisableDHCP;;
"layout" ) SetWebUILayout;;
"-h" | "--help" ) helpFunc;;
"privacymode" ) SetPrivacyMode;;
"resolve" ) ResolutionSettings;;
"addstaticdhcp" ) AddDHCPStaticAddress;;
"removestaticdhcp" ) RemoveDHCPStaticAddress;;
"-r" | "hostrecord" ) SetHostRecord "$3";;
"-e" | "email" ) SetAdminEmail "$3";;
"-i" | "interface" ) SetListeningMode "$@";;
"-t" | "teleporter" ) Teleporter;;
"adlist" ) CustomizeAdLists;;
"audit" ) addAudit "$@";;
"clearaudit" ) clearAudit;;
"-l" | "privacylevel" ) SetPrivacyLevel;;
* ) helpFunc;;
esac
shift
shift
if [[ $# = 0 ]]; then
helpFunc
fi
if [[ $# = 0 ]]; then
helpFunc
fi
}

View File

@@ -0,0 +1,28 @@
#!/bin/bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Provides an automated migration subroutine to convert Pi-hole v3.x wildcard domains to Pi-hole v4.x regex filters
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
# regexFile set in gravity.sh
wildcardFile="/etc/dnsmasq.d/03-pihole-wildcard.conf"
convert_wildcard_to_regex() {
if [ ! -f "${wildcardFile}" ]; then
return
fi
local addrlines domains uniquedomains
# Obtain wildcard domains from old file
addrlines="$(grep -oE "/.*/" ${wildcardFile})"
# Strip "/" from domain names and convert "." to regex-compatible "\."
domains="$(sed 's/\///g;s/\./\\./g' <<< "${addrlines}")"
# Remove repeated domains (may have been inserted two times due to A and AAAA blocking)
uniquedomains="$(uniq <<< "${domains}")"
# Automatically generate regex filters and remove old wildcards file
awk '{print "(^|\\.)"$0"$"}' <<< "${uniquedomains}" >> "${regexFile:?}" && rm "${wildcardFile}"
}

View File

@@ -0,0 +1,119 @@
#!/bin/bash
### BEGIN INIT INFO
# Provides: pihole-FTL
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pihole-FTL daemon
# Description: Enable service provided by pihole-FTL daemon
### END INIT INFO
FTLUSER=pihole
PIDFILE=/var/run/pihole-FTL.pid
get_pid() {
# First, try to obtain PID from PIDFILE
if [ -s "${PIDFILE}" ]; then
cat "${PIDFILE}"
return
fi
# If the PIDFILE is empty or not available, obtain the PID using pidof
pidof "pihole-FTL" | awk '{print $(NF)}'
}
is_running() {
ps "$(get_pid)" > /dev/null 2>&1
}
# Start the service
start() {
if is_running; then
echo "pihole-FTL is already running"
else
# Touch files to ensure they exist (create if non-existing, preserve if existing)
touch /var/log/pihole-FTL.log /var/log/pihole.log
touch /run/pihole-FTL.pid /run/pihole-FTL.port
touch /etc/pihole/dhcp.leases
mkdir -p /var/run/pihole
mkdir -p /var/log/pihole
chown pihole:pihole /var/run/pihole /var/log/pihole
# Remove possible leftovers from previous pihole-FTL processes
rm -f /dev/shm/FTL-* 2> /dev/null
rm /var/run/pihole/FTL.sock 2> /dev/null
# Ensure that permissions are set so that pihole-FTL can edit all necessary files
chown pihole:pihole /run/pihole-FTL.pid /run/pihole-FTL.port
chown pihole:pihole /etc/pihole /etc/pihole/dhcp.leases 2> /dev/null
chown pihole:pihole /var/log/pihole-FTL.log /var/log/pihole.log
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.piholeFTL
if setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW,CAP_NET_ADMIN+eip "$(which pihole-FTL)"; then
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
else
echo "Warning: Starting pihole-FTL as root because setting capabilities is not supported on this system"
pihole-FTL
fi
echo
fi
}
# Stop the service
stop() {
if is_running; then
/sbin/resolvconf -d lo.piholeFTL
kill "$(get_pid)"
for i in {1..5}; do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed, killing now"
kill -9 "$(get_pid)"
exit 1
else
echo "Stopped"
fi
else
echo "Not running"
fi
echo
}
# Indicate the service status
status() {
if is_running; then
echo "[ ok ] pihole-FTL is running"
exit 0
else
echo "[ ] pihole-FTL is not running"
exit 1
fi
}
### main logic ###
case "$1" in
stop)
stop
;;
status)
status
;;
start|restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0

View File

@@ -16,10 +16,9 @@
# Pi-hole: Update the ad sources once a week on Sunday at a random time in the
# early morning. Download any updates from the adlists
59 1 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updateGravity
# Pi-hole: Update Pi-hole! Uncomment to enable auto update
#30 2 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updatePihole
# Squash output to log, then splat the log to stdout on error to allow for
# standard crontab job error handling.
59 1 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updateGravity >/var/log/pihole_updateGravity.log || cat /var/log/pihole_updateGravity.log
# Pi-hole: Flush the log daily at 00:00
# The flush script will use logrotate if available

View File

@@ -1,11 +1,79 @@
_pihole() {
local cur prev opts
local cur prev opts opts_admin opts_checkout opts_chronometer opts_debug opts_interface opts_logging opts_privacy opts_query opts_update opts_version
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="admin blacklist chronometer debug disable enable flush help logging query reconfigure restartdns setupLCD status tail uninstall updateGravity updatePihole version whitelist checkout"
prev2="${COMP_WORDS[COMP_CWORD-2]}"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
case "${prev}" in
"pihole")
opts="admin blacklist checkout chronometer debug disable enable flush help logging query reconfigure regex restartdns status tail uninstall updateGravity updatePihole version wildcard whitelist"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
;;
"whitelist"|"blacklist"|"wildcard"|"regex")
opts_lists="\--delmode \--noreload \--quiet \--list \--nuke"
COMPREPLY=( $(compgen -W "${opts_lists}" -- ${cur}) )
;;
"admin")
opts_admin="celsius email fahrenheit hostrecord interface kelvin password privacylevel"
COMPREPLY=( $(compgen -W "${opts_admin}" -- ${cur}) )
;;
"checkout")
opts_checkout="core ftl web master dev"
COMPREPLY=( $(compgen -W "${opts_checkout}" -- ${cur}) )
;;
"chronometer")
opts_chronometer="\--exit \--json \--refresh"
COMPREPLY=( $(compgen -W "${opts_chronometer}" -- ${cur}) )
;;
"debug")
opts_debug="-a"
COMPREPLY=( $(compgen -W "${opts_debug}" -- ${cur}) )
;;
"logging")
opts_logging="on off 'off noflush'"
COMPREPLY=( $(compgen -W "${opts_logging}" -- ${cur}) )
;;
"query")
opts_query="-adlist -all -exact"
COMPREPLY=( $(compgen -W "${opts_query}" -- ${cur}) )
;;
"updatePihole"|"-up")
opts_update="--check-only"
COMPREPLY=( $(compgen -W "${opts_update}" -- ${cur}) )
;;
"version")
opts_version="\--admin \--current \--ftl \--hash \--latest \--pihole"
COMPREPLY=( $(compgen -W "${opts_version}" -- ${cur}) )
;;
"interface")
if ( [[ "$prev2" == "admin" ]] || [[ "$prev2" == "-a" ]] ); then
opts_interface="$(cat /proc/net/dev | cut -d: -s -f1)"
COMPREPLY=( $(compgen -W "${opts_interface}" -- ${cur}) )
else
return 1
fi
;;
"privacylevel")
if ( [[ "$prev2" == "admin" ]] || [[ "$prev2" == "-a" ]] ); then
opts_privacy="0 1 2 3 4"
COMPREPLY=( $(compgen -W "${opts_privacy}" -- ${cur}) )
else
return 1
fi
;;
"core"|"admin"|"ftl")
if [[ "$prev2" == "checkout" ]]; then
opts_checkout="master dev"
COMPREPLY=( $(compgen -W "${opts_checkout}" -- ${cur}) )
else
return 1
fi
;;
*)
return 1
;;
esac
return 0
}
complete -F _pihole pihole

View File

@@ -8,6 +8,8 @@
// Sanitise HTTP_HOST output
$serverName = htmlspecialchars($_SERVER["HTTP_HOST"]);
// Remove external ipv6 brackets if any
$serverName = preg_replace('/^\[(.*)\]$/', '${1}', $serverName);
if (!is_file("/etc/pihole/setupVars.conf"))
die("[ERROR] File not found: <code>/etc/pihole/setupVars.conf</code>");
@@ -38,13 +40,6 @@ $validExtTypes = array("asp", "htm", "html", "php", "rss", "xml", "");
// Get extension of current URL
$currentUrlExt = pathinfo($_SERVER["REQUEST_URI"], PATHINFO_EXTENSION);
// Check if this is served over HTTP or HTTPS
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") {
$proto = "https";
} else {
$proto = "http";
}
// Set mobile friendly viewport
$viewPort = '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>';
@@ -64,7 +59,7 @@ if ($serverName === "pi.hole") {
<html><head>
$viewPort
<link rel='stylesheet' href='/pihole/blockingpage.css' type='text/css'/>
</head><body id='splashpage'><img src='/admin/img/logo.svg'/><br/>Pi-<b>hole</b>: Your black hole for Internet advertisements</body></html>
</head><body id='splashpage'><img src='/admin/img/logo.svg'/><br/>Pi-<b>hole</b>: Your black hole for Internet advertisements<br><a href='/admin'>Did you mean to go to the admin panel?</a></body></html>
";
// Set splash/landing page based off presence of $landPage
@@ -98,15 +93,14 @@ if ($serverName === "pi.hole") {
/* Start processing Block Page from here */
// Determine placeholder text based off $svPasswd presence
$wlPlaceHolder = empty($svPasswd) ? "No admin password set" : "Javascript disabled";
// Define admin email address text based off $svEmail presence
$bpAskAdmin = !empty($svEmail) ? '<a href="mailto:'.$svEmail.'?subject=Site Blocked: '.$serverName.'"></a>' : "<span/>";
// Determine if at least one block list has been generated
if (empty(glob("/etc/pihole/list.0.*.domains")))
$blocklistglob = glob("/etc/pihole/list.0.*.domains");
if ($blocklistglob === array()) {
die("[ERROR] There are no domain lists generated lists within <code>/etc/pihole/</code>! Please update gravity by running <code>pihole -g</code>, or repair Pi-hole using <code>pihole -r</code>.");
}
// Set location of adlists file
if (is_file("/etc/pihole/adlists.list")) {
@@ -228,19 +222,29 @@ setHeader();
<?=$viewPort ?>
<meta name="robots" content="noindex,nofollow"/>
<meta http-equiv="x-dns-prefetch-control" content="off">
<link rel="shortcut icon" href="<?=$proto ?>://pi.hole/admin/img/favicon.png" type="image/x-icon"/>
<link rel="stylesheet" href="<?=$proto ?>://pi.hole/pihole/blockingpage.css" type="text/css"/>
<link rel="shortcut icon" href="//pi.hole/admin/img/favicon.png" type="image/x-icon"/>
<link rel="stylesheet" href="//pi.hole/pihole/blockingpage.css" type="text/css"/>
<title>● <?=$serverName ?></title>
<script src="<?=$proto ?>://pi.hole/admin/scripts/vendor/jquery.min.js"></script>
<script src="//pi.hole/admin/scripts/vendor/jquery.min.js"></script>
<script>
window.onload = function () {
<?php
// Remove href fallback from "Back to safety" button
if ($featuredTotal > 0) echo '$("#bpBack").removeAttr("href");';
// Enable whitelisting if $svPasswd is present & JS is available
if (!empty($svPasswd) && $featuredTotal > 0) {
echo '$("#bpWLPassword, #bpWhitelist").prop("disabled", false);';
if ($featuredTotal > 0) {
echo '$("#bpBack").removeAttr("href");';
// Enable whitelisting if JS is available
echo '$("#bpWhitelist").prop("disabled", false);';
// Enable password input if necessary
if (!empty($svPasswd)) {
echo '$("#bpWLPassword").attr("placeholder", "Password");';
echo '$("#bpWLPassword").prop("disabled", false);';
}
// Otherwise hide the input
else {
echo '$("#bpWLPassword").hide();';
}
}
?>
}
@@ -294,7 +298,7 @@ setHeader();
<form id="bpWLButtons" class="buttons">
<input id="bpWLDomain" type="text" value="<?=$serverName ?>" disabled/>
<input id="bpWLPassword" type="password" placeholder="<?=$wlPlaceHolder ?>" disabled/><button id="bpWhitelist" type="button" disabled></button>
<input id="bpWLPassword" type="password" placeholder="Javascript disabled" disabled/><button id="bpWhitelist" type="button" disabled></button>
</form>
</div>
</main>
@@ -320,6 +324,7 @@ setHeader();
setTimeout(function(){window.location.reload(1);}, 10000);
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("success");
$("#bpOutput").html("");
} else {
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("error");
@@ -329,6 +334,7 @@ setHeader();
error: function(jqXHR, exception) {
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("exception");
$("#bpOutput").html("");
}
});
}

View File

@@ -27,7 +27,7 @@ server.modules = (
)
server.document-root = "/var/www/html"
server.error-handler-404 = "pihole/index.php"
server.error-handler-404 = "/pihole/index.php"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
@@ -44,9 +44,18 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
mimetype.assign = ( ".png" => "image/png",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".html" => "text/html",
".css" => "text/css; charset=utf-8",
".js" => "application/javascript",
".json" => "application/json",
".txt" => "text/plain",
".svg" => "image/svg+xml" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
# Prevent Lighttpd from enabling Let's Encrypt SSL for every blocked domain
#include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
@@ -72,4 +81,5 @@ $HTTP["url"] =~ "^/admin/\.(.*)" {
}
# Add user chosen options held in external file
# This uses include_shell instead of an include wildcard for compatibility
include_shell "cat external.conf 2>/dev/null"

View File

@@ -28,7 +28,7 @@ server.modules = (
)
server.document-root = "/var/www/html"
server.error-handler-404 = "pihole/index.php"
server.error-handler-404 = "/pihole/index.php"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
@@ -90,4 +90,5 @@ $HTTP["url"] =~ "^/admin/\.(.*)" {
}
# Add user chosen options held in external file
# This uses include_shell instead of an include wildcard for compatibility
include_shell "cat external.conf 2>/dev/null"

View File

@@ -1,80 +0,0 @@
#!/bin/bash
### BEGIN INIT INFO
# Provides: pihole-FTL
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pihole-FTL daemon
# Description: Enable service provided by pihole-FTL daemon
### END INIT INFO
FTLUSER=pihole
PIDFILE=/var/run/pihole-FTL.pid
get_pid() {
pidof "pihole-FTL"
}
is_running() {
ps "$(get_pid)" > /dev/null 2>&1
}
# Start the service
start() {
if is_running; then
echo "pihole-FTL is already running"
else
touch /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
chown pihole:pihole /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /etc/pihole
chmod 0644 /var/log/pihole-FTL.log /run/pihole-FTL.pid /run/pihole-FTL.port /var/log/pihole.log
su -s /bin/sh -c "/usr/bin/pihole-FTL" "$FTLUSER"
echo
fi
}
# Stop the service
stop() {
if is_running; then
kill "$(get_pid)"
for i in {1..5}; do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed, killing now"
kill -9 "$(get_pid)"
exit 1
else
echo "Stopped"
fi
else
echo "Not running"
fi
echo
}
### main logic ###
case "$1" in
stop)
stop
;;
status)
status pihole-FTL
;;
start|restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0

File diff suppressed because it is too large Load Diff

View File

@@ -11,29 +11,29 @@
source "/opt/pihole/COL_TABLE"
while true; do
read -rp " ${QST} Are you sure you would like to remove ${COL_WHITE}Pi-hole${COL_NC}? [y/N] " yn
case ${yn} in
[Yy]* ) break;;
[Nn]* ) echo -e "\n ${COL_LIGHT_GREEN}Uninstall has been cancelled${COL_NC}"; exit 0;;
* ) echo -e "\n ${COL_LIGHT_GREEN}Uninstall has been cancelled${COL_NC}"; exit 0;;
esac
read -rp " ${QST} Are you sure you would like to remove ${COL_WHITE}Pi-hole${COL_NC}? [y/N] " yn
case ${yn} in
[Yy]* ) break;;
[Nn]* ) echo -e "${OVER} ${COL_LIGHT_GREEN}Uninstall has been cancelled${COL_NC}"; exit 0;;
* ) echo -e "${OVER} ${COL_LIGHT_GREEN}Uninstall has been cancelled${COL_NC}"; exit 0;;
esac
done
# Must be root to uninstall
str="Root user check"
if [[ ${EUID} -eq 0 ]]; then
echo -e " ${TICK} ${str}"
echo -e " ${TICK} ${str}"
else
# Check if sudo is actually installed
# If it isn't, exit because the uninstall can not complete
if [ -x "$(command -v sudo)" ]; then
export SUDO="sudo"
else
echo -e " ${CROSS} ${str}
Script called with non-root privileges
The Pi-hole requires elevated privleges to uninstall"
exit 1
fi
# Check if sudo is actually installed
# If it isn't, exit because the uninstall can not complete
if [ -x "$(command -v sudo)" ]; then
export SUDO="sudo"
else
echo -e " ${CROSS} ${str}
Script called with non-root privileges
The Pi-hole requires elevated privleges to uninstall"
exit 1
fi
fi
readonly PI_HOLE_FILES_DIR="/etc/.pihole"
@@ -46,178 +46,174 @@ source "${setupVars}"
distro_check
# Install packages used by the Pi-hole
if [[ "${INSTALL_WEB}" == true ]]; then
# Install the Web dependencies
DEPS=("${INSTALLER_DEPS[@]}" "${PIHOLE_DEPS[@]}" "${PIHOLE_WEB_DEPS[@]}")
# Otherwise,
else
# just install the Core dependencies
DEPS=("${INSTALLER_DEPS[@]}" "${PIHOLE_DEPS[@]}")
DEPS=("${INSTALLER_DEPS[@]}" "${PIHOLE_DEPS[@]}")
if [[ "${INSTALL_WEB_SERVER}" == true ]]; then
# Install the Web dependencies
DEPS+=("${PIHOLE_WEB_DEPS[@]}")
fi
# Compatability
if [ -x "$(command -v rpm)" ]; then
# Fedora Family
PKG_REMOVE="${PKG_MANAGER} remove -y"
package_check() {
rpm -qa | grep ^$1- > /dev/null
}
package_cleanup() {
${SUDO} ${PKG_MANAGER} -y autoremove
}
elif [ -x "$(command -v apt-get)" ]; then
# Debian Family
PKG_REMOVE="${PKG_MANAGER} -y remove --purge"
package_check() {
dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed"
}
package_cleanup() {
${SUDO} ${PKG_MANAGER} -y autoremove
${SUDO} ${PKG_MANAGER} -y autoclean
}
if [ -x "$(command -v apt-get)" ]; then
# Debian Family
PKG_REMOVE=("${PKG_MANAGER}" -y remove --purge)
package_check() {
dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed"
}
elif [ -x "$(command -v rpm)" ]; then
# Fedora Family
PKG_REMOVE=("${PKG_MANAGER}" remove -y)
package_check() {
rpm -qa | grep "^$1-" > /dev/null
}
else
echo -e " ${CROSS} OS distribution not supported"
exit 1
echo -e " ${CROSS} OS distribution not supported"
exit 1
fi
removeAndPurge() {
# Purge dependencies
echo ""
for i in "${DEPS[@]}"; do
package_check ${i} > /dev/null
if [[ "$?" -eq 0 ]]; then
while true; do
read -rp " ${QST} Do you wish to remove ${COL_WHITE}${i}${COL_NC} from your system? [Y/N] " yn
case ${yn} in
[Yy]* )
echo -ne " ${INFO} Removing ${i}...";
${SUDO} ${PKG_REMOVE} "${i}" &> /dev/null;
echo -e "${OVER} ${INFO} Removed ${i}";
break;;
[Nn]* ) echo -e " ${INFO} Skipped ${i}"; break;;
esac
done
else
echo -e " ${INFO} Package ${i} not installed"
fi
done
# Purge dependencies
echo ""
for i in "${DEPS[@]}"; do
if package_check "${i}" > /dev/null; then
while true; do
read -rp " ${QST} Do you wish to remove ${COL_WHITE}${i}${COL_NC} from your system? [Y/N] " yn
case ${yn} in
[Yy]* )
echo -ne " ${INFO} Removing ${i}...";
${SUDO} "${PKG_REMOVE[@]}" "${i}" &> /dev/null;
echo -e "${OVER} ${INFO} Removed ${i}";
break;;
[Nn]* ) echo -e " ${INFO} Skipped ${i}"; break;;
esac
done
else
echo -e " ${INFO} Package ${i} not installed"
fi
done
# Remove dnsmasq config files
${SUDO} rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null
echo -e " ${TICK} Removing dnsmasq config files"
# Remove dnsmasq config files
${SUDO} rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/*-pihole*.conf &> /dev/null
echo -e " ${TICK} Removing dnsmasq config files"
# Take care of any additional package cleaning
echo -ne " ${INFO} Removing & cleaning remaining dependencies..."
package_cleanup &> /dev/null
echo -e "${OVER} ${TICK} Removed & cleaned up remaining dependencies"
# Call removeNoPurge to remove Pi-hole specific files
removeNoPurge
# Call removeNoPurge to remove Pi-hole specific files
removeNoPurge
}
removeNoPurge() {
# Only web directories/files that are created by Pi-hole should be removed
echo -ne " ${INFO} Removing Web Interface..."
${SUDO} rm -rf /var/www/html/admin &> /dev/null
${SUDO} rm -rf /var/www/html/pihole &> /dev/null
${SUDO} rm -f /var/www/html/index.lighttpd.orig &> /dev/null
# Only web directories/files that are created by Pi-hole should be removed
echo -ne " ${INFO} Removing Web Interface..."
${SUDO} rm -rf /var/www/html/admin &> /dev/null
${SUDO} rm -rf /var/www/html/pihole &> /dev/null
${SUDO} rm -f /var/www/html/index.lighttpd.orig &> /dev/null
# If the web directory is empty after removing these files, then the parent html folder can be removed.
if [ -d "/var/www/html" ]; then
if [[ ! "$(ls -A /var/www/html)" ]]; then
${SUDO} rm -rf /var/www/html &> /dev/null
fi
fi
echo -e "${OVER} ${TICK} Removed Web Interface"
# Attempt to preserve backwards compatibility with older versions
# to guarantee no additional changes were made to /etc/crontab after
# the installation of pihole, /etc/crontab.pihole should be permanently
# preserved.
if [[ -f /etc/crontab.orig ]]; then
${SUDO} mv /etc/crontab /etc/crontab.pihole
${SUDO} mv /etc/crontab.orig /etc/crontab
${SUDO} service cron restart
echo -e " ${TICK} Restored the default system cron"
fi
# Attempt to preserve backwards compatibility with older versions
if [[ -f /etc/cron.d/pihole ]];then
${SUDO} rm -f /etc/cron.d/pihole &> /dev/null
echo -e " ${TICK} Removed /etc/cron.d/pihole"
fi
package_check lighttpd > /dev/null
if [[ $? -eq 1 ]]; then
${SUDO} rm -rf /etc/lighttpd/ &> /dev/null
echo -e " ${TICK} Removed lighttpd"
else
if [ -f /etc/lighttpd/lighttpd.conf.orig ]; then
${SUDO} mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf
fi
fi
${SUDO} rm -f /etc/dnsmasq.d/adList.conf &> /dev/null
${SUDO} rm -f /etc/dnsmasq.d/01-pihole.conf &> /dev/null
${SUDO} rm -rf /var/log/*pihole* &> /dev/null
${SUDO} rm -rf /etc/pihole/ &> /dev/null
${SUDO} rm -rf /etc/.pihole/ &> /dev/null
${SUDO} rm -rf /opt/pihole/ &> /dev/null
${SUDO} rm -f /usr/local/bin/pihole &> /dev/null
${SUDO} rm -f /etc/bash_completion.d/pihole &> /dev/null
${SUDO} rm -f /etc/sudoers.d/pihole &> /dev/null
echo -e " ${TICK} Removed config files"
# Remove FTL
if command -v pihole-FTL &> /dev/null; then
echo -ne " ${INFO} Removing pihole-FTL..."
if [[ -x "$(command -v systemctl)" ]]; then
systemctl stop pihole-FTL
else
service pihole-FTL stop
# If the web directory is empty after removing these files, then the parent html directory can be removed.
if [ -d "/var/www/html" ]; then
if [[ ! "$(ls -A /var/www/html)" ]]; then
${SUDO} rm -rf /var/www/html &> /dev/null
fi
fi
echo -e "${OVER} ${TICK} Removed Web Interface"
# Attempt to preserve backwards compatibility with older versions
# to guarantee no additional changes were made to /etc/crontab after
# the installation of pihole, /etc/crontab.pihole should be permanently
# preserved.
if [[ -f /etc/crontab.orig ]]; then
${SUDO} mv /etc/crontab /etc/crontab.pihole
${SUDO} mv /etc/crontab.orig /etc/crontab
${SUDO} service cron restart
echo -e " ${TICK} Restored the default system cron"
fi
${SUDO} rm -f /etc/init.d/pihole-FTL
${SUDO} rm -f /usr/bin/pihole-FTL
echo -e "${OVER} ${TICK} Removed pihole-FTL"
fi
# If the pihole user exists, then remove
if id "pihole" &> /dev/null; then
${SUDO} userdel -r pihole 2> /dev/null
if [[ "$?" -eq 0 ]]; then
echo -e " ${TICK} Removed 'pihole' user"
else
echo -e " ${CROSS} Unable to remove 'pihole' user"
# Attempt to preserve backwards compatibility with older versions
if [[ -f /etc/cron.d/pihole ]];then
${SUDO} rm -f /etc/cron.d/pihole &> /dev/null
echo -e " ${TICK} Removed /etc/cron.d/pihole"
fi
fi
echo -e "\n We're sorry to see you go, but thanks for checking out Pi-hole!
If you need help, reach out to us on Github, Discourse, Reddit or Twitter
Reinstall at any time: ${COL_WHITE}curl -sSL https://install.pi-hole.net | bash${COL_NC}
if package_check lighttpd > /dev/null; then
if [[ -f /etc/lighttpd/lighttpd.conf.orig ]]; then
${SUDO} mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf
fi
${COL_LIGHT_RED}Please reset the DNS on your router/clients to restore internet connectivity
${COL_LIGHT_GREEN}Uninstallation Complete! ${COL_NC}"
if [[ -f /etc/lighttpd/external.conf ]]; then
${SUDO} rm /etc/lighttpd/external.conf
fi
echo -e " ${TICK} Removed lighttpd configs"
fi
${SUDO} rm -f /etc/dnsmasq.d/adList.conf &> /dev/null
${SUDO} rm -f /etc/dnsmasq.d/01-pihole.conf &> /dev/null
${SUDO} rm -rf /var/log/*pihole* &> /dev/null
${SUDO} rm -rf /etc/pihole/ &> /dev/null
${SUDO} rm -rf /etc/.pihole/ &> /dev/null
${SUDO} rm -rf /opt/pihole/ &> /dev/null
${SUDO} rm -f /usr/local/bin/pihole &> /dev/null
${SUDO} rm -f /etc/bash_completion.d/pihole &> /dev/null
${SUDO} rm -f /etc/sudoers.d/pihole &> /dev/null
echo -e " ${TICK} Removed config files"
# Restore Resolved
if [[ -e /etc/systemd/resolved.conf.orig ]]; then
${SUDO} cp /etc/systemd/resolved.conf.orig /etc/systemd/resolved.conf
systemctl reload-or-restart systemd-resolved
fi
# Remove FTL
if command -v pihole-FTL &> /dev/null; then
echo -ne " ${INFO} Removing pihole-FTL..."
if [[ -x "$(command -v systemctl)" ]]; then
systemctl stop pihole-FTL
else
service pihole-FTL stop
fi
${SUDO} rm -f /etc/init.d/pihole-FTL
${SUDO} rm -f /usr/bin/pihole-FTL
echo -e "${OVER} ${TICK} Removed pihole-FTL"
fi
# If the pihole manpage exists, then delete and rebuild man-db
if [[ -f /usr/local/share/man/man8/pihole.8 ]]; then
${SUDO} rm -f /usr/local/share/man/man8/pihole.8 /usr/local/share/man/man8/pihole-FTL.8 /usr/local/share/man/man5/pihole-FTL.conf.5
${SUDO} mandb -q &>/dev/null
echo -e " ${TICK} Removed pihole man page"
fi
# If the pihole user exists, then remove
if id "pihole" &> /dev/null; then
if ${SUDO} userdel -r pihole 2> /dev/null; then
echo -e " ${TICK} Removed 'pihole' user"
else
echo -e " ${CROSS} Unable to remove 'pihole' user"
fi
fi
echo -e "\\n We're sorry to see you go, but thanks for checking out Pi-hole!
If you need help, reach out to us on Github, Discourse, Reddit or Twitter
Reinstall at any time: ${COL_WHITE}curl -sSL https://install.pi-hole.net | bash${COL_NC}
${COL_LIGHT_RED}Please reset the DNS on your router/clients to restore internet connectivity
${COL_LIGHT_GREEN}Uninstallation Complete! ${COL_NC}"
}
######### SCRIPT ###########
if command -v vcgencmd &> /dev/null; then
echo -e " ${INFO} All dependencies are safe to remove on Raspbian"
echo -e " ${INFO} All dependencies are safe to remove on Raspbian"
else
echo -e " ${INFO} Be sure to confirm if any dependencies should not be removed"
echo -e " ${INFO} Be sure to confirm if any dependencies should not be removed"
fi
while true; do
echo -e " ${INFO} ${COL_YELLOW}The following dependencies may have been added by the Pi-hole install:"
echo -n " "
for i in "${DEPS[@]}"; do
echo -n "${i} "
done
echo "${COL_NC}"
read -rp " ${QST} Do you wish to go through each dependency for removal? (Choosing No will leave all dependencies installed) [Y/n] " yn
case ${yn} in
[Yy]* ) removeAndPurge; break;;
[Nn]* ) removeNoPurge; break;;
* ) removeAndPurge; break;;
esac
echo -e " ${INFO} ${COL_YELLOW}The following dependencies may have been added by the Pi-hole install:"
echo -n " "
for i in "${DEPS[@]}"; do
echo -n "${i} "
done
echo "${COL_NC}"
read -rp " ${QST} Do you wish to go through each dependency for removal? (Choosing No will leave all dependencies installed) [Y/n] " yn
case ${yn} in
[Yy]* ) removeAndPurge; break;;
[Nn]* ) removeNoPurge; break;;
* ) removeAndPurge; break;;
esac
done

View File

@@ -11,22 +11,24 @@
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
export LC_ALL=C
coltable="/opt/pihole/COL_TABLE"
source "${coltable}"
regexconverter="/opt/pihole/wildcard_regex_converter.sh"
source "${regexconverter}"
basename="pihole"
PIHOLE_COMMAND="/usr/local/bin/${basename}"
piholeDir="/etc/${basename}"
piholeRepo="/etc/.${basename}"
adListFile="${piholeDir}/adlists.list"
adListDefault="${piholeDir}/adlists.default"
adListRepoDefault="${piholeRepo}/adlists.default"
whitelistFile="${piholeDir}/whitelist.txt"
blacklistFile="${piholeDir}/blacklist.txt"
wildcardFile="/etc/dnsmasq.d/03-pihole-wildcard.conf"
regexFile="${piholeDir}/regex.list"
adList="${piholeDir}/gravity.list"
blackList="${piholeDir}/black.list"
@@ -42,6 +44,10 @@ preEventHorizon="list.preEventHorizon"
skipDownload="false"
resolver="pihole-FTL"
haveSourceUrls=true
# Source setupVars from install script
setupVars="${piholeDir}/setupVars.conf"
if [[ -f "${setupVars}" ]];then
@@ -62,13 +68,37 @@ else
exit 1
fi
# Source pihole-FTL from install script
pihole_FTL="${piholeDir}/pihole-FTL.conf"
if [[ -f "${pihole_FTL}" ]]; then
source "${pihole_FTL}"
fi
if [[ -z "${BLOCKINGMODE}" ]] ; then
BLOCKINGMODE="NULL"
fi
# Determine if superseded pihole.conf exists
if [[ -r "${piholeDir}/pihole.conf" ]]; then
echo -e " ${COL_LIGHT_RED}Ignoring overrides specified within pihole.conf! ${COL_NC}"
fi
# Determine if Pi-hole blocking is disabled
# If this is the case, we want to update
# gravity.list.bck and black.list.bck instead of
# gravity.list and black.list
detect_pihole_blocking_status() {
if [[ "${BLOCKING_ENABLED}" == false ]]; then
echo -e " ${INFO} Pi-hole blocking is disabled"
adList="${adList}.bck"
blackList="${blackList}.bck"
else
echo -e " ${INFO} Pi-hole blocking is enabled"
fi
}
# Determine if DNS resolution is available before proceeding
gravity_DNSLookup() {
gravity_CheckDNSResolutionAvailable() {
local lookupDomain="pi.hole"
# Determine if $localList does not exist
@@ -102,7 +132,7 @@ gravity_DNSLookup() {
fi
# Determine error output message
if pidof dnsmasq &> /dev/null; then
if pidof ${resolver} &> /dev/null; then
echo -e " ${CROSS} DNS resolution is currently unavailable"
else
echo -e " ${CROSS} DNS service is not running"
@@ -120,27 +150,19 @@ gravity_DNSLookup() {
done
# Try again
gravity_DNSLookup
gravity_CheckDNSResolutionAvailable
}
# Retrieve blocklist URLs and parse domains from adlists.list
gravity_Collapse() {
gravity_GetBlocklistUrls() {
echo -e " ${INFO} ${COL_BOLD}Neutrino emissions detected${COL_NC}..."
# Determine if adlists file needs handling
if [[ ! -f "${adListFile}" ]]; then
# Create "adlists.list" by copying "adlists.default" from internal core repo
cp "${adListRepoDefault}" "${adListFile}" 2> /dev/null || \
echo -e " ${CROSS} Unable to copy ${adListFile##*/} from ${piholeRepo}"
elif [[ -f "${adListDefault}" ]] && [[ -f "${adListFile}" ]]; then
if [[ -f "${adListDefault}" ]] && [[ -f "${adListFile}" ]]; then
# Remove superceded $adListDefault file
rm "${adListDefault}" 2> /dev/null || \
echo -e " ${CROSS} Unable to remove ${adListDefault}"
fi
local str="Pulling blocklist source list into range"
echo -ne " ${INFO} ${str}..."
# Retrieve source URLs from $adListFile
# Logic: Remove comments and empty lines
mapfile -t sources <<< "$(grep -v -E "^(#|$)" "${adListFile}" 2> /dev/null)"
@@ -156,16 +178,20 @@ gravity_Collapse() {
}' <<< "$(printf '%s\n' "${sources[@]}")" 2> /dev/null
)"
local str="Pulling blocklist source list into range"
if [[ -n "${sources[*]}" ]] && [[ -n "${sourceDomains[*]}" ]]; then
echo -e "${OVER} ${TICK} ${str}"
else
echo -e "${OVER} ${CROSS} ${str}"
gravity_Cleanup "error"
echo -e " ${INFO} No source list found, or it is empty"
echo ""
haveSourceUrls=false
fi
}
# Define options for when retrieving blocklists
gravity_Supernova() {
gravity_SetDownloadOptions() {
local url domain agent cmd_ext str
echo ""
@@ -180,7 +206,7 @@ gravity_Supernova() {
activeDomains[$i]="${saveLocation}"
# Default user-agent (for Cloudflare's Browser Integrity Check: https://support.cloudflare.com/hc/en-us/articles/200170086-What-does-the-Browser-Integrity-Check-do-)
agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
# Provide special commands for blocklists which may need them
case "${domain}" in
@@ -190,7 +216,7 @@ gravity_Supernova() {
if [[ "${skipDownload}" == false ]]; then
echo -e " ${INFO} Target: ${domain} (${url##*/})"
gravity_Pull "${url}" "${cmd_ext}" "${agent}"
gravity_DownloadBlocklistFromUrl "${url}" "${cmd_ext}" "${agent}"
echo ""
fi
done
@@ -198,7 +224,7 @@ gravity_Supernova() {
}
# Download specified URL and perform checks on HTTP status and file content
gravity_Pull() {
gravity_DownloadBlocklistFromUrl() {
local url="${1}" cmd_ext="${2}" agent="${3}" heisenbergCompensator="" patternBuffer str httpCode success=""
# Create temp file to store content on disk instead of RAM
@@ -214,12 +240,52 @@ gravity_Pull() {
str="Status:"
echo -ne " ${INFO} ${str} Pending..."
blocked=false
case $BLOCKINGMODE in
"IP-NODATA-AAAA"|"IP")
if [[ $(dig "${domain}" +short | grep "${IPV4_ADDRESS}" -c) -ge 1 ]]; then
blocked=true
fi;;
"NXDOMAIN")
if [[ $(dig "${domain}" | grep "NXDOMAIN" -c) -ge 1 ]]; then
blocked=true
fi;;
"NULL"|*)
if [[ $(dig "${domain}" +short | grep "0.0.0.0" -c) -ge 1 ]]; then
blocked=true
fi;;
esac
if [[ "${blocked}" == true ]]; then
printf -v ip_addr "%s" "${PIHOLE_DNS_1%#*}"
if [[ ${PIHOLE_DNS_1} != *"#"* ]]; then
port=53
else
printf -v port "%s" "${PIHOLE_DNS_1#*#}"
fi
ip=$(dig "@${ip_addr}" -p "${port}" +short "${domain}" | tail -1)
if [[ $(echo "${url}" | awk -F '://' '{print $1}') = "https" ]]; then
port=443;
else port=80
fi
bad_list=$(pihole -q -adlist "${domain}" | head -n1 | awk -F 'Match found in ' '{print $2}')
echo -e "${OVER} ${CROSS} ${str} ${domain} is blocked by ${bad_list%:}. Using DNS on ${PIHOLE_DNS_1} to download ${url}";
echo -ne " ${INFO} ${str} Pending..."
cmd_ext="--resolve $domain:$port:$ip $cmd_ext"
fi
# shellcheck disable=SC2086
httpCode=$(curl -s -L ${cmd_ext} ${heisenbergCompensator} -w "%{http_code}" -A "${agent}" "${url}" -o "${patternBuffer}" 2> /dev/null)
case $url in
# Did we "download" a local file?
"file"*)
if [[ -s "${patternBuffer}" ]]; then
echo -e "${OVER} ${TICK} ${str} Retrieval successful"; success=true
else
echo -e "${OVER} ${CROSS} ${str} Not found / empty list"
fi;;
# Did we "download" a remote file?
"http"*)
*)
# Determine "Status:" output based on HTTP response
case "${httpCode}" in
"200") echo -e "${OVER} ${TICK} ${str} Retrieval successful"; success=true;;
@@ -233,16 +299,8 @@ gravity_Pull() {
"504") echo -e "${OVER} ${CROSS} ${str} Connection Timed Out (Gateway)";;
"521") echo -e "${OVER} ${CROSS} ${str} Web Server Is Down (Cloudflare)";;
"522") echo -e "${OVER} ${CROSS} ${str} Connection Timed Out (Cloudflare)";;
* ) echo -e "${OVER} ${CROSS} ${str} ${httpCode}";;
* ) echo -e "${OVER} ${CROSS} ${str} ${url} (${httpCode})";;
esac;;
# Did we "download" a local file?
"file"*)
if [[ -s "${patternBuffer}" ]]; then
echo -e "${OVER} ${TICK} ${str} Retrieval successful"; success=true
else
echo -e "${OVER} ${CROSS} ${str} Not found / empty list"
fi;;
*) echo -e "${OVER} ${CROSS} ${str} ${url} ${httpCode}";;
esac
# Determine if the blocklist was downloaded and saved correctly
@@ -277,9 +335,9 @@ gravity_ParseFileIntoDomains() {
# Most of the lists downloaded are already in hosts file format but the spacing/formating is not contigious
# This helps with that and makes it easier to read
# It also helps with debugging so each stage of the script can be researched more in depth
#Awk -F splits on given IFS, we grab the right hand side (chops trailing #coments and /'s to grab the domain only.
#Last awk command takes non-commented lines and if they have 2 fields, take the left field (the domain) and leave
#+ the right (IP address), otherwise grab the single field.
# Awk -F splits on given IFS, we grab the right hand side (chops trailing #coments and /'s to grab the domain only.
# Last awk command takes non-commented lines and if they have 2 fields, take the right field (the domain) and leave
# the left (IP address), otherwise grab the single field.
< ${source} awk -F '#' '{print $1}' | \
awk -F '/' '{print $1}' | \
@@ -295,46 +353,7 @@ gravity_ParseFileIntoDomains() {
# Determine how to parse individual source file formats
if [[ "${firstLine,,}" =~ (adblock|ublock|^!) ]]; then
# Compare $firstLine against lower case words found in Adblock lists
echo -ne " ${INFO} Format: Adblock"
# Define symbols used as comments: [!
# "||.*^" includes the "Example 2" domains we can extract
# https://adblockplus.org/filter-cheatsheet
abpFilter="/^(\\[|!)|^(\\|\\|.*\\^)/"
# Parse Adblock lists by extracting "Example 2" domains
# Logic: Ignore lines which do not include comments or domain name anchor
awk ''"${abpFilter}"' {
# Remove valid adblock type options
gsub(/\$?~?(important|third-party|popup|subdocument|websocket),?/, "", $0)
# Remove starting domain name anchor "||" and ending seperator "^"
gsub(/^(\|\|)|(\^)/, "", $0)
# Remove invalid characters (*/,=$)
if($0 ~ /[*\/,=\$]/) { $0="" }
# Remove lines which are only IPv4 addresses
if($0 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) { $0="" }
if($0) { print $0 }
}' "${source}" > "${destination}"
# Determine if there are Adblock exception rules
# https://adblockplus.org/filters
if grep -q "^@@||" "${source}" &> /dev/null; then
# Parse Adblock lists by extracting exception rules
# Logic: Ignore lines which do not include exception format "@@||example.com^"
awk -F "[|^]" '/^@@\|\|.*\^/ {
# Remove valid adblock type options
gsub(/\$?~?(third-party)/, "", $0)
# Remove invalid characters (*/,=$)
if($0 ~ /[*\/,=\$]/) { $0="" }
if($3) { print $3 }
}' "${source}" > "${destination}.exceptionsFile.tmp"
# Remove exceptions
grep -F -x -v -f "${destination}.exceptionsFile.tmp" "${destination}" > "${source}"
mv "${source}" "${destination}"
fi
echo -e "${OVER} ${TICK} Format: Adblock"
echo -e " ${CROSS} Format: Adblock (list type not supported)"
elif grep -q "^address=/" "${source}" &> /dev/null; then
# Parse Dnsmasq format lists
echo -e " ${CROSS} Format: Dnsmasq (list type not supported)"
@@ -343,13 +362,18 @@ gravity_ParseFileIntoDomains() {
# Scanning for "^IPv4$" is too slow with large (1M) lists on low-end hardware
echo -ne " ${INFO} Format: URL"
awk '{
# Remove URL protocol, optional "username:password@", and ":?/;"
if ($0 ~ /[:?\/;]/) { gsub(/(^.*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
# Remove lines which are only IPv4 addresses
if ($0 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) { $0="" }
if ($0) { print $0 }
}' "${source}" 2> /dev/null > "${destination}"
awk '
# Remove URL scheme, optional "username:password@", and ":?/;"
# The scheme must be matched carefully to avoid blocking the wrong URL
# in cases like:
# http://www.evil.com?http://www.good.com
# See RFC 3986 section 3.1 for details.
/[:?\/;]/ { gsub(/(^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/(.*:.*@)?|[:?\/;].*)/, "", $0) }
# Skip lines which are only IPv4 addresses
/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ { next }
# Print if nonempty
length { print }
' "${source}" 2> /dev/null > "${destination}"
echo -e "${OVER} ${TICK} Format: URL"
else
@@ -365,11 +389,13 @@ gravity_ParseFileIntoDomains() {
}
# Create (unfiltered) "Matter and Light" consolidated list
gravity_Schwarzschild() {
gravity_ConsolidateDownloadedBlocklists() {
local str lastLine
str="Consolidating blocklists"
echo -ne " ${INFO} ${str}..."
if [[ "${haveSourceUrls}" == true ]]; then
echo -ne " ${INFO} ${str}..."
fi
# Empty $matterAndLight if it already exists, otherwise, create it
: > "${piholeDir}/${matterAndLight}"
@@ -388,51 +414,43 @@ gravity_Schwarzschild() {
fi
fi
done
echo -e "${OVER} ${TICK} ${str}"
if [[ "${haveSourceUrls}" == true ]]; then
echo -e "${OVER} ${TICK} ${str}"
fi
}
# Parse consolidated list into (filtered, unique) domains-only format
gravity_Filter() {
gravity_SortAndFilterConsolidatedList() {
local str num
str="Extracting domains from blocklists"
echo -ne " ${INFO} ${str}..."
if [[ "${haveSourceUrls}" == true ]]; then
echo -ne " ${INFO} ${str}..."
fi
# Parse into hosts file
gravity_ParseFileIntoDomains "${piholeDir}/${matterAndLight}" "${piholeDir}/${parsedMatter}"
# Format $parsedMatter line total as currency
num=$(printf "%'.0f" "$(wc -l < "${piholeDir}/${parsedMatter}")")
echo -e "${OVER} ${TICK} ${str}
${INFO} Number of domains being pulled in by gravity: ${COL_BLUE}${num}${COL_NC}"
if [[ "${haveSourceUrls}" == true ]]; then
echo -e "${OVER} ${TICK} ${str}"
fi
echo -e " ${INFO} Number of domains being pulled in by gravity: ${COL_BLUE}${num}${COL_NC}"
str="Removing duplicate domains"
echo -ne " ${INFO} ${str}..."
if [[ "${haveSourceUrls}" == true ]]; then
echo -ne " ${INFO} ${str}..."
fi
sort -u "${piholeDir}/${parsedMatter}" > "${piholeDir}/${preEventHorizon}"
echo -e "${OVER} ${TICK} ${str}"
# Format $preEventHorizon line total as currency
num=$(printf "%'.0f" "$(wc -l < "${piholeDir}/${preEventHorizon}")")
echo -e " ${INFO} Number of unique domains trapped in the Event Horizon: ${COL_BLUE}${num}${COL_NC}"
}
# Whitelist unique blocklist domain sources
gravity_WhitelistBLD() {
local uniqDomains str
echo ""
# Create array of unique $sourceDomains
mapfile -t uniqDomains <<< "$(awk '{ if(!a[$1]++) { print $1 } }' <<< "$(printf '%s\n' "${sourceDomains[@]}")")"
str="Number of blocklist source domains being added to the whitelist: ${#uniqDomains[@]}"
echo -ne " ${INFO} ${str}..."
# Whitelist $uniqDomains
"${PIHOLE_COMMAND}" -w -nr -q ${uniqDomains[*]} &> /dev/null
echo -e "${OVER} ${INFO} ${str}"
if [[ "${haveSourceUrls}" == true ]]; then
echo -e "${OVER} ${TICK} ${str}"
# Format $preEventHorizon line total as currency
num=$(printf "%'.0f" "$(wc -l < "${piholeDir}/${preEventHorizon}")")
echo -e " ${INFO} Number of unique domains trapped in the Event Horizon: ${COL_BLUE}${num}${COL_NC}"
fi
}
# Whitelist user-defined domains
@@ -449,12 +467,12 @@ gravity_Whitelist() {
echo -ne " ${INFO} ${str}..."
# Print everything from preEventHorizon into whitelistMatter EXCEPT domains in $whitelistFile
grep -F -x -v -f "${whitelistFile}" "${piholeDir}/${preEventHorizon}" > "${piholeDir}/${whitelistMatter}"
comm -23 "${piholeDir}/${preEventHorizon}" <(sort "${whitelistFile}") > "${piholeDir}/${whitelistMatter}"
echo -e "${OVER} ${INFO} ${str}"
}
# Output count of blacklisted domains and wildcards
# Output count of blacklisted domains and regex filters
gravity_ShowBlockCount() {
local num
@@ -463,13 +481,9 @@ gravity_ShowBlockCount() {
echo -e " ${INFO} Number of blacklisted domains: ${num}"
fi
if [[ -f "${wildcardFile}" ]]; then
num=$(grep -c "^" "${wildcardFile}")
# If IPv4 and IPv6 is used, divide total wildcard count by 2
if [[ -n "${IPV4_ADDRESS}" ]] && [[ -n "${IPV6_ADDRESS}" ]];then
num=$(( num/2 ))
fi
echo -e " ${INFO} Number of wildcard blocked domains: ${num}"
if [[ -f "${regexFile}" ]]; then
num=$(grep -cv "^#" "${regexFile}")
echo -e " ${INFO} Number of regex filters: ${num}"
fi
}
@@ -522,7 +536,12 @@ gravity_ParseBlacklistDomains() {
# Empty $accretionDisc if it already exists, otherwise, create it
: > "${piholeDir}/${accretionDisc}"
gravity_ParseDomainsIntoHosts "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}"
if [[ -f "${piholeDir}/${whitelistMatter}" ]]; then
mv "${piholeDir}/${whitelistMatter}" "${piholeDir}/${accretionDisc}"
else
# There was no whitelist file, so use preEventHorizon instead of whitelistMatter.
cp "${piholeDir}/${preEventHorizon}" "${piholeDir}/${accretionDisc}"
fi
# Move the file over as /etc/pihole/gravity.list so dnsmasq can use it
output=$( { mv "${piholeDir}/${accretionDisc}" "${adList}"; } 2>&1 )
@@ -539,11 +558,9 @@ gravity_ParseUserDomains() {
if [[ ! -f "${blacklistFile}" ]]; then
return 0
fi
gravity_ParseDomainsIntoHosts "${blacklistFile}" "${blackList}.tmp"
# Copy the file over as /etc/pihole/black.list so dnsmasq can use it
mv "${blackList}.tmp" "${blackList}" 2> /dev/null || \
echo -e "\\n ${CROSS} Unable to move ${blackList##*/}.tmp to ${piholeDir}"
cp "${blacklistFile}" "${blackList}" 2> /dev/null || \
echo -e "\\n ${CROSS} Unable to move ${blacklistFile##*/} to ${piholeDir}"
}
# Trap Ctrl-C
@@ -563,7 +580,7 @@ gravity_Cleanup() {
rm ${piholeDir}/*.tmp 2> /dev/null
rm /tmp/*.phgpb 2> /dev/null
# Ensure this function only runs when gravity_Supernova() has completed
# Ensure this function only runs when gravity_SetDownloadOptions() has completed
if [[ "${gravity_Blackbody:-}" == true ]]; then
# Remove any unused .domains files
for file in ${piholeDir}/*.${domainsExtension}; do
@@ -578,7 +595,7 @@ gravity_Cleanup() {
echo -e "${OVER} ${TICK} ${str}"
# Only restart DNS service if offline
if ! pidof dnsmasq &> /dev/null; then
if ! pidof ${resolver} &> /dev/null; then
"${PIHOLE_COMMAND}" restartdns
dnsWasOffline=true
fi
@@ -622,15 +639,18 @@ if [[ "${forceDelete:-}" == true ]]; then
echo -e "${OVER} ${TICK} ${str}"
fi
detect_pihole_blocking_status
# Determine which functions to run
if [[ "${skipDownload}" == false ]]; then
# Gravity needs to download blocklists
gravity_DNSLookup
gravity_Collapse
gravity_Supernova
gravity_Schwarzschild
gravity_Filter
gravity_WhitelistBLD
gravity_CheckDNSResolutionAvailable
gravity_GetBlocklistUrls
if [[ "${haveSourceUrls}" == true ]]; then
gravity_SetDownloadOptions
fi
gravity_ConsolidateDownloadedBlocklists
gravity_SortAndFilterConsolidatedList
else
# Gravity needs to modify Blacklist/Whitelist/Wildcards
echo -e " ${INFO} Using cached Event Horizon list..."
@@ -643,6 +663,7 @@ if [[ "${skipDownload}" == false ]] || [[ "${listType}" == "whitelist" ]]; then
gravity_Whitelist
fi
convert_wildcard_to_regex
gravity_ShowBlockCount
# Perform when downloading blocklists, or modifying the white/blacklist (not wildcards)

112
manpages/pihole-FTL.8 Normal file
View File

@@ -0,0 +1,112 @@
.TH "Pihole-FTL" "8" "pihole-FTL" "Pi-hole" "June 2018"
.SH "NAME"
pihole-FTL - Pi-hole : The Faster-Than-Light (FTL) Engine
.br
.SH "SYNOPSIS"
\fBservice pihole-FTL \fR(\fBstart\fR|\fBstop\fR|\fBrestart\fR)
.br
\fBpihole-FTL debug\fR
.br
\fBpihole-FTL test\fR
.br
\fBpihole-FTL -v\fR
.br
\fBpihole-FTL -t\fR
.br
\fBpihole-FTL -b\fR
.br
\fBpihole-FTL -f\fR
.br
\fBpihole-FTL -h\fR
.br
\fBpihole-FTL dnsmasq-test\fR
.br
\fBpihole-FTL --\fR (\fBoptions\fR)
.br
.SH "DESCRIPTION"
Pi-hole : The Faster-Than-Light (FTL) Engine is a lightweight, purpose-built daemon used to provide statistics needed for the Pi-hole Web Interface, and its API can be easily integrated into your own projects. Although it is an optional component of the Pi-hole ecosystem, it will be installed by default to provide statistics. As the name implies, FTL does its work \fIvery\fR \fIquickly\fR!
.br
Usage
.br
\fBservice pihole-FTL start\fR
.br
Start the pihole-FTL daemon
.br
\fBservice pihole-FTL stop\fR
.br
Stop the pihole-FTL daemon
.br
\fBservice pihole-FTL restart\fR
.br
If the pihole-FTP daemon is running, stop and then start, otherwise start.
.br
Command line arguments
.br
\fBdebug\fR
.br
Don't go into daemon mode (stay in foreground) + more verbose logging
.br
\fBtest\fR
.br
Start FTL and process everything, but shut down immediately afterwards
.br
\fB-v, version\fR
.br
Don't start FTL, show only version
.br
\fB-t, tag\fR
.br
Don't start FTL, show only git tag
.br
\fB-b, branch\fR
.br
Don't start FTL, show only git branch FTL was compiled from
.br
\fB-f, no-daemon\fR
.br
Don't go into background (daemon mode)
.br
\fB-h, help\fR
.br
Don't start FTL, show help
.br
\fBdnsmasq-test\fR
.br
Test resolver config file syntax
.br
\fB--\fR (options)
.br
Pass options to internal dnsmasq resolver
.br
.SH "EXAMPLE"
Command line arguments can be arbitrarily combined, e.g:
.br
\fBpihole-FTL debug test\fR
.br
Start ftl in foreground with more verbose logging, process everything and shutdown immediately
.br
.SH "SEE ALSO"
\fBpihole\fR(8), \fBpihole-FTL.conf\fR(5)
.br
.SH "COLOPHON"
Get sucked into the latest news and community activity by entering Pi-hole's orbit. Information about Pi-hole, and the latest version of the software can be found at https://pi-hole.net
.br

104
manpages/pihole-FTL.conf.5 Normal file
View File

@@ -0,0 +1,104 @@
.TH "pihole-FTL.conf" "5" "pihole-FTL.conf" "pihole-FTL.conf" "June 2018"
.SH "NAME"
pihole-FTL.conf - FTL's config file
.br
.SH "DESCRIPTION"
/etc/pihole/pihole-FTL.conf will be read by \fBpihole-FTL(8)\fR on startup.
.br
\fBSOCKET_LISTENING=localonly|all\fR
.br
Listen only for local socket connections or permit all connections
.br
\fBQUERY_DISPLAY=yes|no\fR
.br
Display all queries? Set to no to hide query display
.br
\fBAAAA_QUERY_ANALYSIS=yes|no\fR
.br
Allow FTL to analyze AAAA queries from pihole.log?
.br
\fBRESOLVE_IPV6=yes|no\fR
.br
Should FTL try to resolve IPv6 addresses to host names?
.br
\fBRESOLVE_IPV4=yes|no\fR
.br
Should FTL try to resolve IPv4 addresses to host names?
.br
\fBMAXDBDAYS=365\fR
.br
How long should queries be stored in the database?
.br
Setting this to 0 disables the database
.br
\fBDBINTERVAL=1.0\fR
.br
How often do we store queries in FTL's database [minutes]?
.br
\fBDBFILE=/etc/pihole/pihole-FTL.db\fR
.br
Specify path and filename of FTL's SQLite long-term database.
.br
Setting this to DBFILE= disables the database altogether
.br
\fBMAXLOGAGE=24.0\fR
.br
Up to how many hours of queries should be imported from the database and logs?
.br
Maximum is 744 (31 days)
.br
\fBFTLPORT=4711\fR
.br
On which port should FTL be listening?
.br
\fBPRIVACYLEVEL=0|1|2|3|4\fR
.br
Which privacy level is used?
.br
0 - show everything
.br
1 - hide domains
.br
2 - hide domains and clients
.br
3 - anonymous mode (hide everything)
.br
4 - disable all statistics
.br
\fBIGNORE_LOCALHOST=no|yes\fR
.br
Should FTL ignore queries coming from the local machine?
.br
\fBBLOCKINGMODE=IP|IP-AAAA-NODATA|NXDOMAIN|NULL\fR
.br
How should FTL reply to blocked queries?
.br
For each setting, the option shown first is the default.
.br
.SH "SEE ALSO"
\fBpihole\fR(8), \fBpihole-FTL\fR(8)
.br
.SH "COLOPHON"
Pi-hole : The Faster-Than-Light (FTL) Engine is a lightweight, purpose-built daemon used to provide statistics needed for the Pi-hole Web Interface, and its API can be easily integrated into your own projects. Although it is an optional component of the Pi-hole ecosystem, it will be installed by default to provide statistics. As the name implies, FTL does its work \fIvery quickly\fR!
.br
Get sucked into the latest news and community activity by entering Pi-hole's orbit. Information about Pi-hole, and the latest version of the software can be found at https://pi-hole.net
.br

361
manpages/pihole.8 Normal file
View File

@@ -0,0 +1,361 @@
.TH "Pi-hole" "8" "Pi-hole" "Pi-hole" "May 2018"
.SH "NAME"
Pi-hole : A black-hole for internet advertisements
.br
.SH "SYNOPSIS"
\fBpihole\fR (\fB-w\fR|\fB-b\fR|\fB--wild\fR|\fB--regex\fR) [options] domain(s)
.br
\fBpihole -a\fR \fB-p\fR password
.br
\fBpihole -a\fR (\fB-c|-f|-k\fR)
.br
\fBpihole -a\fR [\fB-r\fR hostrecord]
.br
\fBpihole -a -e\fR email
.br
\fBpihole -a -i\fR interface
.br
\fBpihole -a -l\fR privacylevel
.br
\fBpihole -c\fR [-j|-r|-e]
.br
\fBpihole\fR \fB-d\fR [-a]
.br
\fBpihole -f
.br
pihole -r
.br
pihole -t
.br
pihole -g\fR
.br
\fBpihole\fR -\fBq\fR [options]
.br
\fBpihole\fR \fB-l\fR (\fBon|off|off noflush\fR)
.br
\fBpihole -up \fR[--check-only]
.br
\fBpihole -v\fR [-p|-a|-f] [-c|-l|-hash]
.br
\fBpihole uninstall
.br
pihole status
.br
pihole restartdns\fR
.br
\fBpihole\fR (\fBenable\fR|\fBdisable\fR [time])
.br
\fBpihole\fR \fBcheckout\fR repo [branch]
.br
\fBpihole\fR \fBhelp\fR
.br
.SH "DESCRIPTION"
Available commands and options:
.br
\fB-w, whitelist\fR [options] [<domain1> <domain2 ...>]
.br
Adds or removes specified domain or domains tho the Whitelist
.br
\fB-b, blacklist\fR [options] [<domain1> <domain2 ...>]
.br
Adds or removes specified domain or domains to the blacklist
.br
\fB--wild, wildcard\fR [options] [<domain1> <domain2 ...>]
.br
Add or removes specified domain to the wildcard blacklist
.br
\fB--regex, regex\fR [options] [<regex1> <regex2 ...>]
.br
Add or removes specified regex filter to the regex blacklist
.br
(Whitelist/Blacklist manipulation options):
.br
-d, --delmode Remove domain(s) from the list
.br
-nr, --noreload Update list without refreshing dnsmasq
.br
-q, --quiet Make output less verbose
.br
-l, --list Display all your listed domains
.br
--nuke Removes all entries in a list
.br
\fB-d, debug\fR [-a]
.br
Start a debugging session
.br
-a Enable automated debugging
.br
\fB-f, flush\fR
.br
Flush the Pi-hole log
.br
\fB-r, reconfigure\fR
.br
Reconfigure or Repair Pi-hole subsystems
.br
\fB-t, tail\fR
.br
View the live output of the Pi-hole log
.br
\fB-a, admin\fR [options]
.br
(Admin options):
.br
-p, password Set Web Interface password
.br
-c, celsius Set Celsius as preferred temperature unit
.br
-f, fahrenheit Set Fahrenheit as preferred temperature unit
.br
-k, kelvin Set Kelvin as preferred temperature unit
.br
-r, hostrecord Add a name to the DNS associated to an
IPv4/IPv6 address
.br
-e, email Set an administrative contact address for the
Block Page
.br
-i, interface Specify dnsmasq's interface listening behavior
.br
-l, privacylevel <level> Set privacy level
(0 = lowest, 4 = highest)
.br
\fB-c, chronometer\fR [options]
.br
Calculates stats and displays to an LCD
.br
(Chronometer Options):
.br
-j, --json Output stats as JSON formatted string
.br
-r, --refresh Set update frequency (in seconds)
.br
-e, --exit Output stats and exit witout refreshing
.br
\fB-g, updateGravity\fR
.br
Update the list of ad-serving domains
.br
\fB-q, query\fR [option]
.br
Query the adlists for a specified domain
.br
(Query options):
.br
-adlist Print the name of the block list URL
.br
-exact Search the block lists for exact domain matches
.br
-all Return all query matches within a block list
.br
\fB-h, --help, help\fR
.br
Show a help dialog
.br
\fB-l, logging\fR [on|off|off noflush]
.br
Specify whether the Pi-hole log should be used
.br
(Logging options):
.br
on Enable the Pi-hole log at /var/log/pihole.log
.br
off Disable and flush the Pi-hole log at
/var/log/pihole.log
.br
off noflush Disable the Pi-hole log at /var/log/pihole.log
.br
\fB-up, updatePihole\fR [--check-only]
.br
Update Pi-hole subsystems
.br
--check-only Exit script before update is performed.
.br
\fB-v, version\fR [repo] [options]
.br
Show installed versions of Pi-hole, Web Interface &amp; FTL
.br
.br
(repo options):
.br
-p, --pihole Only retrieve info regarding Pi-hole repository
.br
-a, --admin Only retrieve info regarding AdminLTE
repository
.br
-f, --ftl Only retrieve info regarding FTL repository
.br
(version options):
.br
-c, --current Return the current version
.br
-l, --latest Return the latest version
.br
--hash Return the Github hash from your local
repositories
.br
\fBuninstall\fR
.br
Uninstall Pi-hole from your system
.br
\fBstatus\fR
.br
Display the running status of Pi-hole subsystems
.br
\fBenable\fR
.br
Enable Pi-hole subsystems
.br
\fBdisable\fR [time]
.br
Disable Pi-hole subsystems, optionally for a set duration
.br
(time options):
.br
#s Disable Pi-hole functionality for # second(s)
.br
#m Disable Pi-hole functionality for # minute(s)
.br
\fBrestartdns\fR
.br
Restart Pi-hole subsystems
.br
\fBcheckout\fR [repo] [branch]
.br
Switch Pi-hole subsystems to a different Github branch
.br
(repo options):
.br
core Change the branch of Pi-hole's core subsystem
.br
web Change the branch of Admin Console subsystem
.br
ftl Change the branch of Pi-hole's FTL subsystem
.br
(branch options):
.br
master Update subsystems to the latest stable release
.br
dev Update subsystems to the latest development
release
.br
branchname Update subsystems to the specified branchname
.br
.SH "EXAMPLE"
Some usage examples
.br
Whitelist/blacklist manipulation
.br
\fBpihole -w iloveads.example.com\fR
.br
Adds "iloveads.example.com" to whitelist
.br
\fBpihole -b -d noads.example.com\fR
.br
Removes "noads.example.com" from blacklist
.br
\fBpihole --wild example.com\fR
.br
Adds example.com as a wildcard - would block all subdomains of
example.com, including example.com itself.
.br
\fBpihole --regex "ad.*\\.example\\.com$"\fR
.br
Adds "ad.*\\.example\\.com$" to the regex blacklist.
Would block all subdomains of example.com which start with "ad"
.br
Changing the Web Interface password
.br
\fBpihole -a -p ExamplePassword\fR
.br
Change the password to "ExamplePassword"
.br
Updating lists from internet sources
.br
\fBpihole -g\fR
.br
Update the list of ad-serving domains
.br
Displaying version information
.br
\fBpihole -v -a -c\fR
.br
Display the current version of AdminLTE
.br
Temporarily disabling Pi-hole
.br
\fBpihole disable 5m\fR
.br
Disable Pi-hole functionality for five minutes
.br
Switching Pi-hole subsystem branches
.br
\fBpihole checkout master\fR
.br
Switch to master branch
.br
\fBpihole checkout core dev\fR
.br
Switch to core development branch
.br
.SH "SEE ALSO"
\fBlighttpd\fR(8), \fBpihole-FTL\fR(8)
.br
.SH "COLOPHON"
Get sucked into the latest news and community activity by entering Pi-hole's orbit. Information about Pi-hole, and the latest version of the software can be found at https://pi-hole.net.
.br

396
pihole
View File

@@ -10,20 +10,19 @@
# Please see LICENSE file for your rights under this license.
readonly PI_HOLE_SCRIPT_DIR="/opt/pihole"
readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
readonly gravitylist="/etc/pihole/gravity.list"
readonly blacklist="/etc/pihole/black.list"
# setupVars and PI_HOLE_BIN_DIR are not readonly here because in some funcitons (checkout),
# it might get set again when the installer is sourced. This causes an
# error due to modifying a readonly variable.
setupVars="/etc/pihole/setupVars.conf"
PI_HOLE_BIN_DIR="/usr/local/bin"
readonly colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE"
source "${colfile}"
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
if [[ -x "$(command -v sudo)" ]]; then
exec sudo bash "$0" "$@"
exit $?
else
echo -e " ${CROSS} sudo is needed to run pihole commands. Please run this script as root or install sudo."
exit 1
fi
fi
resolver="pihole-FTL"
webpageFunc() {
source "${PI_HOLE_SCRIPT_DIR}/webpage.sh"
@@ -31,17 +30,7 @@ webpageFunc() {
exit 0
}
whitelistFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
blacklistFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
wildcardFunc() {
listFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
@@ -69,7 +58,8 @@ flushFunc() {
}
updatePiholeFunc() {
"${PI_HOLE_SCRIPT_DIR}"/update.sh
shift
"${PI_HOLE_SCRIPT_DIR}"/update.sh "$@"
exit 0
}
@@ -80,233 +70,12 @@ reconfigurePiholeFunc() {
updateGravityFunc() {
"${PI_HOLE_SCRIPT_DIR}"/gravity.sh "$@"
exit 0
}
# Scan an array of files for matching strings
scanList(){
# Escape full stops
local domain="${1//./\\.}" lists="${2}" type="${3:-}"
# Prevent grep from printing file path
cd "/etc/pihole" || exit 1
# Prevent grep -i matching slowly: http://bit.ly/2xFXtUX
export LC_CTYPE=C
# /dev/null forces filename to be printed when only one list has been generated
# shellcheck disable=SC2086
case "${type}" in
"exact" ) grep -i -E -l "(^|\\s)${domain}($|\\s|#)" ${lists} /dev/null;;
"wc" ) grep -i -o -m 1 "/${domain}/" ${lists};;
* ) grep -i "${domain}" ${lists} /dev/null;;
esac
}
# Print each subdomain
# e.g: foo.bar.baz.com = "foo.bar.baz.com bar.baz.com baz.com com"
processWildcards() {
IFS="." read -r -a array <<< "${1}"
for (( i=${#array[@]}-1; i>=0; i-- )); do
ar=""
for (( j=${#array[@]}-1; j>${#array[@]}-i-2; j-- )); do
if [[ $j == $((${#array[@]}-1)) ]]; then
ar="${array[$j]}"
else
ar="${array[$j]}.${ar}"
fi
done
echo "${ar}"
done
exit $?
}
queryFunc() {
shift
local options="$*" adlist="" all="" exact="" blockpage="" matchType="match"
if [[ "${options}" == "-h" ]] || [[ "${options}" == "--help" ]]; then
echo "Usage: pihole -q [option] <domain>
Example: 'pihole -q -exact domain.com'
Query the adlists for a specified domain
Options:
-adlist Print the name of the block list URL
-exact Search the block lists for exact domain matches
-all Return all query matches within a block list
-h, --help Show this help dialog"
exit 0
fi
if [[ ! -e "/etc/pihole/adlists.list" ]]; then
echo -e "${COL_LIGHT_RED}The file '/etc/pihole/adlists.list' was not found${COL_NC}"
exit 1
fi
# Handle valid options
if [[ "${options}" == *"-bp"* ]]; then
exact="exact"; blockpage=true
else
[[ "${options}" == *"-adlist"* ]] && adlist=true
[[ "${options}" == *"-all"* ]] && all=true
if [[ "${options}" == *"-exact"* ]]; then
exact="exact"; matchType="exact ${matchType}"
fi
fi
# Strip valid options, leaving only the domain and invalid options
# This allows users to place the options before or after the domain
options=$(sed -E 's/ ?-(bp|adlists?|all|exact) ?//g' <<< "${options}")
# Handle remaining options
# If $options contain non ASCII characters, convert to punycode
case "${options}" in
"" ) str="No domain specified";;
*" "* ) str="Unknown query option specified";;
*[![:ascii:]]* ) domainQuery=$(idn2 "${options}");;
* ) domainQuery="${options}";;
esac
if [[ -n "${str:-}" ]]; then
echo -e "${str}${COL_NC}\\nTry 'pihole -q --help' for more information."
exit 1
fi
# Scan Whitelist and Blacklist
lists="whitelist.txt blacklist.txt"
mapfile -t results <<< "$(scanList "${domainQuery}" "${lists}" "${exact}")"
if [[ -n "${results[*]}" ]]; then
wbMatch=true
# Loop through each result in order to print unique file title once
for result in "${results[@]}"; do
fileName="${result%%.*}"
if [[ -n "${blockpage}" ]]; then
echo "π ${result}"
exit 0
elif [[ -n "${exact}" ]]; then
echo " ${matchType^} found in ${COL_BOLD}${fileName^}${COL_NC}"
else
# Only print filename title once per file
if [[ ! "${fileName}" == "${fileName_prev:-}" ]]; then
echo " ${matchType^} found in ${COL_BOLD}${fileName^}${COL_NC}"
fileName_prev="${fileName}"
fi
echo " ${result#*:}"
fi
done
fi
# Scan Wildcards
if [[ -e "${wildcardlist}" ]]; then
# Determine all subdomains, domain and TLDs
mapfile -t wildcards <<< "$(processWildcards "${domainQuery}")"
for match in "${wildcards[@]}"; do
# Search wildcard list for matches
mapfile -t results <<< "$(scanList "${match}" "${wildcardlist}" "wc")"
if [[ -n "${results[*]}" ]]; then
if [[ -z "${wcMatch:-}" ]] && [[ -z "${blockpage}" ]]; then
wcMatch=true
echo " ${matchType^} found in ${COL_BOLD}Wildcards${COL_NC}:"
fi
case "${blockpage}" in
true ) echo "π ${wildcardlist##*/}"; exit 0;;
* ) echo " *.${match}";;
esac
fi
done
fi
# Get version sorted *.domains filenames (without dir path)
lists=("$(cd "/etc/pihole" || exit 0; printf "%s\\n" -- *.domains | sort -V)")
# Query blocklists for occurences of domain
mapfile -t results <<< "$(scanList "${domainQuery}" "${lists[*]}" "${exact}")"
# Handle notices
if [[ -z "${wbMatch:-}" ]] && [[ -z "${wcMatch:-}" ]] && [[ -z "${results[*]}" ]]; then
echo -e " ${INFO} No ${exact/t/t }results found for ${COL_BOLD}${domainQuery}${COL_NC} found within block lists"
exit 0
elif [[ -z "${results[*]}" ]]; then
# Result found in WL/BL/Wildcards
exit 0
elif [[ -z "${all}" ]] && [[ "${#results[*]}" -ge 100 ]]; then
echo -e " ${INFO} Over 100 ${exact/t/t }results found for ${COL_BOLD}${domainQuery}${COL_NC}
This can be overridden using the -all option"
exit 0
fi
# Remove unwanted content from non-exact $results
if [[ -z "${exact}" ]]; then
# Delete lines starting with #
# Remove comments after domain
# Remove hosts format IP address
mapfile -t results <<< "$(IFS=$'\n'; sed \
-e "/:#/d" \
-e "s/[ \\t]#.*//g" \
-e "s/:.*[ \\t]/:/g" \
<<< "${results[*]}")"
# Exit if result was in a comment
[[ -z "${results[*]}" ]] && exit 0
fi
# Get adlist file content as array
if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then
for adlistUrl in $(< "/etc/pihole/adlists.list"); do
if [[ "${adlistUrl:0:4}" =~ (http|www.) ]]; then
adlists+=("${adlistUrl}")
fi
done
fi
# Print "Exact matches for" title
if [[ -n "${exact}" ]] && [[ -z "${blockpage}" ]]; then
plural=""; [[ "${#results[*]}" -gt 1 ]] && plural="es"
echo " ${matchType^}${plural} for ${COL_BOLD}${domainQuery}${COL_NC} found in:"
fi
for result in "${results[@]}"; do
fileName="${result/:*/}"
# Determine *.domains URL using filename's number
if [[ -n "${adlist}" ]] || [[ -n "${blockpage}" ]]; then
fileNum="${fileName/list./}"; fileNum="${fileNum%%.*}"
fileName="${adlists[$fileNum]}"
# Discrepency occurs when adlists has been modified, but Gravity has not been run
if [[ -z "${fileName}" ]]; then
fileName="${COL_LIGHT_RED}(no associated adlists URL found)${COL_NC}"
fi
fi
if [[ -n "${blockpage}" ]]; then
echo "${fileNum} ${fileName}"
elif [[ -n "${exact}" ]]; then
echo " ${fileName}"
else
if [[ ! "${fileName}" == "${fileName_prev:-}" ]]; then
count=""
echo " ${matchType^} found in ${COL_BOLD}${fileName}${COL_NC}:"
fileName_prev="${fileName}"
fi
: $((count++))
# Print matching domain if $max_count has not been reached
[[ -z "${all}" ]] && max_count="50"
if [[ -z "${all}" ]] && [[ "${count}" -ge "${max_count}" ]]; then
[[ "${count}" -gt "${max_count}" ]] && continue
echo " ${COL_GRAY}Over ${count} results found, skipping rest of file${COL_NC}"
else
echo " ${result#*:}"
fi
fi
done
"${PI_HOLE_SCRIPT_DIR}"/query.sh "$@"
exit 0
}
@@ -330,20 +99,16 @@ versionFunc() {
restartDNS() {
local svcOption svc str output status
svcOption="${1:-}"
svcOption="${1:-restart}"
# Determine if we should reload or restart dnsmasq
# Determine if we should reload or restart
if [[ "${svcOption}" =~ "reload" ]]; then
# Using SIGHUP will NOT re-read any *.conf files
svc="killall -s SIGHUP dnsmasq"
# Reload has been requested
# Note: This will NOT re-read any *.conf files
svc="killall -s SIGHUP ${resolver}"
else
# Get PID of dnsmasq to determine if it needs to start or restart
if pidof dnsmasq &> /dev/null; then
svcOption="restart"
else
svcOption="start"
fi
svc="service dnsmasq ${svcOption}"
# A full restart has been requested
svc="service ${resolver} restart"
fi
# Print output to Terminal, but not to Web Admin
@@ -355,13 +120,12 @@ restartDNS() {
if [[ "${status}" -eq 0 ]]; then
[[ -t 1 ]] && echo -e "${OVER} ${TICK} ${str}"
return 0
else
[[ ! -t 1 ]] && local OVER=""
echo -e "${OVER} ${CROSS} ${output}"
return 1
fi
# Send signal to FTL to have it re-parse the gravity files
killall -s SIGHUP pihole-FTL
}
piholeEnable() {
@@ -377,10 +141,17 @@ Time:
elif [[ "${1}" == "0" ]]; then
# Disable Pi-hole
sed -i 's/^addn-hosts=\/etc\/pihole\/gravity.list/#addn-hosts=\/etc\/pihole\/gravity.list/' /etc/dnsmasq.d/01-pihole.conf
sed -i 's/^addn-hosts=\/etc\/pihole\/black.list/#addn-hosts=\/etc\/pihole\/black.list/' /etc/dnsmasq.d/01-pihole.conf
if [[ -e "$wildcardlist" ]]; then
mv "$wildcardlist" "/etc/pihole/wildcard.list"
if grep -cq "BLOCKING_ENABLED=false" "${setupVars}"; then
echo -e " ${INFO} Blocking already disabled, nothing to do"
exit 0
fi
if [[ -e "${gravitylist}" ]]; then
mv "${gravitylist}" "${gravitylist}.bck"
echo "" > "${gravitylist}"
fi
if [[ -e "${blacklist}" ]]; then
mv "${blacklist}" "${blacklist}.bck"
echo "" > "${blacklist}"
fi
if [[ $# > 1 ]]; then
local error=false
@@ -390,7 +161,7 @@ Time:
local str="Disabling blocking for ${tt} seconds"
echo -e " ${INFO} ${str}..."
local str="Blocking will be re-enabled in ${tt} seconds"
nohup bash -c "sleep ${tt}; pihole enable" </dev/null &>/dev/null &
nohup bash -c "sleep ${tt}; ${PI_HOLE_BIN_DIR}/pihole enable" </dev/null &>/dev/null &
else
local error=true
fi
@@ -401,7 +172,7 @@ Time:
echo -e " ${INFO} ${str}..."
local str="Blocking will be re-enabled in ${tt} minutes"
tt=$((${tt}*60))
nohup bash -c "sleep ${tt}; pihole enable" </dev/null &>/dev/null &
nohup bash -c "sleep ${tt}; ${PI_HOLE_BIN_DIR}/pihole enable" </dev/null &>/dev/null &
else
local error=true
fi
@@ -418,19 +189,29 @@ Time:
fi
local str="Pi-hole Disabled"
sed -i "/BLOCKING_ENABLED=/d" "${setupVars}"
echo "BLOCKING_ENABLED=false" >> "${setupVars}"
fi
else
# Enable Pi-hole
if grep -cq "BLOCKING_ENABLED=true" "${setupVars}"; then
echo -e " ${INFO} Blocking already enabled, nothing to do"
exit 0
fi
echo -e " ${INFO} Enabling blocking"
local str="Pi-hole Enabled"
sed -i 's/^#addn-hosts/addn-hosts/' /etc/dnsmasq.d/01-pihole.conf
if [[ -e "/etc/pihole/wildcard.list" ]]; then
mv "/etc/pihole/wildcard.list" "$wildcardlist"
if [[ -e "${gravitylist}.bck" ]]; then
mv "${gravitylist}.bck" "${gravitylist}"
fi
if [[ -e "${blacklist}.bck" ]]; then
mv "${blacklist}.bck" "${blacklist}"
fi
sed -i "/BLOCKING_ENABLED=/d" "${setupVars}"
echo "BLOCKING_ENABLED=true" >> "${setupVars}"
fi
restartDNS
restartDNS reload
echo -e "${OVER} ${TICK} ${str}"
}
@@ -444,13 +225,17 @@ Specify whether the Pi-hole log should be used
Options:
on Enable the Pi-hole log at /var/log/pihole.log
off Disable the Pi-hole log at /var/log/pihole.log"
off Disable and flush the Pi-hole log at /var/log/pihole.log
off noflush Disable the Pi-hole log at /var/log/pihole.log"
exit 0
elif [[ "${1}" == "off" ]]; then
# Disable logging
sed -i 's/^log-queries/#log-queries/' /etc/dnsmasq.d/01-pihole.conf
sed -i 's/^QUERY_LOGGING=true/QUERY_LOGGING=false/' /etc/pihole/setupVars.conf
pihole -f
if [[ "${2}" != "noflush" ]]; then
# Flush logs
"${PI_HOLE_BIN_DIR}"/pihole -f
fi
echo -e " ${INFO} Disabling logging..."
local str="Logging has been disabled!"
elif [[ "${1}" == "on" ]]; then
@@ -469,10 +254,8 @@ Options:
}
statusFunc() {
local addnConfigs
# Determine if service is running on port 53 (Cr: https://superuser.com/a/806331)
if (echo > /dev/tcp/localhost/53) >/dev/null 2>&1; then
if (echo > /dev/tcp/127.0.0.1/53) >/dev/null 2>&1; then
if [[ "${1}" != "web" ]]; then
echo -e " ${TICK} DNS service is running"
fi
@@ -484,16 +267,14 @@ statusFunc() {
return 0
fi
# Determine if Pi-hole's addn-hosts configs are commented out
addnConfigs=$(grep -i "addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf)
if [[ "${addnConfigs}" =~ "#" ]]; then
# Determine if Pi-hole's blocking is enabled
if grep -q "BLOCKING_ENABLED=false" /etc/pihole/setupVars.conf; then
# A config is commented out
case "${1}" in
"web") echo 0;;
*) echo -e " ${CROSS} Pi-hole blocking is Disabled";;
esac
elif [[ -n "${addnConfigs}" ]]; then
elif grep -q "BLOCKING_ENABLED=true" /etc/pihole/setupVars.conf; then
# Configs are set
case "${1}" in
"web") echo 1;;
@@ -503,15 +284,21 @@ statusFunc() {
# No configs were found
case "${1}" in
"web") echo 99;;
*) echo -e " ${INFO} No hosts file linked to dnsmasq, adding it in enabled state";;
*) echo -e " ${INFO} Pi-hole blocking will be enabled";;
esac
# Add addn-host= to dnsmasq
echo "addn-hosts=/etc/pihole/gravity.list" >> /etc/dnsmasq.d/01-pihole.conf
restartDNS
# Enable blocking
"${PI_HOLE_BIN_DIR}"/pihole enable
fi
}
tailFunc() {
# Warn user if Pi-hole's logging is disabled
local logging_enabled=$(grep -c "^log-queries" /etc/dnsmasq.d/01-pihole.conf)
if [[ "${logging_enabled}" == "0" ]]; then
# No "log-queries" lines are found.
# Commented out lines (such as "#log-queries") are ignored
echo " ${CROSS} Warning: Query logging is disabled"
fi
echo -e " ${INFO} Press Ctrl-C to exit"
# Retrieve IPv4/6 addresses
@@ -523,7 +310,7 @@ tailFunc() {
# Colour everything else as gray
tail -f /var/log/pihole.log | sed -E \
-e "s,($(date +'%b %d ')| dnsmasq[.*[0-9]]),,g" \
-e "s,(.*(gravity.list|black.list| config ).* is (${IPV4_ADDRESS%/*}|${IPV6_ADDRESS:-NULL}).*),${COL_RED}&${COL_NC}," \
-e "s,(.*(gravity.list|black.list|regex.list| config ).* is (0.0.0.0|::|NXDOMAIN|${IPV4_ADDRESS%/*}|${IPV6_ADDRESS:-NULL}).*),${COL_RED}&${COL_NC}," \
-e "s,.*(query\\[A|DHCP).*,${COL_NC}&${COL_NC}," \
-e "s,.*,${COL_GRAY}&${COL_NC},"
exit 0
@@ -537,12 +324,13 @@ Switch Pi-hole subsystems to a different Github branch
Repositories:
core [branch] Change the branch of Pi-hole's core subsystem
web [branch] Change the branch of Admin Console subsystem
web [branch] Change the branch of Web Interface subsystem
ftl [branch] Change the branch of Pi-hole's FTL subsystem
Branches:
master Update subsystems to the latest stable release
dev Update subsystems to the latest development release"
dev Update subsystems to the latest development release
branchname Update subsystems to the specified branchname"
exit 0
fi
@@ -595,7 +383,8 @@ Add '-h' after specific commands for more information on usage
Whitelist/Blacklist Options:
-w, whitelist Whitelist domain(s)
-b, blacklist Blacklist domain(s)
-wild, wildcard Blacklist domain(s), and all its subdomains
--wild, wildcard Wildcard blacklist domain(s)
--regex, regex Regex blacklist domains(s)
Add '-h' for more info on whitelist/blacklist usage
Debugging Options:
@@ -606,8 +395,8 @@ Debugging Options:
-t, tail View the live output of the Pi-hole log
Options:
-a, admin Admin Console options
Add '-h' for more info on admin console usage
-a, admin Web interface options
Add '-h' for more info on Web Interface usage
-c, chronometer Calculates stats and displays to an LCD
Add '-h' for more info on chronometer usage
-g, updateGravity Update the list of ad-serving domains
@@ -617,7 +406,8 @@ Options:
-q, query Query the adlists for a specified domain
Add '-h' for more info on query usage
-up, updatePihole Update Pi-hole subsystems
-v, version Show installed versions of Pi-hole, Admin Console & FTL
Add '--check-only' to exit script before update is performed.
-v, version Show installed versions of Pi-hole, Web Interface & FTL
Add '-h' for more info on version usage
uninstall Uninstall Pi-hole from your system
status Display the running status of Pi-hole subsystems
@@ -634,14 +424,30 @@ if [[ $# = 0 ]]; then
helpFunc
fi
case "${1}" in
"-h" | "help" | "--help" ) helpFunc;;
esac
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
if [[ -x "$(command -v sudo)" ]]; then
exec sudo bash "$0" "$@"
exit $?
else
echo -e " ${CROSS} sudo is needed to run pihole commands. Please run this script as root or install sudo."
exit 1
fi
fi
# Handle redirecting to specific functions based on arguments
case "${1}" in
"-w" | "whitelist" ) whitelistFunc "$@";;
"-b" | "blacklist" ) blacklistFunc "$@";;
"-wild" | "wildcard" ) wildcardFunc "$@";;
"-w" | "whitelist" ) listFunc "$@";;
"-b" | "blacklist" ) listFunc "$@";;
"--wild" | "wildcard" ) listFunc "$@";;
"--regex" | "regex" ) listFunc "$@";;
"-d" | "debug" ) debugFunc "$@";;
"-f" | "flush" ) flushFunc "$@";;
"-up" | "updatePihole" ) updatePiholeFunc;;
"-up" | "updatePihole" ) updatePiholeFunc "$@";;
"-r" | "reconfigure" ) reconfigurePiholeFunc;;
"-g" | "updateGravity" ) updateGravityFunc "$@";;
"-c" | "chronometer" ) chronometerFunc "$@";;

View File

@@ -1,5 +1,6 @@
docker-compose
pytest
pytest-xdist
pytest-cov
testinfra
docker-compose==1.23.2
pytest==4.3.0
pytest-xdist==1.26.1
pytest-cov==2.6.1
testinfra==1.19.0
tox==3.7.0

6
setup.py Normal file
View File

@@ -0,0 +1,6 @@
from setuptools import setup
setup(
setup_requires=['pytest-runner'],
tests_require=['pytest'],
)

25
test/README.md Normal file
View File

@@ -0,0 +1,25 @@
# Recommended way to run tests
Make sure you have Docker and Python w/pip package manager.
From command line all you need to do is:
- `pip install tox`
- `tox`
Tox handles setting up a virtual environment for python dependancies, installing dependancies, building the docker images used by tests, and finally running tests. It's an easy way to have travis-ci like build behavior locally.
## Alternative py.test method of running tests
You're responsible for setting up your virtual env and dependancies in this situation.
```
py.test -vv -n auto -m "build_stage"
py.test -vv -n auto -m "not build_stage"
```
The build_stage tests have to run first to create the docker images, followed by the actual tests which utilize said images. Unless you're changing your dockerfiles you shouldn't have to run the build_stage every time - but it's a good idea to rebuild at least once a day in case the base Docker images or packages change.
# How do I debug python?
Highly recommended: Setup PyCharm on a **Docker enabled** machine. Having a python debugger like PyCharm changes your life if you've never used it :)

View File

@@ -1,14 +1,30 @@
import pytest
import testinfra
from textwrap import dedent
check_output = testinfra.get_backend(
"local://"
).get_module("Command").check_output
SETUPVARS = {
'PIHOLE_INTERFACE': 'eth99',
'IPV4_ADDRESS': '1.1.1.1',
'IPV6_ADDRESS': 'FE80::240:D0FF:FE48:4672',
'PIHOLE_DNS_1': '4.2.2.1',
'PIHOLE_DNS_2': '4.2.2.2'
}
tick_box = "[\x1b[1;32m\xe2\x9c\x93\x1b[0m]".decode("utf-8")
cross_box = "[\x1b[1;31m\xe2\x9c\x97\x1b[0m]".decode("utf-8")
info_box = "[i]".decode("utf-8")
@pytest.fixture
def Pihole(Docker):
''' used to contain some script stubbing, now pretty much an alias.
Also provides bash as the default run function shell '''
'''
used to contain some script stubbing, now pretty much an alias.
Also provides bash as the default run function shell
'''
def run_bash(self, command, *args, **kwargs):
cmd = self.get_command(command, *args)
if self.user is not None:
@@ -22,12 +38,18 @@ def Pihole(Docker):
return out
funcType = type(Docker.run)
Docker.run = funcType(run_bash, Docker, testinfra.backend.docker.DockerBackend)
Docker.run = funcType(run_bash,
Docker,
testinfra.backend.docker.DockerBackend)
return Docker
@pytest.fixture
def Docker(request, args, image, cmd):
''' combine our fixtures into a docker run command and setup finalizer to cleanup '''
'''
combine our fixtures into a docker run command and setup finalizer to
cleanup
'''
assert 'docker' in check_output('id'), "Are you in the docker group?"
docker_run = "docker run {} {} {}".format(args, image, cmd)
docker_id = check_output(docker_run)
@@ -40,22 +62,95 @@ def Docker(request, args, image, cmd):
docker_container.id = docker_id
return docker_container
@pytest.fixture
def args(request):
''' -t became required when tput began being used '''
'''
-t became required when tput began being used
'''
return '-t -d'
@pytest.fixture(params=['debian', 'centos'])
@pytest.fixture(params=['debian', 'centos', 'fedora'])
def tag(request):
''' consumed by image to make the test matrix '''
'''
consumed by image to make the test matrix
'''
return request.param
@pytest.fixture()
def image(request, tag):
''' built by test_000_build_containers.py '''
'''
built by test_000_build_containers.py
'''
return 'pytest_pihole:{}'.format(tag)
@pytest.fixture()
def cmd(request):
''' default to doing nothing by tailing null, but don't exit '''
'''
default to doing nothing by tailing null, but don't exit
'''
return 'tail -f /dev/null'
# Helper functions
def mock_command(script, args, container):
'''
Allows for setup of commands we don't really want to have to run for real
in unit tests
'''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
case "\$1" in'''.format(script=script))
for k, v in args.iteritems():
case = dedent('''
{arg})
echo {res}
exit {retcode}
;;'''.format(arg=k, res=v[0], retcode=v[1]))
mock_script += case
mock_script += dedent('''
esac''')
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
rm -f /var/log/{scriptlog}'''.format(script=full_script_path,
content=mock_script,
scriptlog=script))
def mock_command_2(script, args, container):
'''
Allows for setup of commands we don't really want to have to run for real
in unit tests
'''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
case "\$1 \$2" in'''.format(script=script))
for k, v in args.iteritems():
case = dedent('''
\"{arg}\")
echo \"{res}\"
exit {retcode}
;;'''.format(arg=k, res=v[0], retcode=v[1]))
mock_script += case
mock_script += dedent('''
esac''')
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
rm -f /var/log/{scriptlog}'''.format(script=full_script_path,
content=mock_script,
scriptlog=script))
def run_script(Pihole, script):
result = Pihole.run(script)
assert result.rc == 0
return result

16
test/fedora.Dockerfile Normal file
View File

@@ -0,0 +1,16 @@
FROM fedora:30
ENV GITDIR /etc/.pihole
ENV SCRIPTDIR /opt/pihole
RUN mkdir -p $GITDIR $SCRIPTDIR /etc/pihole
ADD . $GITDIR
RUN cp $GITDIR/advanced/Scripts/*.sh $GITDIR/gravity.sh $GITDIR/pihole $GITDIR/automated\ install/*.sh $SCRIPTDIR/
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$SCRIPTDIR
RUN true && \
chmod +x $SCRIPTDIR/*
ENV PH_TEST true
#sed '/# Start the installer/Q' /opt/pihole/basic-install.sh > /opt/pihole/stub_basic-install.sh && \

View File

@@ -6,10 +6,15 @@ run_local = testinfra.get_backend(
"local://"
).get_module("Command").run
@pytest.mark.parametrize("image,tag", [
( 'test/debian.Dockerfile', 'pytest_pihole:debian' ),
( 'test/centos.Dockerfile', 'pytest_pihole:centos' ),
('test/debian.Dockerfile', 'pytest_pihole:debian'),
('test/centos.Dockerfile', 'pytest_pihole:centos'),
('test/fedora.Dockerfile', 'pytest_pihole:fedora'),
])
# mark as 'build_stage' so we can ensure images are build first when tests
# are executed in parallel. (not required when tests are executed serially)
@pytest.mark.build_stage
def test_build_pihole_image(image, tag):
build_cmd = run_local('docker build -f {} -t {} .'.format(image, tag))
if build_cmd.rc != 0:

View File

@@ -1,24 +1,40 @@
import pytest
from textwrap import dedent
import re
from conftest import (
SETUPVARS,
tick_box,
info_box,
cross_box,
mock_command,
mock_command_2,
run_script
)
SETUPVARS = {
'PIHOLE_INTERFACE' : 'eth99',
'IPV4_ADDRESS' : '1.1.1.1',
'IPV6_ADDRESS' : 'FE80::240:D0FF:FE48:4672',
'PIHOLE_DNS_1' : '4.2.2.1',
'PIHOLE_DNS_2' : '4.2.2.2'
}
tick_box="[\x1b[1;32m\xe2\x9c\x93\x1b[0m]".decode("utf-8")
cross_box="[\x1b[1;31m\xe2\x9c\x97\x1b[0m]".decode("utf-8")
info_box="[i]".decode("utf-8")
def test_supported_operating_system(Pihole):
'''
confirm installer exists on unsupported distribution
'''
# break supported package managers to emulate an unsupported distribution
Pihole.run('rm -rf /usr/bin/apt-get')
Pihole.run('rm -rf /usr/bin/rpm')
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = cross_box + ' OS distribution not supported'
assert expected_stdout in distro_check.stdout
# assert distro_check.rc == 1
def test_setupVars_are_sourced_to_global_scope(Pihole):
''' currently update_dialogs sources setupVars with a dot,
'''
currently update_dialogs sources setupVars with a dot,
then various other functions use the variables.
This confirms the sourced variables are in scope between functions '''
This confirms the sourced variables are in scope between functions
'''
setup_var_file = 'cat <<EOF> /etc/pihole/setupVars.conf\n'
for k,v in SETUPVARS.iteritems():
for k, v in SETUPVARS.iteritems():
setup_var_file += "{}={}\n".format(k, v)
setup_var_file += "EOF\n"
Pihole.run(setup_var_file)
@@ -43,13 +59,17 @@ def test_setupVars_are_sourced_to_global_scope(Pihole):
output = run_script(Pihole, script).stdout
for k,v in SETUPVARS.iteritems():
for k, v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_setupVars_saved_to_file(Pihole):
''' confirm saved settings are written to a file for future updates to re-use '''
set_setup_vars = '\n' # dedent works better with this and padding matching script below
for k,v in SETUPVARS.iteritems():
'''
confirm saved settings are written to a file for future updates to re-use
'''
# dedent works better with this and padding matching script below
set_setup_vars = '\n'
for k, v in SETUPVARS.iteritems():
set_setup_vars += " {}={}\n".format(k, v)
Pihole.run(set_setup_vars).stdout
@@ -61,49 +81,64 @@ def test_setupVars_saved_to_file(Pihole):
{}
mkdir -p /etc/dnsmasq.d
version_check_dnsmasq
echo "" > /etc/pihole/pihole-FTL.conf
finalExports
cat /etc/pihole/setupVars.conf
'''.format(set_setup_vars))
output = run_script(Pihole, script).stdout
for k,v in SETUPVARS.iteritems():
for k, v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_configureFirewall_firewalld_running_no_errors(Pihole):
''' confirms firewalld rules are applied when firewallD is running '''
'''
confirms firewalld rules are applied when firewallD is running
'''
# firewallD returns 'running' as status
mock_command('firewall-cmd', {'*':('running', 0)}, Pihole)
mock_command('firewall-cmd', {'*': ('running', 0)}, Pihole)
# Whiptail dialog returns Ok for user prompt
mock_command('whiptail', {'*':('', 0)}, Pihole)
mock_command('whiptail', {'*': ('', 0)}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
expected_stdout = 'Configuring FirewallD for httpd and dnsmasq'
expected_stdout = 'Configuring FirewallD for httpd and pihole-FTL'
assert expected_stdout in configureFirewall.stdout
firewall_calls = Pihole.run('cat /var/log/firewall-cmd').stdout
assert 'firewall-cmd --state' in firewall_calls
assert 'firewall-cmd --permanent --add-service=http --add-service=dns' in firewall_calls
assert ('firewall-cmd '
'--permanent '
'--add-service=http '
'--add-service=dns') in firewall_calls
assert 'firewall-cmd --reload' in firewall_calls
def test_configureFirewall_firewalld_disabled_no_errors(Pihole):
''' confirms firewalld rules are not applied when firewallD is not running '''
'''
confirms firewalld rules are not applied when firewallD is not running
'''
# firewallD returns non-running status
mock_command('firewall-cmd', {'*':('not running', '1')}, Pihole)
mock_command('firewall-cmd', {'*': ('not running', '1')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
expected_stdout = 'No active firewall detected.. skipping firewall configuration'
expected_stdout = ('No active firewall detected.. '
'skipping firewall configuration')
assert expected_stdout in configureFirewall.stdout
def test_configureFirewall_firewalld_enabled_declined_no_errors(Pihole):
''' confirms firewalld rules are not applied when firewallD is running, user declines ruleset '''
'''
confirms firewalld rules are not applied when firewallD is running, user
declines ruleset
'''
# firewallD returns running status
mock_command('firewall-cmd', {'*':('running', 0)}, Pihole)
mock_command('firewall-cmd', {'*': ('running', 0)}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', 1)}, Pihole)
mock_command('whiptail', {'*': ('', 1)}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
@@ -111,6 +146,7 @@ def test_configureFirewall_firewalld_enabled_declined_no_errors(Pihole):
expected_stdout = 'Not installing firewall rulesets.'
assert expected_stdout in configureFirewall.stdout
def test_configureFirewall_no_firewall(Pihole):
''' confirms firewall skipped no daemon is running '''
configureFirewall = Pihole.run('''
@@ -120,14 +156,18 @@ def test_configureFirewall_no_firewall(Pihole):
expected_stdout = 'No active firewall detected'
assert expected_stdout in configureFirewall.stdout
def test_configureFirewall_IPTables_enabled_declined_no_errors(Pihole):
''' confirms IPTables rules are not applied when IPTables is running, user declines ruleset '''
'''
confirms IPTables rules are not applied when IPTables is running, user
declines ruleset
'''
# iptables command exists
mock_command('iptables', {'*':('', '0')}, Pihole)
mock_command('iptables', {'*': ('', '0')}, Pihole)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
mock_command('modinfo', {'*': ('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '1')}, Pihole)
mock_command('whiptail', {'*': ('', '1')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
@@ -135,14 +175,19 @@ def test_configureFirewall_IPTables_enabled_declined_no_errors(Pihole):
expected_stdout = 'Not installing firewall rulesets.'
assert expected_stdout in configureFirewall.stdout
def test_configureFirewall_IPTables_enabled_rules_exist_no_errors(Pihole):
''' confirms IPTables rules are not applied when IPTables is running and rules exist '''
# iptables command exists and returns 0 on calls (should return 0 on iptables -C)
mock_command('iptables', {'-S':('-P INPUT DENY', '0')}, Pihole)
'''
confirms IPTables rules are not applied when IPTables is running and rules
exist
'''
# iptables command exists and returns 0 on calls
# (should return 0 on iptables -C)
mock_command('iptables', {'-S': ('-P INPUT DENY', '0')}, Pihole)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
mock_command('modinfo', {'*': ('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '0')}, Pihole)
mock_command('whiptail', {'*': ('', '0')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
@@ -150,18 +195,46 @@ def test_configureFirewall_IPTables_enabled_rules_exist_no_errors(Pihole):
expected_stdout = 'Installing new IPTables firewall rulesets'
assert expected_stdout in configureFirewall.stdout
firewall_calls = Pihole.run('cat /var/log/iptables').stdout
assert 'iptables -I INPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT' not in firewall_calls
assert 'iptables -I INPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT' not in firewall_calls
assert 'iptables -I INPUT 1 -p udp -m udp --dport 53 -j ACCEPT' not in firewall_calls
# General call type occurances
assert len(re.findall(r'iptables -S', firewall_calls)) == 1
assert len(re.findall(r'iptables -C', firewall_calls)) == 4
assert len(re.findall(r'iptables -I', firewall_calls)) == 0
# Specific port call occurances
assert len(re.findall(r'tcp --dport 80', firewall_calls)) == 1
assert len(re.findall(r'tcp --dport 53', firewall_calls)) == 1
assert len(re.findall(r'udp --dport 53', firewall_calls)) == 1
assert len(re.findall(r'tcp --dport 4711:4720', firewall_calls)) == 1
def test_configureFirewall_IPTables_enabled_not_exist_no_errors(Pihole):
''' confirms IPTables rules are applied when IPTables is running and rules do not exist '''
'''
confirms IPTables rules are applied when IPTables is running and rules do
not exist
'''
# iptables command and returns 0 on calls (should return 1 on iptables -C)
mock_command('iptables', {'-S':('-P INPUT DENY', '0'), '-C':('', 1), '-I':('', 0)}, Pihole)
mock_command(
'iptables',
{
'-S': (
'-P INPUT DENY',
'0'
),
'-C': (
'',
1
),
'-I': (
'',
0
)
},
Pihole
)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
mock_command('modinfo', {'*': ('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '0')}, Pihole)
mock_command('whiptail', {'*': ('', '0')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
@@ -169,55 +242,167 @@ def test_configureFirewall_IPTables_enabled_not_exist_no_errors(Pihole):
expected_stdout = 'Installing new IPTables firewall rulesets'
assert expected_stdout in configureFirewall.stdout
firewall_calls = Pihole.run('cat /var/log/iptables').stdout
assert 'iptables -I INPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT' in firewall_calls
assert 'iptables -I INPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT' in firewall_calls
assert 'iptables -I INPUT 1 -p udp -m udp --dport 53 -j ACCEPT' in firewall_calls
# General call type occurances
assert len(re.findall(r'iptables -S', firewall_calls)) == 1
assert len(re.findall(r'iptables -C', firewall_calls)) == 4
assert len(re.findall(r'iptables -I', firewall_calls)) == 4
# Specific port call occurances
assert len(re.findall(r'tcp --dport 80', firewall_calls)) == 2
assert len(re.findall(r'tcp --dport 53', firewall_calls)) == 2
assert len(re.findall(r'udp --dport 53', firewall_calls)) == 2
assert len(re.findall(r'tcp --dport 4711:4720', firewall_calls)) == 2
def test_selinux_enforcing_default_exit(Pihole):
'''
confirms installer prompts to exit when SELinux is Enforcing by default
'''
# getenforce returns the running state of SELinux
mock_command('getenforce', {'*': ('Enforcing', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*': ('', '1')}, Pihole)
check_selinux = Pihole.run('''
source /opt/pihole/basic-install.sh
checkSelinux
''')
expected_stdout = info_box + ' SELinux mode detected: Enforcing'
assert expected_stdout in check_selinux.stdout
expected_stdout = 'SELinux Enforcing detected, exiting installer'
assert expected_stdout in check_selinux.stdout
assert check_selinux.rc == 1
def test_selinux_enforcing_continue(Pihole):
'''
confirms installer prompts to continue with custom policy warning
'''
# getenforce returns the running state of SELinux
mock_command('getenforce', {'*': ('Enforcing', '0')}, Pihole)
# Whiptail dialog returns Continue for user prompt
mock_command('whiptail', {'*': ('', '0')}, Pihole)
check_selinux = Pihole.run('''
source /opt/pihole/basic-install.sh
checkSelinux
''')
expected_stdout = info_box + ' SELinux mode detected: Enforcing'
assert expected_stdout in check_selinux.stdout
expected_stdout = info_box + (' Continuing installation with SELinux '
'Enforcing')
assert expected_stdout in check_selinux.stdout
expected_stdout = info_box + (' Please refer to official SELinux '
'documentation to create a custom policy')
assert expected_stdout in check_selinux.stdout
assert check_selinux.rc == 0
def test_selinux_permissive(Pihole):
'''
confirms installer continues when SELinux is Permissive
'''
# getenforce returns the running state of SELinux
mock_command('getenforce', {'*': ('Permissive', '0')}, Pihole)
check_selinux = Pihole.run('''
source /opt/pihole/basic-install.sh
checkSelinux
''')
expected_stdout = info_box + ' SELinux mode detected: Permissive'
assert expected_stdout in check_selinux.stdout
assert check_selinux.rc == 0
def test_selinux_disabled(Pihole):
'''
confirms installer continues when SELinux is Disabled
'''
mock_command('getenforce', {'*': ('Disabled', '0')}, Pihole)
check_selinux = Pihole.run('''
source /opt/pihole/basic-install.sh
checkSelinux
''')
expected_stdout = info_box + ' SELinux mode detected: Disabled'
assert expected_stdout in check_selinux.stdout
assert check_selinux.rc == 0
def test_installPiholeWeb_fresh_install_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed on a fresh build '''
'''
confirms all web page assets from Core repo are installed on a fresh build
'''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
installPiholeWeb
''')
assert info_box + ' Installing blocking page...' in installWeb.stdout
assert tick_box + ' Creating directory for blocking page, and copying files' in installWeb.stdout
assert cross_box + ' Backing up index.lighttpd.html' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' in installWeb.stdout
assert tick_box + ' Installing sudoer file' in installWeb.stdout
expected_stdout = info_box + ' Installing blocking page...'
assert expected_stdout in installWeb.stdout
expected_stdout = tick_box + (' Creating directory for blocking page, '
'and copying files')
assert expected_stdout in installWeb.stdout
expected_stdout = cross_box + ' Backing up index.lighttpd.html'
assert expected_stdout in installWeb.stdout
expected_stdout = ('No default index.lighttpd.html file found... '
'not backing up')
assert expected_stdout in installWeb.stdout
expected_stdout = tick_box + ' Installing sudoer file'
assert expected_stdout in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'blockingpage.css' in web_directory
def test_update_package_cache_success_no_errors(Pihole):
''' confirms package cache was updated without any errors'''
'''
confirms package cache was updated without any errors
'''
updateCache = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
update_package_cache
''')
assert tick_box + ' Update local cache of available packages' in updateCache.stdout
assert 'Error: Unable to update package cache.' not in updateCache.stdout
expected_stdout = tick_box + ' Update local cache of available packages'
assert expected_stdout in updateCache.stdout
assert 'error' not in updateCache.stdout.lower()
def test_update_package_cache_failure_no_errors(Pihole):
''' confirms package cache was not updated'''
mock_command('apt-get', {'update':('', '1')}, Pihole)
'''
confirms package cache was not updated
'''
mock_command('apt-get', {'update': ('', '1')}, Pihole)
updateCache = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
update_package_cache
''')
assert cross_box + ' Update local cache of available packages' in updateCache.stdout
expected_stdout = cross_box + ' Update local cache of available packages'
assert expected_stdout in updateCache.stdout
assert 'Error: Unable to update package cache.' in updateCache.stdout
def test_FTL_detect_aarch64_no_errors(Pihole):
''' confirms only aarch64 package is downloaded for FTL engine '''
'''
confirms only aarch64 package is downloaded for FTL engine
'''
# mock uname to return aarch64 platform
mock_command('uname', {'-m':('aarch64', '0')}, Pihole)
mock_command('uname', {'-m': ('aarch64', '0')}, Pihole)
# mock ldd to respond with aarch64 shared library
mock_command('ldd', {'/bin/ls':('/lib/ld-linux-aarch64.so.1', '0')}, Pihole)
mock_command(
'ldd',
{
'/bin/ls': (
'/lib/ld-linux-aarch64.so.1',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
@@ -226,32 +411,47 @@ def test_FTL_detect_aarch64_no_errors(Pihole):
expected_stdout = tick_box + ' Downloading and Installing FTL'
assert expected_stdout in detectPlatform.stdout
def test_FTL_detect_armv6l_no_errors(Pihole):
''' confirms only armv6l package is downloaded for FTL engine '''
'''
confirms only armv6l package is downloaded for FTL engine
'''
# mock uname to return armv6l platform
mock_command('uname', {'-m':('armv6l', '0')}, Pihole)
mock_command('uname', {'-m': ('armv6l', '0')}, Pihole)
# mock ldd to respond with aarch64 shared library
mock_command('ldd', {'/bin/ls':('/lib/ld-linux-armhf.so.3', '0')}, Pihole)
mock_command('ldd', {'/bin/ls': ('/lib/ld-linux-armhf.so.3', '0')}, Pihole)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + ' Detected ARM-hf architecture (armv6 or lower)'
expected_stdout = tick_box + (' Detected ARM-hf architecture '
'(armv6 or lower)')
assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + ' Downloading and Installing FTL'
assert expected_stdout in detectPlatform.stdout
def test_FTL_detect_armv7l_no_errors(Pihole):
''' confirms only armv7l package is downloaded for FTL engine '''
'''
confirms only armv7l package is downloaded for FTL engine
'''
# mock uname to return armv7l platform
mock_command('uname', {'-m':('armv7l', '0')}, Pihole)
mock_command('uname', {'-m': ('armv7l', '0')}, Pihole)
# mock ldd to respond with aarch64 shared library
mock_command('ldd', {'/bin/ls':('/lib/ld-linux-armhf.so.3', '0')}, Pihole)
mock_command('ldd', {'/bin/ls': ('/lib/ld-linux-armhf.so.3', '0')}, Pihole)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
@@ -260,11 +460,18 @@ def test_FTL_detect_armv7l_no_errors(Pihole):
expected_stdout = tick_box + ' Downloading and Installing FTL'
assert expected_stdout in detectPlatform.stdout
def test_FTL_detect_x86_64_no_errors(Pihole):
''' confirms only x86_64 package is downloaded for FTL engine '''
'''
confirms only x86_64 package is downloaded for FTL engine
'''
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
@@ -273,55 +480,65 @@ def test_FTL_detect_x86_64_no_errors(Pihole):
expected_stdout = tick_box + ' Downloading and Installing FTL'
assert expected_stdout in detectPlatform.stdout
def test_FTL_detect_unknown_no_errors(Pihole):
''' confirms only generic package is downloaded for FTL engine '''
# mock uname to return generic platform
mock_command('uname', {'-m':('mips', '0')}, Pihole)
mock_command('uname', {'-m': ('mips', '0')}, Pihole)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
''')
expected_stdout = 'Not able to detect architecture (unknown: mips)'
assert expected_stdout in detectPlatform.stdout
def test_FTL_download_aarch64_no_errors(Pihole):
''' confirms only aarch64 package is downloaded for FTL engine '''
# mock uname to return generic platform
'''
confirms only aarch64 package is downloaded for FTL engine
'''
# mock whiptail answers and ensure installer dependencies
mock_command('whiptail', {'*': ('', '0')}, Pihole)
Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
install_dependent_packages ${INSTALLER_DEPS[@]}
''')
download_binary = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLinstall pihole-FTL-aarch64-linux-gnu
create_pihole_user
FTLinstall "pihole-FTL-aarch64-linux-gnu"
''')
expected_stdout = tick_box + ' Downloading and Installing FTL'
assert expected_stdout in download_binary.stdout
error = 'Error: Download of binary from Github failed'
assert error not in download_binary.stdout
error = 'Error: URL not found'
assert error not in download_binary.stdout
assert 'error' not in download_binary.stdout.lower()
def test_FTL_download_unknown_fails_no_errors(Pihole):
''' confirms unknown binary is not downloaded for FTL engine '''
# mock uname to return generic platform
download_binary = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLinstall pihole-FTL-mips
''')
expected_stdout = cross_box + ' Downloading and Installing FTL'
assert expected_stdout in download_binary.stdout
error = 'Error: URL not found'
assert error in download_binary.stdout
def test_FTL_binary_installed_and_responsive_no_errors(Pihole):
''' confirms FTL binary is copied and functional in installed location '''
'''
confirms FTL binary is copied and functional in installed location
'''
installed_binary = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
create_pihole_user
funcOutput=$(get_binary_name)
binary="pihole-FTL${funcOutput##*pihole-FTL}"
theRest="${funcOutput%pihole-FTL*}"
FTLdetect "${binary}" "${theRest}"
pihole-FTL version
''')
expected_stdout = 'v'
assert expected_stdout in installed_binary.stdout
# def test_FTL_support_files_installed(Pihole):
# ''' confirms FTL support files are installed '''
# '''
# confirms FTL support files are installed
# '''
# support_files = Pihole.run('''
# source /opt/pihole/basic-install.sh
# FTLdetect
@@ -334,21 +551,46 @@ def test_FTL_binary_installed_and_responsive_no_errors(Pihole):
# assert '644 /run/pihole-FTL.pid' in support_files.stdout
# assert '644 /var/log/pihole-FTL.log' in support_files.stdout
def test_IPv6_only_link_local(Pihole):
''' confirms IPv6 blocking is disabled for Link-local address '''
'''
confirms IPv6 blocking is disabled for Link-local address
'''
# mock ip -6 address to return Link-local address
mock_command_2('ip', {'-6 address':('inet6 fe80::d210:52fa:fe00:7ad7/64 scope link', '0')}, Pihole)
mock_command_2(
'ip',
{
'-6 address': (
'inet6 fe80::d210:52fa:fe00:7ad7/64 scope link',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
''')
expected_stdout = 'Unable to find IPv6 ULA/GUA address, IPv6 adblocking will not be enabled'
expected_stdout = ('Unable to find IPv6 ULA/GUA address, '
'IPv6 adblocking will not be enabled')
assert expected_stdout in detectPlatform.stdout
def test_IPv6_only_ULA(Pihole):
''' confirms IPv6 blocking is enabled for ULA addresses '''
'''
confirms IPv6 blocking is enabled for ULA addresses
'''
# mock ip -6 address to return ULA address
mock_command_2('ip', {'-6 address':('inet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global', '0')}, Pihole)
mock_command_2(
'ip',
{
'-6 address': (
'inet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
@@ -356,10 +598,22 @@ def test_IPv6_only_ULA(Pihole):
expected_stdout = 'Found IPv6 ULA address, using it for blocking IPv6 ads'
assert expected_stdout in detectPlatform.stdout
def test_IPv6_only_GUA(Pihole):
''' confirms IPv6 blocking is enabled for GUA addresses '''
'''
confirms IPv6 blocking is enabled for GUA addresses
'''
# mock ip -6 address to return GUA address
mock_command_2('ip', {'-6 address':('inet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global', '0')}, Pihole)
mock_command_2(
'ip',
{
'-6 address': (
'inet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
@@ -367,10 +621,23 @@ def test_IPv6_only_GUA(Pihole):
expected_stdout = 'Found IPv6 GUA address, using it for blocking IPv6 ads'
assert expected_stdout in detectPlatform.stdout
def test_IPv6_GUA_ULA_test(Pihole):
''' confirms IPv6 blocking is enabled for GUA and ULA addresses '''
'''
confirms IPv6 blocking is enabled for GUA and ULA addresses
'''
# mock ip -6 address to return GUA and ULA addresses
mock_command_2('ip', {'-6 address':('inet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global\ninet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global', '0')}, Pihole)
mock_command_2(
'ip',
{
'-6 address': (
'inet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global\n'
'inet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
@@ -378,61 +645,26 @@ def test_IPv6_GUA_ULA_test(Pihole):
expected_stdout = 'Found IPv6 ULA address, using it for blocking IPv6 ads'
assert expected_stdout in detectPlatform.stdout
def test_IPv6_ULA_GUA_test(Pihole):
''' confirms IPv6 blocking is enabled for GUA and ULA addresses '''
'''
confirms IPv6 blocking is enabled for GUA and ULA addresses
'''
# mock ip -6 address to return ULA and GUA addresses
mock_command_2('ip', {'-6 address':('inet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global\ninet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global', '0')}, Pihole)
mock_command_2(
'ip',
{
'-6 address': (
'inet6 fda2:2001:5555:0:d210:52fa:fe00:7ad7/64 scope global\n'
'inet6 2003:12:1e43:301:d210:52fa:fe00:7ad7/64 scope global',
'0'
)
},
Pihole
)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
''')
expected_stdout = 'Found IPv6 ULA address, using it for blocking IPv6 ads'
assert expected_stdout in detectPlatform.stdout
# Helper functions
def mock_command(script, args, container):
''' Allows for setup of commands we don't really want to have to run for real in unit tests '''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
case "\$1" in'''.format(script=script))
for k, v in args.iteritems():
case = dedent('''
{arg})
echo {res}
exit {retcode}
;;'''.format(arg=k, res=v[0], retcode=v[1]))
mock_script += case
mock_script += dedent('''
esac''')
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
rm -f /var/log/{scriptlog}'''.format(script=full_script_path, content=mock_script, scriptlog=script))
def mock_command_2(script, args, container):
''' Allows for setup of commands we don't really want to have to run for real in unit tests '''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
case "\$1 \$2" in'''.format(script=script))
for k, v in args.iteritems():
case = dedent('''
\"{arg}\")
echo \"{res}\"
exit {retcode}
;;'''.format(arg=k, res=v[0], retcode=v[1]))
mock_script += case
mock_script += dedent('''
esac''')
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
rm -f /var/log/{scriptlog}'''.format(script=full_script_path, content=mock_script, scriptlog=script))
def run_script(Pihole, script):
result = Pihole.run(script)
assert result.rc == 0
return result

View File

@@ -0,0 +1,202 @@
import pytest
from conftest import (
tick_box,
info_box,
cross_box,
mock_command,
mock_command_2,
)
@pytest.mark.parametrize("tag", [('fedora'), ])
def test_epel_and_remi_not_installed_fedora(Pihole):
'''
confirms installer does not attempt to install EPEL/REMI repositories
on Fedora
'''
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
assert distro_check.stdout == ''
epel_package = Pihole.package('epel-release')
assert not epel_package.is_installed
remi_package = Pihole.package('remi-release')
assert not remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_release_supported_version_check_centos(Pihole):
'''
confirms installer exits on unsupported releases of CentOS
'''
# modify /etc/redhat-release to mock an unsupported CentOS release
Pihole.run('echo "CentOS Linux release 6.9" > /etc/redhat-release')
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = cross_box + (' CentOS 6 is not supported.')
assert expected_stdout in distro_check.stdout
expected_stdout = 'Please update to CentOS release 7 or later'
assert expected_stdout in distro_check.stdout
@pytest.mark.parametrize("tag", [('centos'), ])
def test_enable_epel_repository_centos(Pihole):
'''
confirms the EPEL package repository is enabled when installed on CentOS
'''
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = info_box + (' Enabling EPEL package repository '
'(https://fedoraproject.org/wiki/EPEL)')
assert expected_stdout in distro_check.stdout
expected_stdout = tick_box + ' Installed epel-release'
assert expected_stdout in distro_check.stdout
epel_package = Pihole.package('epel-release')
assert epel_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_upgrade_default_optout_centos(Pihole):
'''
confirms the default behavior to opt-out of installing PHP7 from REMI
'''
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS. '
'Deprecated PHP may be in use.')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert not remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_upgrade_user_optout_centos(Pihole):
'''
confirms installer behavior when user opt-out of installing PHP7 from REMI
(php not currently installed)
'''
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*': ('', '1')}, Pihole)
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS. '
'Deprecated PHP may be in use.')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert not remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_upgrade_user_optin_centos(Pihole):
'''
confirms installer behavior when user opt-in to installing PHP7 from REMI
(php not currently installed)
'''
# Whiptail dialog returns Continue for user prompt
mock_command('whiptail', {'*': ('', '0')}, Pihole)
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
assert 'opt-out' not in distro_check.stdout
expected_stdout = info_box + (' Enabling Remi\'s RPM repository '
'(https://rpms.remirepo.net)')
assert expected_stdout in distro_check.stdout
expected_stdout = tick_box + (' Remi\'s RPM repository has '
'been enabled for PHP7')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_version_lt_7_detected_upgrade_default_optout_centos(Pihole):
'''
confirms the default behavior to opt-out of upgrading to PHP7 from REMI
'''
# first we will install the default php version to test installer behavior
php_install = Pihole.run('yum install -y php')
assert php_install.rc == 0
php_package = Pihole.package('php')
default_centos_php_version = php_package.version.split('.')[0]
if int(default_centos_php_version) >= 7: # PHP7 is supported/recommended
pytest.skip("Test deprecated . Detected default PHP version >= 7")
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS. '
'Deprecated PHP may be in use.')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert not remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_version_lt_7_detected_upgrade_user_optout_centos(Pihole):
'''
confirms installer behavior when user opt-out to upgrade to PHP7 via REMI
'''
# first we will install the default php version to test installer behavior
php_install = Pihole.run('yum install -y php')
assert php_install.rc == 0
php_package = Pihole.package('php')
default_centos_php_version = php_package.version.split('.')[0]
if int(default_centos_php_version) >= 7: # PHP7 is supported/recommended
pytest.skip("Test deprecated . Detected default PHP version >= 7")
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*': ('', '1')}, Pihole)
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
''')
expected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS. '
'Deprecated PHP may be in use.')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert not remi_package.is_installed
@pytest.mark.parametrize("tag", [('centos'), ])
def test_php_version_lt_7_detected_upgrade_user_optin_centos(Pihole):
'''
confirms installer behavior when user opt-in to upgrade to PHP7 via REMI
'''
# first we will install the default php version to test installer behavior
php_install = Pihole.run('yum install -y php')
assert php_install.rc == 0
php_package = Pihole.package('php')
default_centos_php_version = php_package.version.split('.')[0]
if int(default_centos_php_version) >= 7: # PHP7 is supported/recommended
pytest.skip("Test deprecated . Detected default PHP version >= 7")
# Whiptail dialog returns Continue for user prompt
mock_command('whiptail', {'*': ('', '0')}, Pihole)
distro_check = Pihole.run('''
source /opt/pihole/basic-install.sh
distro_check
install_dependent_packages PIHOLE_WEB_DEPS[@]
''')
expected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS. '
'Deprecated PHP may be in use.')
assert expected_stdout not in distro_check.stdout
expected_stdout = info_box + (' Enabling Remi\'s RPM repository '
'(https://rpms.remirepo.net)')
assert expected_stdout in distro_check.stdout
expected_stdout = tick_box + (' Remi\'s RPM repository has '
'been enabled for PHP7')
assert expected_stdout in distro_check.stdout
remi_package = Pihole.package('remi-release')
assert remi_package.is_installed
updated_php_package = Pihole.package('php')
updated_php_version = updated_php_package.version.split('.')[0]
assert int(updated_php_version) == 7

View File

@@ -1,13 +1,18 @@
import pytest
import testinfra
run_local = testinfra.get_backend(
"local://"
).get_module("Command").run
def test_scripts_pass_shellcheck():
''' Make sure shellcheck does not find anything wrong with our shell scripts '''
shellcheck = "find . -type f -name 'update.sh' | while read file; do shellcheck -x \"$file\" -e SC1090,SC1091; done;"
'''
Make sure shellcheck does not find anything wrong with our shell scripts
'''
shellcheck = ("find . -type f -name 'update.sh' "
"| while read file; do "
"shellcheck -x \"$file\" -e SC1090,SC1091; "
"done;")
results = run_local(shellcheck)
print results.stdout
assert '' == results.stdout

10
tox.ini Normal file
View File

@@ -0,0 +1,10 @@
[tox]
envlist = py27
[testenv]
whitelist_externals = docker
deps = -rrequirements.txt
commands = docker build -f test/debian.Dockerfile -t pytest_pihole:debian .
docker build -f test/centos.Dockerfile -t pytest_pihole:centos .
docker build -f test/fedora.Dockerfile -t pytest_pihole:fedora .
pytest {posargs:-vv -n auto} -m "not build_stage" ./test/