Compare commits

...

1145 Commits

Author SHA1 Message Date
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
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
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
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
Jacob Salmela
e602008459 Merge pull request #1856 from pi-hole/release/v3.2.1
Pi-hole core v3.2.1
2017-12-22 14:53:38 -06:00
Dan Schaper
322a18f0e6 Merge pull request #1861 from pi-hole/fix/DNSSEC_trustanchor
Merge `fix/DNSSEC_trustanchor` into `release/3.2.1` again
2017-12-21 11:03:05 -08:00
Dan Schaper
05eb749e66 Merge branch 'release/v3.2.1' into fix/DNSSEC_trustanchor 2017-12-21 11:00:21 -08:00
Dan Schaper
7e8d31a62c Merge pull request #1860 from pi-hole/smarterNotHarder
Merge `smarterNotHarder` into `release/3.2.1` again
2017-12-21 10:59:55 -08:00
Dan Schaper
8ca0582afc Merge branch 'release/v3.2.1' into fix/DNSSEC_trustanchor 2017-12-21 10:56:37 -08:00
Dan Schaper
b9f5fca546 Merge branch 'release/v3.2.1' into smarterNotHarder 2017-12-21 10:53:40 -08:00
DL6ER
5c2dcb5e74 Enable dnsmasq's extra logging feature
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-21 16:42:55 +01:00
DL6ER
3ef4af9326 Merge pull request #1857 from pi-hole/tweak/randomize_updatechecker
Randomize update checker time
2017-12-21 13:28:03 +01:00
DL6ER
f89f7ecd3e Randomize GitHub API update check time
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-21 12:42:47 +01:00
DL6ER
be0c457445 Sleep 30 seconds after reboot to be sure that the system is ready
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-21 12:42:28 +01:00
DL6ER
3c04dbb4ed Update remote version at 17:59 as well as on reboot
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-21 12:33:08 +01:00
DL6ER
cfca367eef Quickly verified in dnsmasq's source code: It has to be "trust-anchor" (with "-")
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-18 21:45:24 -05:00
DL6ER
8a243c5872 Insert also old trust anchor
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-18 21:45:15 -05:00
DL6ER
b30b3f3aeb Update DNSSEC trust anchor
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-18 21:44:34 -05:00
Adam Warner
2d3906450a add back in str local var, and change ticks to info on whitelist lines
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-18 20:14:53 +00:00
Adam Warner
5ecc46d85b Accidentally too many spaces
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-16 14:03:12 +00:00
Adam Warner
ddd6f3dbe5 Grammar changes. Lets not work out programmatically whether we need to pluralise a word. It's not needed.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-16 13:55:52 +00:00
Adam Warner
f5237db580 Merge pull request #1849 from pi-hole/fix/1826
Remove quotes from the uniqDomains array to actually whitelist the so…
2017-12-16 13:22:44 +00:00
Adam Warner
761fd13a70 Remove quotes from the uniqDomains array to actually whitelist the sources
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-16 13:15:26 +00:00
Mark Drobnak
e3fa06d7ff Merge pull request #1829 from keithbentrup/development
Must send HTTP headers before html
2017-12-13 13:37:32 -05:00
Mark Drobnak
61a76f4493 Merge pull request #1836 from pi-hole/tweak/packageInstall
Change package install notification from CROSS to INFO.
2017-12-13 12:27:47 -05:00
Adam Warner
c5f46702c8 Merge pull request #1840 from pi-hole/revert/GravityParseMethod
Revert parsing method to that of 3.1.4. New Method is allowing illega…
2017-12-12 17:49:36 +00:00
Adam Warner
c24e5cd3f6 :codacy: :codacy2: :codacy3:
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-12 12:45:25 +00:00
Adam Warner
cc3035267f Revert parsing method to that of 3.1.4. New Method is allowing illegal lists through, and that is causing issues such as blocking www.google.com. This method will just throw away invalid list entries.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-12 12:36:09 +00:00
Dan Schaper
29ee8250e9 Change package install notification from CROSS to TICK.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-12-11 09:45:30 -08:00
Dan Schaper
47ed0b7627 Merge pull request #1830 from pi-hole/ops/stickler
Create .stickler.yml
2017-12-09 18:18:50 -08:00
Dan Schaper
423280cee1 Merge pull request #1817 from jjssoftware/development
pihole.log permissions
2017-12-09 14:15:12 -08:00
Dan Schaper
8c0faa0b9a Create .stickler.yml
Initial stickler yaml file.
2017-12-09 14:08:54 -08:00
Keith Bentrup
45ab2a3d7a send HTTP headers before HTML
Signed-off-by: Keith Bentrup <keith@keithbentrup.com>
2017-12-09 17:03:20 -05:00
Dan Schaper
8804f5c423 Merge pull request #1825 from pi-hole/tweak/updatechecker
Tweak update checker
2017-12-09 13:58:16 -08:00
Dan Schaper
1078aa499c Merge pull request #1812 from pi-hole/fix/resolvconf
Try dig +short if getent hosts fails when running gravity
2017-12-09 13:57:48 -08:00
DL6ER
05d015169c Check for local version and branches every 10 minutes, check for remote versions only once a day
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-12-09 19:00:46 +01:00
Jacob Salmela
6c9e7586d5 Merge pull request #1818 from pi-hole/fix/debug
Use systemctl or service commands in debug script
2017-12-08 19:57:37 -06:00
Jacob Salmela
28bed0041e remove comment
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-12-08 18:29:28 -06:00
Jacob Salmela
6f03e30151 fixes #1537 by checking if systemctl is found
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-12-08 18:23:55 -06:00
Joe
6085d6ffd1 Merge pull request #1 from jjssoftware/jjssoftware-patch-1
Jjssoftware patch 1
2017-12-08 22:38:22 +00:00
Joe
6ecd93d0c9 pihole.log permissions
This change makes pihole more friendly to the non-existence of the pihole.log file. This can help with systems that are configured to mount /var/log as a tmpfs volume. It may also help with systems where the pihole.log file is accidentally/unintentionally removed. 

Further discussion around the details of this change are in https://github.com/pi-hole/pi-hole/issues/1798
2017-12-08 22:25:01 +00:00
Dan Schaper
863ea7294f Merge pull request #1815 from pi-hole/release/3.2
Merge Release 3.2 in to development. GitFlow
2017-12-08 13:06:18 -08:00
Jacob Salmela
af59824819 Merge pull request #1811 from bcambl/nmcli_check
check NetworkManager status prior to using the cli (#1653)
2017-12-08 06:38:42 -06:00
Jacob Salmela
80e17ab721 potentially fixes #1806 by falling back to dig if getent fails
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-12-07 22:38:47 -06:00
bcambl
f89d69b081 check NetworkManager status prior to using the cli (#1653)
Closes #1653

Signed-off-by: bcambl <blayne@blaynecampbell.com>
2017-12-07 21:43:14 -06:00
Jacob Salmela
5ba413569e Merge pull request #1776 from pi-hole/release/3.2
Pi-hole core v3.2
2017-12-06 21:37:10 -06:00
Adam Warner
b3e969f000 Merge pull request #1797 from pi-hole/Ugh/Codacy
Ugh/codacy
2017-12-07 00:49:59 +00:00
Adam Warner
a9a40ca46c Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 23:27:40 +00:00
Adam Warner
79aada0b87 travis didn't like that
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 22:57:05 +00:00
Adam Warner
162a7b56fe force mode is no longer referenced. Regression. Same with domToRemoveList
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 22:42:08 +00:00
Adam Warner
69dc22c10f fix some codacy and intelliJ idea complaints
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 22:31:12 +00:00
Mcat12
9642cda949 Merge pull request #1792 from pi-hole/bugfix/lighttpdEnabled
Add in an extra check to enable lighttpd.
2017-12-06 16:31:26 -05:00
Adam Warner
dd6a9a0b84 supress output of which command on centos/fedora as per https://github.com/pi-hole/pi-hole/pull/1776#discussion_r155156819
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 15:28:58 +00:00
Adam Warner
945dcc6c2b Indent two spaces as per https://github.com/pi-hole/pi-hole/pull/1776#discussion_r155157116
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 15:17:31 +00:00
Adam Warner
f60791ac7c Add dependencies as per https://github.com/pi-hole/pi-hole/pull/1776#discussion_r155149349
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 14:42:01 +00:00
Adam Warner
b64155a165 Add in an extra check to enable lighttpd.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-12-06 14:32:39 +00:00
Mcat12
472f7725c7 Merge pull request #1779 from pi-hole/new/locallists
Add support for local blocking lists
2017-11-28 20:58:00 -05:00
Jacob Salmela
90f01b5fc4 Merge pull request #1780 from pi-hole/fix/spacepasswd
Allow passwords with spaces
2017-11-23 23:42:54 -06:00
Jacob Salmela
20a2daa114 Merge branch 'release/3.2' into fix/spacepasswd 2017-11-23 23:11:17 -06:00
Jacob Salmela
9b6a2c7068 Merge pull request #1769 from pi-hole/tweak/readme
Use GH Pages images & update wording
2017-11-23 23:07:16 -06:00
WaLLy3K
0a4d3ef6e6 Add "sudo bash" to installation instructions
* Running as sudo/root prevents script from being re-downloaded, unintentionally side-stepping manual code review by end user

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-11-23 13:35:51 +11:00
WaLLy3K
2dc1851892 Allow passwords with spaces
e.g: `pihole -a -p "foo bar"`

 Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-11-23 13:17:34 +11:00
Mcat12
8d721d086c Modify indentation 2017-11-21 18:37:38 -05:00
DL6ER
6f0bb30def Improve indentation
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-21 20:58:27 +01:00
DL6ER
c54f04ef4c Repair username:password filtering
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-21 20:55:47 +01:00
DL6ER
eb83081a5c Clarify error message: File could also have been of zero size
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-21 18:36:34 +01:00
DL6ER
8976930e20 Properly detect if local file was successfully downloaded
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-21 18:35:58 +01:00
DL6ER
164a81776e Allow to add local lists to gravity using e.g. file:///path/to/my.list in adlists.list
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-21 18:30:40 +01:00
Loganaden Velvindron
9c8526db49 Add secondary quad9 server 2017-11-20 22:05:41 +04:00
WaLLy3K
d92f9b4dbd Add separator between FAQ/Requests & Social Media
This is to add emphasis that the first three options should be considered before the social media outlets.

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-11-20 15:59:13 +11:00
Mcat12
1556163fb0 Merge pull request #1774 from mterron/patch-1
Add support for Quad9 secure dns server
2017-11-18 14:06:47 -05:00
Terror
616962200a Update the list size to show all the options 2017-11-17 18:18:13 +13:00
Terror
eb9c44a347 Add support for Quad9 secure dns server
See www.quad9.net
2017-11-17 15:54:04 +13:00
WaLLy3K
f36ac48de0 Use GH Pages images & update wording
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-11-15 13:15:59 +11:00
Jacob Salmela
f63267a7f9 Merge pull request #1757 from Mausy5043/development
Various small fixes
2017-11-11 16:45:16 -06:00
Jacob Salmela
9631519eb1 Merge pull request #1752 from pi-hole/new/bashupdatechecker
Add bash / cron based update checker for Pi-hole
2017-11-08 20:38:40 -06:00
Jacob Salmela
557d076d2e Merge pull request #1717 from pi-hole/tweak/readme
Update README.md
2017-11-08 20:07:58 -06:00
Jacob Salmela
8a40c91d1a made above the fold focus on the logo and Pi-holes features. fixed typos. wordsmithed
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-11-08 20:03:18 -06:00
DL6ER
90efa3b610 Simplify git subroutines
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-11-08 19:11:41 +01:00
Mausy5043
ec4e4d3b72 fix indentation 2017-11-05 11:02:04 +01:00
Mausy5043
63312ac4b8 removed duplicate word 2017-11-05 10:18:39 +01:00
Mausy5043
d158a7d51e spelling corrected 2017-11-05 10:16:56 +01:00
Mausy5043
209a2ab3ec grammar corrected (double negative) 2017-11-05 10:05:25 +01:00
Adam Warner
5221767a70 Merge pull request #1735 from bcambl/debug_selinux
add SELinux checks to debug script
2017-10-30 13:07:36 +00:00
DL6ER
9492ff26c6 Merge pull request #1747 from pi-hole/tweak/gravity_update_time
Randomize gravity update time
2017-10-29 16:34:18 +01:00
DL6ER
06764d0f36 Randomize gravity update time between 03:01 - 04:58 (excluding 04:00)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-29 15:37:39 +01:00
DL6ER
0db76aada0 Silence errors when directory to be checked does not exist (system may have been installed without a web interface!)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-28 15:44:17 +02:00
DL6ER
7362416afb Force an update of the updatechecker after update/install
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-28 15:40:48 +02:00
DL6ER
9be854031f Don't store FTL branch until the next release of FTL which supports returning the branch in an easy way
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-28 13:41:24 +02:00
DL6ER
709851503f Use "pihole-FTL branch" to get FTL's branch
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-28 13:27:12 +02:00
DL6ER
6ca47dc3b3 Add bash / cron based update checker for Pi-hole 2017-10-28 13:20:02 +02:00
DL6ER
d8774901ee Merge pull request #1751 from pi-hole/tweak/FTL_SIGHUP
Send SIGHUP to pihole-FTL when restarting/reloading dnsmasq
2017-10-26 21:43:16 +02:00
Mcat12
8dba2a88e2 Move FTL re-parsing call after dnsmasq restart 2017-10-25 23:07:45 -04:00
DL6ER
2c33c64fae Merge pull request #1750 from pi-hole/fix/chrono-ftl-dbb
Silence non-numeric domains_being_blocked output
2017-10-25 18:19:53 +02:00
DL6ER
b9ae01d819 Send SIGHUP to pihole-FTL when restarting/reloading dnsmasq
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-25 17:46:24 +02:00
WaLLy3K
2390b80359 Silence non-numeric domains_being_blocked output
* Round $cpu_mhz to 1 decimal place
* Remove ".0" from $cpu_freq
* Silence non-numeric domains_being_blocked output
* Use "Core" and "Web" as appropriate

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-25 21:04:43 +11:00
DL6ER
c34c3eb016 Shift randomized time interval from 00:00-01:59 to 02:00-03:59 2017-10-21 15:58:37 +02:00
DL6ER
85d159bdd1 Randomize gravity update time
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-21 15:52:53 +02:00
Adam Warner
da1d2b2c48 Merge pull request #1744 from bcambl/unignore_pullapprove
Unignore pullapprove
2017-10-21 01:02:52 +01:00
WaLLy3K
5f8b0b3c89 Merge pull request #1743 from pi-hole/fix/wildcardrestart
Fix for wildcard not restarting `dnsmasq`
2017-10-20 10:35:24 +00:00
bcambl
0f868f7649 remove un-used DONE variable
(still available via sourced COL_TABLE on line 29)
2017-10-19 22:57:07 -06:00
bcambl
8b0785996e remove .pullapprove.yml from .gitignore
Closes #1535
2017-10-19 22:41:29 -06:00
WaLLy3K
645d8e0ebd Fix issue where wildcarding didn't restart dnsmasq
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-19 17:51:20 +11:00
WaLLy3K
3a3c0befa7 Merge pull request #1734 from pi-hole/fix/query-options
Fix query option handling
2017-10-18 08:23:40 +00:00
WaLLy3K
80c40e6050 Prevent full stop being interpreted as regex
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-16 10:12:27 +11:00
bcambl
31730e7197 add missing colors to COL_TABLE fallback 2017-10-13 09:14:19 -06:00
bcambl
7d76db00ac update 'SELinux not detected' message 2017-10-13 08:58:35 -06:00
bcambl
8aceb8bf53 replace deprecated colors in debug script
- COL_LIGHT_GREEN  -> COL_GREEN
 - COL_LIGHT_RED    -> COL_RED
 - COL_LIGHT_PURPLE -> COL_PURPLE
2017-10-12 23:33:28 -06:00
bcambl
a17d1be7a4 simplify selinux debug variables 2017-10-12 23:24:02 -06:00
bcambl
1e6cc63abe add SELinux checking to debug script 2017-10-12 20:55:14 -06:00
WaLLy3K
3b300a4d6a Fix query option handling
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-13 11:42:49 +11:00
WaLLy3K
3e727c5e5d Merge pull request #1721 from pi-hole/fix/lightyconf
Add comment for include_shell feature
2017-10-11 01:55:05 +00:00
DL6ER
e0edac32c7 Merge pull request #1728 from pi-hole/new/nuke_lists
Add nuclear option to list.sh
2017-10-10 19:12:16 +02:00
WaLLy3K
e4b3bc4209 Minor spacing corrections
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-10 13:17:33 +11:00
WaLLy3K
51b09efceb Fix minor typo
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-09 19:53:45 +11:00
WaLLy3K
2dabacd024 Fix minor typo
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-09 19:53:22 +11:00
WaLLy3K
0613dcc87b Merge pull request #1692 from andofrjando/cors_mixed_content_fix
Fix for bug on block page (#1416) caused by CORS mixed content when behind reverse proxy using SSL
2017-10-09 07:53:33 +00:00
WaLLy3K
d59a2a4cfc Merge pull request #1729 from pi-hole/fix/email-help-argument
Allow emails which include `-h` in them (Fix for #1691)
2017-10-08 12:23:46 +11:00
WaLLy3K
2c091f3a3c Merge branch 'development' into cors_mixed_content_fix 2017-10-08 12:22:14 +11:00
WaLLy3K
cfcdc53185 Merge pull request #1722 from pi-hole/fix/bpfqdn
Improve FQDN Authorized Hosts functionality (Fix for #1416)
2017-10-08 12:19:11 +11:00
WaLLy3K
bd33018660 Shellcheck OR validation
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-08 12:16:05 +11:00
Mcat12
67a5594909 Allow emails which include -h in them
For example, mcat12@pi-hole.net would previously spit out the help message
2017-10-07 16:06:16 -04:00
DL6ER
70ad656af0 Save backup as ".bck~" to prevent reading of the file by dnsmasq
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-07 22:04:14 +02:00
DL6ER
f22b83d379 Create a backup before emptying the list
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-07 17:46:40 +02:00
DL6ER
114f84c948 Add --nuke option to list.sh that can be used e.g. by Teleporter to empty out lists before importing new content
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-10-07 17:29:47 +02:00
WaLLy3K
7875df0d6b Merge pull request #1723 from pi-hole/tweak/bpcss
Ensure Block Page (#1416) matches current style of Web Interface
2017-10-07 14:53:43 +11:00
WaLLy3K
0d286b99d5 Remove placeholder URL 2017-10-06 20:39:01 +11:00
WaLLy3K
e03d4f2de8 Condense features into three main sections
* Core shows a list of common commands, linking to the new Core Function Breakdown wiki article
* Core also now shows the ASCII Vortex
* Web has had its preview image size reduced
* FTL's functions are elaborated upon more
2017-10-06 20:35:54 +11:00
WaLLy3K
7fddce4a1f Use updated vector logo
* Move Codacy/Build/BountySource badges underneath the H1 header
* Use updated vector logo (Matches the new Pi-hole stickers!)
* Tweak wording for Versatile
* Quote `cd` path instead of escaping string
* Order Projects and Coverage in order of publish date
* Use the current published title for Projects/Coverage links
* Change Projects/Coverage links to use HTTPS if the server supports TLS

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-06 18:11:05 +11:00
WaLLy3K
3cd8b7d882 Merge pull request #1724 from pi-hole/fix/removejs
Remove superseded index.js: #1696 #1416
2017-10-04 14:11:52 +11:00
DL6ER
3578a3e311 Merge pull request #1718 from pi-hole/tweak/VPNhostnames
Append ".vpn" TLD for OpenVPN host names
2017-10-03 21:32:36 +02:00
WaLLy3K
a9ad8d67aa Remove superseded index.js
Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-04 01:13:02 +11:00
WaLLy3K
43e1121618 Match current style of Web Interface
* Remove border from about menu

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-04 01:05:44 +11:00
WaLLy3K
97dd1b4cf3 Improve FQDN Authorized Hosts functionality
* Use inverse if statement, instead of IF/ELSE when checking setupVars.conf
* Remove $svFQDN
* Add or elaborate on more comments
* Add $serverName to $authorizedHosts if admin has specified `setenv.add-environment = ("fqdn" => "true")` within lighttpd's external.conf
    * e.g: `$HTTP["host"] == "pihole.domain.com" { setenv.add-environment = ("fqdn" => "true") }`
* Move "No exact results" check to top of exception handling
* Remove unnecessary IF/ELSE when handling $queryAds error

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-10-04 00:46:51 +11:00
WaLLy3K
288635abc9 Add comment for include_shell feature
* Capitalise first letter for Lighttpd
* Fix spacing
* Add comment for include_shell feature
2017-10-03 22:05:06 +11:00
Mcat12
7884423e05 Merge pull request #1719 from 19wolf/patch-1
Update basic-install.sh
2017-10-01 12:51:20 -04:00
Eric Wolf
1615fa63e3 Update basic-install.sh
Fixed comment line 40
2017-09-30 16:34:38 -04:00
DL6ER
39ab1e1ea7 When using the Pi-hole DHCP server, local host names are called "something.local". Thir PR ensures that clients that are connected via VPN are augmented by a similar suffix like "someother.vpn".
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-09-30 13:03:49 +02:00
WaLLy3K
10c048d84a Use "Web Interface" verbiage throughout document
* Also implement other reviewed suggestions
2017-09-30 13:21:29 +10:00
WaLLy3K
a458482e51 Update README.md
* Create consistent style and formatting
* Simplify and/or tweak wording
2017-09-30 00:20:41 +10:00
WaLLy3K
de46dbd56f Ensure domains are consolidated to lower case
* Fix regression caused by #1631
2017-09-27 01:55:17 +10:00
spacedingo
60365ad36a Update gravity.sh 2017-09-26 09:25:47 +04:00
spacedingo
466e6d9b30 Redo pull #1687
Fix for case sensitive duplicate domains
The change (https://github.com/pi-hole/pi-hole/pull/1687) was recently undone.
2017-09-26 05:53:07 +04:00
WaLLy3K
11d48554e3 Merge pull request #1708 from pi-hole/fix/gravityErrors
Place errors on newline
2017-09-25 15:39:26 +10:00
WaLLy3K
b9bcfe36ff Place errors on newline 2017-09-24 11:57:15 +10:00
WaLLy3K
05faa7bdf2 Merge pull request #1707 from pi-hole/fix/tailFunc
Correctly retrieve IPv4/6 addresses for tailFunc()
2017-09-24 10:28:36 +10:00
WaLLy3K
88b1f0ca7f Merge pull request #1702 from pi-hole/fix/activeDomains
Ensure domains files are not deleted upon w/blist
2017-09-24 08:02:47 +10:00
WaLLy3K
f0f7bda2f3 Merge pull request #1704 from celly/lighttpd-hide-files
Exclude files from Web Admin that should not be accessible.
2017-09-23 11:36:03 +10:00
WaLLy3K
664d0ea023 Correctly retrieve IPv4/6 addresses for tailFunc()
* Add comments for readability
* Use `sed -E` for readability
* Move `date` into `sed`
* Use updated colour codes
2017-09-23 11:27:40 +10:00
WaLLy3K
cd7c00ef8e Fix Ctrl-C inadvertently deleting domains files 2017-09-23 10:32:56 +10:00
Celly
3f20981aab Update access rules to block all root '.' files 2017-09-22 09:29:00 -04:00
Celly
f54a812ad5 Update access rules to block all root '.' files 2017-09-22 09:27:43 -04:00
WaLLy3K
aa1d67a4de Merge pull request #1703 from pi-hole/fix/lighttpdEnabled
Fix `LIGHTTPD_ENABLED` dupes in `setupVars.conf`
2017-09-22 19:21:50 +10:00
WaLLy3K
feb2150d9b Fix LIGHTTPD_ENABLED dupes in setupVars.conf
* Fix issue merged [here](fdf2649f2f (diff-689793e68cde6270d074695b71c969afL1488))
2017-09-22 19:14:11 +10:00
WaLLy3K
3aa525b0c0 Ensure domains files are not deleted upon w/blist 2017-09-22 14:17:56 +10:00
andofrjando
6323d5afed Use PHP short echo tag to avoid Codacy expecting an escaping function 2017-09-22 07:15:03 +08:00
Celly
e3e3b4da58 Add in some exclusions form some leaky files in the admin 2017-09-21 17:47:37 -04:00
Adam Warner
a0bd517380 Merge pull request #1694 from pi-hole/fix/qf-opt
Slow query fix & queryFunc optimisation
2017-09-21 20:05:42 +01:00
Adam Warner
4316b15ae2 Merge pull request #1700 from pi-hole/fix/start-ftl
Start and enable FTL prior to running Gravity
2017-09-21 20:00:08 +01:00
Adam Warner
ef1ce7d4d6 Merge pull request #1631 from pi-hole/tweak/gravity
Clean up and optimise Gravity
2017-09-21 19:58:38 +01:00
Adam Warner
a643f40cce Merge pull request #1663 from pi-hole/new/UninstallCleanup
Cleanup uninstall script
2017-09-21 19:56:12 +01:00
WaLLy3K
47099e2855 Ensure resolver test occurs each second
* Ensure that gravity will run the second the resolver is available
* Increase timeout to 120s
2017-09-22 03:56:53 +10:00
WaLLy3K
2deb2bf03f Fix broken whitelist functionality 2017-09-22 02:23:43 +10:00
WaLLy3K
3bb05edb52 Merge pull request #1701 from pi-hole/fix/local-ttl
Decrease `local-ttl` to 2
2017-09-22 01:29:50 +10:00
DL6ER
ee2169dd13 Merge branch 'development' into tweak/gravity 2017-09-21 17:05:30 +02:00
WaLLy3K
11282aaca3 Decrease local-ttl to 2
* Decreasing value should benefit clients when whitelisting blocked sites, [as per this discussion](https://github.com/pi-hole/pi-hole/pull/1698#issuecomment-331134576).
2017-09-21 23:11:44 +10:00
WaLLy3K
909bc92c01 Tweak wording to fit on 80 character screen
* Also move colour after $INFO
2017-09-21 00:22:47 +10:00
WaLLy3K
a6f9272d4b Fix gravity from only parsing one adlist URL
* Redirect `grep` correctly to $sources (instead of using `awk`)
* Redirect $sourceDomains correctly
* Replace use of ${COL_LIGHT_BLUE}
* Add numeric count informing user of unique source domains being whitelisted
2017-09-20 22:25:33 +10:00
WaLLy3K
911596daf8 Start and enable FTL prior to running Gravity 2017-09-20 17:29:11 +10:00
Adam Warner
8d8482d60b <<<$() back to < <()
Signed-off-by: Adam Warner <adamw@rner.email>
2017-09-19 19:02:50 +01:00
WaLLy3K
f3cc8c71c4 Merge pull request #1691 from pi-hole/new/adminemail
Add `pihole -a email` functionality for Block Page contact email
2017-09-19 18:39:37 +10:00
WaLLy3K
f6b3c62b06 Merge pull request #1696 from pi-hole/tweak/removeindexjs
Delete index.js
2017-09-19 18:00:48 +10:00
WaLLy3K
26afe04926 Remove index.js test 2017-09-19 01:04:04 +10:00
WaLLy3K
500a755250 Delete superseded file
* Functionality is reproduced from within the Block Page
2017-09-19 01:03:24 +10:00
WaLLy3K
d02bf258af Improve non-standard list parsing
* Add 504 status (Gateway connection timed out)
* Add text for non-standard list parsing
* Improve adblock parsing
* Ensure adblock exception rules are removed from file
* Ensure "www." is not treated as a URL-format list
* Corrected typo
* Ensure script does not fail if "-f" is used when there are no blocklists generated

Signed off by WaLLy3K <wally3k@pi-hole.net>
2017-09-18 17:36:03 +10:00
WaLLy3K
56990618e9 Prevent Block Page issue
* Block Page expects to see a full stop, otherwise it will throw an unhandled error
2017-09-18 01:12:19 +10:00
WaLLy3K
54a85d3a63 Fix invalid option case
* Ensure `pihole -q doubleclick.com asd` exits with error
2017-09-18 00:58:56 +10:00
WaLLy3K
d56beedd7a Add idn2 dependency 2017-09-18 00:41:53 +10:00
WaLLy3K
c2d3e99ddd Slow query fix & queryFunc optimisation
* Validate modified code using Shellcheck & Strict Bash
* Added and/or elaborated more comments

* scanlist() should exit if /etc/pihole is not available
* Add `export LC_CTYPE=C` to prevent extreme grep slowdown
* Consider "domain.com#comment" an exact match
* Add specialised wildcard searching grep

* Optimise and simplify queryFunc() for readability
* Replace IDN `python` parsing with `idn2`, as `python` is not guaranteed to be available
* Use ${COL_BOLD} when printing filenames
2017-09-18 00:41:26 +10:00
andofrjando
5e48b3f7f7 Fix one mistake where $proto would not be created if $_SERVER['HTTPS'] exists but is not set to on 2017-09-16 11:24:38 +08:00
andofrjando
00d62b3423 This fixes the following bug:
If Pi-Hole is behind a reverse proxy that uses SSL, then the block page will not load resources such as `blockingpage.css` and `jquery.min.js` as the insecure `http://` is hard coded. Browsers will block attempts to load insecure resources if the page is loaded of SSL.
The fix is acheived by checking `$_SERVER['HTTPS']` and setting the variable `$proto` to either `http` or `https`. The harcoded `http` is replaced by the contents of this variable.
2017-09-16 10:24:37 +08:00
WaLLy3K
c957124fad Optimised parsing of domains on IPv6 servers
* Remove WHITELIST_COMMAND
* Place IPv4/IPv6 availability test underneath setupVars.conf source
* Improved clarity on comments
* Define default lookupDomain on local line
* Use `getent hosts` instead of nslookup (faster)
* Make gravity_DNSLookup() function more readable
* Use bold on "Neutrino emissions detected"
* Swap conditionals around on adlists file handling
* Add comments to both gravity_Collapse() `awk`s
* Removed unnecessary "${str}" from gravity_Pull()
* Merge function variables into local line
* Place .phgbp suffice on mktemp, so patternbuffers can be cleaned up all at once in gravity_Cleanup()
* Removed success="false" from $httpCode case, placed empty success var in local
* Reordered $httpCode case numerically because I can
* Provide error if Dnsmasq format list is being parsed
* Remove IPv4 check when determining URL list (too slow on large lists)
* Check ${#sources[@]} to ensure we're checking the number of entries and not the character count
* Define empty plural in local line, removing unnecessary plural=;
* Optimised readability of gravity_Whitelist()
* Removed uninformative "Nothing to blacklist"/"No wildcards used" text
* Optimised parsing of domains into hosts format on IPv6 enabled servers
* Ensure /etc/hostname is non-zero
* Use `: >` instead of `rm` as consistent with the rest of the script
* Ensured that gravity_Cleanup() removes ${localList}.tmp
* Optimised readability of gravity_ParseUserDomains()
* Moved dnsRestart to ${var} case statement, renaming it to dnsRestartType for readability
* Set default $listType to ensure script passes "bash strict mode"
2017-09-15 22:39:17 +10:00
WaLLy3K
28063aa7f7 Add administrative contact address functionality
* Disable shellcheck for SC1090
2017-09-15 00:24:29 +10:00
WaLLy3K
c458e4a93b Merge pull request #1420 from WaLLy3K/new/https
Disable Let's Encrypt HTTPS & shift functions to block page
2017-09-14 20:40:20 +10:00
WaLLy3K
e7ae62ba76 Merge pull request #1416 from WaLLy3K/blockpage2
Block Page 2.0
2017-09-14 20:39:45 +10:00
WaLLy3K
ff5411a93a Add 'Connection Refused' for 000 status
* Shift default dnsRestart value into unset default parameter expansion value
* Change nslookup timeout to 5 seconds 
* Use &> instead of >
* Standardise plural code
* Update some comments
* Add "000" when connection is refused
* Condense adblock detection logic
* Add Dnsmasq format detection and parsing logic
* Removed unnecessary echo
* Add dnsWasOffline variable to ensure that if DNS service has been stopped, that it doesn't start and also get reloaded
2017-09-14 20:23:49 +10:00
WaLLy3K
d3073e5e23 Fix array of unique $sourceDomains 2017-09-14 17:09:52 +10:00
WaLLy3K
34ae4844fa Merge branch 'development' into tweak/gravity 2017-09-14 16:44:14 +10:00
WaLLy3K
8191ec01e5 Gravity Bugfixes
* Merge development OpenVPN code
* Determine which domain to resolve depending on existence of $localList
* Re-add code to remove $localList, preventing duplicate local entries
* Minor shellcheck validation fix
2017-09-14 16:39:30 +10:00
WaLLy3K
4d39ab9753 Allow force-reload to be used when restarting DNS
* Remove duplicate coltable variable definition and source
* Minor comment modifications
* Add "$2" to restartdns
2017-09-14 16:39:25 +10:00
Adam Warner
7a1df15724 Merge pull request #1688 from pi-hole/tweak/customBlockPage
Allow for Custom block page
2017-09-13 18:22:38 +01:00
Adam Warner
42b5574f9b remove no longer needed tests
Signed-off-by: Adam Warner <adamw@rner.email>
2017-09-09 19:41:05 +01:00
Adam Warner
5f4be0de35 adjust lighttpd config depending on whether or not custom.php exists
Signed-off-by: Adam Warner <adamw@rner.email>
2017-09-09 19:30:53 +01:00
Adam Warner
6c605f55f9 always overwrite default blockpage, so that changes can be rolled out
Signed-off-by: Adam Warner <adamw@rner.email>
2017-09-09 19:07:48 +01:00
Adam Warner
774c6e8ac0 Merge branch 'development' into new/UninstallCleanup
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	automated install/uninstall.sh
2017-09-09 18:56:17 +01:00
DL6ER
17be6b860e Merge pull request #1682 from pi-hole/tweak/VPN_hostnames
Add VPN host names to local.list
2017-09-08 22:42:58 +02:00
Adam Warner
474ac4a15d Merge pull request #1581 from pi-hole/sqlite-dependency
Add "php5-sqlite" to dependencies
2017-09-08 21:28:16 +01:00
DL6ER
b8fedf76cd Merge pull request #1572 from pi-hole/gedetil-development
Add web frontend shutdown command
2017-09-08 20:21:20 +02:00
DL6ER
ca88c59d4e Merge pull request #1687 from spacedingo/patch-2
Add ignore-case switch to sort (domains)
2017-09-08 20:17:38 +02:00
Mcat12
d69e62589a Merge branch 'development' into sqlite-dependency 2017-09-08 13:43:26 -04:00
DL6ER
c9d4995900 Update to comply with current development code
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-09-08 19:35:05 +02:00
DL6ER
279e809aaf Use poweroff instead of halt
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-09-08 19:33:06 +02:00
Mcat12
d61857efae Merge branch 'development' into patch-2 2017-09-08 13:32:51 -04:00
DL6ER
0d037e96fb Merge branch 'development' into gedetil-development
Signed-off-by: DL6ER <dl6er@dl6er.de>

Conflicts:
	advanced/Scripts/webpage.sh
2017-09-08 19:32:38 +02:00
Mcat12
6376f9aef4 Merge pull request #1680 from pi-hole/colour-consistency
Colour output consistency
2017-09-08 13:29:55 -04:00
spacedingo
f5a1fa21f7 Add ignore-case switch to sort (domains)
Domains with caps pass off as unique. It is necessary for proper duplicate removal.
Example:
::: /etc/pihole/list.preEventHorizon (2 results)
adsatt.abcnews.starwave.com
Adsatt.ABCNews.starwave.com
2017-09-08 20:36:14 +04:00
DL6ER
4a90dac68e Simplify awk code as the format of ipp.txt is actually fixed (only one entry per line is allowed)
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-09-07 19:42:00 +02:00
DL6ER
2624e56de5 Parse /etc/openvpn/ipp.txt (if existing) and add entries to local.list.
Signed-off-by: DL6ER <dl6er@dl6er.de>
2017-09-06 16:54:41 +02:00
Adam Warner
aef54d6694 Merge branch 'development' into new/UninstallCleanup 2017-09-05 20:41:13 +01:00
Adam Warner
e839a7784c Merge branch 'development' into sqlite-dependency 2017-09-05 20:39:45 +01:00
WaLLy3K
bea99abd8d Ensure colour consistency between terminal themes
* Comment file for review-ability
* Add BOLD and UNDERLINE options
* Select most readable colours out of LIGHT/DARK options
* Provide empty variables for `set -u`
* Deprecate unnecessary variables
* Correct colours for TICK/CROSS/DONE
* Escape r twice and add ESC to OVER
2017-09-05 23:28:33 +10:00
WaLLy3K
a5c4ae955a Merge branch 'development' into tweak/gravity 2017-09-03 15:28:41 +10:00
Dan Schaper
d7d53849a3 Merge pull request #1628 from pi-hole/fix/issue-template
Update Issue/PR Template text
2017-09-02 04:55:56 -07:00
WaLLy3K
b354f722be Add link for EUPL
* Also formatted `git rebase` text to be consistent with `git commit --signoff`

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-09-02 21:52:54 +10:00
WaLLy3K
ea1aad9774 Add review suggestions to template 2017-09-01 10:17:08 +10:00
WaLLy3K
817d644795 Merge branch 'development' into fix/issue-template 2017-09-01 10:16:03 +10:00
WaLLy3K
56b8c4bfdb Merge branch 'development' into tweak/gravity 2017-09-01 10:01:41 +10:00
Adam Warner
c65c26b463 Merge branch 'development' into new/UninstallCleanup 2017-08-31 15:36:47 +01:00
WaLLy3K
bf059e5ee8 Merge pull request #1676 from pi-hole/remove-netstat
Replace superseded netstat command
2017-08-31 21:16:11 +10:00
WaLLy3K
15a5f425bf Replace nc with psuedo-device
* Also fix minor conditional style issue
2017-08-31 20:32:02 +10:00
WaLLy3K
3125d24ded Replace superseded netstat command
* Make colfile readonly, and use path of PI_HOLE_SCRIPT_DIR
* Rename piholeStatus function to statusFunc for function name consistency
* Replace superseded netstat command with nc
* Perform addn-hosts check using a single grep subshell
2017-08-31 17:39:41 +10:00
Adam Warner
6b6d105c2f Merge branch 'development' into sqlite-dependency 2017-08-28 10:17:33 +01:00
WaLLy3K
bab44c52ae Merge branch 'development' into blockpage2 2017-08-28 13:30:57 +10:00
WaLLy3K
2f19605750 Merge branch 'development' into fix/issue-template 2017-08-28 13:29:18 +10:00
WaLLy3K
7311db3a63 Change wording to support feature PR's
* Also clarify template suggestion text
* Remove stray '
2017-08-28 13:28:23 +10:00
WaLLy3K
0a00936e99 Update resolver test & added more comments
* Add/update code comments
* Change resolver check to test for pi.hole
* Make resolver check timeout after 10 seconds
* Use > instead of &> where appropriate
* Make resolver check sleep for 30 seconds (effectively waiting up to 50s for dnsmasq to be resolvable)
* Provide confirmation upon success of resolver check availability
* Quotes and Braced remaining variables as appropriate
* Removed duplicate local
2017-08-28 11:36:02 +10:00
WaLLy3K
7cac207c00 Merge branch 'development' into tweak/gravity 2017-08-28 03:11:38 +10:00
WaLLy3K
feb412b02a Merge pull request #1671 from pi-hole/release/3.2
Update development from release/3.2
2017-08-28 03:04:46 +10:00
Adam Warner
199de9ebc0 Merge branch 'development' into new/https 2017-08-27 11:38:30 +01:00
Adam Warner
504ae0193f Merge branch 'development' into blockpage2 2017-08-27 11:23:21 +01:00
WaLLy3K
1ae403b742 Merge pull request #1667 from pi-hole/install-space
Remove erroneous space
2017-08-24 14:00:20 +10:00
Adam Warner
939c99cdbf accidentally an entire group of letters. 2017-08-23 11:48:11 +01:00
WaLLy3K
2f36acae49 Remove errornous space 2017-08-23 11:51:16 +10:00
Adam Warner
e938132c53 accidentally a space
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 21:02:10 +01:00
Adam Warner
1b34286264 verbiage
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 20:33:53 +01:00
Adam Warner
54f4f6d2d7 Add "${INSTALLER_DEPS[@]}" to package array
add `-f` to rm commands so that `set -e` is not kicked

Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 20:23:07 +01:00
Adam Warner
07e5e8e67a need to include PH_TEST="true" so that the install script isn't run when sourcing it.. doh
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 20:03:19 +01:00
Adam Warner
3c25094495 No need to declare PKG_MANAGER, as it's already declared in basic-install
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 19:56:36 +01:00
Adam Warner
95e3a5944d Initial overhaul of uninstall script sourcing distro_check() from basic-install.sh Totally untested as yet...
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 19:53:43 +01:00
Adam Warner
64f29120c8 indent nested function in basic-install.sh
fix dependency in uninstall.sh

Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-17 19:43:07 +01:00
Adam Warner
d92434b1e9 Merge branch 'development' into sqlite-dependency
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	automated install/basic-install.sh
2017-08-16 16:31:47 +01:00
Adam Warner
01cd056bcc Work out correct SQLITE version for php-sqlite
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-16 16:27:50 +01:00
Adam Warner
56f2ea3ec2 Add Fedora/Centos dependency
Signed-off-by: Adam Warner <adamw@rner.email>
2017-08-16 15:56:39 +01:00
Adam Warner
d45695a088 Merge pull request #1643 from pi-hole/tweak/PiholeCheckout
Small tweaks to output of `pihole checkout`
2017-08-04 00:19:46 +01:00
Adam Warner
2ceeac41fe Merge pull request #1648 from pi-hole/branding/DOReadme.md
Branding/DO readme.md
2017-08-02 11:29:31 +01:00
WaLLy3K
cc4ada99d8 Use SIGHUP instead of force-reload 2017-08-01 20:48:43 +10:00
Adam Warner
16d67f55b3 Merge branch 'development' into fix/issue-template 2017-07-29 17:18:16 +01:00
Adam Warner
18b41adbf6 Merge branch 'development' into tweak/gravity 2017-07-29 17:14:39 +01:00
Mcat12
898fdf7a60 Merge pull request #1602 from molikuner/development
Fix URL extension parsing
2017-07-29 11:49:24 -04:00
Adam Warner
78143c2ff4 Merge branch 'development' into blockpage2 2017-07-29 16:44:28 +01:00
Adam Warner
7b1524ad01 Merge branch 'development' into new/https 2017-07-29 16:44:20 +01:00
Adam Warner
5799485b0f Merge branch 'development' into development 2017-07-29 16:29:57 +01:00
Mcat12
9cddb6ca39 Merge branch 'release/3.2' into branding/DOReadme.md 2017-07-29 11:04:10 -04:00
Dan Schaper
defc17ba46 Remove DO from README.md
Preparation for futher infrastructure changes. Will remove the DO slug from README and adjust some wording.
2017-07-28 20:24:27 -07:00
Adam Warner
106d5afba1 Merge pull request #1646 from pi-hole/bugfix/DoubleH
Stop an extra `h` being added to leasetime of DHCP server.
2017-07-28 23:09:00 +01:00
Adam Warner
0a9965292c Additional check to fix any existing cases of "24h" in setupVars.conf automatically.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-28 19:40:13 +01:00
Adam Warner
4fb66e632f The other h 2017-07-28 16:30:03 +01:00
Adam Warner
5787895794 stop an extra h being added to leasetime of DHCP server. We already storethe h in setupVars.conf
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-28 16:10:13 +01:00
Adam Warner
d90489b31d Include branch we're switching from
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-27 22:21:25 +01:00
Adam Warner
f38912a0c9 - Correctly overwrite ${INFO} boxes with ${CROSS} etc
- Notify user that branch has been changed

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-27 21:33:41 +01:00
WaLLy3K
f24ab8508e WIP cleanup
* Changed supernova/eventHorizon variables to match their purpose
* Add gravity_DNSLookup() function
* Ensure all comments are clear and relevant
* Use && instead of || in gravity_Collapse()
* Renamed existing functions, and placed them in order of script execution
* Use \t instead of literal tab in gravity_ParseFileIntoDomains()
* Replace instances of "truncate" with : > (e.g: gravity_Schwarzschild())
* Ensure correct variables are local'd
* Use phrase "Cleaning up stray matter" when gravity_Cleanup() is called
* Add black/white/wildcard switches for list.sh
* Ensure necessary functions are called when modifying black/white/wildcards

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-27 12:34:35 +10:00
WaLLy3K
2d8fff099f Pass correct options to gravity.sh
* Optimise $validDomain function by using bashism and `grep`
* Add black/white/wildcard variables to pass to Reload()
* Revert reload variable behaviour
* Ensure Reload() function passes correct options to gravity.sh

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-27 12:34:26 +10:00
Adam Warner
dce36d8ded Merge branch 'master' into release/3.2 2017-07-26 19:49:57 +01:00
Mcat12
18d0278279 Merge pull request #1638 from pi-hole/hotfix/CIDR
CIDR hotfix > development
2017-07-26 14:41:03 -04:00
Adam Warner
4e525040f3 Merge branch 'development' into hotfix/CIDR 2017-07-26 18:23:02 +01:00
WaLLy3K
fdf2649f2f Clean up known remaining colour output issues (#1613)
* Print newline on error message

* Output last three lines of error if update fails

* Consistent error messages & housekeeping

* Add shellcheck directive to ignore COL_TABLE
* Quoted and braced variables for codebase consistency
* Escaped newlines correctly
* Made error messages consistent (indenting and wording)
* Removed consecutive echos

* Conditional formatting consistency

* Braced, quoted and used [[ on conditionals

* Fix specific ShellCheck issues

* Fixed issues that could be safely changed without extensive testing

* Update SELinux whiptail behaviour & more

* Colourised some strings
* Fixed multiple line string indenting
* Made output consistent with existing codebase
* Removed sequential echos
* Make SELinux whiptail use "--defaultno", and change text wording

* Add help text for hostrecord, and colourise output

* this should fix the tests...

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

* revert changes to `update_package_cache()` to prove tests

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-26 18:00:08 +01:00
Mcat12
b09c660833 Always process DNS and DHCP settings in installer (#1630)
* Always process DNS and DHCP settings in installer

* Make sure dnsmasq config exists before modifying it

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>

* Make sure the dnsmasq config directory exists

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>

* Only remove the DHCP config if it exists (fixes tests, hopefully)

Signed-off-by: Mcat12 <newtoncat12@yahoo.com>
2017-07-26 17:15:23 +01:00
Adam Warner
c02a24cf71 Fix/unbreak development (#1635)
* Always process DNS and DHCP settings in installer

* change where finalExports is called and where LIGHTTPD_ENABLED is set.

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

* this may or may not work. If it does, can be functionised to reduce code duping

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

* This will fix the tests, but break the patch

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-26 14:34:40 +01:00
Mcat12
a77136bd1d Merge pull request #1600 from pi-hole/tweak/OnlyDownloadFTLNew
Only download FTL if a newer version than currently installed is detected (or if no version is detected)
2017-07-25 22:11:31 -04:00
WaLLy3K
e0eb5eb2b1 Fix queryFunc if adlists URLs have been removed (#1618)
* Fix queryFunc if adlists URLs have been removed

* Allow for -adlists command line switch (where the "s" is a typo)
* Add error message when unable to find associated adlists URL

* Provide PR fix on current dev version

* Add blResult variable for white/black match

* Supporting Block Page queryFunc fixes

* Re-add unmerged lines
2017-07-25 23:07:06 +01:00
WaLLy3K
714fd93292 Provide correct FTL stats (#1619)
* Provide correct FTL stats

* Use the correct lines in the array when displaying FTL stats
* Treat ads_blocked_today/dns_queries_today as currency, like domains_being_blocked is on large screens

* Chronometer Shellcheck validation

* Remove unnecessary \ from CPU usage readout
2017-07-25 23:03:23 +01:00
Adam Warner
a293b5a371 prevent ./automated install/basic-install.sh: line 1886: /usr/bin/pihole-FTL: No such file or directory on new install, or if pihole-FTL is missing for whatever reason.
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-25 22:49:06 +01:00
Adam Warner
1c93868ae1 Adjust wording of echos
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-24 23:22:04 +01:00
WaLLy3K
61ff0452e1 Remove duplicate code
* Make RestartDNS() use `pihole restartdns`

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-24 21:27:12 +10:00
WaLLy3K
406098e55a Speed up refresh time
* Add "--blacklist-only" to only run essential gravity functions
* Pass "--wildcard" option to `gravity.sh` to ensure dnsmasq is restarted

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-24 21:26:39 +10:00
WaLLy3K
a2825be819 Add dnsmasq "force-reload" option
* Made use of $PI_HOLE_SCRIPT_DIR
* Fix #1610 & #1624
* Add "$2" to restartDNS options

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-24 21:25:04 +10:00
WaLLy3K
6830b08723 Clean up and optimise Gravity
* Shellcheck validation
* Made variable names, function names, comments and output clearer to understand
* Quoted and braced variables and conditionals
* Fix adlists.list handling logic, and remove any CR line endings
* Make CP/MV/RM provide user-friendly output upon failure
* Change adlists.list retrieval logic
* Moved and fixed adlists.list domain parsing logic
* Create gravity_ParseFileAsDomains() function to handle parsing of source files
* If no changes to a list is detected, print no output
* Ensure each source blocklist has a final newline
* Format number output as currency
* Make array of adlists domain sources unique to prevent redundant whitelisting
* Merged bash IPv4/IPv6 hosts formatting IF statement into an awk one-liner
* Trap Ctrl-C cancellations and run gravity_Cleanup()
* Use new gravity_Cleanup() function on errors and script completion
* Ensure that dnsmasq uses force-reload when gravity is invoked
* Add --wildcard option to ensure dnsmasq is restarted upon b/wlisting of a wildcard

Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-24 21:24:34 +10:00
WaLLy3K
eead2f059b Add review suggestions to Issue Template
* Use a more relevant link when explaining debug
* Re-add feature request note
2017-07-23 11:06:43 +10:00
WaLLy3K
291c111ce8 Update PR Template text
Signed-off-by: WaLLy3K <wally3k@pi-hole.net>
2017-07-22 15:29:36 +10:00
WaLLy3K
2ccf063dfe Update Issue Template text 2017-07-22 15:15:39 +10:00
WaLLy3K
49aee8b931 Fixed development branch check 2017-07-19 12:26:00 +10:00
WaLLy3K
f2a3b557c8 Updated Block Page to work with queryFunc output 2017-07-19 00:15:59 +10:00
Adam Warner
b0eceddcec Merge pull request #1617 from pi-hole/hotfix/CIDR
Hotfix/cidr (Pi-hole 3.1.1)
2017-07-18 09:39:20 +01:00
Adam Warner
0a062d26e6 Merge pull request #1611 from pi-hole/developmentNew
Sort out Merge conflicts with master
2017-07-17 14:49:55 +01:00
Adam Warner
20b2dd6b19 Merge pull request #1567 from pi-hole/tweak/checkout_FTL
Add pihole checkout ftl
2017-07-17 14:38:30 +01:00
Adam Warner
83592a5e70 Put '"'s in the right place
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-17 11:18:03 +01:00
Adam Warner
70fb733fea col_table does not exist yet, will break the install if pushed as hotfix.
Not sure why these additional "'s were put in, they break the update command, too.

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-17 10:53:49 +01:00
Adam Warner
eb8333c772 Merge branch 'development' into developmentNew 2017-07-16 16:45:33 +01:00
WaLLy3K
c9a98b68c8 Avoid reactivating a deactivated lighttpd service (#1485)
* Do not activate disabled lighttpd upon update

* Fixes #1362

* Use systemctl when available

* Move `finalexports` to the very end of the install script
set value of LIGHTTPD_ENABLED to 1 or 0 depending on whether or not lighttpd is enabled or disabled.
actually save LIGHTTPD_ENABLED value to setupvars.conf

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

* add [[ -z "${LIGHTTPD_ENABLED}" ]] back in!

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

* Ensure "Loaded:" is the line being checked

* Colourise disabled lighttpd message

* Prevent disabled lighttpd triggering error

* change of plan, don't need that [[ -z "${LIGHTTPD_ENABLED}" ]]

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-16 16:44:14 +01:00
Adam Warner
247d3ed729 list availible branches for FTL
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-16 13:54:23 +01:00
Adam Warner
031c6428d5 Merge branch 'tweak/checkout_FTL' of https://github.com/pi-hole/pi-hole into tweak/checkout_FTL
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	advanced/Scripts/piholeCheckout.sh
2017-07-16 13:34:20 +01:00
Adam Warner
f2e9d585f7 * Add helptext for pihole checkout ftl
* Only attempt to install FTL if branch was found
* ~~corebranches~~ webbranches (web branches now actually listed)

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-16 13:33:00 +01:00
WaLLy3K
8af9853b9a Fixed minor formatting issues
* Removed useless echo
* Quoted and braced conditionals
* Explicit escaping of newline
* Fixed arrays implicitly concatenating (SC2199)
* Fixed incorrect variable used in checkout web
2017-07-16 22:32:34 +10:00
Adam Warner
783f50657b Merge branch 'development' into tweak/checkout_FTL
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	advanced/Scripts/piholeCheckout.sh
2017-07-16 12:25:27 +01:00
WaLLy3K
3a50b91722 User-friendly queryFunc() output (#1483)
* User-friendly queryFunc() output

* Silence grep errors
* Provide 'pihole -q -h' help output
* Rewrite option handling
* Loop through grep stdout to make query output user friendly
* Add -adlist option to show block list URL instead of internal file name
* Limit general searches to 10 matches per block list
* Add -all option to override 10 match limit
* Fixed 'pihole -h' wording

* Further query optimisations

* Optimised scanList() output by switching folder
* Re-added processWildcards() function
* Added "-bp" exact matching option for use with block page
* Standardised query output
* Separated wildcard search from blacklist/whitelist search
* Optimised sorting by sorting glob output and not scanList() output

* Fixed result skipping

* Add text for wildcard result on exact query

* Fix wildcard result output

* Multiple wildcard matches on exact query could cause unexpected output

* Remove unnecessary replacement

* Make grep only output matching text

* HOSTS format lists will also output the IP address
* That substitution was necessary

* Remove IP address from HOSTS format lists

* Filter unwanted content

* Add /dev/null to grep, to always print file name (even when searching only one block list)
* Use three seds to remove unwanted content from block lists

* Merge with development

* Simplify queryFunc code
2017-07-15 11:56:40 +01:00
WaLLy3K
3631d1349e Prevent Web Admin from printing restartdns colour codes (#1575)
* Prevent Web Admin from printing unnecessary msgs

* Make DNS restart behaviour consistent
2017-07-15 11:11:06 +01:00
Dan Schaper
05c8687041 Integrate DL's update.sh fixes.
`shellcheck -x` for following files.

Do not test for included files SC1091

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	advanced/Scripts/update.sh
2017-07-14 22:40:34 +01:00
Dan Schaper
66f32b7601 Remove testing for debug as this is getting a re-write by Jacob.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-07-14 22:39:13 +01:00
Dan Schaper
9101916719 Test exclusion for sourced files SC1090.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-07-14 22:39:04 +01:00
Adam Warner
edb594461d Remove CIDR from IPv6 address when detecting it in the install script
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	automated install/basic-install.sh
2017-07-14 22:31:43 +01:00
Mcat12
9464b71a6e Remove /* from IPv6 as well as IPv4
Fixes Discourse issue: https://discourse.pi-hole.net/t/ipv6-aaaa-dns-issue/3830

Signed-off-by: Adam Warner <adamw@rner.email>
# Conflicts:
#	gravity.sh
2017-07-14 22:29:16 +01:00
Adam Warner
7d56e2a937 FTL has an L in it, innit?
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-14 20:54:41 +01:00
Adam Warner
218aa03f05 Merge branch 'developmentNew' of https://github.com/pi-hole/pi-hole into developmentNew 2017-07-14 20:50:52 +01:00
Adam Warner
1db03a10d7 Merge branch 'master' into developmentNew 2017-07-14 20:47:49 +01:00
Jacob Salmela
e1f818ffb7 Tweak/debug improvements (#1585)
* check for CIDR notation when comparing IPv6 address to that found in setupVars.conf

* highlight bad address entries in pihole.log and reference a corresponding FAQ

* show header output if Pi-holes x-header does not match

* fix automated mode when running from the dashboard.  It would previously not automatically upload and generate a token.

* show disclaimer message

* undocumented feature for now: obfuscate domains in pihole.log so they are not visible when sent to the Pi-hole developers.  We need to make an additonal flag for this in the pihole command.  if the variable OBFUSCATE has a value, it will replace the domain in the log with a placeholder value

* fix small typo in the disclaimer
2017-07-14 16:53:45 +01:00
Molikuner
9934f505a5 Fix URL extension parsing
when there is a querystring Pi-hole sometimes parsed a wrong extension
2017-07-13 23:18:40 +02:00
Dan Schaper
8c2b8f7241 Merge pull request #1599 from pi-hole/tweak/readme
Fix extentions of the JPG images
2017-07-12 17:40:56 -07:00
Adam Warner
bf70c2c660 initial changes to tests to take into account changes to strings
Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-12 22:57:57 +01:00
Adam Warner
74b912a0b7 Check if FTL is already installed, do not download if it is detected, and the sha1sum matches the remote
This will probably break some tests. I'll work that out in a bit
Signed-off-by: Adam Warner <adamw@rner.email>

Signed-off-by: Adam Warner <adamw@rner.email>
2017-07-12 22:37:51 +01:00
Dan Schaper
93d40b083e Fix extentions of the JPG images
Some images are jpg and not png.
2017-07-12 11:40:18 -07:00
Jacob Salmela
162ee28d0c Merge pull request #1597 from pi-hole/tweak/readme-trademarks-and-more
Update README with ® and several other improvements to better describe v3.2
2017-07-12 08:25:49 -05:00
Jacob Salmela
d328d17d03 Merge pull request #1586 from pi-hole/enhance/comments-in-installer
Install Script: Add comments for nearly every line of code
2017-07-12 07:49:35 -05:00
Dan Schaper
2778d88e8a Fix missing then clause 2017-07-12 00:12:54 -07:00
Jacob Salmela
b5c6178644 Merge remote-tracking branch 'origin/development' into enhance/comments-in-installer
merge in development
2017-07-12 01:38:49 -05:00
Jacob Salmela
ea8927e1da add facebook page to contact info
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-12 01:21:47 -05:00
Jacob Salmela
bc1065a7fc reorganize sections. install instructions first. also added more wordsmithing and links to interesting pi-hole.net articles
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-12 01:18:50 -05:00
Jacob Salmela
f4c7d389e5 more wordsmithing and updating links
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-12 01:03:09 -05:00
Jacob Salmela
03387391de wordsmith DHCP server section, API section, and chronometer2 section. Also add more images
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-12 00:53:14 -05:00
Jacob Salmela
24df5f5208 describe settings page in the order they appear on the dashboard--also add screenshots
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-12 00:36:12 -05:00
Jacob Salmela
9348a8ab15 move technical details to the bottom of the page in light of showing off Pi-holes features first.
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 23:36:40 -05:00
Jacob Salmela
fbd55dd740 tweaks to donation verbiage
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 23:33:49 -05:00
Jacob Salmela
e5e26413e9 new executive summary above the fold
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 23:28:47 -05:00
Jacob Salmela
527fe2f5e1 wordsmithing using Pi-hole as your DNS server, gravity, and additional blocklists.
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 23:06:42 -05:00
Jacob Salmela
38d213ee6c add section about additional ways to support us
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 22:55:50 -05:00
Jacob Salmela
613f2d3b86 Pi-hole is now a registered trademark: replace ™ with ®
Signed-off-by: Jacob Salmela <github@decoy.email>
2017-07-11 22:51:20 -05:00
Jacob Salmela
e7ad972783 fix thre spelling errors 2017-07-10 14:12:30 -05:00
Jacob Salmela
2f939d8c56 fix two spelling errors 2017-07-07 09:05:19 -05:00
Jacob Salmela
7ef751f96d Merge pull request #1587 from pi-hole/fix/1430
Show text typed when pressing Ctrl+C after using pihole -a -p
2017-07-06 20:59:41 -05:00
Jacob Salmela
fb66fb12c5 put "no password will be set" on a newline. 2017-07-06 20:54:09 -05:00
Jacob Salmela
042dcf795c fixes #1430 2017-07-06 20:44:40 -05:00
Jacob Salmela
aad39c5ffc add comments for nearly every line of code. 2017-07-06 19:25:56 -05:00
Dan Schaper
c3ed710e31 Merge pull request #1565 from pi-hole/revamp/debug
Revamp of debug script with logic and colours
2017-07-05 15:12:36 -07:00
Jacob Salmela
cb65907e60 Merge branch 'development' of https://github.com/pi-hole/pi-hole into revamp/debug
merge in development to avoid shellcheck from travis
2017-07-05 16:55:34 -05:00
DL6ER
bb8a263d70 ShellCheck 2017-07-05 19:34:20 +02:00
DL6ER
70fd94edb3 Edit message when requested branch of FTL is not available 2017-07-05 19:30:05 +02:00
WaLLy3K
d0492898eb Add "php5-sqlite" to uninstall dependencies 2017-07-05 17:21:17 +10:00
WaLLy3K
c6ba03802f Add "php5-sqlite" to dependencies 2017-07-05 17:18:21 +10:00
WaLLy3K
1bebcef265 Make Chronometer usable on smaller screens (#1518) 2017-07-04 13:52:51 +10:00
WaLLy3K
209fbf82c4 Colourise tailFunc (#1550)
* Colourise tailFunc

* Strip month, day number and dnsmasq[PID]
* Blocked domains show as light red
* Queries show as standard colour
* Everything else as dark gray

* Change tailFunc highlighted lines

* Highlight Blocked/Blacklist/Wildcard lines as red
* Make DHCP lines default colour

* Make sure tailFunc doesn't match on domain names
2017-07-02 15:21:00 +02:00
DL6ER
6ce79ae1d0 Fix git commands (#1577) 2017-07-01 23:52:10 +02:00
Adam Warner
b3eb5c4f0e Colour Tweaks (#1549) 2017-07-01 22:08:17 +10:00
DL6ER
ec4e9780ed Accept underscores when validating domain names (#1571) 2017-06-30 22:52:33 +10:00
Adam Warner
22abbffbb7 Merge branch 'development' of https://github.com/gedetil/pi-hole into gedetil-development
Signed-off-by: Adam Warner <adamw@rner.email>

# Conflicts:
#	advanced/Scripts/webpage.sh
2017-06-29 19:47:32 +01:00
Jacob Salmela
05a724afae codacy appeasement: remove useless cats 2017-06-29 11:49:28 -05:00
Jacob Salmela
1957b002bc add comments about X-Headers and further explain the file descriptor cod. 2017-06-29 11:37:58 -05:00
Jacob Salmela
04cef25add remove color character codes before uploading so the log is more readable on our plaintext tricorder server 2017-06-29 11:17:19 -05:00
Adam Warner
ab1a6d8829 Fix install script using IPv6 CIDR notation (#1570) 2017-06-29 11:18:52 +10:00
DL6ER
98afb0e998 pihole checkout ftl 2017-06-27 14:28:05 +02:00
DL6ER
e9d81fc883 Backend additions for aufit log feature (#1399) 2017-06-27 10:53:24 +02:00
Jacob Salmela
22fac5e1e0 additional shellcheck fixes 2017-06-26 22:03:45 -05:00
Jacob Salmela
b6a2a4ad5a more shellcheck fixes 2017-06-26 21:51:41 -05:00
Jacob Salmela
5f00347019 appease shellcheck by removing two unneccesary functions and making some if/else blocks 2017-06-26 21:34:39 -05:00
Mcat12
89a22ded54 Merge pull request #1564 from pi-hole/fix/ipv6-cidr
Fix gravity generation when IPv6 CIDR is present
2017-06-26 10:04:06 -04:00
Mcat12
1e31fa89aa Remove /* from IPv6 as well as IPv4
Fixes Discourse issue: https://discourse.pi-hole.net/t/ipv6-aaaa-dns-issue/3830
2017-06-26 09:51:21 -04:00
Dan Schaper
b477b7f777 Merge pull request #1539 from mterron/patch-1
Add support for PowerPC architecture
2017-06-25 19:37:23 -07:00
Mcat12
0de15f7a97 Merge branch 'development' into patch-1 2017-06-25 18:15:33 -04:00
Mcat12
35ecf40259 Merge pull request #1545 from pi-hole/dschaper-patch-1
Update PULL_REQUEST_TEMPLATE.md
2017-06-25 18:13:30 -04:00
Mcat12
009363a7bb Merge pull request #1560 from pi-hole/fix/ad-domain-hostname
Move local.list after the ad blocking lists
2017-06-25 18:11:48 -04:00
Mcat12
a3758612ec Merge pull request #1556 from pi-hole/fix/invalid-ipv6-wildcard
Fix wildcarding with IPv6
2017-06-25 18:09:26 -04:00
Mcat12
8dc94e014f Merge branch 'development' into fix/invalid-ipv6-wildcard 2017-06-25 18:04:38 -04:00
Dan Schaper
ad886ac164 Merge branch 'development' of github.com:pi-hole/pi-hole into dschaper-patch-1 2017-06-25 15:03:56 -07:00
Mcat12
78e7c8b8e9 Merge branch 'development' into fix/ad-domain-hostname 2017-06-25 18:03:16 -04:00
Dan Schaper
3779085051 Merge pull request #1562 from pi-hole/tweak/shellcheck
Tweak ShellCheck Tests
2017-06-25 14:45:45 -07:00
Dan Schaper
c29c4ceb0f Integrate DL's update.sh fixes.
`shellcheck -x` for following files.

Do not test for included files SC1091

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-06-25 14:39:09 -07:00
Dan Schaper
07fc047dd8 Remove testing for debug as this is getting a re-write by Jacob.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-06-25 12:26:16 -07:00
Mcat12
bc46694ea7 Move local.list after the ad blocking lists
Fixes the bug found by [Reddit](https://www.reddit.com/r/pihole/comments/6j3az9/urls_in_my_blacklist_are_showing_up_as_my_default/)
2017-06-25 12:18:09 -04:00
Dan Schaper
0c2827e130 Test exclusion for sourced files SC1090.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-06-24 15:49:16 -07:00
Mcat12
cb09e0bc9a Strip /* from the end of the IPv6 address
Fixes #1536
2017-06-24 11:14:23 -04:00
Dan Schaper
06d5ea9d51 Grammar and signoff instructions.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-06-22 12:59:07 -07:00
Dan Schaper
a4650c6226 Update PULL_REQUEST_TEMPLATE.md 2017-06-21 08:26:59 -07:00
Dan Schaper
c85a603491 Update PULL_REQUEST_TEMPLATE.md 2017-06-21 08:19:19 -07:00
Adam Warner
536585b846 Colourise Core Output Text (#1471)
* Define colours within COL_TABLE
* Do not output colours for non-terminal instances
* Removed ":::"
* Fixed indenting & spacing
* Made output consistent throughout project
* Reworded text to fit on standard 80 char wide Terminal screen
* Made 'sudo raspi-config' warning (insufficient disk space) only show on RPi
* Make "Installation/Update Complete" the final msg
* Remove redundant messages
* Simplify update available message
* Confirm user would like to begin uninstall
* If "git pull" string says "Already up-to-date.", place [i] before it
* Colour Temp/Interface output
* Made `pihole disable 5z` invalid
* Added error fallback if invalid argument (not s/m) is detected
* Quoted "$2" for consistency
* Updated help text
* L185/286: Replaced echo with redirect
* User agents for adblock.mahakala.is/adaway.org unnecessary 
* Print newline on confirmation of repository reset
* Add output to admin-related dnsmasq restarts
* Return error message for "pihole -q"
* Imply default checkout behaviour with y/N
* Fix uninstall failing to remove pihole user
* Print checkout 'git remote show origin' STDERR on new line
* Replaced checkout "AdminLTE" wording with "Web Admin"
2017-06-21 21:49:05 +10:00
Adam Warner
ecde222512 [Staging] 3.1 (#1502)
* Fix handling of wildcard help text

* Rewrite help text for better handling of params

* Replace misleading letter variable

* stash changes on branch switch, else it fails if any changes have been made.

* Make changes according to comment in #1384

* Update queryFunc()

* Allow scanList() to search files using a wildcard by removing quotes wrapped around `${list}`
* scanList() will not provide a domain ouput on each string if exact is specified (`grep -l`)
* Remove unused processWildcards() function
* Return a message if no domain is specified
* IDN domains are converted to punycode when running a `pihole -q` search if the `python` package is available, otherwise will revert to current behaviour
* Scan Blacklist & Wildcards first, exiting from search if a match is found (Fixes #1330)
* Use one `grep` subshell to search for all "*.domains" lists at once (opposed to looping to get every matching file name, and then spawning a `grep` instance for every matching file)
* queryFunc() will not return "(0 results)" output from files where no match is found
* Sort results based off list number
* Return a message if no results are found

* Update basic-install.sh

* Update block page. Allow for setupVars setting of CUSTOMBLOCKPAGE (bool) to prevent it being overwritten

* simplify

* further simplify

* fix inteliJ IDEA complaints

* even further simplify

* tidy up output

* revert line, looks tidyer

* clarify

* Revert "Ensure any changes to blocking page are updated."

* We test for dpkg lock on line 830 directly, no need for the check also
in the template section.

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

* Display FTL version & version.sh rewrite

While testing to make sure `pihole -v` would output `pihole-FTL version`, I noticed some options didn't work how I expected them to. For example, if I use `pihole -v -p`, I would expect to see the version output of Pi-hole Core. Instead, I'm informed that it's an invalid option.

I've had the following things in mind while rewriting this:
  * I'm operating under the assumption that FTL is only installed if the Admin Console is (Line 113 exit 0)
  * I have modified the help text to only output with `pihole -v --help`
  * I have modified all output to be more similar to the output style of `grep` and `curl` (Ditching ":::")

Testing output:
```
w3k@MCT:~$ pihole -v
  Pi-hole version is v3.0.1-14-ga928cd3 (Latest: v3.0.1)
  Admin Console version is v3.0-9-g3760482 (Latest: v3.0.1)
  FTL version is v2.6.2 (Latest: v2.6.2)
w3k@MCT:~$ pihole -v -c
  Current Pi-hole version is v3.0.1-14-ga928cd3
  Current Admin Console version is v3.0-9-g3760482
  Current FTL version is v2.6.2
w3k@MCT:~$ pihole -v -l
  Latest Pi-hole version is v3.0.1
  Latest Admin Console version is v3.0.1
  Latest FTL version is v2.6.2
w3k@MCT:~$ pihole -v -p --hash
  Current Pi-hole hash is a928cd3
w3k@MCT:~$ pihole -v -a --hash
  Current Admin Console hash is 3760482
w3k@MCT:~$ pihole -v --help
Usage: pihole -v [REPO | OPTION] [OPTION]
Show Pi-hole, Web Admin & FTL versions
  <Shows all Repositories and Options>
w3k@MCT:~$ pihole -v -foo
  Invalid Option!
```

* Update -h to work as --hash

Also provide error output as per https://github.com/pi-hole/pi-hole/pull/1447#issuecomment-300600093

* Perform EXACT searches on HOSTS lists correctly

`\s` on the end may be overkill, but it is the existing scanList() behaviour.

* Fixed indentation

* Minimise string duplication & other minor changes

Instead of duplicating output strings, rewrite core/web/ftlOutput() into one neat versionOutput().

* Modified syntax to be valid for Shellcheck

* Log and echo gateway responses

* Update queryFunc() to search Whitelist

If there is a match in Whitelist/Blacklist/Wildcards, `[ ! -t 1 ]` will cause the search to end if the terminal is closed when the script is called. This has the intended effect of allowing a user to search for a W/B/W domain (as well as all the adlists it's found in) using `pihole -q` via Terminal, but the script will stop searching after a W/B/W match when called by the block page.

* Wrap in double brackets

* Provide remote hashes for version.sh

 * Provide remote hashes for comparison
 * Use double braces for all conditions (for consistency)
 * Suppress potential "cd" error output
 * Provide "not applicable" output upon any hash request for FTL

* whitelist on website blocked doesnt work (#1452)

Since Pi-hole redirects ad domains to itself, accessing the script via de.ign.com is the same as pi.hole in this case. The fix should be as simple as adding a / before admin on this line.

* Solve piholeLogFlush.sh having to be issued 2 x to clear logs (#1460)

Simplified the command -v syntax, and added a sleep 3 timer to the first execution of the log rotation. The second execution was being issued while the first was still running, thus it would fail and you would have to issue the "Flush Logs" command a second time.

* Use `echo "ABC" | pihole tricorder` to upload to Pi-hole's medical tricorder. Uses SSL if available.

* Update list.sh

I believe this has feature parity with `sed /foo/ Id` but also supports busybox, and my alpine docker ;)

* Document `sed` substitution for user readability

Comment the oneliner with explanations of what each step does.

* Update Help Output (#1467)



* File consistency

* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals

* Standardise core help text

* Added help text for disable command
* Added help text for logging command

* Clean up

* Fixed certain new lines and spaces

* Sync with development branch

* Formatting consistency

* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals
* Fixed certain newlines and spaces

* Admin help text

* Added help text for interface command

* Sync with development branch

* Formatting consistency

* Tabs to 2 spaces
* Fixed some wording
* Fixed certain spaces

* Formatting consistency

* Minor wording changes
* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals
* Fixed certain newlines and spaces

* Blacklist help text

* Formatting consistency

* Tabs to 2 spaces
* Corrected indenting

* Cronometer help text

* Formatting consistency

* Fixed certain newlines and spaces
* Corrected indenting

* Checkout warning alteration

* Add checkout help text

* Corrected help output

* Show help for "pihole -a -i --help"

* Fix "pihole disable --help" and "pihole -l --help"

* Show help for "pihole -v -h" 

* Indent output text
* Minor help text change

* Show help for "pihole checkout --help"

* Tricorder: Insecure Opt-out

* Check to see if Tricorder is being called directly
* Provide opt-out for insecure transmission of debug log
* Remove mention of internal function from help menu

* 🌮 is the new :shipit: squirrel

* Wording changes and bug fix

* Fix wildcard help text

* -wild is not a valid option since we're already using -wild

* Fix logrotation: manual flushing should be done twice, but automated rotation at midnight should only be done *once*!

* Print echos only when manual flushing is requested

* Add "quiet" mode + update comments in the cron file

* Confirm Tricorder is online

* Scan port 9998 to confirm the availability of "tricorder.pi-hole.net"
* Exit codes for upload process

* Formatting consistency

* Add link to Windows DNS Swapper

See #1400

* Install loopback firewall rules for FTL (#1419)

* Install loopback firewall rules for FTL

* FirewallD FTL ports

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

* Remove firewallD FTL local rules.

Local rules should not be blocked in firewallD, not requred for internal service FTD>

* Reinstate https rules, and delete FTL rules

Fixes earlier commit.

* Retrieve local repos on repair (#1481)

* Retrieve local repos on repair

* Change conditional to check for repair
* Change wording of Update/Reconfigure message
* Fixed indenting

* Perform "git reset --hard" on reconfigure

* Change directory before trying to reset repository. Fixes #1489

* No need to `cd $PWD` as it doesn't affect flow of caller script.

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

* Refine output of password status in basic-install.sh:displayFinalMessage(). Fixes #1488 (#1490)

* Rewrite Chronometer to output more stats

* Fix output IPv4 addr when removing CIDR notation (#1498)

* Move wildcards file if blocking is disabled (#1495)

* Move wildcards file if blocking is diabled

* Delete newline

* Roll back merge #1417 (#1494)

* Update ISSUE_TEMPLATE.md

* Remove Question option

* Prefer ULA over GUA addresses [IPv6] (#1508)

* On installs with GUA and ULA's we should prefer ULA's as it's been demonstrated that GUA's can and often are rotated by ISPs. Fixes #1473

* Add test for link-local address detection

* Add ULA-only and GUA-only tests

* Add test_IPv6_GUA_ULA_test and test_IPv6_ULA_GUA_test

* Add ""

* Add mock_command_2 command that can mock a command with more than one argument (as "ip -6 address") and result multiple lines of results

* Make mock_command_2 more similar to the original mock_command

* Correct comments

* Fixed remaining comments

* Fixed one last comment...

* Fixed a comment...

* Add weekly logrotation of FTL's log (#1509)

* Update LICENSE of the project to EUPL v1.2

* Make clear that NO is the default if the user just hits return (#1514)

* Add tricorderFunc back as usable function (#1515)

As per #1464

* Don't update FTL when there is a core update (as this will update FTL a second time). Fixes #1516

* Add FTL tests to the test suite (#1510)

* Add first version of FTL tests

* Wait one second to allow FTL to start up and analyze our mock log

* Add test_FTL_telnet_statistics

* Added test_FTL_telnet_top_clients

* Add test_FTL_telnet_top_domains

* Revert "Add FTL tests to the test suite (#1510)" (#1519)

This reverts commit cf6a1ac9ad.

* Trim version output when update is successful (#1527)

* Change ownership of /etc/pihole to user/group pihole. Fixes #1529 (#1530)

* Delete temporary files after installing the FTL binary. Fixes #1525

* Change from admin to approvers teams

* Introduce new file black.list for blacklist content

* Add "pihole -g -b" to *only* update black.list (saves a bunch of time when adding/changing only blacklisted files - won'tdownload lal lists, but only processes the blacklist and restars dnsmasq)

* Remove useless cat

* Improve displayed messages and overall logic

* Disable black.list on "pihole disable"

* cp + rm === mv (well, almost)
2017-06-20 22:17:41 +01:00
Terror
5b472ff67c Add support for PowerPC architecture
Related to https://github.com/pi-hole/FTL/pull/88
2017-06-20 08:28:04 +12:00
Mcat12
6f2ec22894 Merge pull request #1534 from pi-hole/new/black.list
Introducing black.list
2017-06-19 14:26:08 -04:00
DL6ER
05798fe07a cp + rm === mv (well, almost) 2017-06-19 20:22:03 +02:00
Mcat12
8ab5ffd876 Merge pull request #1533 from pi-hole/dschaper-patch-1
Change from admin to approvers teams
2017-06-17 12:23:04 -04:00
Mcat12
2b6709d83f Merge pull request #1532 from pi-hole/fix/tempfiles
Delete temporary files after installing the FTL binary. Fixes #1525
2017-06-17 12:07:00 -04:00
DL6ER
e4cc5b3847 Disable black.list on "pihole disable" 2017-06-17 14:49:02 +02:00
DL6ER
8bad56e897 Improve displayed messages and overall logic 2017-06-17 14:24:30 +02:00
DL6ER
92e691408f Remove useless cat 2017-06-17 14:14:07 +02:00
DL6ER
0a9c234127 Add "pihole -g -b" to *only* update black.list (saves a bunch of time when adding/changing only blacklisted files - won'tdownload lal lists, but only processes the blacklist and restars dnsmasq) 2017-06-17 13:57:27 +02:00
DL6ER
0283a1ab74 Introduce new file black.list for blacklist content 2017-06-17 13:50:10 +02:00
Dan Schaper
b32096b16e Change from admin to approvers teams 2017-06-17 03:59:27 -07:00
DL6ER
3d7582faec Delete temporary files after installing the FTL binary. Fixes #1525 2017-06-17 08:54:26 +02:00
DL6ER
54a88ab5ab Change ownership of /etc/pihole to user/group pihole. Fixes #1529 (#1530) 2017-06-17 08:43:05 +02:00
WaLLy3K
aff5ff08d5 Trim version output when update is successful (#1527) 2017-06-15 09:50:05 +02:00
Jacob Salmela
fc0440546f add functions to parse head and tails of gravity.list and pihole.log 2017-06-10 23:20:27 -05:00
Jacob Salmela
172b8d2427 parse ftl log 2017-06-10 22:18:33 -05:00
Jacob Salmela
6d10a498a5 implement a limit on how many lines of a file we want to view 2017-06-10 21:57:17 -05:00
Jacob Salmela
881819ed5f ignore big files we dont need to know about; also fix diagnosing pihole processes 2017-06-10 18:37:28 -05:00
Jacob Salmela
3275c5f710 more comments to help understand the script 2017-06-10 15:54:27 -05:00
Jacob Salmela
b0cc1a38c3 adjust minor formatting for better readability 2017-06-10 15:28:04 -05:00
Mcat12
e8025dbc81 Merge pull request #1513 from pi-hole/EUPLv1.2
Update LICENSE of the project to EUPL v1.2
2017-06-10 14:10:25 -04:00
Jacob Salmela
e10182c839 only parse files required by Pi-hole 2017-06-10 12:27:05 -05:00
Jacob Salmela
b4f1fe08f0 variablize all files and directories. also put required files and folders into an arry so we can compare them in later functions by parsing through them 2017-06-09 23:22:37 -05:00
Jacob Salmela
64171fa2a1 small color and formatting changes 2017-06-09 15:42:54 -05:00
Jacob Salmela
048eacd305 parse array in correct location 2017-06-07 12:31:08 -05:00
Jacob Salmela
24aa72c19d condense repetative code into functions; parse the content of each file 2017-06-07 12:25:00 -05:00
Jacob Salmela
92b5fe4be4 check arch compatibility and add gateway faq url 2017-06-05 14:55:58 -05:00
DL6ER
939055f19c Revert "Add FTL tests to the test suite (#1510)" (#1519)
This reverts commit cf6a1ac9ad.
2017-06-05 13:51:13 +02:00
Mcat12
c47f3e3307 Merge pull request #1517 from pi-hole/tweak/update_core_and_FTL
Don't update FTL when there is a core update
2017-06-04 08:42:59 -04:00
DL6ER
cf6a1ac9ad Add FTL tests to the test suite (#1510)
* Add first version of FTL tests

* Wait one second to allow FTL to start up and analyze our mock log

* Add test_FTL_telnet_statistics

* Added test_FTL_telnet_top_clients

* Add test_FTL_telnet_top_domains
2017-06-04 13:23:56 +02:00
DL6ER
f1146a3443 Don't update FTL when there is a core update (as this will update FTL a second time). Fixes #1516 2017-06-04 12:41:44 +02:00
WaLLy3K
6823a62644 Add tricorderFunc back as usable function (#1515)
As per #1464
2017-06-03 19:13:40 +02:00
DL6ER
2516a1e298 Make clear that NO is the default if the user just hits return (#1514) 2017-06-03 17:23:47 +02:00
DL6ER
288f93c5dd Update LICENSE of the project to EUPL v1.2 2017-06-03 15:06:00 +02:00
DL6ER
8ef64dbe74 Add weekly logrotation of FTL's log (#1509) 2017-06-03 14:51:35 +02:00
DL6ER
01e091fd17 Prefer ULA over GUA addresses [IPv6] (#1508)
* On installs with GUA and ULA's we should prefer ULA's as it's been demonstrated that GUA's can and often are rotated by ISPs. Fixes #1473

* Add test for link-local address detection

* Add ULA-only and GUA-only tests

* Add test_IPv6_GUA_ULA_test and test_IPv6_ULA_GUA_test

* Add ""

* Add mock_command_2 command that can mock a command with more than one argument (as "ip -6 address") and result multiple lines of results

* Make mock_command_2 more similar to the original mock_command

* Correct comments

* Fixed remaining comments

* Fixed one last comment...

* Fixed a comment...
2017-06-02 23:01:48 +02:00
Jacob Salmela
8b4c0b456b exclude webpassword from being uploaded. also check that the IP addresses detected match those defined in setupVars.conf 2017-06-01 01:15:11 -05:00
Jacob Salmela
02a601deff comment out dir checks for lighttpd, cronm and http as they have a lot of other files that need parsing through. May need to increase the logic there if this is information we really need to know. 2017-06-01 00:19:15 -05:00
Jacob Salmela
b207fadc04 check if os is supported based on pretty name 2017-06-01 00:18:06 -05:00
Mcat12
bf3883ed46 Merge pull request #1506 from pi-hole/tweak/github_issues
Update ISSUE_TEMPLATE.md to remove Feature Request choice.
2017-05-31 19:14:36 -04:00
Dan Schaper
3a58e9d33a Remove Question option 2017-05-31 00:02:57 -07:00
Dan Schaper
570c54002f Update ISSUE_TEMPLATE.md 2017-05-30 23:51:22 -07:00
Jacob Salmela
d51c067e1b change some verbiage; new function to compare the ports in use to the services assigned to them. 2017-05-27 21:21:18 -05:00
Jacob Salmela
2fea5d428d condense repetitive code into functions 2017-05-27 15:47:15 -05:00
WaLLy3K
2b8a8b03a8 Roll back merge #1417 (#1494) 2017-05-27 22:42:44 +02:00
Jacob Salmela
d51e0c49b1 remove comments and blank lines when parsing files 2017-05-27 13:44:33 -05:00
DL6ER
d913534793 Move wildcards file if blocking is disabled (#1495)
* Move wildcards file if blocking is diabled

* Delete newline
2017-05-27 17:51:41 +02:00
Jacob Salmela
36907edd50 parse contents of each file in each dir, several log_writes 2017-05-27 00:04:42 -05:00
Jacob Salmela
7ec169ab10 more comments, fixed automated tricorder, variablizing echos, verify FTL version 2017-05-26 22:05:50 -05:00
Jacob Salmela
7873da1ae5 more colors. shortened dig timeouts 2017-05-26 15:17:26 -05:00
Jacob Salmela
ef5a6e7880 add faq urls to some functions, added more colors, also use a static url for remote digs 2017-05-26 14:26:02 -05:00
Jacob Salmela
96f01e670f add functions to write to console and log at the same time 2017-05-26 12:16:22 -05:00
WaLLy3K
10139241f5 Fix output IPv4 addr when removing CIDR notation (#1498) 2017-05-26 09:57:27 +02:00
Jacob Salmela
5902be2a49 comments for every line 2017-05-24 22:07:15 -05:00
Jacob Salmela
cc946ce068 upload to tricorder functions 2017-05-24 21:11:15 -05:00
Jacob Salmela
1102fdc44b append everything the user sees to the pihole_debug.log file 2017-05-24 20:24:23 -05:00
Jacob Salmela
c995c81fff adjust some spacing 2017-05-24 19:36:06 -05:00
Jacob Salmela
6684af9938 add lighttpd list function and gravity analysis 2017-05-24 18:31:55 -05:00
Jacob Salmela
8bafd12f95 fix resolver functions and add x-header function 2017-05-24 16:10:14 -05:00
Jacob Salmela
76266cf31b add resolver functions and check directory content functions 2017-05-24 15:29:31 -05:00
WaLLy3K
4ad0cdf5d4 Rewrite Chronometer to output more stats 2017-05-25 01:03:13 +10:00
Jacob Salmela
1a87d3a659 add process check function 2017-05-23 22:57:22 -05:00
Jacob Salmela
085f2c6ca0 add port check function 2017-05-23 22:32:30 -05:00
WaLLy3K
98fdb95645 Merge pull request #1491 from pi-hole/fix/ResetInRepoDir
Change directory before trying to reset repository
2017-05-23 19:02:03 +10:00
DL6ER
3035c9a366 Refine output of password status in basic-install.sh:displayFinalMessage(). Fixes #1488 (#1490) 2017-05-23 10:44:11 +02:00
Dan Schaper
5004cf331a No need to cd $PWD as it doesn't affect flow of caller script.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-05-22 15:36:51 -07:00
DL6ER
74eb8c8622 Change directory before trying to reset repository. Fixes #1489 2017-05-22 23:43:52 +02:00
Jacob Salmela
b74300f67c add ping internet function and fix some spacing issues 2017-05-22 12:57:55 -05:00
Jacob Salmela
107babe8f4 add ping gateway function 2017-05-22 12:35:57 -05:00
Jacob Salmela
8fd9a22d18 add detect IP function 2017-05-22 12:05:42 -05:00
Jacob Salmela
8c5c1316dd add php version and processor check functions 2017-05-22 08:48:56 -05:00
Jacob Salmela
daff5d8b5a add critical dependencies version check functions 2017-05-22 03:05:51 -05:00
Jacob Salmela
6c4a7b626e add pihole version check functions 2017-05-22 02:39:00 -05:00
Jacob Salmela
1aa5943e67 add if directory exists function 2017-05-22 01:06:15 -05:00
Jacob Salmela
69fe889f92 comments for all lines and small formatting changes 2017-05-21 23:25:53 -05:00
WaLLy3K
2ef87ad110 Retrieve local repos on repair (#1481)
* Retrieve local repos on repair

* Change conditional to check for repair
* Change wording of Update/Reconfigure message
* Fixed indenting

* Perform "git reset --hard" on reconfigure
2017-05-21 22:47:25 +02:00
DL6ER
c655e6ea73 Install loopback firewall rules for FTL (#1419)
* Install loopback firewall rules for FTL

* FirewallD FTL ports

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

* Remove firewallD FTL local rules.

Local rules should not be blocked in firewallD, not requred for internal service FTD>

* Reinstate https rules, and delete FTL rules

Fixes earlier commit.
2017-05-20 15:47:51 +02:00
Jacob Salmela
5d7ef9281f get just the OS pretty name for Dan 2017-05-20 02:01:56 -05:00
Jacob Salmela
6fa00e7cc8 first functions with pretty colors. check OS, setupVars, and contents of .d dirs 2017-05-20 01:34:13 -05:00
WaLLy3K
2f2825f15e Tricorder: Insecure Opt-out 2017-05-20 10:45:26 +10:00
Mcat12
e377fe5503 Merge pull request #1486 from pi-hole/readme/win-dns-swapper
Add link to Windows DNS Swapper
2017-05-19 11:26:51 -04:00
Mcat12
69b41dd72e Add link to Windows DNS Swapper
See #1400
2017-05-19 11:16:34 -04:00
WaLLy3K
69fa9874dd Use HTTP_HOST instead of SERVER_NAME
* Fixes https://github.com/pi-hole/pi-hole/issues/1479
2017-05-18 18:54:26 +10:00
WaLLy3K
a620a5c430 Formatting consistency 2017-05-18 12:53:32 +10:00
WaLLy3K
1f3db8b602 Confirm Tricorder is online
* Scan port 9998 to confirm the availability of "tricorder.pi-hole.net"
* Exit codes for upload process
2017-05-18 12:43:17 +10:00
WaLLy3K
f6732a484e Merge pull request #1317 from r0ckarong/development
Fixed handling of `pihole -wild` help text
2017-05-18 11:16:25 +10:00
DL6ER
4015122d33 Merge pull request #1476 from pi-hole/fix/midnightflushing
Fix midnight logrotation
2017-05-18 01:23:32 +02:00
DL6ER
42eb811910 Add "quiet" mode + update comments in the cron file 2017-05-17 12:54:43 +02:00
DL6ER
c9042ffedd Print echos only when manual flushing is requested 2017-05-17 12:51:04 +02:00
DL6ER
4e2c6a7b8e Fix logrotation: manual flushing should be done twice, but automated rotation at midnight should only be done *once*! 2017-05-17 12:44:35 +02:00
WaLLy3K
7453bf2ee6 Fix wildcard help text
* -wild is not a valid option since we're already using -wild
2017-05-16 10:23:53 +10:00
WaLLy3K
7d17c652f3 Merge branch 'development' into development 2017-05-16 10:18:32 +10:00
WaLLy3K
075f00cecd Merge branch 'development' into tc-insecure-optout 2017-05-16 09:49:42 +10:00
WaLLy3K
b9f2ba0717 Wording changes and bug fix 2017-05-16 09:48:46 +10:00
Adam Warner
ed04be5faa Merge pull request #1468 from pi-hole/tweak/help-output
New Help Output
2017-05-14 16:46:58 +01:00
Adam Warner
90119c75d5 more merge conflicts! 2017-05-14 16:43:20 +01:00
Dan Schaper
d30056026b Merge pull request #1466 from pi-hole/doclist_remove_sed
Document `sed` substitution for user readability
2017-05-14 08:28:10 -07:00
Adam Warner
bc8a5916d8 fix merge conflicts 2017-05-14 16:17:04 +01:00
Dan Schaper
f202602f99 Merge pull request #1470 from pi-hole/tweak/taco
Update PullApprove rules
2017-05-14 07:41:07 -07:00
DL6ER
69f361a3a1 🌮 is the new :shipit: squirrel 2017-05-14 16:28:35 +02:00
WaLLy3K
da9ff0cc66 Tricorder: Insecure Opt-out
* Check to see if Tricorder is being called directly
* Provide opt-out for insecure transmission of debug log
* Remove mention of internal function from help menu
2017-05-14 19:27:14 +10:00
WaLLy3K
703ff09a91 Merge pull request #1464 from pi-hole/new/tricorder_option
Tricorder debug logs are now uploaded using SSL when `openssl` is available
2017-05-14 15:37:25 +10:00
WaLLy3K
30035ce1c2 Merge branch 'development' into tweak/help-output 2017-05-14 13:03:33 +10:00
WaLLy3K
39b74ebfd4 Show help for "pihole checkout --help" 2017-05-14 12:22:19 +10:00
WaLLy3K
3bd677c102 Show help for "pihole -v -h"
* Indent output text
* Minor help text change
2017-05-14 11:57:46 +10:00
WaLLy3K
4eb7d2868c Fix "pihole disable --help" and "pihole -l --help" 2017-05-14 11:53:40 +10:00
WaLLy3K
0e4473685b Show help for "pihole -a -i --help" 2017-05-14 11:47:56 +10:00
WaLLy3K
b721ed49ab Update Help Output (#1467)
* File consistency

* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals

* Standardise core help text

* Added help text for disable command
* Added help text for logging command

* Clean up

* Fixed certain new lines and spaces

* Sync with development branch

* Formatting consistency

* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals
* Fixed certain newlines and spaces

* Admin help text

* Added help text for interface command

* Sync with development branch

* Formatting consistency

* Tabs to 2 spaces
* Fixed some wording
* Fixed certain spaces

* Formatting consistency

* Minor wording changes
* Tabs to 2 spaces
* Corrected indenting
* Double braced conditionals
* Quoted variables within conditionals
* Fixed certain newlines and spaces

* Blacklist help text

* Formatting consistency

* Tabs to 2 spaces
* Corrected indenting

* Cronometer help text

* Formatting consistency

* Fixed certain newlines and spaces
* Corrected indenting

* Checkout warning alteration

* Add checkout help text

* Corrected help output
2017-05-14 11:11:44 +10:00
Dan Schaper
25601b9fcc Document sed substitution for user readability
Comment the oneliner with explanations of what each step does.
2017-05-13 17:49:58 -07:00
Dan Schaper
db10c8ab46 Merge pull request #1465 from pi-hole/busybox_sed_support
Update list.sh for busybox compatibility
2017-05-13 17:40:27 -07:00
Adam Hill
55f78e3b64 Update list.sh
I believe this has feature parity with `sed /foo/ Id` but also supports busybox, and my alpine docker ;)
2017-05-13 18:44:41 -05:00
DL6ER
7abf349730 Use echo "ABC" | pihole tricorder to upload to Pi-hole's medical tricorder. Uses SSL if available. 2017-05-13 21:08:21 +02:00
WaLLy3K
f9d41caeb6 Merge branch 'development' into blockpage2 2017-05-13 23:29:44 +10:00
Hans Geiblinger
b166410cbf Solve piholeLogFlush.sh having to be issued 2 x to clear logs (#1460)
Simplified the command -v syntax, and added a sleep 3 timer to the first execution of the log rotation. The second execution was being issued while the first was still running, thus it would fail and you would have to issue the "Flush Logs" command a second time.
2017-05-12 22:39:55 +02:00
0412465564
31d5a7ae9e whitelist on website blocked doesnt work (#1452)
Since Pi-hole redirects ad domains to itself, accessing the script via de.ign.com is the same as pi.hole in this case. The fix should be as simple as adding a / before admin on this line.
2017-05-12 22:29:07 +02:00
Dan Schaper
5bb91759b4 Merge pull request #1459 from WaLLy3K/patch-2
Provide remote hashes for version.sh
2017-05-12 12:38:13 -07:00
Dan Schaper
80c4b7c9bb Merge pull request #1455 from pi-hole/tweak/logecho_gateway
Debug: Log and echo gateway responses
2017-05-12 12:02:21 -07:00
WaLLy3K
ea0a9ceb37 Provide remote hashes for version.sh
* Provide remote hashes for comparison
 * Use double braces for all conditions (for consistency)
 * Suppress potential "cd" error output
 * Provide "not applicable" output upon any hash request for FTL
2017-05-12 15:25:01 +10:00
Dan Schaper
68dd2a6b91 Merge pull request #1447 from WaLLy3K/patch-1
Display FTL version & version.sh rewrite
2017-05-11 14:23:59 -07:00
WaLLy3K
f875976268 Replacing superseded file with dummy content 2017-05-11 21:02:04 +10:00
Dan Schaper
e23c6899e0 Merge pull request #1456 from WaLLy3K/patch-3
Update queryFunc() to search Whitelist
2017-05-11 03:45:40 -07:00
WaLLy3K
c35c7b2cea Wrap in double brackets 2017-05-11 20:21:23 +10:00
WaLLy3K
1c2aa44d46 Provide notice message for whitelisted sites 2017-05-11 20:10:40 +10:00
WaLLy3K
3b44a0da32 Provide error message if not found in any list 2017-05-11 20:09:00 +10:00
WaLLy3K
58353e2839 Update queryFunc() to search Whitelist
If there is a match in Whitelist/Blacklist/Wildcards, `[ ! -t 1 ]` will cause the search to end if the terminal is closed when the script is called. This has the intended effect of allowing a user to search for a W/B/W domain (as well as all the adlists it's found in) using `pihole -q` via Terminal, but the script will stop searching after a W/B/W match when called by the block page.
2017-05-11 19:58:35 +10:00
Adam Warner
5e0572637e Merge pull request #1417 from WaLLy3K/tweak/queryFunc
QueryFunc() rewrite
2017-05-11 09:07:00 +01:00
Dan Schaper
501b26decd Log and echo gateway responses 2017-05-10 22:08:06 -07:00
WaLLy3K
c6596f2c54 Modified syntax to be valid for Shellcheck 2017-05-11 14:19:13 +10:00
WaLLy3K
2863308090 Minimise string duplication & other minor changes
Instead of duplicating output strings, rewrite core/web/ftlOutput() into one neat versionOutput().
2017-05-11 13:34:58 +10:00
WaLLy3K
7fef1fdc83 Fixed indentation 2017-05-11 10:11:04 +10:00
WaLLy3K
3081c151bd Perform EXACT searches on HOSTS lists correctly
`\s` on the end may be overkill, but it is the existing scanList() behaviour.
2017-05-11 09:13:32 +10:00
Dan Schaper
c793295be0 Merge pull request #1446 from pi-hole/tweak/install_lockcheck
Clarify error message on apt failures.
2017-05-10 15:40:13 -07:00
WaLLy3K
fe0a35cc7a Update -h to work as --hash
Also provide error output as per https://github.com/pi-hole/pi-hole/pull/1447#issuecomment-300600093
2017-05-11 08:30:49 +10:00
Dan Schaper
0b67eebaec Merge pull request #1440 from pi-hole/revert-1437-blockPage
Revert "Ensure any changes to blocking page are updated."
2017-05-10 15:26:29 -07:00
WaLLy3K
03201e2f20 Display FTL version & version.sh rewrite
While testing to make sure `pihole -v` would output `pihole-FTL version`, I noticed some options didn't work how I expected them to. For example, if I use `pihole -v -p`, I would expect to see the version output of Pi-hole Core. Instead, I'm informed that it's an invalid option.

I've had the following things in mind while rewriting this:
  * I'm operating under the assumption that FTL is only installed if the Admin Console is (Line 113 exit 0)
  * I have modified the help text to only output with `pihole -v --help`
  * I have modified all output to be more similar to the output style of `grep` and `curl` (Ditching ":::")

Testing output:
```
w3k@MCT:~$ pihole -v
  Pi-hole version is v3.0.1-14-ga928cd3 (Latest: v3.0.1)
  Admin Console version is v3.0-9-g3760482 (Latest: v3.0.1)
  FTL version is v2.6.2 (Latest: v2.6.2)
w3k@MCT:~$ pihole -v -c
  Current Pi-hole version is v3.0.1-14-ga928cd3
  Current Admin Console version is v3.0-9-g3760482
  Current FTL version is v2.6.2
w3k@MCT:~$ pihole -v -l
  Latest Pi-hole version is v3.0.1
  Latest Admin Console version is v3.0.1
  Latest FTL version is v2.6.2
w3k@MCT:~$ pihole -v -p --hash
  Current Pi-hole hash is a928cd3
w3k@MCT:~$ pihole -v -a --hash
  Current Admin Console hash is 3760482
w3k@MCT:~$ pihole -v --help
Usage: pihole -v [REPO | OPTION] [OPTION]
Show Pi-hole, Web Admin & FTL versions
  <Shows all Repositories and Options>
w3k@MCT:~$ pihole -v -foo
  Invalid Option!
```
2017-05-10 13:07:56 +10:00
Dan Schaper
dfc32b26a6 We test for dpkg lock on line 830 directly, no need for the check also
in the template section.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-05-09 13:11:28 -07:00
WaLLy3K
173ad339bb Update CSS location 2017-05-08 19:33:45 +10:00
Adam Warner
89fd962615 Revert "Ensure any changes to blocking page are updated." 2017-05-06 11:45:31 +01:00
Adam Warner
a928cd3fa1 Merge pull request #1437 from pi-hole/blockPage
Ensure any changes to blocking page are updated.
2017-05-06 01:06:22 +01:00
Dan Schaper
f190a6ebc5 Merge pull request #1436 from pi-hole/fix/dhcpcd-localhostNS
Update basic-install.sh dhcpcd.conf nameserver
2017-05-05 15:25:12 -07:00
Adam Warner
9beb9fd941 Merge pull request #1384 from pi-hole/checkoutImprovements
Stash changes when switching branches
2017-05-05 23:22:54 +01:00
Adam Warner
525a1228c3 clarify 2017-05-05 22:43:37 +01:00
Adam Warner
19fd25c7cd revert line, looks tidyer 2017-05-05 22:40:10 +01:00
Adam Warner
5b0927ca4b tidy up output 2017-05-05 22:32:27 +01:00
Adam Warner
324d4433c3 even further simplify 2017-05-05 22:31:31 +01:00
Adam Warner
615ca56ea3 fix inteliJ IDEA complaints 2017-05-05 22:27:58 +01:00
Adam Warner
41dd163453 further simplify 2017-05-05 22:27:33 +01:00
Adam Warner
5cd2c77d98 simplify 2017-05-05 22:24:40 +01:00
Adam Warner
f270f7430c Update block page. Allow for setupVars setting of CUSTOMBLOCKPAGE (bool) to prevent it being overwritten 2017-05-05 22:10:24 +01:00
Dan Schaper
99b23627d0 Update basic-install.sh 2017-05-05 12:03:51 -07:00
Adam Warner
26fcb1b2a0 Merge pull request #1429 from pi-hole/development
Release v3.0.1
2017-05-04 15:12:26 +01:00
DL6ER
e9c4e8123c Merge branch 'master' into development 2017-05-04 12:12:44 +02:00
Dan Schaper
a290e01bdf Merge pull request #1421 from pi-hole/fix/accidental-password-reset
Add option to enter new password as command arg
2017-05-04 03:11:54 -07:00
DL6ER
9cc392fa02 Update Marks PR after the Promo code has been merged 2017-05-04 11:43:48 +02:00
Dan Schaper
7c2046cce7 Merge pull request #1423 from pi-hole/promoLearnsToCode
Double hash the password directly in the install script
2017-05-03 12:07:38 -07:00
WaLLy3K
4d731ca30b Updated landing page location
During development, I had the location of `/pihole/index.php` as just `/index.php`. Just correcting some changes!
2017-05-03 15:33:50 +10:00
WaLLy3K
f2016f26d7 Updated splash page CSS href 2017-05-03 15:29:43 +10:00
Adam Warner
b13171cc45 $1 is not $pw. Seriously, who let me onto this project 2017-05-02 22:37:38 +01:00
Adam Warner
9c645e2010 Seriously. 2017-05-02 22:30:02 +01:00
Adam Warner
bb6f409e89 dropped a " 2017-05-02 22:28:32 +01:00
Adam Warner
61ec7723f6 use function in install script 2017-05-02 22:25:47 +01:00
Adam Warner
9c136a5579 functionise Hashing 2017-05-02 22:24:37 +01:00
Adam Warner
a5733508ae Double hash the password directly in the install script 2017-05-02 21:36:08 +01:00
WaLLy3K
a8818c16d8 Fixed unnecessary usage of !important 2017-05-02 19:51:13 +10:00
DL6ER
c8e1e6dc8a Merge pull request #1418 from pi-hole/tweak/debug/FTL_log
Include pihole-FTL.log in debug report
2017-05-02 09:41:35 +02:00
WaLLy3K
7bcea98d0c Do not activate letsencrypt.conf if found 2017-05-02 17:28:51 +10:00
WaLLy3K
74b15d10d9 Update lighttpd.conf.fedora
Mirror changes found in `lighttpd.conf.debian`
2017-05-02 17:24:55 +10:00
WaLLy3K
356c70cdae Update lighttpd.conf.debian
* Disable `include-conf-enabled.pl`, as blindly enabling HTTPS (as Let's Encrypt does by having a file in that folder) creates Block Page inefficiencies
* Make Block page handle JS request rewrite, allowing users to better utilise their `lighttpd` service
* Make Block page handle debugging Pi-hole header
* Make Block page redirect users from `pi.hole` to `http://pi.hole/admin`
2017-05-02 17:24:07 +10:00
WaLLy3K
dfb5c37d98 Delete index.js 2017-05-02 17:21:40 +10:00
DL6ER
30dcf6ff47 Include pihole-FTL.log in debug report 2017-05-02 09:18:58 +02:00
WaLLy3K
a0603ad3b7 Update queryFunc()
* Allow scanList() to search files using a wildcard by removing quotes wrapped around `${list}`
* scanList() will not provide a domain ouput on each string if exact is specified (`grep -l`)
* Remove unused processWildcards() function
* Return a message if no domain is specified
* IDN domains are converted to punycode when running a `pihole -q` search if the `python` package is available, otherwise will revert to current behaviour
* Scan Blacklist & Wildcards first, exiting from search if a match is found (Fixes #1330)
* Use one `grep` subshell to search for all "*.domains" lists at once (opposed to looping to get every matching file name, and then spawning a `grep` instance for every matching file)
* queryFunc() will not return "(0 results)" output from files where no match is found
* Sort results based off list number
* Return a message if no results are found
2017-05-02 17:13:55 +10:00
WaLLy3K
551add5f44 Update index.php
* An "About Pi-hole" link on the block page provides an ELI5 explanation to those not familiar with Pi-hole
* An email contact link on the block page provides users of your Pi-hole with a means to easily get in touch with you
* Browsing to your Pi-hole's address will show a simple "landing page", which can be replaced by adding "landing.php" within "/var/www/html"
* Users manually browsing to file/image based content (i.e: non HTML based content) on blocked sites will be greeted with a small "Blocked by Pi-hole" image
* Sites that are manually blacklisted will display a notice of this on the block page
* Sites that aren't directly blocked, but have a CNAME record, will show a notification on the block page (e.g: If raw.githubusercontent.com is not blocked, but github.map.fastly.net is)
* On the block page, "Back to Safety" now directs the user to "about:home" if Javascript is disabled
* Whitelisting is disabled for installs without a password, or if a client does not have Javascript

* Known issues:
  * Admin Console needs a text field under "Web User Interface" where the admin can enter a preferred contact email when a site needs to be whitelisted, to be saved to setupVars.conf with the key "ADMIN_EMAIL"
  * Admin Console needs a text field under "Networking" where the admin can enter their Pi-hole's externally contactable FQDN, allowing access to their landing page when browsing to mypi.duckdns.org, to be saved to setupVars.conf with the key "FQDN"
  * I am not aware of expected output of `$_SERVER["VIRTUAL_HOST"]`, so I have assumed it should be filtered as if it's a domain
2017-05-02 17:06:31 +10:00
WaLLy3K
88944a31ec Update blockingpage.css
* Block page UI overhaul to replicate the style of the Admin Console
* Block page UI is now mobile friendly
* Users can safely customise text in order to make the block page more friendly for their household
2017-05-02 17:05:24 +10:00
DL6ER
3473ebc0fe Merge pull request #1408 from pi-hole/tweak/localise-queries
Add localise-queries flag to dnsmasq's config
2017-05-02 08:56:47 +02:00
Dan Schaper
8c657910ae Merge pull request #1280 from technicalpyro/development
fixes missing dialog package from some distros
2017-05-01 16:07:32 -07:00
Dan Schaper
1886c44579 Merge pull request #1406 from pi-hole/update/UA
Update default User Agent to modern browser.
2017-05-01 14:35:55 -07:00
Adam Warner
1dcc1871fb Merge pull request #1404 from pi-hole/development
3.0
2017-05-01 22:03:54 +01:00
DL6ER
19e688effb Add localise-queries flag to 01-pihole.conf 2017-04-30 13:47:07 +02:00
Dan Schaper
6a2b885988 Update default User Agent to modern browser.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-04-27 11:41:08 -07:00
Dan Schaper
bfc4775b34 Merge pull request #1297 from raincoats/development
Redirect to admin panel when accessing 'http://pi.hole/'
2017-04-26 12:35:19 -07:00
Adam Warner
981004606b Merge branch 'master' into development 2017-04-26 20:12:34 +01:00
Adam Warner
9d40fd1eda Merge branch 'development' Resolved conflicts
# Conflicts:
#	advanced/Scripts/piholeCheckout.sh
2017-04-26 20:12:16 +01:00
DL6ER
db1e5f10ea Make changes according to comment in #1384 2017-04-21 17:08:15 +02:00
DL6ER
fbb6b56d99 Merge pull request #1397 from pi-hole/fix/ipv4ipv6error
Bugfix: Blocking page
2017-04-20 16:18:50 +02:00
DL6ER
f1f70133dc Populate $ipv4 and $ipv6 + fix small error that prevented blocking page from coming up at all. Fixes #1396 2017-04-20 13:53:27 +02:00
DL6ER
d0f55e5125 Merge pull request #1394 from pi-hole/fix/remove-temp-gravity-files
Delete the temp files created by gravity
2017-04-19 08:46:01 +02:00
Mcat12
5e308dbd51 Delete the temp files created by gravity 2017-04-18 20:35:06 -04:00
Mcat12
c3c554f4d6 Merge pull request #1391 from pi-hole/tweak/flush
Flush twice to move data out-of-sight of FTL
2017-04-17 20:10:03 -04:00
DL6ER
320c06e0a4 Flush twice to move data out-of-sight of FTL 2017-04-17 21:25:15 +02:00
Adam Warner
2e398c5da4 stash changes on branch switch, else it fails if any changes have been made. 2017-04-14 17:20:13 +01:00
DL6ER
b1484104bd Merge pull request #1379 from pi-hole/tweak/FTLinit.d
Tweaks for `FTL`'s init file
2017-04-13 12:53:37 +02:00
Mcat12
c738a9a044 Merge pull request #1381 from technicalpyro/development
Grammar Fix
2017-04-12 21:29:39 -04:00
Technicalpyro
519cb71022 Grammar Fix
]
2017-04-12 16:05:21 -04:00
DL6ER
fcd92d27f7 Don't use PID file but rather "pidof pihole-FTL" for detecting if another process is already running 2017-04-12 15:12:09 +02:00
DL6ER
3eacfa9831 Improve FTL's service script 2017-04-12 14:13:18 +02:00
gedetil
ff6df76e36 Update webpage.sh
Implement "Halt system" button, next to "Restart system" button, on
admin/settings page.  Useful for doing clean shutdown before powering off.

(This affects 4 files, 3 for the web content, 1 for backend script.)

Gilbert Detillieux <gedetil> 2017-04-11
2017-04-11 12:04:44 -05:00
Mcat12
1d64b614c7 Merge pull request #1349 from pi-hole/internal/editorconfig
Add .editorconfig
2017-04-06 18:05:56 -04:00
Dan Schaper
a832dd7f67 Update .editorconfig
Set path for JS source.
2017-04-06 14:55:21 -07:00
Mcat12
a96b4d28e1 Merge pull request #1365 from pi-hole/adlistImprovements
Adlist improvements
2017-04-06 16:15:50 -04:00
Mcat12
57e8b7f924 Merge pull request #1355 from pmo3/development
Mask password input when changing password
2017-04-03 20:23:19 -04:00
Patrick O'Brien
263eb856d5 remove vagrant from gitignore 2017-04-03 15:15:44 -04:00
DL6ER
5a4f088b24 Merge pull request #1341 from pi-hole/tweak/readme-tm
Update logo and Pi-hole™ name with a trademark symbol.
2017-04-03 17:35:58 +02:00
DL6ER
c1913bfa7d Merge pull request #1366 from pi-hole/fix/adaway-list-agent
Use correct agent when downloading adaway.org list
2017-04-03 17:32:44 +02:00
DL6ER
474881e4c7 Merge pull request #1346 from pi-hole/varChanges
Clean up previous PR
2017-04-03 17:32:02 +02:00
Flo
7e0aa822b6 Match the Pi-hole brand (#1358)
* Update README.md

* Update index.php

* Update basic-install.sh

* Update piholeCheckout.sh

* Update update.sh

* Update CONTRIBUTING.md

* Update the Pi-hole brand tip in CONTRIBUTING.md

Use a better formulation.

* Update README.md 2
2017-04-03 17:29:57 +02:00
DL6ER
940d780a4c Merge pull request #1361 from pi-hole/new/error404page
Improve Error 404 page behavior
2017-04-03 17:25:46 +02:00
DL6ER
ad9575ce18 Recognize more host names 2017-04-03 16:28:18 +02:00
Mcat12
ce86205df0 Use correct agent when downloading adaway.org list
See https://discourse.pi-hole.net/t/2278
2017-04-02 12:44:00 -04:00
Adam Warner
3cf9942465 spacing fixed 2017-03-31 23:00:56 +01:00
Adam Warner
153031482f Add delete mode to adlist command. Might be abetter way to do this 2017-03-31 22:51:10 +01:00
Adam Warner
1f74b1e2fd newline 2017-03-31 21:12:17 +01:00
Adam Warner
42393123a0 add newline to adlists.default 2017-03-31 20:15:13 +01:00
Adam Warner
af2cff5177 remove call to user list 2017-03-31 20:13:04 +01:00
Adam Warner
5435b93df2 remove spaces 2017-03-31 20:05:45 +01:00
Adam Warner
3a3dde6298 add adlist argument redirector 2017-03-31 20:03:56 +01:00
Adam Warner
b4bc90fb85 add in CustomizeAdlists function 2017-03-31 19:35:52 +01:00
Adam Warner
02040cd25d We no longer need to do this, either 2017-03-31 19:23:26 +01:00
Adam Warner
bdc6bd4135 Don't need this comment anymore 2017-03-31 19:18:28 +01:00
Adam Warner
e720de401d One file to rule them all, same functionality (made changes and want to go back to default? Delete your adlists.list) 2017-03-31 19:16:09 +01:00
Adam Warner
ce97896ffd account for new adlists.custom file 2017-03-31 19:00:04 +01:00
Adam Warner
86fa4e9ee8 trim down default adlist 2017-03-31 18:55:07 +01:00
DL6ER
f09c166350 Improve Error 404 page behavior 2017-03-28 14:02:00 +02:00
Patrick O'Brien
24868fdb2b Merge remote-tracking branch 'upstream/development' into development 2017-03-27 13:38:19 -04:00
Patrick O'Brien
a463250ecf don't hash an empty password 2017-03-27 13:37:19 -04:00
Mcat12
d38e034e92 Merge pull request #1354 from flokX/patch-4
Complete blocking page
2017-03-26 13:12:42 -04:00
Flo
6eb9192cd1 Complete site
The start <html>-tag was missing.
2017-03-25 16:11:37 +01:00
Patrick O'Brien
94f15f1b3c Merge remote-tracking branch 'upstream/development' into development 2017-03-23 18:47:50 -04:00
Patrick O'Brien
ee296f36c1 mask password input on command line 2017-03-23 18:47:30 -04:00
Dan Schaper
598a7b3cc0 Add .editorconfig
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-22 13:44:04 -07:00
Mcat12
52baf26d7d Merge pull request #1348 from pi-hole/fix/update-without-web
Source setupVars in the updater before attempting to use it
2017-03-21 18:18:03 -04:00
Mcat12
fb3e6ee35c Source setupVars before attempting to use it
Fixes #1347
2017-03-21 18:01:51 -04:00
Dan Schaper
af1d1bd9c2 One more change
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-21 05:04:58 -07:00
Dan Schaper
f32ad7699d Merge pull request #1320 from georou/development
Use Firewalld --add-service instead of port
2017-03-21 04:49:59 -07:00
Dan Schaper
79294bb6ca Merge pull request #1332 from pi-hole/varChanges
replace instances of "/etc/.pihole" with ${PI_HOLE_LOCAL_REPO}
2017-03-21 04:49:10 -07:00
Jacob Salmela
1cd4710718 replace logo with TM logo 2017-03-19 15:41:16 -05:00
Jacob Salmela
48c19ade8e add trademarks to Pi-hole name in signifigant places 2017-03-19 15:36:22 -05:00
Adam Warner
0acf70f836 Merge pull request #1340 from AnthonyGiorgio/development
Formatting cleanup.
2017-03-19 18:40:50 +00:00
Anthony Giorgio
fd584dd03b Formatting cleanup.
Convert backticks to quotes to fix error message.
Make Pi-hole capitalization consistent.
 Make Pi-hole capitalization consistent.
2017-03-18 20:47:13 -04:00
Dan Schaper
2740c68a63 Merge pull request #1335 from pi-hole/tweak/debug_templog
Debugging tweaks for temporary logfiles
2017-03-16 23:35:15 -07:00
Mcat12
62a242a894 Merge pull request #1334 from pi-hole/tweak/interface_detect
Let `ip` determine which links are candidates.
2017-03-16 21:36:13 -04:00
DL6ER
8b060e9699 Merge pull request #1333 from Wandmalfarbe/development
Fixed minor spelling mistakes in README.md
2017-03-16 18:02:40 +01:00
Dan Schaper
b1f769b671 Output cleaning, IP stack check headers.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 23:50:29 -07:00
Dan Schaper
77378da70a Cat out temp files to final log.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 23:43:41 -07:00
Dan Schaper
160030b75f Quiet systemctl output to just the current daemon status.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 23:27:18 -07:00
Dan Schaper
0a0c3a2fb7 Copy working temp to final location.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 23:20:12 -07:00
Dan Schaper
e9f1ca338f Create temp files for working storage, log to working storage temps.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 22:49:47 -07:00
Dan Schaper
073c7e54df Merge pull request #1331 from pi-hole/RemovePasswordFromDebugLogBecauseSomePeopleFeelItUnderminesSecurity-TheyProbablyHaveAPoint
add check on file_parse to not include WEBPASSWORD= in the debug log
2017-03-15 22:08:48 -07:00
Dan Schaper
2834f2ccc2 Let ip determine which links are candidates.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-15 22:05:48 -07:00
georou
6c56665403 updated travis for new firewalld add service 2017-03-16 10:26:51 +11:00
georou
0d794226ab Removed unsupported POSIX brace expansion 2017-03-16 09:29:33 +11:00
Wandmalfarbe
ab2af11775 Fixed minor spelling mistakes in README.md 2017-03-15 20:58:41 +01:00
Adam Warner
83662c9e50 additional requested changes 2017-03-15 19:50:22 +00:00
Adam Warner
6c1d52199f Merge branch 'master' of https://github.com/jftuga/pi-hole into jftuga-master 2017-03-15 19:47:31 +00:00
Adam Warner
cfaf1ac67c add check on file_parse to not include WEBPASSWORD= in the debug log 2017-03-15 18:59:41 +00:00
Mcat12
a6caa0e680 Merge pull request #1327 from pi-hole/fix/pihole-help-text
Fix help text bug
2017-03-14 15:00:25 -04:00
Mcat12
c4b43f92ce Fix help text bug
Fixes #1325
2017-03-14 13:19:43 -04:00
DL6ER
3d1ccd9625 Merge pull request #1312 from pi-hole/pihole-backports
Pi-hole Core v2.13.2
2017-03-14 11:32:34 +01:00
John Taylor
76bd53ef1f replace instances of "/etc/.pihole" with ${PI_HOLE_LOCAL_REPO} 2017-03-13 20:24:04 -04:00
Mcat12
8fa209f0df Merge pull request #1322 from pi-hole/FixWildCardBlacklisting
Only remove from wildcard list if domain is being added to whitelist …
2017-03-13 17:52:28 -04:00
Mcat12
88835512dd Merge pull request #1322 from pi-hole/FixWildCardBlacklisting
Only remove from wildcard list if domain is being added to whitelist …
2017-03-13 17:50:18 -04:00
Adam Warner
6b862dd9e9 Only remove from wildcard list if domain is being added to whitelist or blacklist 2017-03-13 20:38:34 +00:00
DL6ER
be0b76c954 Merge pull request #1319 from pi-hole/fix/gravitypath
Use absolute path for pihole command in gravity.sh
2017-03-13 21:16:31 +01:00
georou
e45559da20 Use Firewalld services instead of ports 2017-03-14 01:13:23 +11:00
DL6ER
d7b5870ba6 Use absolute path for pihole command in gravity.sh. Fixes #1318 2017-03-12 23:15:23 +01:00
Markus Napp
bb7a7d94ef Replace misleading letter variable 2017-03-12 16:16:45 +01:00
Markus Napp
9a475cc010 Rewrite help text for better handling of params 2017-03-12 15:50:48 +01:00
Markus Napp
ae30c285a2 Fix handling of wildcard help text 2017-03-12 15:45:11 +01:00
Dan Schaper
df18c7cd59 Merge pull request #1313 from pi-hole/new/piholecheckout
Checkout adjustments
2017-03-11 22:54:57 +01:00
Dan Schaper
2e74219ff9 Merge pull request #1313 from pi-hole/new/piholecheckout
Checkout adjustments
2017-03-11 13:01:11 -08:00
Dan Schaper
b0ae954f1e Only update when update flag is set to "true"
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-11 12:37:36 -08:00
Dan Schaper
a2404f104a Just some style and linting. And a cd in fetch_checkout_pull_branch
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-11 12:21:15 -08:00
DL6ER
38547ced7a Can only diff once upstream branch is tracked 2017-03-11 16:55:37 +01:00
DL6ER
9a9d9007cd Add missing "== true" 2017-03-11 16:49:47 +01:00
DL6ER
bd2d81f691 source setupVars.conf to see if INSTALL_WEB is true or not 2017-03-11 16:46:52 +01:00
DL6ER
1b9e7fbf2e Test if branch is locally available is not reliable because of possible ambiguities 2017-03-11 16:40:10 +01:00
DL6ER
d4a49d192f Correct variable name 2017-03-11 16:38:28 +01:00
DL6ER
8cb66544d2 Remove "\ " 2017-03-11 16:36:54 +01:00
DL6ER
140ac192aa The web repo might actually be missing and this is n error (not installed because the user didn't want it) 2017-03-11 16:30:58 +01:00
DL6ER
b961b13d60 Small bugfix 2017-03-11 16:27:00 +01:00
DL6ER
febdb4a190 Use git diff to determine if code has changed (no need to run the installer if it hasn't changed at all) 2017-03-11 16:24:13 +01:00
DL6ER
1d60b62e7a Testing alternative way of fetching/checking out of a single branch 2017-03-11 16:11:23 +01:00
Dan Schaper
41e1e4cb68 Rearrange pull logic, some optimization.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-10 11:25:35 -08:00
Dan Schaper
d5b88e0df8 Get the right name for the options.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-10 11:07:58 -08:00
Dan Schaper
20fd61468d Require branch to check out
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-10 11:04:37 -08:00
Dan Schaper
0a0d25dff4 Script runs in subshell, no need to cd back to pwd.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-10 10:57:46 -08:00
DL6ER
38ba079baa Merge pull request #1307 from pi-hole/fix/versionwithoutwebinterface
Don't try to obtain version of web interface it it is not installed
2017-03-10 14:33:12 +01:00
Dan Schaper
33f7979359 Merge pull request #1293 from pi-hole/fix/version
Account for hash in versioning
2017-03-10 14:32:52 +01:00
Dan Schaper
8460b2544b Merge pull request #1295 from pi-hole/tweak/pullapprove
Require 4 approvals instead of five for merging into master
2017-03-10 14:31:53 +01:00
Dan Schaper
bc514ea955 Merge pull request #1296 from pi-hole/fix/debugVersion
Debug version detection improvements
2017-03-10 14:30:50 +01:00
DL6ER
6f8893d950 Merge pull request #1301 from pi-hole/fix/removewildcard
Remove wildcard entry when adding the very same domain either the white- or blacklist
2017-03-10 14:29:38 +01:00
DL6ER
de6aaf18ab Merge pull request #1302 from pi-hole/fix/nowildcardlistfile
Check for existence of wildcard blocking list (query adlists)
2017-03-10 14:29:13 +01:00
DL6ER
0fe64cf5cc Merge pull request #1300 from pi-hole/fix/deletehostrecord
Bugfix for when deleting host-record
2017-03-10 14:28:52 +01:00
DL6ER
9a95531fb9 Merge pull request #1310 from pi-hole/new/piholecheckout
Pi-hole checkout feature
2017-03-10 14:24:15 +01:00
Mcat12
9df6a8dd06 Merge pull request #1311 from pi-hole/tweak/ascii-berry
add ascii berry to beginning of installer
2017-03-09 13:40:57 -05:00
raincoats
1590a179fa Change 302 redirect to 301
Change "302 Found" response to "301 Moved Permanently", as "302 Found" is meant for temporary redirects.

Was asked to do so in this comment: https://github.com/pi-hole/pi-hole/pull/1297#issuecomment-284335421
2017-03-09 17:38:56 +11:00
Jacob Salmela
5e16487ef6 add ascii berry to beginning of installer 2017-03-08 21:14:21 -06:00
DL6ER
2b3afbfef8 Merge pull request #1310 from pi-hole/new/piholecheckout
Pi-hole checkout feature
2017-03-09 00:43:35 +01:00
Dan Schaper
c3c7dcc9f5 Merge remote-tracking branch 'origin/new/piholecheckout' into new/piholecheckout 2017-03-08 15:32:14 -08:00
Dan Schaper
273728b481 One more argument to shift.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 15:32:06 -08:00
DL6ER
81a1057cac Fix something Dan has overlooked 2017-03-09 00:30:36 +01:00
DL6ER
fd310c6445 Back to how we had it before, because --unshallow does not work at all 2017-03-09 00:28:02 +01:00
Dan Schaper
a9b52518bf Shift numbers for argument identifiers, functions are called after shift
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 14:29:51 -08:00
Dan Schaper
87da40068c Always exited with value 1, now exits with proper value.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 14:18:08 -08:00
Dan Schaper
b8f1eadb7f Shift off checkout from being passed to script from pihole
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 14:17:56 -08:00
Dan Schaper
b522d8eaf6 Source and reuse existing variables, centralize code.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 13:41:11 -08:00
Dan Schaper
89ff99322d Don't need to remember pwd inside a function, calling function doesn't change directories.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 13:30:08 -08:00
Dan Schaper
56e17d1010 Source functions and variables from basic-install.sh
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-08 13:28:24 -08:00
DL6ER
708067e875 Merge pull request #1309 from pi-hole/new/FTLChronometer
Remove duplicated line
2017-03-08 13:27:11 +01:00
DL6ER
d2ab0694b7 Add "master" shortcut 2017-03-08 13:18:34 +01:00
DL6ER
8a14a63d5d Pi-hole checkout feature 2017-03-08 13:16:40 +01:00
DL6ER
8235b18854 Remove duplicated line 2017-03-08 12:09:34 +01:00
DL6ER
e0e9ebbe74 Merge pull request #1307 from pi-hole/fix/versionwithoutwebinterface
Don't try to obtain version of web interface it it is not installed
2017-03-07 23:54:32 +01:00
DL6ER
6e6259975e Merge pull request #1308 from pi-hole/new/FTLChronometer
Let Chronometer query all data from FTL directly
2017-03-07 19:41:23 +01:00
DL6ER
10bc8414b9 Move FTL querying before clearing the terminal to avoid flashing on Pi B+ 2017-03-07 18:10:05 +01:00
DL6ER
4e25e0dc5c Add missing } to JSON output 2017-03-07 17:57:57 +01:00
DL6ER
b1a9793d94 Let Chronometer query all data from FTL (no need for having the API). Fixes #1305 2017-03-07 17:54:11 +01:00
DL6ER
6dea00668e Don't try to obtain version of web interface it it is not installed. Fixes #1303 2017-03-07 13:08:01 +01:00
DL6ER
ae9182c92e Merge pull request #1301 from pi-hole/fix/removewildcard
Remove wildcard entry when adding the very same domain either the white- or blacklist
2017-03-06 23:53:06 +01:00
DL6ER
af17355fe7 Merge pull request #1302 from pi-hole/fix/nowildcardlistfile
Check for existence of wildcard blocking list (query adlists)
2017-03-06 17:03:34 +01:00
DL6ER
dce3e50a00 Check for existence of wildcard blocking list before trying to acces it 2017-03-06 16:44:56 +01:00
DL6ER
cf31561267 Remove wildcard entry when adding the very same domain either the white- or blacklist 2017-03-06 16:25:35 +01:00
DL6ER
a97f0b1298 Merge pull request #1300 from pi-hole/fix/deletehostrecord
Bugfix for when deleting host-record
2017-03-06 16:16:42 +01:00
Dan Schaper
d1e0f3ae18 Merge pull request #1294 from pi-hole/tweak/debugDNS
Tweak DNS debugging
2017-03-06 05:50:37 -08:00
DL6ER
47a6786e8f Use proper test syntax 2017-03-06 14:02:56 +01:00
DL6ER
a69fcbb91e Bugfix for when deleting host-record 2017-03-06 13:44:13 +01:00
Dan Schaper
8e2b51b391 Merge pull request #1296 from pi-hole/fix/debugVersion
Debug version detection improvements
2017-03-05 07:13:41 -08:00
Dan Schaper
560af43204 Merge pull request #1293 from pi-hole/fix/version
Account for hash in versioning
2017-03-05 07:10:18 -08:00
DL6ER
9c119f919e Merge pull request #1298 from pi-hole/new/teleporter
Add CLI Teleporter feature
2017-03-05 15:05:07 +01:00
DL6ER
baefec86f2 Add CLI teleporter feature 2017-03-05 14:08:44 +01:00
raincoats
eb763d2dc2 Redirect to admin panel when accessing 'http://pi.hole/'
If someone tries to access 'http://pi.hole/', it will take them to the "Website blocked" page. Very confusing if you don't know to go to 'http://pi.hole/admin/'. This just redirects them to the admin panel.
2017-03-05 16:58:21 +11:00
Dan Schaper
512c650441 Shellchecking.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 19:07:55 -08:00
Dan Schaper
dc44fc9e27 Version check amalgamation and removal of && || logic.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 17:54:38 -08:00
Dan Schaper
05640f9a6b Merge pull request #1295 from pi-hole/tweak/pullapprove
Require 4 approvals instead of five for merging into master
2017-03-04 15:17:25 -08:00
Dan Schaper
6f2fb57c08 Protocol specific records checks.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 15:16:33 -08:00
Dan Schaper
2547cc4c8d Only run IPv6 if enabled, split out Chaos TXT checks.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 15:06:34 -08:00
DL6ER
112ddb3c77 Require 4 approvals instead of five for merging into master 2017-03-04 22:57:37 +01:00
DL6ER
9f4ef66f41 Add IPv6 resolver test 2017-03-04 22:38:52 +01:00
DL6ER
086f0790fc Add Google's IPv6 address for potential IPv6 resolver tests 2017-03-04 22:31:18 +01:00
Dan Schaper
709b44f736 IPv4 DNS tests
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 12:16:43 -08:00
Dan Schaper
6cd4ff6d68 Organize functions and function calls.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 12:16:32 -08:00
Dan Schaper
abd3e828de Optimize normalOutput
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-04 07:46:00 -08:00
DL6ER
b85af50d14 Generate only the information that is actually asked for 2017-03-04 14:08:11 +01:00
Dan Schaper
0e8fd49669 Function...
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 23:30:57 -08:00
Dan Schaper
945e22874e Collapse duplicate functions, and take out argument loops.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 23:12:28 -08:00
Dan Schaper
77ab47a984 Awk for perl
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 22:34:55 -08:00
Dan Schaper
ed8088f203 Functions for Core/Web version and hash. And only check first argument in each section.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 22:10:32 -08:00
Dan Schaper
8831b22fc8 Prototype function for getting version of local repo
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 21:36:38 -08:00
Dan Schaper
0341bd1758 Optimize code, undoc flag for current hash.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 20:32:26 -08:00
Dan Schaper
9bb4a5fb25 Factor out variables from display.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 20:16:53 -08:00
Dan Schaper
ebfffea5dc Always show something, even if it's just the short hash of the latest commit.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 20:04:55 -08:00
Dan Schaper
81939ab265 Get short hash of local and remote
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-03 19:14:30 -08:00
DL6ER
f2fe84c9d3 Merge pull request #1292 from pi-hole/master
Merge patches back into devel
2017-03-03 23:45:29 +01:00
DL6ER
051f463350 Merge pull request #1291 from pi-hole/fix/defaultlisteningbehavior
Fix default listening behavior of dnsmasq
2017-03-03 23:33:44 +01:00
DL6ER
f626406685 Revert #1273 2017-03-03 23:14:12 +01:00
DL6ER
dd971b6ee5 Default behavior is old behavir (listen on gravity interface (e.g. eth0), permit all origins) 2017-03-03 22:58:41 +01:00
Dan Schaper
8776b822db Merge pull request #1287 from pi-hole/fix/update_fail
Exit script immediately if we can't update package cache.
2017-03-03 12:20:29 -08:00
DL6ER
fc76b1a6a3 Merge pull request #1244 from pi-hole/new/FTL-binary
FTL
2017-03-03 13:41:27 +01:00
DL6ER
9183200b6f Merge pull request #1286 from pi-hole/tweak/dpkg_lock
Test for dpkg lock before using apt-get
2017-03-03 13:39:40 +01:00
DL6ER
f1b8abf503 Merge pull request #1146 from pi-hole/tweak/chronometer_recentlyblocked
[FTL] Show most recently blocked domain in chronometer
2017-03-03 12:20:43 +01:00
DL6ER
9502356980 Move test_dpkg_lock to initial UPDATE_PKG_CACHE. There was unpredictable interference with debconf-apt-progress 2017-03-03 11:55:15 +01:00
DL6ER
a535ca9db4 Some tweaks to the new dpkg lock detector 2017-03-03 11:55:13 +01:00
DL6ER
2c762899de Add loop to wait if package manager is blocked externally 2017-03-03 11:55:10 +01:00
Dan Schaper
24fd23493d Exit script immediately if we can't update package cache.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-03-02 15:54:58 -08:00
Dan Schaper
6f1ed28d0a Merge pull request #1274 from pi-hole/development
Pi-hole Core v2.13
2017-03-02 14:34:43 -08:00
DL6ER
66b7d04b82 Merge branch 'development' into new/FTL-binary 2017-03-01 12:42:48 +01:00
DL6ER
044afa838c Merge pull request #1284 from pi-hole/new/dnsmasqListeningBehavior
Setup interface listening behavior of dnsmasq
2017-03-01 12:20:59 +01:00
DL6ER
7ba47f504c Add special "except-interface" line in case of listening on all interfaces 2017-03-01 12:15:04 +01:00
DL6ER
0be1717ff4 Fix config error 2017-03-01 11:46:48 +01:00
DL6ER
189a4e0078 Add option to skip restarting of dnsmasq 2017-03-01 11:26:06 +01:00
DL6ER
3adf8785d8 Move "all" down in help text to not suggest that it is the default 2017-03-01 11:07:05 +01:00
DL6ER
b74862bfc5 Actually apply new setting by restarting dnsmasq 2017-03-01 11:02:08 +01:00
DL6ER
01273124ea Change to -i, interface 2017-03-01 10:59:55 +01:00
DL6ER
721ada7e16 Fix typo 2017-03-01 10:52:21 +01:00
DL6ER
bd9dc91396 Add response for users manually setting this up via CLI 2017-03-01 10:50:13 +01:00
DL6ER
de6c43a8d3 Setup interface listening behavior of dnsmasq 2017-03-01 10:46:20 +01:00
Technicalpyro
93dea7b942 Moved to installers dependencies 2017-02-27 15:21:59 -05:00
Dan Schaper
f6fc6a5e56 Merge pull request #1281 from pi-hole/tweak/web_debug
Back end changes for Web based debug calls.
2017-02-27 12:21:33 -08:00
Dan Schaper
ca24f7c143 Merge pull request #1273 from pi-hole/new/no_fixed_interface
Don't save `interface=` line to `dnsmasq`s config file
2017-02-27 11:50:28 -08:00
Dan Schaper
17b0db6515 Fix for calling -w without -a.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-27 11:40:20 -08:00
Dan Schaper
83b0600863 Carriage return or newline based webcalls.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-27 11:03:57 -08:00
Dan Schaper
38961fb31b Help text clarification and addition of the automated debuggin flag.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-27 10:49:25 -08:00
Dan Schaper
6c130b7960 Vebiage and highligh the token, also :::
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-27 10:27:11 -08:00
Dan Schaper
7244d44a1d Notify user that log is being uploaded.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-27 10:02:00 -08:00
Dan Schaper
9b060aab34 Debug auto mode engaged
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-26 18:22:06 -08:00
Dan Schaper
ba5bbf3523 Modify pihole for -d -a arguments. 2017-02-26 15:36:53 -08:00
Technicalpyro
697b0295f3 fixes missing dialog package from some ditros 2017-02-26 14:24:08 -06:00
Mcat12
66d7ebd6c3 Merge pull request #1276 from pi-hole/fix/INSTALL_WEB
Bugfix: Delete INSTALL_WEB line before adding new one
2017-02-25 10:50:09 -05:00
DL6ER
ae24f1255f Bugfix: Delete INSTALL_WEB line before adding new one 2017-02-25 11:29:12 +01:00
DL6ER
ec7e75a6e3 Don't save interface= line to dnsmasqs config file 2017-02-24 16:02:24 +01:00
DL6ER
aee106ae69 Merge pull request #1272 from flokX/patch-1
Update old install command to new
2017-02-24 13:32:20 +01:00
Flo
2a881a90ac Update old install command to new 2017-02-24 11:29:19 +01:00
DL6ER
ce6c465942 Merge pull request #1266 from pi-hole/new/host-record
Add host-record option
2017-02-23 17:32:10 +01:00
Jacob Salmela
3748a0ed33 Merge pull request #1267 from pi-hole/tweak/license
update license to EUPL on core files
2017-02-22 15:51:54 -06:00
Jacob Salmela
7a1a2dec67 update license to EUPL on core files 2017-02-22 11:55:20 -06:00
DL6ER
7ed1bbad49 Add host-record option 2017-02-22 14:43:07 +01:00
DL6ER
078cc7660e Improved updater logic 2017-02-22 11:00:45 +01:00
DL6ER
af2893d2ce Updater implementation for FTL 2017-02-22 10:43:13 +01:00
Jacob Salmela
0fe5efba76 Merge pull request #1265 from ProtoFoo/ProtoFoo-redirect
Redirect pi.hole to pi.hole/admin/
2017-02-21 15:49:19 -06:00
ProtoFoo
fb6631d317 Removed a line that did nothing. 2017-02-21 22:22:30 +01:00
ProtoFoo
cd0b8927c5 Removed a line that did nothing. 2017-02-21 22:22:03 +01:00
ProtoFoo
3fab34687c Redirect pi.hole to pi.hole/admin/ 2017-02-21 20:38:09 +01:00
ProtoFoo
b2d78edae9 Redirect pi.hole to pi.hole/admin/ 2017-02-21 20:36:59 +01:00
ProtoFoo
412cacac49 Merge pull request #1 from pi-hole/development
Development
2017-02-21 19:10:47 +01:00
Dan Schaper
dcb9797f35 Tests changed to reflect uname calls.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-21 09:24:00 -08:00
Dan Schaper
4dcee5cd84 arch is not portable.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-21 09:14:49 -08:00
DL6ER
a64211123f Some debug additions 2017-02-21 16:46:54 +01:00
DL6ER
1645677c3a Cosmetics 2017-02-21 16:42:52 +01:00
DL6ER
4f85ace525 Force pihole user to use sh-shell (instead of nologin) 2017-02-21 14:46:53 +01:00
DL6ER
e8fde702a0 Also chown the other files 2017-02-21 11:52:07 +01:00
DL6ER
e339f3852c Change ownership of FTL log to pihole user 2017-02-21 11:50:08 +01:00
DL6ER
032f94afc0 Don't suppress su's output 2017-02-21 11:46:31 +01:00
DL6ER
e9b50442fa Remove test_FTL_support_files_installed as we create them using the init.d script as of now 2017-02-21 11:25:18 +01:00
DL6ER
77b3764481 Remove resundant code (FTL will later be enabled by enable_service) 2017-02-21 11:23:01 +01:00
DL6ER
90ccbef431 pihole-FTL init.d script 2017-02-21 11:18:47 +01:00
Dan Schaper
02ea9b9abc Check file path and permissions in one go.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 18:15:40 -08:00
Dan Schaper
4cd598ae10 Check support files installed and permissions.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 18:12:51 -08:00
Dan Schaper
8eeb8ad779 Check binary installed and functional.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 17:15:04 -08:00
Dan Schaper
2ffb103acb Move binary to final home.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 15:44:33 -08:00
Dan Schaper
a0c17368ed cd to directory to sha1sum
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 15:27:24 -08:00
Dan Schaper
d76e761d0b Merge remote-tracking branch 'origin/new/FTL-binary' into new/FTL-binary
# Conflicts:
#	automated install/basic-install.sh
2017-02-20 15:22:55 -08:00
Dan Schaper
6023984703 Silence sha check
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 15:13:54 -08:00
Dan Schaper
cde7b53de3 Check sha1 of transferred file.
Sha1sum file in temp directory.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 15:13:26 -08:00
Dan Schaper
b36a44a954 Check sha1 of transferred file. 2017-02-20 14:44:34 -08:00
Adam Warner
fcc3d5450d Merge pull request #1263 from pi-hole/idea
accidentally the idea file
2017-02-20 22:16:50 +00:00
Dan Schaper
057cecb3e0 Replace ignored file. 2017-02-20 14:12:45 -08:00
Adam Warner
86c6e0e826 accidentally the idea file 2017-02-20 21:36:27 +00:00
Adam Warner
5c223b5f4e Merge pull request #1262 from pi-hole/gitAttributes
linux style line endings enforced
2017-02-20 21:28:16 +00:00
Dan Schaper
883aa30aca Revert reversion. 2017-02-20 13:25:28 -08:00
Adam Warner
763b51fe22 linux style line endings enforced 2017-02-20 21:12:04 +00:00
Dan Schaper
dd1aa9163c Fix IDEA ignoring pullapprove.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 12:01:38 -08:00
Dan Schaper
e087797edc Test for format of tag version.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 11:49:20 -08:00
Dan Schaper
5e6f8489a9 Find 404 errors and relay message.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 11:45:58 -08:00
Dan Schaper
48351fed79 Remove trailing newline from curl'd variable.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 11:33:55 -08:00
Dan Schaper
875a5d309d Check downloaded file for binary or text.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 11:28:36 -08:00
Dan Schaper
70e876ee13 Download tests.
Make sure we download a binary and not just get the GitHub page.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 11:11:16 -08:00
Dan Schaper
7a269e757e Debian buildpack image for docker (Need curl for testing, using scm version to add curl and git.)
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 09:24:47 -08:00
Dan Schaper
87edbeaf58 Factor out downloader from detector function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 08:40:17 -08:00
Dan Schaper
339f95b00c Change from uname -m to straight arch
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 08:13:46 -08:00
Dan Schaper
e480c761cd Merge remote-tracking branch 'origin/new/FTL-binary' into new/FTL-binary
# Conflicts:
#	test/test_automated_install.py
2017-02-20 07:25:34 -08:00
Dan Schaper
26c628f8a5 Mock ldd command response.
Test aarch64 detection

Arm v6/v7 little endian.

x86_64 native

Test aarch64 detection

Unknown platform detection.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 07:22:25 -08:00
Dan Schaper
59d6907d71 Test aarch64 detection
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 06:34:57 -08:00
Dan Schaper
b4450a3918 Mock ldd command response.
Test aarch64 detection

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 06:34:54 -08:00
Dan Schaper
7032be6049 Template for FTL engine type tests.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-02-20 06:34:40 -08:00
DL6ER
70a6a79b8c Detect library differently 2017-02-20 13:40:32 +01:00
DL6ER
f24f77c5bd Detect if architecture is *aarch* + use hf binary only if ARMv7+ is detected 2017-02-20 11:14:23 +01:00
DL6ER
66ae79f9b8 Merge pull request #1259 from friimaind/patch-1
Added my personal project Pi-hole Droid to the Projects's list
2017-02-20 10:49:00 +01:00
DL6ER
378338c684 Install pihole-FTL to /usr/bin instead of /usr/local/bin 2017-02-20 10:42:07 +01:00
Massimiliano Monaro
7da076df18 Added my personal project Pi-hole Droid to the Projects's list
Pi-hole Droid is an unofficial client that connects to your Pi-hole to show charts and statistics.
2017-02-20 10:04:14 +01:00
Adam Warner
45fbadbb26 Merge pull request #1257 from pi-hole/revert-1241-feature/redirect-pi-hole-to-admin
Revert "redirect pi.hole to pi.hole/admin"
2017-02-20 02:10:13 +00:00
Adam Warner
a7def771c8 Revert "redirect pi.hole to pi.hole/admin" 2017-02-19 20:12:32 +00:00
Adam Warner
543f1243e2 Merge pull request #1241 from pi-hole/feature/redirect-pi-hole-to-admin
redirect pi.hole to pi.hole/admin
2017-02-18 20:59:03 +00:00
Adam Warner
a001443ad7 Merge pull request #1252 from pi-hole/tweak/debug_IP
Debug IP stack fixes
2017-02-18 19:33:54 +00:00
Adam Warner
36166c129a Merge pull request #1253 from Skittels0/even_more_dns
Adds DNS.WATCH to default dns servers
2017-02-18 19:12:32 +00:00
Skittels
4e7a485e23 Update basic-install.sh 2017-02-18 13:42:13 +01:00
Skittels
9e5795bf55 Added DNS.WATCH to default dns servers 2017-02-18 13:03:40 +01:00
Dan Schaper
053b38e0bd Set up for IP matching in detection. 2017-02-16 19:45:44 -08:00
Dan Schaper
2aa3a109a0 Ping gateways and Internet. 2017-02-16 18:38:05 -08:00
Dan Schaper
472708376d Split out IP checks. 2017-02-16 18:30:15 -08:00
Dan Schaper
cfed3d59e9 Begin fixing IP detection functions. 2017-02-16 16:49:14 -08:00
Adam Warner
95fd9d4863 Merge pull request #1248 from IanOliver/patch-3
Update malwaredomains.com and mahakala.is URLs to HTTPS
2017-02-16 08:07:18 +00:00
Ian Oliver
c89bca6ec8 Update malwaredomains.com and mahakala.is URLs to HTTPS 2017-02-15 21:31:42 +00:00
Dan Schaper
ee262c30c2 Merge pull request #1245 from pi-hole/readme/magic-mirror-project
add magic mirror project link to readme
2017-02-14 19:21:27 -08:00
Jacob Salmela
6b8240d4de add magic mirror project link to readme 2017-02-14 20:25:11 -06:00
DL6ER
4035c933df Moved echo to else block 2017-02-13 16:50:48 +01:00
DL6ER
abd44dd284 Add 32bit message 2017-02-13 16:33:22 +01:00
DL6ER
95d7fe76b5 Make comments more pretty 2017-02-13 14:50:25 +01:00
DL6ER
a052f397fe Be more verbose during install 2017-02-13 14:47:06 +01:00
DL6ER
09d6e73b0a Don't print error message on 32bit platforms 2017-02-13 14:42:11 +01:00
DL6ER
7fb6b71d52 Fix install path 2017-02-13 14:40:31 +01:00
DL6ER
07e37d7fc3 Proper error handling 2017-02-13 11:33:09 +01:00
DL6ER
fbe3dc0dcd Have to get latest tag via GitHub API for downloading the binaries 2017-02-13 11:27:52 +01:00
DL6ER
6018c0c2fc Add FTLinstall() 2017-02-13 11:07:29 +01:00
DL6ER
52a2f166fd Add FTLdownload() subroutine 2017-02-13 10:29:27 +01:00
Jacob Salmela
26cb6a1929 redirect pi.hole to pi.hole/admin 2017-02-11 20:46:27 -06:00
Jacob Salmela
7c63bbfe44 Merge pull request #1233 from ProtoFoo/patch-1
Add manual edit warnings to lighttpd.conf.* files
2017-02-11 08:10:35 -06:00
Adam Warner
109026222e Merge pull request #1237 from IanOliver/patch-1
Spelling corrections in adlists.default comments
2017-02-10 23:43:11 +00:00
DL6ER
af8e629df4 Merge pull request #1239 from pi-hole/tweak/debug48h
Change description as we want to save the debug log for 48h instead of only 24h
2017-02-10 20:46:12 +01:00
DL6ER
f7f1daa69f Merge pull request #1238 from pi-hole/tweak/debugLogdnsmasq
Scan whole dnsmasq.d directory for cofigurations files
2017-02-10 20:46:01 +01:00
DL6ER
01f980d49c Change description as we want to save the debug log for 48h instead of only 24h 2017-02-10 17:45:20 +01:00
DL6ER
99fab7e52a Scan whole dnsmasq.d directory for cofigurations files 2017-02-10 17:42:37 +01:00
Ian Oliver
692292b1d4 Spelling corrections in comments 2017-02-10 11:22:14 +00:00
Mcat12
cd608d9d5b Merge pull request #1182 from pi-hole/adminPageAsOption
Give user the choice to install web admin or not
2017-02-09 20:20:08 -05:00
Mcat12
ba67144e34 Merge branch 'development' into adminPageAsOption 2017-02-09 16:27:07 -05:00
ProtoFoo
162d9d7d57 Add manual edit warning
Added text block from 01-pihole.conf to warn user that manual changes to lighttpd config will be overwritten.
Slight cosmetic adjustments (tabs -> spaces).
2017-02-09 17:00:52 +01:00
ProtoFoo
357f5a2cfd Add manual edit warning
Added text block from dns config file to warn user that manual changes to lighttpd config will be overwritten.
Slight cosmetic adjustments (tabs -> spaces).
2017-02-09 16:46:55 +01:00
Mcat12
d1ca32b0a5 Merge pull request #1231 from pi-hole/fix/iproute_deps
Update basic-install.sh
2017-02-09 10:12:05 -05:00
Dan Schaper
34f326c559 Update basic-install.sh 2017-02-08 14:13:49 -08:00
DL6ER
7785dac50e Merge pull request #1228 from r0ckarong/development
Justify and improve help texts, add missing wildcard description
2017-02-08 14:05:53 +01:00
Markus Napp
01f643e5eb fixup! Fix spacing for wildcard help in list script 2017-02-08 12:56:28 +01:00
Markus Napp
8037f3e332 Fix spacing for wildcard help in list script 2017-02-08 12:55:14 +01:00
Markus Napp
19e30b829a Add wildcard description to help text, improve other help texts 2017-02-08 12:42:14 +01:00
Markus Napp
afe5176e01 Justify help output to match main script 2017-02-08 12:41:53 +01:00
Mcat12
a48317883d Fix indentation 2017-02-07 18:14:41 -05:00
DL6ER
5ac92ae4eb Merge pull request #1222 from pi-hole/fix/installer
Remove double echos
2017-02-07 09:21:22 +01:00
DL6ER
8fb6ba19a1 Remove double echos 2017-02-06 12:06:38 +01:00
Dan Schaper
314f7e7889 Merge pull request #1183 from pi-hole/tweak/update_cache_trap
Trap for package cache update failures.
2017-02-05 16:04:19 -08:00
Promofaux
4fcf8fd23f Merge in development branch - resolve conflict in update.sh 2017-02-05 19:39:02 +00:00
Promofaux
10a30344e5 No need to source setupVars, as basic-install.sh is sourced, which sources setupVars itself. Sourception. 2017-02-05 19:29:56 +00:00
Promofaux
1206dda347 testing putting runGravity at a different part of the script 2017-02-05 19:23:04 +00:00
Promofaux
b764d17c64 comment 2017-02-05 19:18:27 +00:00
Promofaux
ba0abdb88d wrap update logic in admin_installed bool check 2017-02-05 19:12:09 +00:00
Promofaux
1428b58dde source setupVars and only check admin repo if it is enabled 2017-02-05 19:07:04 +00:00
Promofaux
e57425df5f 0.0.0.0 instead of pi-holes IP address for redirect purposes 2017-02-04 15:25:11 +00:00
Jacob Salmela
5e7dfaf220 Merge pull request #1214 from pi-hole/tweak/readme-updates
Update README with latest version screenshots and remove Raspberry references
2017-02-03 15:43:31 -06:00
Jacob Salmela
ad5c011b6c Add new screenshots from latest version 2017-02-03 15:33:44 -06:00
Jacob Salmela
fcdd33b585 Update and remove old FAQ links 2017-02-03 15:21:42 -06:00
Jacob Salmela
f767f066ad Update outdated text and describe features from recent versions 2017-02-03 15:18:28 -06:00
Dan Schaper
b8d0e5e5a1 Merge pull request #1210 from pi-hole/fix/dhcpcd_int
Remove comment leaders from DHCPCD interface
2017-02-02 12:48:29 -08:00
Dan Schaper
26ad23f01e Remove comment leaders from DHCPCD interface
We need to set the interface in DHCPCD, comments were inadvertently added a while ago.
2017-02-01 18:33:42 -08:00
DL6ER
21d771e171 Merge pull request #1207 from r0ckarong/master
Fix output for wildcards in gravity.sh
2017-02-01 20:13:47 +01:00
Markus Napp
66616eb0f0 Rename missing plurals check 2017-02-01 19:55:33 +01:00
Mcat12
18eb8a2159 Merge pull request #1185 from pi-hole/cleanup/git_functions
Move git functions to one script
2017-01-31 19:05:53 -05:00
Markus Napp
72a1fc3f64 Fix output for wildcards in gravity.sh 2017-02-01 00:07:47 +01:00
Dan Schaper
96eea32a9d Merge pull request #1205 from pi-hole/master
Sync master and development
2017-01-31 12:35:08 -08:00
DL6ER
3239c7023a Merge pull request #1170 from pi-hole/new/DHCPstaticleases
Backend changes for static DHCP leases
2017-01-31 21:07:36 +01:00
Dan Schaper
5333895a9f Merge pull request #1201 from pi-hole/development
[RELEASE] Pi-hole Core 2.12.1
2017-01-31 11:37:05 -08:00
DL6ER
da05491992 Merge pull request #1192 from pi-hole/fix/regex
Remove misplaced start of string expression
2017-01-30 21:25:45 +01:00
DL6ER
b9f5d79f3d Merge pull request #1203 from pi-hole/master
Sync development and master
2017-01-30 20:46:12 +01:00
DL6ER
fddc515ee1 Merge pull request #1195 from pi-hole/fix/logrotate
Change how user and group are stored in the logrotate config file
2017-01-29 21:35:31 +01:00
DL6ER
3d4516dc95 Improve regex 2017-01-29 20:27:20 +01:00
DL6ER
509c864cc3 Merge branch 'development' into fix/regex 2017-01-29 20:27:04 +01:00
DL6ER
8b22f435ad Change how user and group are stored in the logrotate config file (necessary on Ubuntu 16.04.1) 2017-01-29 19:58:53 +01:00
Adam Warner
55d39595e1 Merge pull request #1194 from pi-hole/fix/chronometer-summary
Fix chronometer interpreting summaryRaw
2017-01-29 18:35:51 +00:00
Mcat12
f8944177a0 Fix chronometer interpreting summaryRaw 2017-01-29 13:32:48 -05:00
Mcat12
3060c4d887 Merge pull request #1184 from pi-hole/fix/updater-debugging
Stay in repo directory until we error check
2017-01-29 12:02:55 -05:00
Mcat12
13ee5dc728 Merge pull request #1190 from pi-hole/tweak/gravity_showwildcards
Show number of wildcard blocked domains in gravity's summary
2017-01-29 11:57:47 -05:00
DL6ER
06873fe69e Remove misplaced start of string expression. Fixes #1191 2017-01-29 13:54:39 +01:00
DL6ER
a8ac212ee6 Show number of wildcard blocked domains in gravity's summary 2017-01-29 13:46:27 +01:00
Dan Schaper
3d9d13222b Use constants for leading paths. 2017-01-28 17:42:55 -08:00
Dan Schaper
745adabb05 Path to source basic-install.sh 2017-01-28 17:38:14 -08:00
Dan Schaper
3861b57dc6 Start moving reused utility functions to one script. 2017-01-28 17:32:42 -08:00
Dan Schaper
99a4a80017 Spelling 2017-01-28 17:08:38 -08:00
Mcat12
033ba26041 Stay in repo directory until we error check 2017-01-28 20:00:02 -05:00
Dan Schaper
439999cb62 Last rule check. 2017-01-28 16:47:53 -08:00
Dan Schaper
7291aa07ca Silenc cache updater. 2017-01-28 16:46:37 -08:00
Dan Schaper
9181e2652e Merge remote-tracking branch 'dschaper/tweak/update_cache_trap' into tweak/update_cache_trap 2017-01-28 16:43:28 -08:00
Dan Schaper
409f76aa34 Error check. 2017-01-28 16:37:31 -08:00
Dan Schaper
54e2c6181a Populate all required variables with a distro check. 2017-01-28 16:37:28 -08:00
Dan Schaper
a281d87315 Eval variable. (Not a fan.) 2017-01-28 16:37:26 -08:00
Dan Schaper
2a5587f236 Test for failure. 2017-01-28 16:37:17 -08:00
Dan Schaper
2d18b2d784 Start test templates. 2017-01-28 16:37:04 -08:00
Dan Schaper
585f842206 Error check. 2017-01-28 16:33:40 -08:00
Mcat12
8cb4304c13 Merge pull request #1158 from pi-hole/development
[RELEASE] Pi-hole Core 2.12
2017-01-28 19:19:18 -05:00
Dan Schaper
737819b56e Populate all required variables with a distro check. 2017-01-28 16:08:43 -08:00
Dan Schaper
a7130e6530 Eval variable. (Not a fan.) 2017-01-28 16:03:48 -08:00
Dan Schaper
f9cfed5aff Test for failure. 2017-01-28 15:56:43 -08:00
Dan Schaper
f65a9dbfd2 Test for failure. 2017-01-28 15:49:28 -08:00
Dan Schaper
96c59fada4 Spelling check. 2017-01-28 15:47:27 -08:00
Dan Schaper
153a9d8ac7 Start test templates. 2017-01-28 15:45:25 -08:00
Dan Schaper
297d4eec57 Start test templates. 2017-01-28 15:44:31 -08:00
Promofaux
c31b4383e6 add back in code to stop dnsmasq and lighttpd during install. 2017-01-28 21:37:21 +00:00
DL6ER
0375a3caa3 Merge pull request #1178 from pi-hole/fix/validation
Use perl instead of grep for domain validation
2017-01-28 22:14:02 +01:00
DL6ER
08cddba200 There should be no echo here 2017-01-28 21:49:31 +01:00
DL6ER
1bf43b0425 Improved regex: Remove all leading points from domain (.....xyz => .xyz). Return not only a part, but fill validated domain 2017-01-28 21:48:19 +01:00
Promofaux
35828f9cea Source setupvars earlier in update/repair process 2017-01-28 19:05:55 +00:00
Promofaux
90af12fdb8 Remember the [@] 2017-01-28 18:41:37 +00:00
Dan Schaper
dc63182647 Merge pull request #1180 from pi-hole/fix/web_install_css
Install blockingpage.css on new installation.
2017-01-28 10:40:31 -08:00
Promofaux
5fede23cf7 trying another tactic 2017-01-28 18:39:15 +00:00
Promofaux
bc4762f270 no need to stop dnsmasq/lighttpt if we're going to reload them at the end anyway. 2017-01-28 16:27:02 +00:00
Promofaux
01429d59bd more web checks 2017-01-28 15:45:14 +00:00
Promofaux
731d15f9b5 don't display web admin info in final dialog if it's not selected 2017-01-28 15:43:33 +00:00
Promofaux
f0bd7fae5c ) not } 2017-01-28 15:32:07 +00:00
Promofaux
f8322cc2d4 use the web install flag. Could be optimised 2017-01-28 15:25:02 +00:00
Promofaux
dfdb9e393b move repo clone to function 2017-01-28 15:15:42 +00:00
Promofaux
bd07d7f32e Only install web dependenices if flag is true 2017-01-28 15:11:39 +00:00
Promofaux
f588c6f93c introduce web toggle flag 2017-01-28 14:40:47 +00:00
Promofaux
d9ec3d2c22 spelling 2017-01-28 14:28:18 +00:00
Promofaux
e2b87759d8 split out web dependencies 2017-01-28 14:27:08 +00:00
Dan Schaper
52e0aa11af Have install create directory 2017-01-27 22:06:48 -08:00
Dan Schaper
1421c31179 install index and blockingpage assets. 2017-01-27 21:41:17 -08:00
Dan Schaper
d5587e32d0 Populated directory test 2017-01-27 21:41:14 -08:00
Dan Schaper
28eb348707 Individual Page tests 2017-01-27 21:41:05 -08:00
Dan Schaper
91bcc18e6a Make full path to directory for pihole web page. 2017-01-27 21:40:52 -08:00
Dan Schaper
5b43f13935 Fresh install web page directory tests 2017-01-27 20:24:20 -08:00
DL6ER
85b3fef08d Use perl instead of grep? 2017-01-28 00:39:10 +01:00
DL6ER
cc7c48237c Merge pull request #1177 from pi-hole/fix/validation
Fix CLI domain validation
2017-01-28 00:22:34 +01:00
DL6ER
15037fa888 Typo 2017-01-28 00:17:32 +01:00
DL6ER
d595fef18f Fix regex 2017-01-28 00:15:06 +01:00
Dan Schaper
be5fa22b6f Merge pull request #1174 from pi-hole/tweak/logrotate_insecure_directory
Improve logrotate support
2017-01-27 11:18:06 -08:00
Dan Schaper
a5c6bbeee7 Merge pull request #1173 from pi-hole/tweak/domainfilter
Improve CLI domain filter
2017-01-27 11:16:18 -08:00
DL6ER
094a645e60 Merge pull request #1176 from pi-hole/tweak/remove-pihole-s
remove pihole -s flag
2017-01-27 17:20:12 +01:00
Jacob Salmela
51acdfa633 remove pihole -s flag 2017-01-27 10:12:51 -06:00
DL6ER
2c16a75ef1 Use stat to get owner of /var/log 2017-01-27 14:28:59 +01:00
DL6ER
6fd7e0311c Install customized version of logrotate script 2017-01-27 14:16:24 +01:00
DL6ER
1bcf2dd0fc Tweak CLI domain filter 2017-01-27 00:45:57 +01:00
DL6ER
9a3cf949cf Merge pull request #1149 from pi-hole/tweak/firewall_warning
Add warning to firewall configuration
2017-01-27 00:03:41 +01:00
Dan Schaper
cec214f900 User decline to install shouldn't be an error return. 2017-01-26 14:38:02 -08:00
Jacob Salmela
dad669d68b Merge pull request #1172 from pi-hole/tweak/readme-youtube
Put new video into README
2017-01-25 21:30:12 -06:00
jacobsalmela
561f40d97e replace youtube links with new explainer video 2017-01-25 20:19:06 -06:00
DL6ER
dad18dc5de Changed keywords 2017-01-25 10:35:45 +01:00
DL6ER
5c95c4074b Remove static leases from DHCP static leases file 2017-01-25 10:35:03 +01:00
DL6ER
4301b9a12a Add static DHCP leases to new file 2017-01-25 10:33:25 +01:00
Dan Schaper
0bbe0aed83 Last of the IPTables tests, new test rig is operating. 2017-01-24 20:09:10 -08:00
Dan Schaper
b16f797317 firewall-cmd --state returns 0 on 'running' non 0 on 'not running',
so check retval and not text returned.

FirewallD conversion to multicall

IPTables test
2017-01-24 19:57:31 -08:00
Dan Schaper
4bb71ae046 IPtables tests.
mock commands for iptables check.

Test setting IPTables ruleset.

Test setting IPTables ruleset.

Test for already configured IPTables rules.

Test for addition of iptables rules.

Can only mock so deep in the commands.
2017-01-24 13:42:51 -08:00
Dan Schaper
679b098aa7 No firewall enabled test. 2017-01-24 12:04:45 -08:00
Dan Schaper
e0e88fdb52 Start IPTables test, get baseline for commands in the container. See
what we have to mock to start testing.
2017-01-24 11:58:22 -08:00
Dan Schaper
8bba3a257c Merge branch 'tweak/firewall_tests' into tweak/firewall_warning 2017-01-24 11:51:41 -08:00
Dan Schaper
8529c1287f Full test suite for firewallD configuration. 2017-01-24 11:03:37 -08:00
Dan Schaper
9c7f7756b4 Revert second test. 2017-01-23 19:03:00 -08:00
Dan Schaper
f1cfb16bf9 Test firewallD enabled and disabled. 2017-01-23 18:59:48 -08:00
Dan Schaper
95796e1978 Only expect text output, not the leader ::: 2017-01-23 18:52:05 -08:00
Dan Schaper
968b981ecb Try mocking whiptail 2017-01-23 18:47:52 -08:00
Dan Schaper
3aeb378b56 Fix moved incorrect blocks. 2017-01-23 18:21:50 -08:00
Dan Schaper
28bafe7427 Rename test for firewallD, running state. 2017-01-23 18:14:40 -08:00
Dan Schaper
1317b67657 Attempt at modifying firewall rules for testing. 2017-01-23 18:13:18 -08:00
Dan Schaper
3f462c771f Merge pull request #1166 from pi-hole/tweak/momentOfClarity
Transparency in `sudo` refire.
2017-01-23 16:41:21 -08:00
Dan Schaper
31aa42c35e Transparency in sudo refire. 2017-01-23 14:28:56 -08:00
Dan Schaper
f7a17248b7 Warn with whiptail if firewall-cmd is running. 2017-01-23 14:19:51 -08:00
DL6ER
b60e6310bf Merge pull request #1164 from pi-hole/tweak/slience_rm
Silence rm warning if no DHCP server is used
2017-01-23 16:25:50 +01:00
DL6ER
6a89c6bf3b Silence rm warning if no DHCP server is used 2017-01-23 15:06:36 +01:00
Dan Schaper
b3b7aae7d7 Merge pull request #1160 from pi-hole/logSizeToDebugLog
Log size to debug log
2017-01-22 13:13:33 -08:00
Promofaux
fe8c365d17 codacy never lies 2017-01-22 20:53:30 +00:00
Promofaux
9acc3aac01 pipe du -h output to awk to ensure we only get the file size, and not the filename too. Yeah that's right Dom, pipe. 2017-01-22 20:44:07 +00:00
Promofaux
1ad23a065e switch out wc -l with grep -c ^ 2017-01-22 20:38:46 +00:00
Promofaux
de102fde5c Add line count and size check for pihole.log 2017-01-22 20:38:09 +00:00
Adam Warner
77554fbd13 Merge pull request #1145 from pi-hole/cleanup/more_shellcheck
Cleanup/more shellcheck
2017-01-22 13:31:09 +00:00
Mcat12
6863bff7c5 Merge pull request #1156 from pi-hole/tweak/whiptail_dns
DNS whiptail from radio to menu
2017-01-21 19:54:16 -05:00
Dan Schaper
eaf6938c35 DNS whiptail from radio to menu 2017-01-21 16:14:05 -08:00
Mcat12
34ad2157dd Merge pull request #1155 from pi-hole/tweak/root_first
Move distribution check to function.
2017-01-21 17:59:30 -05:00
Dan Schaper
0635309f23 Move distribution check to function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-21 12:34:47 -08:00
DL6ER
2661ef53a2 Merge pull request #1152 from jwiebalk/patch-2
Correct path for automated installer
2017-01-20 10:35:31 +01:00
John Wiebalk
eddca8f127 Correct path for automated installer
basic-install.sh is in the `automated install` dir instead of `automated_installer`
2017-01-19 21:40:52 -05:00
Dan Schaper
cef0211c00 Merge pull request #1151 from pi-hole/fix/CIDR
Include CIDR notation for IPv4 non-natural blocks.
2017-01-19 14:02:28 -08:00
Dan Schaper
86052540d9 Add back CIDR notation for non-natural blocks. Includes multi-address
configs.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-19 13:50:42 -08:00
DL6ER
930cb15e2c Merge pull request #1150 from pi-hole/tweak/DHCPdomain
Be able to disable the DHCP domain name
2017-01-18 14:23:30 +01:00
DL6ER
8bb9dd460b Be able to disable the DHCP domain name 2017-01-18 12:22:03 +01:00
Mcat12
8a3c78ca0a Merge pull request #1148 from pi-hole/fix/installer_array
Fedora dependency installer fix
2017-01-17 17:44:21 -05:00
Dan Schaper
62a5e36afd Remove firewall configuration from update portion of script.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-17 14:40:30 -08:00
Dan Schaper
00b28f0aed IPTables Whiptal option to install.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-17 14:19:19 -08:00
Dan Schaper
7c94aa9f07 Merge branches 'development' and 'fix/installer_array' of https://github.com/pi-hole/pi-hole into fix/installer_array 2017-01-17 13:05:51 -08:00
Dan Schaper
ec8c40b69b Fix array declaration for Fedora package management.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-17 13:00:17 -08:00
Mcat12
2981f3cbd1 Merge pull request #1147 from pi-hole/uncommentLine391
Uncomment gravity.sh line 391
2017-01-17 15:26:43 -05:00
Promofaux
c2e1819098 This should not have been commented out. It's stopping any changes we make to the default lists getting out. 2017-01-17 19:48:20 +00:00
Mcat12
58f3ff69d8 Align comment with referenced line 2017-01-16 18:51:13 -05:00
DL6ER
72d8d10e64 Show most recently blocked domain in chronometer (using FTL). Fixes #717 2017-01-16 22:39:58 +01:00
Mcat12
63d02df0bc Merge pull request #1130 from pi-hole/new/logrotate
Use logrotate for pihole.log
2017-01-16 15:11:11 -05:00
Mcat12
f579fd3895 Merge pull request #1143 from pi-hole/fix/ignore_down
Only ignore DOWN interfaces, `tun` interfaces are UNKNOWN.
2017-01-15 19:19:07 -05:00
Dan Schaper
34df34ba27 Actually rm the Pi-hole scripts.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-14 20:16:27 -08:00
Dan Schaper
2689b37c35 Combine multiple calls to interface length code.
&& ||

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-14 19:40:29 -08:00
Dan Schaper
9b6427144f || && conversion.
Fedora deps array.

Use full name of `source`

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-14 19:39:37 -08:00
Dan Schaper
9212eea8bd Only ignore DOWN interfaces, tun interfaces are UNKNOWN.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-14 15:25:42 -08:00
Mcat12
6de5d6dd0a Merge pull request #1113 from trick77/multi-if-fix
Bugfix if multiple interfaces are present
2017-01-13 18:28:23 -05:00
DL6ER
08f08fea61 Merge pull request #1135 from pi-hole/new/multipleDNSservers
Allow multiple DNS servers
2017-01-13 23:48:38 +01:00
DL6ER
1ed2a8637f Removed debug echo's 2017-01-13 23:39:57 +01:00
Mcat12
d8bcbdadd6 Merge pull request #1133 from pi-hole/fix/gravity_collapse
Make sure to read all lines of adlists file
2017-01-13 17:11:33 -05:00
Mcat12
d196c13f2c Merge pull request #1131 from pi-hole/chronometerJsonUnixTools
No excuse for chronometer not to match API
2017-01-13 16:34:51 -05:00
Dan Schaper
7ba251d3a6 Merge pull request #1136 from pi-hole/fix/installer_iptables
Check for existance of iptables command
2017-01-13 11:04:14 -08:00
DL6ER
0b72c639fb Check for existance of iptables command. Fixes #1125 2017-01-13 18:13:10 +01:00
DL6ER
bd1c5a42e8 Allow multiple DNS servers 2017-01-13 17:49:55 +01:00
DL6ER
845d8c0e63 Ensure LC_NUMERIC=C is set when evaluating floating point number (non-English systems might expect "," as decimal separator 2017-01-13 12:59:49 +01:00
DL6ER
bcb8a52418 Added user to cron file 2017-01-13 11:57:07 +01:00
DL6ER
322cb2387b Also accept the last line of the adlist file if there is no newline at the end 2017-01-13 11:02:51 +01:00
DL6ER
bfe56942f9 Merge pull request #1128 from pi-hole/DNSSEC
Add DNSSEC support to Pi-hole core
2017-01-13 10:54:25 +01:00
Promofaux
b4c32e47c6 Missed one! 2017-01-12 22:07:07 +00:00
Promofaux
248d8680f7 actual codacy complaints 2017-01-12 21:51:10 +00:00
Promofaux
1bda965a7c Codacy complaints 2017-01-12 21:50:16 +00:00
Promofaux
2ee305769d Replace all calculations with values read directly web admin API. Parse JSON using native unix tools, no additional requirements needed. 2017-01-12 21:23:58 +00:00
DL6ER
3a8a936575 Corrected path 2017-01-12 21:01:52 +01:00
DL6ER
6b6fbc4709 Remove --force on @reboot 2017-01-12 20:41:25 +01:00
DL6ER
3fd2ffd466 Add logrotate for pihole.log 2017-01-12 20:39:25 +01:00
DL6ER
b56ca2b834 Add DNSSEC support to Pi-hole core 2017-01-12 16:02:41 +01:00
DL6ER
10f77df8bb Merge pull request #1065 from pi-hole/wildcardblacklisting
Add blacklisting wildcard support
2017-01-12 00:13:32 +01:00
Mcat12
df7671d393 Add a few comments and remove debug output 2017-01-11 18:01:27 -05:00
DL6ER
a263936243 Merge branch 'development' into wildcardblacklisting 2017-01-11 18:25:51 +01:00
DL6ER
11924d425b Hide whitelist option if we detected that the domain as blocked due to wildcard blocking 2017-01-11 17:07:08 +01:00
DL6ER
0bd5a5f382 Merge pull request #1114 from pi-hole/tweak/debugger_show_branch_revision
Debugger: show branch + revision of repositories
2017-01-11 10:59:32 +01:00
Mcat12
757eb64be3 Merge pull request #1118 from pi-hole/cleanup/shellcheck
Cleanup/shellcheck
2017-01-10 19:29:49 -05:00
DL6ER
6b3aea933d Add info that whitelisting blocked pages does not work 2017-01-09 15:02:31 +01:00
DL6ER
2935275227 Merge branch 'development' into wildcardblacklisting 2017-01-09 14:53:01 +01:00
Dan Schaper
cbe045b946 Merge remote-tracking branch 'origin/cleanup/shellcheck' into cleanup/shellcheck
# Conflicts:
#	automated install/basic-install.sh
2017-01-09 00:17:15 -08:00
Dan Schaper
c58a95ca2e setDNS whiptail direct, not in array.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:10:14 -08:00
Dan Schaper
80a3bce6d5 PI_HOLE_INSTALL_DIR global variable
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

`"${pw}"`

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

Absolute path for pihole

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

Debian PKG_INSTALL as array

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:10:06 -08:00
Dan Schaper
6f0289de49 Vestigial variable that was never populated.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:09:52 -08:00
Dan Schaper
0966d7660e Take out some whiptail subshells that aren't needed.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

Take out some whiptail subshells that aren't needed.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:09:45 -08:00
Dan Schaper
27e90cc4e6 Repetitive ip route get was resetting counts.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:09:39 -08:00
Dan Schaper
b785213c3a Shellcheck for Test for $? -eq 0
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

Shellcheck for Test for $? -eq 0

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-09 00:09:32 -08:00
Dan Schaper
642a73508d Merge pull request #1119 from pi-hole/tweak/dry_installer
Repetitive `ip route get` was resetting counts.
2017-01-08 20:43:40 -08:00
Dan Schaper
8f7b023769 Shellcheck for Test for $? -eq 0
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-08 18:48:54 -08:00
Dan Schaper
a122fb2900 Shellcheck for Test for $? -eq 0
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-08 18:46:15 -08:00
Dan Schaper
a299a2cc5f Repetitive ip route get was resetting counts.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-08 18:04:24 -08:00
Adam Warner
47196d86ad Merge pull request #1115 from pi-hole/development
[RELEASE] Pi-hole Core 2.11.2
2017-01-08 23:22:26 +00:00
Mcat12
a713cf7952 Merge pull request #1116 from pi-hole/fix/multi_interface
Fix/multi interface
2017-01-08 17:57:29 -05:00
Dan Schaper
6cd7b8ff5e Merge branch 'master' into fix/multi_interface 2017-01-08 14:54:46 -08:00
Dan Schaper
f8264f8277 Merge branch 'development' of github.com:pi-hole/pi-hole into development 2017-01-08 14:49:29 -08:00
Dan Schaper
0e4d5e9103 Bash splitting and globin
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-08 14:49:08 -08:00
trick77
f599bcfef9 Bugfix if multiple interfaces are present 2017-01-08 13:56:08 +01:00
DL6ER
74a4e62cc9 Codacy fix 2017-01-08 11:26:56 +01:00
DL6ER
63a414a544 Align outputs 2017-01-08 11:21:50 +01:00
DL6ER
7d1f5091a7 Fixed small typo 2017-01-08 11:21:10 +01:00
DL6ER
3b54cab3bc Show branches and revisions (incl. possible dirty state) in debug log 2017-01-08 11:17:25 +01:00
trick77
52d06d906e Bugfix if multiple interfaces are present 2017-01-08 10:14:40 +01:00
DL6ER
d9e949b27c Merge pull request #1096 from pi-hole/fix/updater
Fix updater failing on non-English systems
2017-01-06 23:36:42 +01:00
DL6ER
b65fe9d64f Merge pull request #1099 from pi-hole/fix/webpageshtypo
Fixed typo in webpage.sh
2017-01-05 21:57:00 +01:00
DL6ER
168397e90d Fixed typo in webpage.sh 2017-01-05 21:45:06 +01:00
DL6ER
e3c1fcd2c6 NEW LOGIC FOR THE UPDATER
Compare local and remote hashes. Update is available if current remote hash is different from current local hash since we assume that local should never be newer than remote for user
2017-01-05 13:10:19 +01:00
Dan Schaper
26c6446252 Merge branch 'master' into development 2017-01-04 12:29:42 -08:00
Dan Schaper
e5e44db5ac Merge branches 'development' and 'master' of github.com:pi-hole/pi-hole into development 2017-01-04 12:26:34 -08:00
Dan Schaper
cc68155dfa Merge remote-tracking branch 'origin/master' 2017-01-02 14:12:30 -08:00
DL6ER
2b778695b1 Implement querying ad lists support for wildcards (what hell of a bash experience) 2017-01-02 14:27:13 +01:00
DL6ER
ebf0db4bbf Typo fixed 2016-12-31 17:17:46 +00:00
DL6ER
9ac265980f Add .conf to filename 2016-12-31 13:41:19 +00:00
DL6ER
40798da6b1 Add blacklisting wildcard support 2016-12-31 12:49:04 +00:00
Dan Schaper
3f189ae7fe Merge remote-tracking branch 'origin/master' 2016-12-27 09:25:25 -08:00
Dan Schaper
6b896a1c54 Merge remote-tracking branch 'origin/master' 2016-12-23 14:27:31 -08:00
43 changed files with 7523 additions and 2925 deletions

38
.editorconfig Normal file
View File

@@ -0,0 +1,38 @@
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = tab
tab_width = 2
charset = utf-8
trim_trailing_whitespace = true
# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8
# 4 space indentation
[*.py]
indent_style = space
indent_size = 4
# Tab indentation (no size specified)
[Makefile]
indent_style = tab
# Indentation override for all JS under lib directory
[scripts/**.js]
indent_style = space
indent_size = 2
# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

2
.gitattributes vendored
View File

@@ -35,4 +35,4 @@ GitHub.Tests.Integration/Resources/* binary
# Catch all for anything we forgot. Add rules if you get CRLF -> LF warnings.
* text=auto
* text eol=lf

View File

@@ -1,33 +1,37 @@
**In raising this issue, I confirm the following (please check boxes, eg [X]) Failure to fill the template will close your issue:**
**In raising this issue, I confirm the following:** `{please fill the checkboxes, e.g: [X]}`
- [] I have read and understood the [contributors guide](https://github.com/pi-hole/pi-hole/blob/master/CONTRIBUTING.md).
- [] The issue I am reporting can be *replicated*
- [] The issue I'm reporting isn't a duplicate (see [FAQs](https://github.com/pi-hole/pi-hole/wiki/FAQs), [closed issues](https://github.com/pi-hole/pi-hole/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), and [open issues](https://github.com/pi-hole/pi-hole/issues)).
- [] The issue I am reporting can be *replicated*.
- [] The issue I am reporting isn't a duplicate (see [FAQs](https://github.com/pi-hole/pi-hole/wiki/FAQs), [closed issues](https://github.com/pi-hole/pi-hole/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), and [open issues](https://github.com/pi-hole/pi-hole/issues)).
**How familiar are you with the codebase?:**
**How familiar are you with the the source code relevant to this issue?:**
_{replace this text with a number from 1 to 10, with 1 being not familiar, and 10 being very familiar}_
`{Replace this with a number from 1 to 10. 1 being not familiar, and 10 being very familiar}`
---
**[FEATURE REQUEST | QUESTION | OTHER]:**
**Expected behaviour:**
Please [submit your feature request here](https://discourse.pi-hole.net/c/feature-requests), so it is votable by the community. It's also easier for us to track.
`{A detailed description of what you expect to see}`
**[BUG | ISSUE] Expected Behaviour:**
**Actual behaviour:**
`{A detailed description and/or screenshots of what you do see}`
**[BUG | ISSUE] Actual Behaviour:**
**Steps to reproduce:**
`{Detailed steps of how we can reproduce this}`
**[BUG | ISSUE] Steps to reproduce:**
**Debug token provided by [uploading `pihole -d` log](https://discourse.pi-hole.net/t/the-pihole-command-with-examples/738#debug):**
-
-
-
-
`{Alphanumeric token}`
**(Optional) Debug token generated by `pihole -d`:**
**Troubleshooting undertaken, and/or other relevant information:**
`<token>`
`{Steps of what you have done to fix this}`
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._
> * `{Please delete this quoted section when opening your issue}`
> * You must follow the template instructions. Failure to do so will result in your issue being closed.
> * Please [submit any feature requests here](https://discourse.pi-hole.net/c/feature-requests), so it is votable and trackable by the community.
> * Please respect that Pi-hole is developed by volunteers, who can only reply in their spare time.
> * Detail helps us understand and resolve an issue quicker, but please ensure it's relevant.
> * _This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._

View File

@@ -1,19 +1,31 @@
**By submitting this pull request, I confirm the following (please check boxes, eg [X]) _Failure to fill the template will close your PR_:**
**By submitting this pull request, I confirm the following:**
*please fill any appropriate checkboxes, e.g: [X]*
***Please submit all pull requests against the `development` branch. Failure to do so will delay or deny your request***
- [ ] 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).
- [] I have checked that [another pull request](https://github.com/pi-hole/pi-hole/pulls) for this purpose does not exist.
- [] I have considered, and confirmed that this submission will be valuable to others.
- [] I accept that this submission may not be used, and the pull request closed at the will of the maintainer.
- [] I give this submission freely, and claim no ownership to its content.
**How familiar are you with the codebase?:**
_{replace this text with a number from 1 to 10, with 1 being not familiar, and 10 being very familiar}_
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).
---
_{replace this line with your pull request content}_
**What does this PR aim to accomplish?:**
*A detailed description, screenshots (if necessary), as well as links to any relevant GitHub issues*
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._
**How does this PR accomplish the above?:**
*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*
---
* 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.

66
.gitignore vendored
View File

@@ -3,5 +3,69 @@
*.swp
__pycache__
.cache
.pullapprove.yml
# 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

View File

@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
</value>
</option>
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>

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

@@ -0,0 +1,13 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</value>
</option>
<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,7 +1,7 @@
version: 2
always_pending:
title_regex: '(WIP|wip)'
title_regex: '(WIP|wip)'
labels:
- wip
explanation: 'This PR is a work in progress...'
@@ -10,7 +10,7 @@ group_defaults:
reset_on_push:
enabled: true
reject_value: -2
approve_regex: '^(Approved|:shipit:|:\+1:|Engage)'
approve_regex: '^(Approved|:shipit:|:\+1:|Engage|:taco:)'
reject_regex: '^(Rejected|:-1:|Borg)'
author_approval:
auto: true
@@ -22,17 +22,17 @@ groups:
enabled: true
conditions:
branches:
- development
- development
required: 2
teams:
- approvers
master:
approve_by_comment:
enabled: true
conditions:
branches:
- master
required: -1
required: 4
teams:
- admin
- approvers

3
.stickler.yml Normal file
View File

@@ -0,0 +1,3 @@
linters:
shellcheck:
shell: bash

View File

@@ -28,6 +28,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
@@ -35,4 +36,5 @@ When requesting or submitting new features, first consider whether it might be u
- Before Submitting your Pull Request, merge `development` with your new branch and fix any conflicts. (Make sure you don't break anything in development!)
- Please use the [Google Style Guide for Shell](https://google.github.io/styleguide/shell.xml) for your code submission styles.
- Commit Unix line endings.
- Please use the Pi-hole brand: **Pi-hole** (Take a special look at the capitalized 'P' and a low 'h' with a hyphen)
- (Optional fun) keep to the theme of Star Trek/black holes/gravity.

389
LICENSE
View File

@@ -1,339 +1,146 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 2017 Pi-hole, LLC (https://pi-hole.net)
Pi-hole Core
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This software is licensed under the European Union Public License (EUPL)
The license is available in the 22 official languages of the EU. The English version is included here.
Please see https://joinup.ec.europa.eu/community/eupl/og_page/eupl for official translations of the other languages.
Preamble
This license applies to the whole project EXCEPT:
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
- any commits made to the master branch prior to the release of version 3.0
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
The licenses that existed prior to this change have remained intact.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-------------------------------------------------------------
EUROPEAN UNION PUBLIC LICENCE v. 1.2
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
EUPL © the European Union 2007, 2016
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
This European Union Public Licence (the EUPL) applies to the Work (as defined below) which is provided under the terms of this Licence. Any use of the Work, other than as authorised under this Licence is prohibited (to the extent such use is covered by a right of the copyright holder of the Work).
The Work is provided under the terms of this Licence when the Licensor (as defined below) has placed the following notice immediately following the copyright notice for the Work:
Licensed under the EUPL
or has expressed by any other means his willingness to license under the EUPL.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
1. Definitions
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
In this Licence, the following terms have the following meaning:
The precise terms and conditions for copying, distribution and
modification follow.
- The Licence: this Licence.
- The Original Work: the work or software distributed or communicated by the Licensor under this Licence, available as Source Code and also as Executable Code as the case may be.
- Derivative Works: the works or software that could be created by the Licensee, based upon the Original Work or modifications thereof. This Licence does not define the extent of modification or dependence on the Original Work required in order to classify a work as a Derivative Work; this extent is determined by copyright law applicable in the country mentioned in Article 15.
- The Work: the Original Work or its Derivative Works.
- The Source Code: the human-readable form of the Work which is the most convenient for people to study and modify.
- The Executable Code: any code which has generally been compiled and which is meant to be interpreted by a computer as a program.
- The Licensor: the natural or legal person that distributes or communicates the Work under the Licence.
- Contributor(s): any natural or legal person who modifies the Work under the Licence, or otherwise contributes to the creation of a Derivative Work.
- The Licensee or You: any natural or legal person who makes any usage of the Work under the terms of the Licence.
- Distribution or Communication: any act of selling, giving, lending, renting, distributing, communicating, transmitting, or otherwise making available, online or offline, copies of the Work or providing access to its essential functionalities at the disposal of any other natural or legal person.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2. Scope of the rights granted by the Licence
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, sublicensable licence to do the following, for the duration of copyright vested in the Original Work:
- use the Work in any circumstance and for all usage,
- reproduce the Work,
- modify the Work, and make Derivative Works based upon the Work,
- communicate to the public, including the right to make available or display the Work or copies thereof to the public and perform publicly, as the case may be, the Work,
- distribute the Work or copies thereof,
- lend and rent the Work or copies thereof,
- sublicense rights in the Work or copies thereof.
Those rights can be exercised on any media, supports and formats, whether now known or later invented, as far as the applicable law permits so.
In the countries where moral rights apply, the Licensor waives his right to exercise his moral right to the extent allowed by law in order to make effective the licence of the economic rights here above listed.
The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to any patents held by the Licensor, to the extent necessary to make use of the rights granted on the Work under this Licence.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
3. Communication of the Source Code
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
The Licensor may provide the Work either in its Source Code form, or as Executable Code. If the Work is provided as Executable Code, the Licensor provides in addition a machine-readable copy of the Source Code of the Work along with each copy of the Work that the Licensor distributes or indicates, in a notice following the copyright notice attached to the Work, a repository where the Source Code is easily and freely accessible for as long as the Licensor continues to distribute or communicate the Work.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
4. Limitations on copyright
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
Nothing in this Licence is intended to deprive the Licensee of the benefits from any exception or limitation to the exclusive rights of the rights owners in the Work, of the exhaustion of those rights or of other applicable limitations thereto.
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
5. Obligations of the Licensee
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
The grant of the rights mentioned above is subject to some restrictions and obligations imposed on the Licensee. Those obligations are the following:
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
Attribution right: The Licensee shall keep intact all copyright, patent or trademarks notices and all notices that refer to the Licence and to the disclaimer of warranties. The Licensee must include a copy of such notices and a copy of the Licence with every copy of the Work he/she distributes or communicates. The Licensee must cause any Derivative Work to carry prominent notices stating that the Work has been modified and the date of modification.
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Copyleft clause: If the Licensee distributes or communicates copies of the Original Works or Derivative Works, this Distribution or Communication will be done under the terms of this Licence or of a later version of this Licence unless the Original Work is expressly distributed only under this version of the Licence - for example by communicating EUPL v. 1.2 only. The Licensee (becoming Licensor) cannot offer or impose any additional terms or conditions on the Work or Derivative Work that alter or restrict the terms of the Licence.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
Compatibility clause: If the Licensee Distributes or Communicates Derivative Works or copies thereof based upon both the Work and another work licensed under a Compatible Licence, this Distribution or Communication can be done under the terms of this Compatible Licence. For the sake of this clause, Compatible Licence refers to the licences listed in the appendix attached to this Licence. Should the Licensee's obligations under the Compatible Licence conflict with his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
Provision of Source Code: When distributing or communicating copies of the Work, the Licensee will provide a machine-readable copy of the Source Code or indicate a repository where this Source will be easily and freely available for as long as the Licensee continues to distribute or communicate the Work.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
Legal Protection: This Licence does not grant permission to use the trade names, trademarks, service marks, or names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the copyright notice.
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
6. Chain of Authorship
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
The original Licensor warrants that the copyright in the Original Work granted hereunder is owned by him/her or licensed to him/her and that he/she has the power and authority to grant the Licence.
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
Each Contributor warrants that the copyright in the modifications he/she brings to the Work are owned by him/her or licensed to him/her and that he/she has the power and authority to grant the Licence.
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
Each time You accept the Licence, the original Licensor and subsequent Contributors grant You a licence to their contributions to the Work, under the terms of this Licence.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
7. Disclaimer of Warranty
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
The Work is a work in progress, which is continuously improved by numerous Contributors. It is not a finished work and may therefore contain defects or bugs inherent to this type of development.
For the above reason, the Work is provided under the Licence on an as is basis and without warranties of any kind concerning the Work, including without limitation merchantability, fitness for a particular purpose, absence of defects or errors, accuracy, non-infringement of intellectual property rights other than copyright as stated in Article 6 of this Licence.
This disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
8. Disclaimer of Liability
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
Except in the cases of wilful misconduct or damages directly caused to natural persons, the Licensor will in no event be liable for any direct or indirect, material or moral, damages of any kind, arising out of the Licence or of the use of the Work, including without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss of data or any commercial damage, even if the Licensor has been advised of the possibility of such damage. However, the Licensor will be liable under statutory product liability laws as far such laws apply to the Work.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
9. Additional agreements
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
While distributing the Work, You may choose to conclude an additional agreement, defining obligations or services consistent with this Licence. However, if accepting obligations, You may act only on your own behalf and on your sole responsibility, not on behalf of the original Licensor or any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against such Contributor by the fact You have accepted any warranty or additional liability.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
10. Acceptance of the Licence
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
The provisions of this Licence can be accepted by clicking on an icon I agree placed under the bottom of a window displaying the text of this Licence or by affirming consent in any other similar way, in accordance with the rules of applicable law. Clicking on that icon indicates your clear and irrevocable acceptance of this Licence and all of its terms and conditions.
Similarly, you irrevocably accept this Licence and all of its terms and conditions by exercising any rights granted to You by Article 2 of this Licence, such as the use of the Work, the creation by You of a Derivative Work or the Distribution or Communication by You of the Work or copies thereof.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
11. Information to the public
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
In case of any Distribution or Communication of the Work by means of electronic communication by You (for example, by offering to download the Work from a remote location) the distribution channel or media (for example, a website) must at least provide to the public the information requested by the applicable law regarding the Licensor, the Licence and the way it may be accessible, concluded, stored and reproduced by the Licensee.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
12. Termination of the Licence
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
The Licence and the rights granted hereunder will terminate automatically upon any breach by the Licensee of the terms of the Licence.
Such a termination will not terminate the licences of any person who has received the Work from the Licensee under the Licence, provided such persons remain in full compliance with the Licence.
NO WARRANTY
13. Miscellaneous
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the Work.
If any provision of the Licence is invalid or unenforceable under applicable law, this will not affect the validity or enforceability of the Licence as a whole. Such provision will be construed or reformed so as necessary to make it valid and enforceable.
The European Commission may publish other linguistic versions or new versions of this Licence or updated versions of the Appendix, so far this is required and reasonable, without reducing the scope of the rights granted by the Licence. New versions of the Licence will be published with a unique version number.
All linguistic versions of this Licence, approved by the European Commission, have identical value. Parties can take advantage of the linguistic version of their choice.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
14. Jurisdiction
END OF TERMS AND CONDITIONS
Without prejudice to specific agreement between parties,
- any litigation resulting from the interpretation of this License, arising between the European Union institutions, bodies, offices or agencies, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice of the European Union, as laid down in article 272 of the Treaty on the Functioning of the European Union,
- any litigation arising between other parties and resulting from the interpretation of this License, will be subject to the exclusive jurisdiction of the competent court where the Licensor resides or conducts its primary business.
How to Apply These Terms to Your New Programs
15. Applicable Law
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
Without prejudice to specific agreement between parties,
- this Licence shall be governed by the law of the European Union Member State where the Licensor has his seat, resides or has his registered office,
- this licence shall be governed by Belgian law if the Licensor has no seat, residence or registered office inside a European Union Member State.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
===
{description}
Copyright (C) {year} {fullname}
Appendix
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
Compatible Licences according to Article 5 EUPL are:
- GNU General Public License (GPL) v. 2, v. 3
- GNU Affero General Public License (AGPL) v. 3
- Open Software License (OSL) v. 2.1, v. 3.0
- Eclipse Public License (EPL) v. 1.0
- CeCILL v. 2.0, v. 2.1
- Mozilla Public Licence (MPL) v. 2
- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for works other than software
- European Union Public Licence (EUPL) v. 1.1, v. 1.2
- Québec Free and Open-Source Licence - Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+)
- The European Commission may update this Appendix to later versions of the above licences without producing a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the covered Source Code from exclusive appropriation.
- All other changes or additions to this Appendix require the production of a new EUPL version.

288
README.md
View File

@@ -1,161 +1,217 @@
<p align="center">
<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"></a>
<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"/></a>
<a href=https://travis-ci.org/pi-hole/pi-hole><img src="https://travis-ci.org/pi-hole/pi-hole.svg?branch=development"></a>
<a href="https://pi-hole.net"><img src="https://pi-hole.github.io/graphics/Vortex/Vortex_with_text.png" width="150" height="255" alt="Pi-hole"></a><br/>
<b>Network-wide ad blocking via your own Linux hardware</b><br/>
</p>
<p align="center">
<a href=https://discourse.pi-hole.net><img src="https://assets.pi-hole.net/static/Vortex_text.png" width=210></a>
</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 multi-platform, network-wide ad blocker
- **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
- **Responsive**: seamlessly speeds up the feel of everyday browsing by caching DNS queries
- **Lightweight**: runs smoothly with [minimal hardware and software requirements](https://discourse.pi-hole.net/t/hardware-software-requirements/273)
- **Robust**: a command line interface that is quality assured for interoperability
- **Insightful**: a beautiful responsive Web Interface dashboard to view and control your Pi-hole
- **Versatile**: can optionally function as a [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), ensuring *all* your devices are protected automatically
- **Scalable**: [capable of handling hundreds of millions of queries](https://pi-hole.net/2017/05/24/how-much-traffic-can-pi-hole-handle/) when installed on server-grade hardware
- **Modern**: blocks ads over both IPv4 and IPv6
- **Free**: open source software which helps ensure _you_ are the sole person in control of your privacy
Block ads for **all** your devices _without_ the need to install client-side software. The Pi-hole blocks ads at the DNS-level, so all your devices are protected.
-----
<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>
- Web Browsers
- Cell Phones
- Smart TV's
- Internet-connected home automation
- Anything that communicates with the Internet
## One-Step Automated Install
Those who want to get started quickly and conveniently, may install Pi-hole using the following command:
<p align="center">
<a href=http://www.digitalocean.com/?refcode=344d234950e1><img src="https://assets.pi-hole.net/static/DOHostingSlug.png"></a>
</p>
#### `curl -sSL https://install.pi-hole.net | bash`
## Your Support Still Matters
Digital Ocean helps with our infrastructure, but our developers are all volunteers so *your donations help keep us innovating*. Sending a donation using our links below helps us offset a portion of our monthly costs.
- ![Paypal](https://assets.pi-hole.net/static/paypal.png) [Donate via PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY)
- ![Bitcoin](https://assets.pi-hole.net/static/Bitcoin.png) Bitcoin Address: 1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL
### One-Step Automated Install
1. Install a [supported operating system](https://discourse.pi-hole.net/t/hardware-software-requirements/273/1)
2. Run the command below (it downloads [this script](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) in case you want to read over it first!)
### `curl -sSL https://install.pi-hole.net | bash`
#### Alternative Semi-Automated Install Methods
_If you wish to read over the script before running it, run `nano basic-install.sh` to open the file in a text viewer._
##### Clone our repository and run the automated installer from your device.
## 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:
### Method 1: Clone our repository and run
```
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd Pi-hole/automated_installer/
bash basic-install.sh
cd "Pi-hole/automated install/"
sudo bash basic-install.sh
```
##### Or
```bash
### Method 2: Manually download the installer and run
```
wget -O basic-install.sh https://install.pi-hole.net
bash basic-install.sh
sudo bash basic-install.sh
```
Once installed, [configure your router to have **DHCP clients use the Pi 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) and then any device that connects to your network will have ads blocked without any further configuration. Alternatively, you can manually set each device to [use the Raspberry Pi as its DNS server](http://pi-hole.net/faq/how-do-i-use-the-pi-hole-as-my-dns-server/).
## Post-install: Make your network take advantage of Pi-hole
## Installing the Pi-hole (Click to Watch!)
<p align="center">
<a href=https://www.youtube.com/watch?v=TzFLJqUeirA><img src="https://assets.pi-hole.net/static/global.png"></a>
</p>
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.
## Would you like to know more?
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).
**Watch the 60-second video below to get a quick overview**
<p align="center">
<a href=https://youtu.be/9Eti3xibiho><img src="https://assets.pi-hole.net/static/blackhole_web.png"></a>
</p>
As a last resort, you can always manually set each device to use Pi-hole as their DNS server.
## Get Help Or Connect With Us On The Web
-----
- [Users Forum](https://discourse.pi-hole.net/)
- [FAQs](https://discourse.pi-hole.net/c/faqs)
- [Wiki](https://github.com/pi-hole/pi-hole/wiki)
- ![Twitter](https://assets.pi-hole.net/static/twitter.png) [Tweet @The_Pi_Hole](https://twitter.com/The_Pi_Hole)
- ![Reddit](https://assets.pi-hole.net/static/reddit.png) [Reddit /r/pihole](https://www.reddit.com/r/pihole/)
- ![YouTube](https://assets.pi-hole.net/static/youtube.png) [Pi-hole channel](https://www.youtube.com/channel/UCT5kq9w0wSjogzJb81C9U0w)
- [![Join the chat at https://gitter.im/pi-hole/pi-hole](https://badges.gitter.im/pi-hole/pi-hole.svg)](https://gitter.im/pi-hole/pi-hole?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## 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.
## Technical Details
Make no mistake: **your support is absolutely vital to help keep us innovating!**
The Pi-hole is an **advertising-aware DNS/Web server**. If an ad domain is queried, a small Web page or GIF is delivered in place of the advertisement. You can also [replace ads with any image you want](http://pi-hole.net/faq/is-it-possible-to-change-the-blank-page-that-takes-place-of-the-ads-to-something-else/) since it is just a simple Webpage taking place of the ads.
### Donations
Sending a donation using our links below is **extremely helpful** in offsetting a portion of our monthly expenses:
### Gravity
&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>
The [gravity.sh](https://github.com/pi-hole/pi-hole/blob/master/gravity.sh) does most of the magic. The script pulls in ad domains from many sources and compiles them into a single list of [over 1.6 million entries](http://jacobsalmela.com/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0) (if you decide to use the [mahakala list](https://github.com/pi-hole/pi-hole/commit/963eacfe0537a7abddf30441c754c67ca1e40965)). This script is controlled by the `pihole` command. Please run `pihole -h` to see what commands can be run via `pihole`.
### 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/)
- Spreading the word about our software, and how you have benefited from it
### Contributing via GitHub
We welcome _everyone_ to contribute to issue reports, suggest new features, and create pull requests.
#### Other Operating Systems
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.
The automated install is only for a clean install of a Debian family or Fedora based system, such as the Raspberry Pi. However, this script will work for most UNIX-like systems, some with some slight **modifications** that we can help you work through. If you can install `dnsmasq` and a Webserver, it should work OK. If there are other platforms you'd like supported, let us know.
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.
### Web Interface
### Presentations about Pi-hole
Word-of-mouth continues to help our project grow immensely, and so we are helping make this easier for people.
The [Web interface](https://github.com/pi-hole/AdminLTE#pi-hole-admin-dashboard) will be installed automatically so you can view stats and change settings. You can find it at:
If you are going to be presenting Pi-hole at a conference, meetup or even a school project, [get in touch with us](https://pi-hole.net/2017/05/17/giving-a-presentation-on-pi-hole-contact-us-first-for-some-goodies-and-support/) so we can hook you up with free swag to hand out to your audience!
`http://192.168.1.x/admin/index.php` or `http://pi.hole/admin`
-----
![Pi-hole Advanced Stats Dashboard](https://assets.pi-hole.net/static/dashboard.png)
## Getting in touch with us
While we are primarily reachable on our <a href="https://discourse.pi-hole.net/">Discourse User Forum</a>, we can also be found on a variety of social media outlets. **Please be sure to check the FAQ's** before starting a new discussion, as we do not have the spare time to reply to every request for assistance.
### Whitelist and blacklist
<ul>
<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>
<li><a href="https://twitter.com/The_Pi_Hole">Twitter</a></li>
<li><a href="https://www.youtube.com/channel/UCT5kq9w0wSjogzJb81C9U0w">YouTube</a></li>
<li><a href="https://www.facebook.com/ThePiHole/">Facebook</a></li>
</ul>
Domains can be whitelisted and blacklisted using either the web interface or the command line. See [the wiki page](https://github.com/pi-hole/pi-hole/wiki/Whitelisting-and-Blacklisting) for more details
<p align="center">
<a href=https://github.com/pi-hole/pi-hole/wiki/Whitelisting-and-Blacklisting><img src="https://assets.pi-hole.net/static/controlpanel.png"></a>
</p>
-----
## API
## 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`.
A basic read-only API can be accessed at `/admin/api.php`. It returns the following JSON:
<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>
``` json
{
"domains_being_blocked": "136708",
"dns_queries_today": "18108",
"ads_blocked_today": "14648",
"ads_percentage_today": "80.89"
}
```
Some notable features include:
* [Whitelisting, Blacklisting and Wildcards](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#whitelisting-blacklisting-and-wildcards)
* [Debugging utility](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#debugger)
* [Viewing the live log file](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#tail)
* [Real-time Statistics via `ssh`](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#chronometer) or [your TFT LCD screen](http://www.amazon.com/exec/obidos/ASIN/B00ID39LM4/pihole09-20)
* [Updating Ad Lists](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#gravity)
* [Querying Ad Lists for blocked domains](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#query)
* [Enabling and Disabling Pi-hole](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown#enable--disable)
* ... and *many* more!
The same output can be achieved on the CLI by running `chronometer.sh -j`
You can read our [Core Feature Breakdown](https://github.com/pi-hole/pi-hole/wiki/Core-Function-Breakdown), as well as read up on [example usage](https://discourse.pi-hole.net/t/the-pihole-command-with-examples/738) for more information.
## Real-time Statistics
### 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!
You can view [real-time stats](http://pi-hole.net/faq/install-the-real-time-lcd-monitor-chronometer/) via `ssh` or on an [2.8" LCD screen](http://amzn.to/1P0q1Fj). This is accomplished via [`chronometer.sh`](https://github.com/pi-hole/pi-hole/blob/master/advanced/Scripts/chronometer.sh). ![Pi-hole LCD](http://i.imgur.com/nBEqycp.jpg)
<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>
Some notable features include:
* Mobile friendly interface
* Password protection
* 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
* 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)
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*!
Some of the statistics you can integrate include:
* Total number of domains being blocked
* Total number of DNS queries today
* Total number of ads blocked today
* Percentage of ads blocked
* Unique domains
* Queries forwarded (to your chosen upstream DNS server)
* Queries cached
* Unique clients
The API can be accessed via [`telnet`](https://github.com/pi-hole/FTL), the Web (`admin/api.php`) and Command Line (`pihole -c -j`). You can out find [more details over here](https://discourse.pi-hole.net/t/pi-hole-api/1863).
-----
## The Origin Of Pi-hole
Pi-hole being a **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
* [`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.
-----
## Pi-hole Projects
- [Pi-hole stats in your Mac's menu bar](https://getbitbar.com/plugins/Network/pi-hole.1m.py)
- [Get LED alerts for each blocked ad](http://thetimmy.silvernight.org/pages/endisbutton/)
- [Pi-hole on Ubuntu 14.04 on VirtualBox](http://hbalagtas.blogspot.com/2016/02/adblocking-with-pi-hole-and-ubuntu-1404.html)
- [Docker Pi-hole container (x86 and ARM)](https://hub.docker.com/r/diginc/pi-hole/)
- [Splunk: Pi-hole Visualizser](https://splunkbase.splunk.com/app/3023/)
- [Pi-hole Chrome extension](https://chrome.google.com/webstore/detail/pi-hole-list-editor/hlnoeoejkllgkjbnnnhfolapllcnaglh) ([open source](https://github.com/packtloss/pihole-extension))
- [Go Bananas for CHiP-hole ad blocking](https://www.hackster.io/jacobsalmela/chip-hole-network-wide-ad-blocker-98e037)
- [Sky-Hole](http://dlaa.me/blog/post/skyhole)
- [Pi-hole in the Cloud!](http://blog.codybunch.com/2015/07/28/Pi-Hole-in-the-cloud/)
- [unRaid-hole](https://github.com/spants/unraidtemplates/blob/master/Spants/unRaid-hole.xml#L13)--[Repo and more info](http://lime-technology.com/forum/index.php?PHPSESSID=c0eae3e5ef7e521f7866034a3336489d&topic=38486.0)
- [Pi-hole on/off button](http://thetimmy.silvernight.org/pages/endisbutton/)
- [Minibian Pi-hole](http://munkjensen.net/wiki/index.php/See_my_Pi-Hole#Minibian_Pi-hole)
- [Windows Tray Stat Application](https://github.com/goldbattle/copernicus)
- [Let your blink1 device blink when Pi-hole filters ads](https://gist.github.com/elpatron68/ec0b4c582e5abf604885ac1e068d233f)
- [Pi-Hole Prometheus exporter](https://github.com/nlamirault/pihole_exporter) : a [Prometheus](https://prometheus.io/) exporter for Pi-Hole
- [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 Pi-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/)
- [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)
- [Windows DNS Swapper](https://github.com/roots84/DNS-Swapper), see [#1400](https://github.com/pi-hole/pi-hole/issues/1400)
-----
## Coverage
- [Adafruit livestream install](https://www.youtube.com/watch?v=eg4u2j1HYlI)
- [TekThing: 5 fun, easy projects for a Raspberry Pi](https://youtu.be/QwrKlyC2kdM?t=1m42s)
- [Pi-hole on Adafruit's blog](https://blog.adafruit.com/2016/03/04/pi-hole-is-a-black-hole-for-internet-ads-piday-raspberrypi-raspberry_pi/)
- [The Defrag Show - MSDN/Channel 9](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)
- [MacObserver Podcast 585](http://www.macobserver.com/tmo/podcast/macgeekgab-585)
- [Medium: Block All Ads For $53](https://medium.com/@robleathern/block-ads-on-all-home-devices-for-53-18-a5f1ec139693#.gj1xpgr5d)
- [MakeUseOf: Adblock Everywhere, The Pi-hole Way](http://www.makeuseof.com/tag/adblock-everywhere-raspberry-pi-hole-way/)
- [Lifehacker: Turn Your Pi Into An Ad Blocker With A Single Command](http://lifehacker.com/turn-a-raspberry-pi-into-an-ad-blocker-with-a-single-co-1686093533)!
- [Pi-hole on TekThing](https://youtu.be/8Co59HU2gY0?t=2m)
- [Pi-hole on Security Now! Podcast](http://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s)
- [Foolish Tech Show](https://youtu.be/bYyena0I9yc?t=2m4s)
- [Pi-hole on Ubuntu](http://www.boyter.org/2015/12/pi-hole-ubuntu-14-04/)
- [Catchpoint: iOS 9 Ad Blocking](http://blog.catchpoint.com/2015/09/14/ad-blocking-apple/)
- [Build an Ad-Blocker for less than 10$ with Orange-Pi](http://www.devacron.com/orangepi-zero-as-an-ad-block-server-with-pi-hole/)
- [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)

View File

@@ -1,53 +1,23 @@
## Pi-hole ad-list default sources. Updated 29/10/2016 #########################
# #
# To make changes to this file: #
# 1. run `cp /etc/pihole/adlists.default /etc/pihole/adlists.list` #
# 2. run `nano /etc/pihole/adlists.list` #
# 3. Uncomment or comment any of the below lists #
# #
# Know of any other lists? Feel free to let us know about them, or add them #
# to this file! #
################################################################################
# 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
# Other lists we consider safe:
http://mirror1.malwaredomains.com/files/justdomains
##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 list. Updated frequently, but has been known to block legitimate sites.
##Hosts-file.net
https://hosts-file.net/ad_servers.txt
# Mahakala list. Has been known to block legitimage domains including the entire .com range.
# Warning: Due to the sheer size of this list, the web admin console will be unresponsive.
#http://adblock.mahakala.is/
# ADZHOSTS list. Has been known to block legitimate domains
#http://pilotfiber.dl.sourceforge.net/project/adzhosts/HOSTS.txt
# Windows 10 telemetry list
#https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win10/spy.txt
# Securemecca.com list - Also blocks "adult" sites (pornography/gambling etc)
#http://securemecca.com/Downloads/hosts.txt
# Quidsup's tracker list
#https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt
# Block the BBC News website Breaking News banner
#https://raw.githubusercontent.com/BreakingTheNews/BreakingTheNews.github.io/master/hosts
# Untested Lists:
#https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt
#https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt
#http://malwaredomains.lehigh.edu/files/domains.txt
# Following two lists should be used simultaneously: (readme https://github.com/notracking/hosts-blocklists/)
#https://raw.github.com/notracking/hosts-blocklists/master/hostnames.txt
#https://raw.github.com/notracking/hosts-blocklists/master/domains.txt
# Combination of serveral host files on the internet (warning some facebook domains are also blocked but you can go to facebook.com). See https://github.com/mat1th/Dns-add-block for more information.
#https://raw.githubusercontent.com/mat1th/Dns-add-block/master/hosts

View File

@@ -21,10 +21,13 @@
###############################################################################
addn-hosts=/etc/pihole/gravity.list
addn-hosts=/etc/pihole/black.list
addn-hosts=/etc/pihole/local.list
domain-needed
localise-queries
bogus-priv
no-resolv
@@ -36,9 +39,9 @@ interface=@INT@
cache-size=10000
log-queries
log-queries=extra
log-facility=/var/log/pihole.log
local-ttl=300
local-ttl=2
log-async

View File

@@ -0,0 +1,49 @@
# Determine if terminal is capable of showing colours
if [[ -t 1 ]] && [[ $(tput colors) -ge 8 ]]; then
# Bold and underline may not show up on all clients
# If something MUST be emphasised, use both
COL_BOLD=''
COL_ULINE=''
COL_NC=''
COL_GRAY=''
COL_RED=''
COL_GREEN=''
COL_YELLOW=''
COL_BLUE=''
COL_PURPLE=''
COL_CYAN=''
else
# Provide empty variables for `set -u`
COL_BOLD=""
COL_ULINE=""
COL_NC=""
COL_GRAY=""
COL_RED=""
COL_GREEN=""
COL_YELLOW=""
COL_BLUE=""
COL_PURPLE=""
COL_CYAN=""
fi
# Deprecated variables
COL_WHITE="${COL_BOLD}"
COL_BLACK="${COL_NC}"
COL_LIGHT_BLUE="${COL_BLUE}"
COL_LIGHT_GREEN="${COL_GREEN}"
COL_LIGHT_CYAN="${COL_CYAN}"
COL_LIGHT_RED="${COL_RED}"
COL_URG_RED="${COL_RED}${COL_BOLD}${COL_ULINE}"
COL_LIGHT_PURPLE="${COL_PURPLE}"
COL_BROWN="${COL_YELLOW}"
COL_LIGHT_GRAY="${COL_GRAY}"
COL_DARK_GRAY="${COL_GRAY}"
TICK="[${COL_GREEN}✓${COL_NC}]"
CROSS="[${COL_RED}✗${COL_NC}]"
INFO="[i]"
QST="[?]"
DONE="${COL_GREEN} done!${COL_NC}"
OVER="\\r"

View File

@@ -1,135 +1,573 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC1091
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Calculates stats and displays to an LCD
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
LC_NUMERIC=C
# Retrieve stats from FTL engine
pihole-FTL() {
ftl_port=$(cat /var/run/pihole-FTL.port 2> /dev/null)
if [[ -n "$ftl_port" ]]; then
# Open connection to FTL
exec 3<>"/dev/tcp/127.0.0.1/$ftl_port"
#Functions##############################################################################################################
piLog="/var/log/pihole.log"
gravity="/etc/pihole/gravity.list"
# Test if connection is open
if { "true" >&3; } 2> /dev/null; then
# Send command to FTL
echo -e ">$1" >&3
. /etc/pihole/setupVars.conf
# Read input
read -r -t 1 LINE <&3
until [[ ! $? ]] || [[ "$LINE" == *"EOM"* ]]; do
echo "$LINE" >&1
read -r -t 1 LINE <&3
done
CalcBlockedDomains() {
if [ -e "${gravity}" ]; then
# if BOTH IPV4 and IPV6 are in use, then we need to divide total domains by 2.
if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]]; then
blockedDomainsTotal=$(wc -l /etc/pihole/gravity.list | awk '{print $1/2}')
else
# only one is set.
blockedDomainsTotal=$(wc -l /etc/pihole/gravity.list | awk '{print $1}')
fi
else
blockedDomainsTotal="Err."
fi
# Close connection
exec 3>&-
exec 3<&-
fi
else
echo "0"
fi
}
CalcQueriesToday() {
if [ -e "${piLog}" ]; then
queriesToday=$(awk '/query\[/ {print $6}' < "${piLog}" | wc -l)
else
queriesToday="Err."
fi
# Print spaces to align right-side additional text
printFunc() {
local text_last
title="$1"
title_len="${#title}"
text_main="$2"
text_main_nocol="$text_main"
if [[ "${text_main:0:1}" == "" ]]; then
text_main_nocol=$(sed 's/\[[0-9;]\{1,5\}m//g' <<< "$text_main")
fi
text_main_len="${#text_main_nocol}"
text_addn="$3"
if [[ "$text_addn" == "last" ]]; then
text_addn=""
text_last="true"
fi
# If there is additional text, define max length of text_main
if [[ -n "$text_addn" ]]; then
case "$scr_cols" in
[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-4]) text_main_max_len="9";;
4[5-9]) text_main_max_len="14";;
*) text_main_max_len="19";;
esac
fi
[[ -z "$text_addn" ]] && text_main_max_len="$(( scr_cols - title_len ))"
# Remove excess characters from main text
if [[ "$text_main_len" -gt "$text_main_max_len" ]]; then
# Trim text without colours
text_main_trim="${text_main_nocol:0:$text_main_max_len}"
# Replace with trimmed text
text_main="${text_main/$text_main_nocol/$text_main_trim}"
fi
# Determine amount of spaces for each line
if [[ -n "$text_last" ]]; then
# Move cursor to end of screen
spc_num=$(( scr_cols - ( title_len + text_main_len ) ))
else
spc_num=$(( text_main_max_len - text_main_len ))
fi
[[ "$spc_num" -le 0 ]] && spc_num="0"
spc=$(printf "%${spc_num}s")
#spc="${spc// /.}" # Debug: Visualise spaces
printf "%s%s$spc" "$title" "$text_main"
if [[ -n "$text_addn" ]]; then
printf "%s(%s)%s\\n" "$COL_NC$COL_DARK_GRAY" "$text_addn" "$COL_NC"
else
# Do not print trailing newline on final line
[[ -z "$text_last" ]] && printf "%s\\n" "$COL_NC"
fi
}
CalcblockedToday() {
if [ -e "${piLog}" ] && [ -e "${gravity}" ];then
blockedToday=$(awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' < "${piLog}" | wc -l)
else
blockedToday="Err."
fi
# Perform on first Chrono run (not for JSON formatted string)
get_init_stats() {
calcFunc(){ awk "BEGIN {print $*}" 2> /dev/null; }
# Convert bytes to human-readable format
hrBytes() {
awk '{
num=$1;
if(num==0) {
print "0 B"
} else {
xxx=(num<0?-num:num)
sss=(num<0?-1:1)
split("B KB MB GB TB PB",type)
for(i=5;yyy < 1;i--) {
yyy=xxx / (2^(10*i))
}
printf "%.0f " type[i+2], yyy*sss
}
}' <<< "$1";
}
# Convert seconds to human-readable format
hrSecs() {
day=$(( $1/60/60/24 )); hrs=$(( $1/3600%24 ))
mins=$(( ($1%3600)/60 )); secs=$(( $1%60 ))
[[ "$day" -ge "2" ]] && plu="s"
[[ "$day" -ge "1" ]] && days="$day day${plu}, " || days=""
printf "%s%02d:%02d:%02d\\n" "$days" "$hrs" "$mins" "$secs"
}
# Set Colour Codes
coltable="/opt/pihole/COL_TABLE"
if [[ -f "${coltable}" ]]; then
source ${coltable}
else
COL_NC=""
COL_DARK_GRAY=""
COL_LIGHT_GREEN=""
COL_LIGHT_BLUE=""
COL_LIGHT_RED=""
COL_YELLOW=""
COL_LIGHT_RED=""
COL_URG_RED=""
fi
# Get RPi throttle state (RPi 3B only) & model number, or OS distro info
if command -v vcgencmd &> /dev/null; then
local sys_throttle_raw
local sys_rev_raw
sys_throttle_raw=$(vgt=$(sudo vcgencmd get_throttled); echo "${vgt##*x}")
# Active Throttle Notice: http://bit.ly/2gnunOo
if [[ "$sys_throttle_raw" != "0" ]]; then
case "$sys_throttle_raw" in
*0001) thr_type="${COL_YELLOW}Under Voltage";;
*0002) thr_type="${COL_LIGHT_BLUE}Arm Freq Cap";;
*0003) thr_type="${COL_YELLOW}UV${COL_DARK_GRAY},${COL_NC} ${COL_LIGHT_BLUE}AFC";;
*0004) thr_type="${COL_LIGHT_RED}Throttled";;
*0005) thr_type="${COL_YELLOW}UV${COL_DARK_GRAY},${COL_NC} ${COL_LIGHT_RED}TT";;
*0006) thr_type="${COL_LIGHT_BLUE}AFC${COL_DARK_GRAY},${COL_NC} ${COL_LIGHT_RED}TT";;
*0007) thr_type="${COL_YELLOW}UV${COL_DARK_GRAY},${COL_NC} ${COL_LIGHT_BLUE}AFC${COL_DARK_GRAY},${COL_NC} ${COL_LIGHT_RED}TT";;
esac
[[ -n "$thr_type" ]] && sys_throttle="$thr_type${COL_DARK_GRAY}"
fi
sys_rev_raw=$(awk '/Revision/ {print $3}' < /proc/cpuinfo)
case "$sys_rev_raw" in
000[2-6]) sys_model=" 1, Model B";; # 256MB
000[7-9]) sys_model=" 1, Model A";; # 256MB
000d|000e|000f) sys_model=" 1, Model B";; # 512MB
0010|0013) sys_model=" 1, Model B+";; # 512MB
0012|0015) sys_model=" 1, Model A+";; # 256MB
a0104[0-1]|a21041|a22042) sys_model=" 2, Model B";; # 1GB
900021) sys_model=" 1, Model A+";; # 512MB
900032) sys_model=" 1, Model B+";; # 512MB
90009[2-3]|920093) sys_model=" Zero";; # 512MB
9000c1) sys_model=" Zero W";; # 512MB
a02082|a[2-3]2082) sys_model=" 3, Model B";; # 1GB
*) sys_model="";;
esac
sys_type="Raspberry Pi$sys_model"
else
source "/etc/os-release"
CODENAME=$(sed 's/[()]//g' <<< "${VERSION/* /}")
sys_type="${NAME/ */} ${CODENAME^} $VERSION_ID"
fi
# Get core count
sys_cores=$(grep -c "^processor" /proc/cpuinfo)
# Test existence of clock speed file for ARM CPU
if [[ -f "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" ]]; then
scaling_freq_file="/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
fi
# Test existence of temperature file
if [[ -f "/sys/class/thermal/thermal_zone0/temp" ]]; then
temp_file="/sys/class/thermal/thermal_zone0/temp"
elif [[ -f "/sys/class/hwmon/hwmon0/temp1_input" ]]; then
temp_file="/sys/class/hwmon/hwmon0/temp1_input"
else
temp_file=""
fi
# Test existence of setupVars config
if [[ -f "/etc/pihole/setupVars.conf" ]]; then
setupVars="/etc/pihole/setupVars.conf"
fi
}
CalcPercentBlockedToday() {
if [ "${queriesToday}" != "Err." ] && [ "${blockedToday}" != "Err." ]; then
if [ "${queriesToday}" != 0 ]; then #Fixes divide by zero error :)
#scale 2 rounds the number down, so we'll do scale 4 and then trim the last 2 zeros
percentBlockedToday=$(echo "scale=4; ${blockedToday}/${queriesToday}*100" | bc)
percentBlockedToday=$(sed 's/.\{2\}$//' <<< "${percentBlockedToday}")
else
percentBlockedToday=0
fi
fi
get_sys_stats() {
local ph_ver_raw
local cpu_raw
local ram_raw
local disk_raw
# Update every 12 refreshes (Def: every 60s)
count=$((count+1))
if [[ "$count" == "1" ]] || (( "$count" % 12 == 0 )); then
# Do not source setupVars if file does not exist
[[ -n "$setupVars" ]] && source "$setupVars"
mapfile -t ph_ver_raw < <(pihole -v -c 2> /dev/null | sed -n 's/^.* v/v/p')
if [[ -n "${ph_ver_raw[0]}" ]]; then
ph_core_ver="${ph_ver_raw[0]}"
ph_lte_ver="${ph_ver_raw[1]}"
ph_ftl_ver="${ph_ver_raw[2]}"
else
ph_core_ver="-1"
fi
sys_name=$(hostname)
[[ -n "$TEMPERATUREUNIT" ]] && temp_unit="$TEMPERATUREUNIT" || temp_unit="c"
# Get storage stats for partition mounted on /
read -r -a disk_raw <<< "$(df -B1 / 2> /dev/null | awk 'END{ print $3,$2,$5 }')"
disk_used="${disk_raw[0]}"
disk_total="${disk_raw[1]}"
disk_perc="${disk_raw[2]}"
net_gateway=$(route -n | awk '$4 == "UG" {print $2;exit}')
# Get DHCP stats, if feature is enabled
if [[ "$DHCP_ACTIVE" == "true" ]]; then
ph_dhcp_max=$(( ${DHCP_END##*.} - ${DHCP_START##*.} + 1 ))
fi
# Get DNS server count
dns_count="0"
[[ -n "${PIHOLE_DNS_1}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_2}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_3}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_4}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_5}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_6}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_7}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_8}" ]] && dns_count=$((dns_count+1))
[[ -n "${PIHOLE_DNS_9}" ]] && dns_count="$dns_count+"
fi
# Get screen size
read -r -a scr_size <<< "$(stty size 2>/dev/null || echo 24 80)"
scr_lines="${scr_size[0]}"
scr_cols="${scr_size[1]}"
# Determine Chronometer size behaviour
if [[ "$scr_cols" -ge 58 ]]; then
chrono_width="large"
elif [[ "$scr_cols" -gt 40 ]]; then
chrono_width="medium"
else
chrono_width="small"
fi
# Determine max length of divider string
scr_line_len=$(( scr_cols - 2 ))
[[ "$scr_line_len" -ge 58 ]] && scr_line_len="58"
scr_line_str=$(printf "%${scr_line_len}s")
scr_line_str="${scr_line_str// /—}"
sys_uptime=$(hrSecs "$(cut -d. -f1 /proc/uptime)")
sys_loadavg=$(cut -d " " -f1,2,3 /proc/loadavg)
# Get CPU usage, only counting processes over 1% as active
# shellcheck disable=SC2009
cpu_raw=$(ps -eo pcpu,rss --no-headers | grep -E -v " 0")
cpu_tasks=$(wc -l <<< "$cpu_raw")
cpu_taskact=$(sed -r "/(^ 0.)/d" <<< "$cpu_raw" | wc -l)
cpu_perc=$(awk '{sum+=$1} END {printf "%.0f\n", sum/'"$sys_cores"'}' <<< "$cpu_raw")
# Get CPU clock speed
if [[ -n "$scaling_freq_file" ]]; then
cpu_mhz=$(( $(< /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq) / 1000 ))
else
cpu_mhz=$(lscpu | awk -F ":" '/MHz/ {print $2;exit}')
cpu_mhz=$(printf "%.0f" "${cpu_mhz//[[:space:]]/}")
fi
# Determine whether to display CPU clock speed as MHz or GHz
if [[ -n "$cpu_mhz" ]]; then
[[ "$cpu_mhz" -le "999" ]] && cpu_freq="$cpu_mhz MHz" || cpu_freq="$(printf "%.1f" $(calcFunc "$cpu_mhz"/1000)) GHz"
[[ "${cpu_freq}" == *".0"* ]] && cpu_freq="${cpu_freq/.0/}"
fi
# Determine colour for temperature
if [[ -n "$temp_file" ]]; then
if [[ "$temp_unit" == "C" ]]; then
cpu_temp=$(printf "%.0fc\\n" "$(calcFunc "$(< $temp_file) / 1000")")
case "${cpu_temp::-1}" in
-*|[0-9]|[1-3][0-9]) cpu_col="$COL_LIGHT_BLUE";;
4[0-9]) cpu_col="";;
5[0-9]) cpu_col="$COL_YELLOW";;
6[0-9]) cpu_col="$COL_LIGHT_RED";;
*) cpu_col="$COL_URG_RED";;
esac
# $COL_NC$COL_DARK_GRAY is needed for $COL_URG_RED
cpu_temp_str=" @ $cpu_col$cpu_temp$COL_NC$COL_DARK_GRAY"
elif [[ "$temp_unit" == "F" ]]; then
cpu_temp=$(printf "%.0ff\\n" "$(calcFunc "($(< $temp_file) / 1000) * 9 / 5 + 32")")
case "${cpu_temp::-1}" in
-*|[0-9]|[0-9][0-9]) cpu_col="$COL_LIGHT_BLUE";;
1[0-1][0-9]) cpu_col="";;
1[2-3][0-9]) cpu_col="$COL_YELLOW";;
1[4-5][0-9]) cpu_col="$COL_LIGHT_RED";;
*) cpu_col="$COL_URG_RED";;
esac
cpu_temp_str=" @ $cpu_col$cpu_temp$COL_NC$COL_DARK_GRAY"
else
cpu_temp_str=$(printf " @ %.0fk\\n" "$(calcFunc "($(< $temp_file) / 1000) + 273.15")")
fi
else
cpu_temp_str=""
fi
read -r -a ram_raw <<< "$(awk '/MemTotal:/{total=$2} /MemFree:/{free=$2} /Buffers:/{buffers=$2} /^Cached:/{cached=$2} END {printf "%.0f %.0f %.0f", (total-free-buffers-cached)*100/total, (total-free-buffers-cached)*1024, total*1024}' /proc/meminfo)"
ram_perc="${ram_raw[0]}"
ram_used="${ram_raw[1]}"
ram_total="${ram_raw[2]}"
if [[ "$(pihole status web 2> /dev/null)" == "1" ]]; then
ph_status="${COL_LIGHT_GREEN}Active"
else
ph_status="${COL_LIGHT_RED}Offline"
fi
if [[ "$DHCP_ACTIVE" == "true" ]]; then
local ph_dhcp_range
ph_dhcp_range=$(seq -s "|" -f "${DHCP_START%.*}.%g" "${DHCP_START##*.}" "${DHCP_END##*.}")
# Count dynamic leases from available range, and not static leases
ph_dhcp_num=$(grep -cE "$ph_dhcp_range" "/etc/pihole/dhcp.leases")
ph_dhcp_percent=$(( ph_dhcp_num * 100 / ph_dhcp_max ))
fi
}
outputJSON() {
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
get_ftl_stats() {
local stats_raw
CalcBlockedDomains
mapfile -t stats_raw < <(pihole-FTL "stats")
domains_being_blocked_raw="${stats_raw[0]#* }"
dns_queries_today_raw="${stats_raw[1]#* }"
ads_blocked_today_raw="${stats_raw[2]#* }"
ads_percentage_today_raw="${stats_raw[3]#* }"
queries_forwarded_raw="${stats_raw[5]#* }"
queries_cached_raw="${stats_raw[6]#* }"
printf '{"domains_being_blocked":"%s","dns_queries_today":"%s","ads_blocked_today":"%s","ads_percentage_today":"%s"}\n' "$blockedDomainsTotal" "$queriesToday" "$blockedToday" "$percentBlockedToday"
# Only retrieve these stats when not called from jsonFunc
if [[ -z "$1" ]]; then
local top_ad_raw
local top_domain_raw
local top_client_raw
domains_being_blocked=$(printf "%.0f\\n" "${domains_being_blocked_raw}" 2> /dev/null)
dns_queries_today=$(printf "%.0f\\n" "${dns_queries_today_raw}")
ads_blocked_today=$(printf "%.0f\\n" "${ads_blocked_today_raw}")
ads_percentage_today=$(printf "%'.0f\\n" "${ads_percentage_today_raw}")
queries_cached_percentage=$(printf "%.0f\\n" "$(calcFunc "$queries_cached_raw * 100 / ( $queries_forwarded_raw + $queries_cached_raw )")")
recent_blocked=$(pihole-FTL recentBlocked)
read -r -a top_ad_raw <<< "$(pihole-FTL "top-ads (1)")"
read -r -a top_domain_raw <<< "$(pihole-FTL "top-domains (1)")"
read -r -a top_client_raw <<< "$(pihole-FTL "top-clients (1)")"
top_ad="${top_ad_raw[2]}"
top_domain="${top_domain_raw[2]}"
if [[ "${top_client_raw[3]}" ]]; then
top_client="${top_client_raw[3]}"
else
top_client="${top_client_raw[2]}"
fi
fi
}
normalChrono() {
for (( ; ; )); do
clear
# Displays a colorful Pi-hole logo
echo " ___ _ _ _"
echo "| _ (_)___| |_ ___| |___"
echo "| _/ |___| ' \/ _ \ / -_)"
echo "|_| |_| |_||_\___/_\___|"
echo ""
echo " ${IPV4_ADDRESS}"
echo ""
uptime | cut -d' ' -f11-
#uptime -p #Doesn't work on all versions of uptime
uptime | awk -F'( |,|:)+' '{if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6;h=$8;m=$9} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes."}'
echo "-------------------------------"
# Uncomment to continually read the log file and display the current domain being blocked
#tail -f /var/log/pihole.log | awk '/\/etc\/pihole\/gravity.list/ {if ($7 != "address" && $7 != "name" && $7 != "/etc/pihole/gravity.list") print $7; else;}'
get_strings() {
# Expand or contract strings depending on screen size
if [[ "$chrono_width" == "large" ]]; then
phc_str=" ${COL_DARK_GRAY}Core"
lte_str=" ${COL_DARK_GRAY}Web"
ftl_str=" ${COL_DARK_GRAY}FTL"
api_str="${COL_LIGHT_RED}API Offline"
#uncomment next 4 lines to use original query count calculation
#today=$(date "+%b %e")
#todaysQueryCount=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ {print $7}' | wc -l)
#todaysQueryCountV4=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[A\]/ {print $7}' | wc -l)
#todaysQueryCountV6=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[AAAA\]/ {print $7}' | wc -l)
host_info="$sys_type"
sys_info="$sys_throttle"
sys_info2="Active: $cpu_taskact of $cpu_tasks tasks"
used_str="Used: "
leased_str="Leased: "
domains_being_blocked=$(printf "%'.0f" "$domains_being_blocked")
ads_blocked_today=$(printf "%'.0f" "$ads_blocked_today")
dns_queries_today=$(printf "%'.0f" "$dns_queries_today")
ph_info="Blocking: $domains_being_blocked sites"
total_str="Total: "
else
phc_str=" ${COL_DARK_GRAY}Core"
lte_str=" ${COL_DARK_GRAY}Web"
ftl_str=" ${COL_DARK_GRAY}FTL"
api_str="${COL_LIGHT_RED}API Down"
ph_info="$domains_being_blocked blocked"
fi
[[ "$sys_cores" -ne 1 ]] && sys_cores_txt="${sys_cores}x "
cpu_info="$sys_cores_txt$cpu_freq$cpu_temp_str"
ram_info="$used_str$(hrBytes "$ram_used") of $(hrBytes "$ram_total")"
disk_info="$used_str$(hrBytes "$disk_used") of $(hrBytes "$disk_total")"
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
lan_info="Gateway: $net_gateway"
dhcp_info="$leased_str$ph_dhcp_num of $ph_dhcp_max"
CalcBlockedDomains
ads_info="$total_str$ads_blocked_today of $dns_queries_today"
dns_info="$dns_count DNS servers"
echo "Blocking: ${blockedDomainsTotal}"
echo "Queries: ${queriesToday}" #same total calculation as dashboard
echo "Pi-holed: ${blockedToday} (${percentBlockedToday}%)"
sleep 5
done
[[ "$recent_blocked" == "0" ]] && recent_blocked="${COL_LIGHT_RED}FTL offline${COL_NC}"
}
displayHelp() {
cat << EOM
::: Displays stats about your piHole!
:::
::: Usage: sudo pihole -c [optional:-j]
::: Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds
:::
::: Options:
::: -j, --json output stats as JSON formatted string
::: -h, --help display this help text
EOM
exit 0
chronoFunc() {
get_init_stats
for (( ; ; )); do
get_sys_stats
get_ftl_stats
get_strings
# Strip excess development version numbers
if [[ "$ph_core_ver" != "-1" ]]; then
phc_ver_str="$phc_str: ${ph_core_ver%-*}${COL_NC}"
lte_ver_str="$lte_str: ${ph_lte_ver%-*}${COL_NC}"
ftl_ver_str="$ftl_str: ${ph_ftl_ver%-*}${COL_NC}"
else
phc_ver_str="$phc_str: $api_str${COL_NC}"
fi
# Get refresh number
if [[ "$*" == *"-r"* ]]; then
num="$*"
num="${num/*-r /}"
num="${num/ */}"
num_str="Refresh set for every $num seconds"
else
num_str=""
fi
clear
# Remove exit message heading on third refresh
if [[ "$count" -le 2 ]] && [[ "$*" != *"-e"* ]]; then
echo -e " ${COL_LIGHT_GREEN}Pi-hole Chronometer${COL_NC}
$num_str
${COL_LIGHT_RED}Press Ctrl-C to exit${COL_NC}
${COL_DARK_GRAY}$scr_line_str${COL_NC}"
else
echo -e "|¯¯¯(¯)_|¯|_ ___|¯|___$phc_ver_str
| ¯_/¯|_| ' \\/ _ \\ / -_)$lte_ver_str
|_| |_| |_||_\\___/_\\___|$ftl_ver_str
${COL_DARK_GRAY}$scr_line_str${COL_NC}"
fi
printFunc " Hostname: " "$sys_name" "$host_info"
printFunc " Uptime: " "$sys_uptime" "$sys_info"
printFunc " Task Load: " "$sys_loadavg" "$sys_info2"
printFunc " CPU usage: " "$cpu_perc%" "$cpu_info"
printFunc " RAM usage: " "$ram_perc%" "$ram_info"
printFunc " HDD usage: " "$disk_perc" "$disk_info"
if [[ "$scr_lines" -gt 17 ]] && [[ "$chrono_width" != "small" ]]; then
printFunc " LAN addr: " "${IPV4_ADDRESS/\/*/}" "$lan_info"
fi
if [[ "$DHCP_ACTIVE" == "true" ]]; then
printFunc "DHCP usage: " "$ph_dhcp_percent%" "$dhcp_info"
fi
printFunc " Pi-hole: " "$ph_status" "$ph_info"
printFunc " Ads Today: " "$ads_percentage_today%" "$ads_info"
printFunc "Local Qrys: " "$queries_cached_percentage%" "$dns_info"
printFunc " Blocked: " "$recent_blocked"
printFunc "Top Advert: " "$top_ad"
# Provide more stats on screens with more lines
if [[ "$scr_lines" -eq 17 ]]; then
if [[ "$DHCP_ACTIVE" == "true" ]]; then
printFunc "Top Domain: " "$top_domain" "last"
else
print_client="true"
fi
else
print_client="true"
fi
if [[ -n "$print_client" ]]; then
printFunc "Top Domain: " "$top_domain"
printFunc "Top Client: " "$top_client" "last"
fi
# Handle exit/refresh options
if [[ "$*" == *"-e"* ]]; then
exit 0
else
if [[ "$*" == *"-r"* ]]; then
sleep "$num"
else
sleep 5
fi
fi
done
}
jsonFunc() {
get_ftl_stats "json"
echo "{\"domains_being_blocked\":${domains_being_blocked_raw},\"dns_queries_today\":${dns_queries_today_raw},\"ads_blocked_today\":${ads_blocked_today_raw},\"ads_percentage_today\":${ads_percentage_today_raw}}"
}
helpFunc() {
if [[ "$1" == "?" ]]; then
echo "Unknown option. Please view 'pihole -c --help' for more information"
else
echo "Usage: pihole -c [options]
Example: 'pihole -c -j'
Calculates stats and displays to an LCD
Options:
-j, --json Output stats as JSON formatted string
-r, --refresh Set update frequency (in seconds)
-e, --exit Output stats and exit witout refreshing
-h, --help Display this help text"
fi
exit 0
}
if [[ $# = 0 ]]; then
normalChrono
chronoFunc
fi
for var in "$@"; do
case "$var" in
"-j" | "--json" ) outputJSON;;
"-h" | "--help" ) displayHelp;;
* ) exit 1;;
esac
case "$var" in
"-j" | "--json" ) jsonFunc;;
"-h" | "--help" ) helpFunc;;
"-r" | "--refresh" ) chronoFunc "$@";;
"-e" | "--exit" ) chronoFunc "$@";;
* ) helpFunc "?";;
esac
done

View File

@@ -1,177 +1,261 @@
#!/usr/bin/env bash
# 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
# Whitelists and blacklists domains
# (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.
# Whitelist and blacklist domains
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
#globals
# Globals
basename=pihole
piholeDir=/etc/${basename}
whitelist=${piholeDir}/whitelist.txt
blacklist=${piholeDir}/blacklist.txt
readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
reload=false
addmode=true
verbose=true
domList=()
domToRemoveList=()
listMain=""
listAlt=""
colfile="/opt/pihole/COL_TABLE"
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
letter="w"
word="white"
else
letter="b"
word="black"
fi
echo "Usage: pihole -${param} [options] <domain> <domain2 ...>
Example: 'pihole -${param} site.com', or 'pihole -${param} site1.com site2.com'
${type^}list one or more domains
cat << EOM
::: Immediately ${word}lists one or more domains in the hosts file
:::
::: Usage: pihole -${letter} domain1 [domain2 ...]
:::
::: Options:
::: -d, --delmode Remove domains from the ${word}list
::: -nr, --noreload Update ${word}list without refreshing dnsmasq
::: -q, --quiet output is less verbose
::: -h, --help Show this help dialog
::: -l, --list Display your ${word}listed domains
EOM
exit 0
Options:
-d, --delmode Remove domain(s) from the ${type}list
-nr, --noreload Update ${type}list without refreshing dnsmasq
-q, --quiet Make output less verbose
-h, --help Show this help dialog
-l, --list Display all your ${type}listed domains
--nuke Removes all entries in a list"
exit 0
}
EscapeRegexp() {
# This way we may safely insert an arbitrary
# string in our regular expressions
echo $* | sed "s/[]\\.|$(){}?+*^]/\\\\&/g" | sed "s/\\//\\\\\//g"
# 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"
}
HandleOther(){
# First, convert everything to lowercase
domain=$(sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" <<< "$1")
HandleOther() {
# Convert to lowercase
domain="${1,,}"
#check validity of domain
validDomain=$(perl -ne "print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/" <<< "$domain")
if [ -z "${validDomain}" ]; then
echo "::: $1 is not a valid argument or domain name"
else
domList=("${domList[@]}" ${validDomain})
fi
# 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
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}"
else
RemoveDomain "${dom}" "${listMain}"
fi
done
# 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}"
fi
done
}
AddDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
list="$2"
domain=$(EscapeRegexp "$1")
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
[[ "${list}" == "${whitelist}" ]] && listname="whitelist"
[[ "${list}" == "${blacklist}" ]] && listname="blacklist"
[[ "${list}" == "${wildcardlist}" ]] && listname="wildcard blacklist"
if [[ "${bool}" == false ]]; then
#domain not found in the whitelist file, add it!
if [[ "${verbose}" == true ]]; then
echo "::: Adding $1 to $list..."
fi
reload=true
# Add it to the list we want to add it to
echo "$1" >> ${list}
else
if [[ "${verbose}" == true ]]; then
echo "::: ${1} already exists in ${list}, no need to add!"
fi
fi
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
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"
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
bool=true
#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
[[ "${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 "::: Removing $1 from $list..."
# /I flag: search case-insensitive
sed -i "/${domain}/Id" ${list}
reload=true
# 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 "::: ${1} does not exist in ${list}, no need to remove!"
fi
if [[ "${verbose}" == true ]]; then
echo -e " ${INFO} ${1} does not exist in ${listname}, no need to remove!"
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() {
# Reload hosts file
pihole -g -sd
echo ""
pihole -g --skip-download "${type:-}"
}
Displaylist() {
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"
string="domains caught in the sinkhole"
fi
verbose=false
echo -e " Displaying $string \n"
count=1
while IFS= read -r RD; do
echo "${count}: ${RD}"
count=$((count+1))
done < "${listMain}"
exit 0;
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;
}
NukeList() {
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}";;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) Displaylist;;
* ) HandleOther "${var}";;
esac
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
done
shift
if [[ $# = 0 ]]; then
helpFunc
helpFunc
fi
PoplistFile
if ${reload}; then
Reload
if [[ "${reload}" != false ]]; then
# Ensure that "restart" is used for Wildcard updates
Reload "${reload}"
fi

View File

@@ -0,0 +1,359 @@
#!/usr/bin/env 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.
#
# Switch Pi-hole subsystems to a different Github branch.
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
readonly PI_HOLE_FILES_DIR="/etc/.pihole"
PH_TEST="true"
source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"
# webInterfaceGitUrl set in basic-install.sh
# webInterfaceDir set in basic-install.sh
# piholeGitURL set in basic-install.sh
# is_repo() sourced from basic-install.sh
# setupVars set in 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
}
checkout() {
local corebranches
local webbranches
# 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!
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;
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
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
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
fi
fi
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,48 @@
#!/usr/bin/env bash
# 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
# Flushes /var/log/pihole.log
# (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.
# Flushes Pi-hole's log file
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
echo -n "::: Flushing /var/log/pihole.log ..."
echo " " > /var/log/pihole.log
echo "... done!"
colfile="/opt/pihole/COL_TABLE"
source ${colfile}
if [[ "$@" != *"quiet"* ]]; then
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
fi
if [[ "$@" != *"quiet"* ]]; then
echo -e "${OVER} ${TICK} Flushed /var/log/pihole.log"
fi

View File

@@ -1,14 +1,14 @@
#!/usr/bin/env bash
# Pi-hole: A black hole for Internet advertisements
# (c) 2015 by Jacob Salmela
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Automatically configures the Pi to use the 2.8 LCD screen to display stats on it (also works over ssh)
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
############ FUNCTIONS ###########

View File

@@ -1,102 +1,72 @@
#!/usr/bin/env bash
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Check Pi-hole core and admin pages versions and determine what
# upgrade (if any) is required. Automatically updates and reinstalls
# application if update is detected.
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
# Variables
readonly ADMIN_INTERFACE_GIT_URL="https://github.com/pi-hole/AdminLTE.git"
readonly ADMIN_INTERFACE_DIR="/var/www/html/admin"
readonly PI_HOLE_GIT_URL="https://github.com/pi-hole/pi-hole.git"
readonly PI_HOLE_FILES_DIR="/etc/.pihole"
is_repo() {
# Use git to check if directory is currently under VCS, return the value
local directory="${1}"
local curdir
local rc
# shellcheck disable=SC2034
PH_TEST=true
curdir="${PWD}"
cd "${directory}" &> /dev/null || return 1
git status --short &> /dev/null
rc=$?
cd "${curdir}" &> /dev/null || return 1
return "${rc}"
}
# shellcheck disable=SC1090
source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"
# shellcheck disable=SC1091
source "/opt/pihole/COL_TABLE"
prep_repo() {
# Prepare directory for local repository building
local directory="${1}"
rm -rf "${directory}" &> /dev/null
return
}
make_repo() {
# Remove the non-repod interface and clone the interface
local remoteRepo="${2}"
local directory="${1}"
(prep_repo "${directory}" && git clone -q --depth 1 "${remoteRepo}" "${directory}")
return
}
update_repo() {
local directory="${1}"
local curdir
curdir="${PWD}"
cd "${directory}" &> /dev/null || return 1
# Pull the latest commits
# Stash all files not tracked for later retrieval
git stash --all --quiet
# Force a clean working directory for cloning
git clean --force -d
# Fetch latest changes and apply
git pull --quiet
cd "${curdir}" &> /dev/null || return 1
}
getGitFiles() {
# Setup git repos for directory and repository passed
# as arguments 1 and 2
local directory="${1}"
local remoteRepo="${2}"
echo ":::"
echo "::: Checking for existing repository..."
if is_repo "${directory}"; then
echo -n "::: Updating repository in ${directory}..."
update_repo "${directory}" || (echo "*** Error: Could not update local repository. Contact support."; exit 1)
echo " done!"
else
echo -n "::: Cloning ${remoteRepo} into ${directory}..."
make_repo "${directory}" "${remoteRepo}" || (echo "Unable to clone repository, please contact support"; exit 1)
echo " done!"
fi
}
# is_repo() sourced from basic-install.sh
# make_repo() sourced from basic-install.sh
# update_repo() source from basic-install.sh
# getGitFiles() sourced from basic-install.sh
GitCheckUpdateAvail() {
local directory="${1}"
curdir=$PWD;
cd "${directory}"
curdir=$PWD
cd "${directory}" || return
# Fetch latest changes in this repo
git fetch --quiet origin
status="$(git status -sb)"
# @ 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}")"
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
# Change back to original directory
cd "${curdir}"
cd "${curdir}" || exit
if [[ $status == *"behind"* ]]; then
if [[ "${LOCAL}" != "${REMOTE}" ]]; then
# Local branch is behind remote branch -> Update
return 0
else
@@ -107,88 +77,152 @@ GitCheckUpdateAvail() {
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
}
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}"
#This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" || ! is_repo "${ADMIN_INTERFACE_DIR}" ; then
echo "::: Critical Error: One or more Pi-Hole repos are missing from system!"
echo "::: Please re-run install script from https://github.com/pi-hole/pi-hole"
# 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 "::: Checking for updates..."
echo -e " ${INFO} Checking for updates..."
if GitCheckUpdateAvail "${PI_HOLE_FILES_DIR}" ; then
core_update=true
echo "::: Pi-hole Core: update available"
echo -e " ${INFO} Pi-hole Core:\\t${COL_YELLOW}update available${COL_NC}"
else
core_update=false
echo "::: Pi-hole Core: up to date"
echo -e " ${INFO} Pi-hole Core:\\t${COL_LIGHT_GREEN}up to date${COL_NC}"
fi
if GitCheckUpdateAvail "${ADMIN_INTERFACE_DIR}" ; then
web_update=true
echo "::: Web Interface: update available"
if FTLcheckUpdate ; then
FTL_update=true
echo -e " ${INFO} FTL:\\t\\t${COL_YELLOW}update available${COL_NC}"
else
web_update=false
echo "::: Web Interface: up to date"
FTL_update=false
echo -e " ${INFO} FTL:\\t\\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
# 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
if ! ${core_update} && ! ${web_update} ; then
echo ":::"
echo "::: Everything is up to date!"
exit 0
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;
fi
elif ! ${core_update} && ${web_update} ; then
echo ":::"
echo "::: Pi-hole Web Admin files out of date"
getGitFiles "${ADMIN_INTERFACE_DIR}" "${ADMIN_INTERFACE_GIT_URL}"
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
elif ${core_update} && ! ${web_update} ; then
echo ":::"
echo "::: Pi-hole core files out of date"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
/etc/.pihole/automated\ install/basic-install.sh --reconfigure --unattended || echo "Unable to complete update, contact Pi-hole" && exit 1
# 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
elif ${core_update} && ${web_update} ; then
echo ":::"
echo "::: Updating Everything"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
/etc/.pihole/automated\ install/basic-install.sh --unattended || echo "Unable to complete update, contact Pi-hole" && exit 1
else
echo "*** Update script has malfunctioned, fallthrough reached. Please contact support"
exit 1
if ! ${core_update} && ! ${web_update} ; then
if ! ${FTL_update} ; 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
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 || \
echo -e "${basicError}" && exit 1
fi
fi
if [[ "${web_update}" == true ]]; then
web_version_current="$(/usr/local/bin/pihole version --admin --current)"
echo ":::"
echo "::: Web Admin version is now at ${web_version_current}"
echo "::: If you had made any changes in '/var/www/html/admin/', they have been stashed using 'git stash'"
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 "::: Pi-hole version is now at ${pihole_version_current}"
echo "::: If you had made any changes in '/etc/.pihole/', they have been stashed using 'git stash'"
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
}
main

66
advanced/Scripts/updatecheck.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env 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.
#
# Checks for local or remote versions and branches
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
# Credit: https://stackoverflow.com/a/46324904
function json_extract() {
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})"
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
}
function get_local_version() {
# Return active branch
cd "${1}" 2> /dev/null || return 1
git describe --long --dirty --tags || return 1
}
if [[ "$2" == "remote" ]]; then
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)")"
echo -n "${GITHUB_CORE_VERSION} ${GITHUB_WEB_VERSION} ${GITHUB_FTL_VERSION}" > "/etc/pihole/GitHubVersions"
else
CORE_BRANCH="$(get_local_branch /etc/.pihole)"
WEB_BRANCH="$(get_local_branch /var/www/html/admin)"
FTL_BRANCH="$(pihole-FTL branch)"
echo -n "${CORE_BRANCH} ${WEB_BRANCH} ${FTL_BRANCH}" > "/etc/pihole/localbranches"
CORE_VERSION="$(get_local_version /etc/.pihole)"
WEB_VERSION="$(get_local_version /var/www/html/admin)"
FTL_VERSION="$(pihole-FTL version)"
echo -n "${CORE_VERSION} ${WEB_VERSION} ${FTL_VERSION}" > "/etc/pihole/localversions"
fi

View File

@@ -1,102 +1,168 @@
#!/usr/bin/env bash
# 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
# shows version numbers
# (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.
# Flags:
latest=false
current=false
# Show version numbers
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
# Variables
DEFAULT="-1"
COREGITDIR="/etc/.pihole/"
WEBGITDIR="/var/www/html/admin/"
normalOutput() {
piholeVersion=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
webVersion=$(cd /var/www/html/admin/ && git describe --tags --abbrev=0)
getLocalVersion() {
# FTL requires a different method
if [[ "$1" == "FTL" ]]; then
pihole-FTL version
return 0
fi
piholeVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/pi-hole/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
webVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/AdminLTE/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
# Get the tagged version of the local repository
local directory="${1}"
local version
echo "::: Pi-hole version is ${piholeVersion} (Latest version is ${piholeVersionLatest:-${DEFAULT}})"
echo "::: Web-Admin version is ${webVersion} (Latest version is ${webVersionLatest:-${DEFAULT}})"
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
}
webOutput() {
for var in "$@"; do
case "${var}" in
"-l" | "--latest" ) latest=true;;
"-c" | "--current" ) current=true;;
* ) echo "::: Invalid Option!"; exit 1;
esac
done
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
if [[ "${latest}" == true && "${current}" == false ]]; then
webVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/AdminLTE/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
echo "${webVersionLatest:--1}"
elif [[ "${latest}" == false && "${current}" == true ]]; then
webVersion=$(cd /var/www/html/admin/ && git describe --tags --abbrev=0)
echo "${webVersion}"
else
webVersion=$(cd /var/www/html/admin/ && git describe --tags --abbrev=0)
webVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/AdminLTE/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
echo "::: Web-Admin version is ${webVersion} (Latest version is ${webVersionLatest:-${DEFAULT}})"
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
}
coreOutput() {
for var in "$@"; do
case "${var}" in
"-l" | "--latest" ) latest=true;;
"-c" | "--current" ) current=true;;
* ) echo "::: Invalid Option!"; exit 1;
esac
done
getRemoteHash(){
# Remote FTL hash is not applicable
if [[ "$1" == "FTL" ]]; then
echo "N/A"
return 0
fi
if [[ "${latest}" == true && "${current}" == false ]]; then
piholeVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/pi-hole/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
echo "${piholeVersionLatest:--1}"
elif [[ "${latest}" == false && "${current}" == true ]]; then
piholeVersion=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
echo "${piholeVersion}"
else
piholeVersion=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
piholeVersionLatest=$(curl -s https://api.github.com/repos/pi-hole/pi-hole/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | perl -pe 's/"tag_name": "//; s/^"//; s/",$//')
echo "::: Pi-hole version is ${piholeVersion} (Latest version is ${piholeVersionLatest:-${DEFAULT}})"
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
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
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
}
defaultOutput() {
versionOutput "pi-hole" "$@"
versionOutput "AdminLTE" "$@"
versionOutput "FTL" "$@"
}
helpFunc() {
cat << EOM
:::
::: Show Pi-hole/Web Admin versions
:::
::: Usage: pihole -v [ -a | -p ] [ -l | -c ]
:::
::: Options:
::: -a, --admin Show both current and latest versions of web admin
::: -p, --pihole Show both current and latest versions of Pi-hole core files
::: -l, --latest (Only after -a | -p) Return only latest version
::: -c, --current (Only after -a | -p) Return only current version
::: -h, --help Show this help dialog
:::
EOM
exit 0
echo "Usage: pihole -v [repo | option] [option]
Example: 'pihole -v -p -l'
Show Pi-hole, Admin Console & FTL versions
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
--hash Return the Github hash from your local repositories
-h, --help Show this help dialog"
exit 0
}
if [[ $# = 0 ]]; then
normalOutput
fi
for var in "$@"; do
case "${var}" in
"-a" | "--admin" ) shift; webOutput "$@";;
"-p" | "--pihole" ) shift; coreOutput "$@" ;;
"-h" | "--help" ) helpFunc;;
esac
done
case "${1}" in
"-p" | "--pihole" ) shift; versionOutput "pi-hole" "$@";;
"-a" | "--admin" ) shift; versionOutput "AdminLTE" "$@";;
"-f" | "--ftl" ) shift; versionOutput "FTL" "$@";;
"-h" | "--help" ) helpFunc;;
* ) defaultOutput "$@";;
esac

View File

@@ -1,31 +1,41 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090
# Pi-hole: A black hole for Internet advertisements
# Network-wide ad blocking via your Raspberry Pi
# http://pi-hole.net
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Web interface settings
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
readonly setupVars="/etc/pihole/setupVars.conf"
readonly dnsmasqconfig="/etc/dnsmasq.d/01-pihole.conf"
readonly dhcpconfig="/etc/dnsmasq.d/02-pihole-dhcp.conf"
# 03 -> wildcards
readonly dhcpstaticconfig="/etc/dnsmasq.d/04-pihole-static-dhcp.conf"
coltable="/opt/pihole/COL_TABLE"
if [[ -f ${coltable} ]]; then
source ${coltable}
fi
helpFunc() {
cat << EOM
::: Set admin options for the web interface of pihole
:::
::: Usage: pihole -a [options]
:::
::: Options:
::: -p, password Set web interface password, an empty input will remove any previously set password
::: -c, celsius Set Celsius temperature unit
::: -f, fahrenheit Set Fahrenheit temperature unit
::: -k, kelvin Set Kelvin temperature unit
::: -h, --help Show this help dialog
EOM
echo "Usage: pihole -a [options]
Example: pihole -a -p password
Set options for the Admin Console
Options:
-p, password Set Admin Console password
-c, celsius Set Celsius as preferred temperature unit
-f, fahrenheit Set Fahrenheit as preferred temperature unit
-k, kelvin Set Kelvin as preferred temperature unit
-r, hostrecord Add a name to the DNS associated to an IPv4/IPv6 address
-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
}
@@ -54,14 +64,19 @@ delete_dnsmasq_setting() {
sed -i "/${1}/d" "${dnsmasqconfig}"
}
SetTemperatureUnit(){
SetTemperatureUnit() {
change_setting "TEMPERATUREUNIT" "${unit}"
echo -e " ${TICK} Set temperature unit to ${unit}"
}
SetWebPassword(){
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}
}
SetWebPassword() {
if [ "${SUDO_USER}" == "www-data" ]; then
echo "Security measure: user www-data is not allowed to change webUI password!"
echo "Exiting"
@@ -74,30 +89,51 @@ SetWebPassword(){
exit 1
fi
# Set password only if there is one to be set
if (( ${#args[2]} > 0 )) ; then
# Compute password hash twice to avoid rainbow table vulnerability
hash=$(echo -n ${args[2]} | sha256sum | sed 's/\s.*$//')
hash=$(echo -n ${hash} | sha256sum | sed 's/\s.*$//')
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
fi
read -s -p "Confirm Password: " CONFIRM
echo ""
fi
if [ "${PASSWORD}" == "${CONFIRM}" ] ; then
hash=$(HashPassword "${PASSWORD}")
# Save hash to file
change_setting "WEBPASSWORD" "${hash}"
echo "New password set"
echo -e " ${TICK} New password set"
else
change_setting "WEBPASSWORD" ""
echo "Password removed"
echo -e " ${CROSS} Passwords don't match. Your password has not been changed"
exit 1
fi
}
ProcessDNSSettings() {
source "${setupVars}"
delete_dnsmasq_setting "server="
add_dnsmasq_setting "server" "${PIHOLE_DNS_1}"
delete_dnsmasq_setting "server"
if [[ "${PIHOLE_DNS_2}" != "" ]]; then
add_dnsmasq_setting "server" "${PIHOLE_DNS_2}"
fi
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"
@@ -111,101 +147,133 @@ ProcessDNSSettings() {
add_dnsmasq_setting "bogus-priv"
fi
}
delete_dnsmasq_setting "dnssec"
delete_dnsmasq_setting "trust-anchor="
SetDNSServers(){
# Save setting to file
change_setting "PIHOLE_DNS_1" "${args[2]}"
if [[ "${args[3]}" != "none" ]]; then
change_setting "PIHOLE_DNS_2" "${args[3]}"
else
change_setting "PIHOLE_DNS_2" ""
if [[ "${DNSSEC}" == true ]]; then
echo "dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
" >> "${dnsmasqconfig}"
fi
if [[ "${args[4]}" == "domain-needed" ]]; then
delete_dnsmasq_setting "host-record"
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"
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
}
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
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" || "${args[5]}" == "bogus-priv" ]]; then
if [[ "${args[4]}" == "bogus-priv" ]]; then
change_setting "DNS_BOGUS_PRIV" "true"
else
change_setting "DNS_BOGUS_PRIV" "false"
fi
ProcessDnsmasqSettings
if [[ "${args[5]}" == "dnssec" ]]; then
change_setting "DNSSEC" "true"
else
change_setting "DNSSEC" "false"
fi
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
}
SetExcludeDomains(){
SetExcludeDomains() {
change_setting "API_EXCLUDE_DOMAINS" "${args[2]}"
}
SetExcludeClients(){
SetExcludeClients() {
change_setting "API_EXCLUDE_CLIENTS" "${args[2]}"
}
Reboot(){
Poweroff(){
nohup bash -c "sleep 5; poweroff" &> /dev/null </dev/null &
}
Reboot() {
nohup bash -c "sleep 5; reboot" &> /dev/null </dev/null &
}
RestartDNS(){
if [ -x "$(command -v systemctl)" ]; then
systemctl restart dnsmasq &> /dev/null
else
service dnsmasq restart &> /dev/null
fi
RestartDNS() {
/usr/local/bin/pihole restartdns
}
SetQueryLogOptions(){
SetQueryLogOptions() {
change_setting "API_QUERY_LOG_SHOW" "${args[2]}"
}
ProcessDHCPSettings() {
source "${setupVars}"
if [[ "${DHCP_ACTIVE}" == "true" ]]; then
interface="${PIHOLE_INTERFACE}"
interface=$(grep 'PIHOLE_INTERFACE=' /etc/pihole/setupVars.conf | sed "s/.*=//")
# Use eth0 as fallback interface
if [ -z ${interface} ]; then
interface="eth0"
fi
# Use eth0 as fallback interface
if [ -z ${interface} ]; then
interface="eth0"
fi
if [[ "${PIHOLE_DOMAIN}" == "" ]]; then
PIHOLE_DOMAIN="lan"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
fi
if [[ "${PIHOLE_DOMAIN}" == "" ]]; then
PIHOLE_DOMAIN="local"
change_setting "PIHOLE_DOMAIN" "${PIHOLE_DOMAIN}"
fi
if [[ "${DHCP_LEASETIME}" == "0" ]]; then
leasetime="infinite"
elif [[ "${DHCP_LEASETIME}" == "" ]]; then
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}"
else
leasetime="${DHCP_LEASETIME}h"
fi
if [[ "${DHCP_LEASETIME}" == "0" ]]; then
leasetime="infinite"
elif [[ "${DHCP_LEASETIME}" == "" ]]; then
leasetime="24h"
change_setting "DHCP_LEASETIME" "${leasetime}"
else
leasetime="${DHCP_LEASETIME}h"
fi
# Write settings to file
echo "###############################################################################
# Write settings to file
echo "###############################################################################
# DHCP SERVER CONFIG FILE AUTOMATICALLY POPULATED BY PI-HOLE WEB INTERFACE. #
# ANY CHANGES MADE TO THIS FILE WILL BE LOST ON CHANGE #
###############################################################################
@@ -213,26 +281,30 @@ dhcp-authoritative
dhcp-range=${DHCP_START},${DHCP_END},${leasetime}
dhcp-option=option:router,${DHCP_ROUTER}
dhcp-leasefile=/etc/pihole/dhcp.leases
domain=${PIHOLE_DOMAIN}
#quiet-dhcp
" > "${dhcpconfig}"
if [[ "${DHCP_IPv6}" == "true" ]]; then
echo "#quiet-dhcp6
if [[ "${PIHOLE_DOMAIN}" != "none" ]]; then
echo "domain=${PIHOLE_DOMAIN}" >> "${dhcpconfig}"
fi
if [[ "${DHCP_IPv6}" == "true" ]]; then
echo "#quiet-dhcp6
#enable-ra
dhcp-option=option6:dns-server,[::]
dhcp-range=::100,::1ff,constructor:${interface},ra-names,slaac,${leasetime}
ra-param=*,0,0
" >> "${dhcpconfig}"
fi
fi
else
rm "${dhcpconfig}"
if [[ -f "${dhcpconfig}" ]]; then
rm "${dhcpconfig}" &> /dev/null
fi
fi
}
EnableDHCP(){
EnableDHCP() {
change_setting "DHCP_ACTIVE" "true"
change_setting "DHCP_START" "${args[2]}"
change_setting "DHCP_END" "${args[3]}"
@@ -250,8 +322,7 @@ EnableDHCP(){
RestartDNS
}
DisableDHCP(){
DisableDHCP() {
change_setting "DHCP_ACTIVE" "false"
# Remove possible old setting from file
@@ -263,24 +334,37 @@ DisableDHCP(){
RestartDNS
}
SetWebUILayout(){
SetWebUILayout() {
change_setting "WEBUIBOXEDLAYOUT" "${args[2]}"
}
SetPrivacyMode(){
CustomizeAdLists() {
list="/etc/pihole/adlists.list"
if [[ "${args[2]}" == "true" ]] ; then
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
}
SetPrivacyMode() {
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]}"
@@ -291,8 +375,122 @@ ResolutionSettings() {
fi
}
main() {
AddDHCPStaticAddress() {
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
}
RemoveDHCPStaticAddress() {
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]
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
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
# Restart dnsmasq to load new configuration
RestartDNS
}
SetAdminEmail() {
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
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}"
if [[ "$3" == "-h" ]] || [[ "$3" == "--help" ]]; then
echo "Usage: pihole -a -i [interface]
Example: 'pihole -a -i local'
Specify dnsmasq's network interface listening behavior
Interfaces:
local Listen on all interfaces, but only allow queries from
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
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
}
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"
}
audit()
{
echo "${args[2]}" >> /etc/pihole/auditlog.list
}
main() {
args=("$@")
case "${args[1]}" in
@@ -303,6 +501,7 @@ main() {
"setdns" ) SetDNSServers;;
"setexcludedomains" ) SetExcludeDomains;;
"setexcludeclients" ) SetExcludeClients;;
"poweroff" ) Poweroff;;
"reboot" ) Reboot;;
"restartdns" ) RestartDNS;;
"setquerylog" ) SetQueryLogOptions;;
@@ -312,6 +511,14 @@ main() {
"-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
@@ -320,5 +527,4 @@ main() {
if [[ $# = 0 ]]; then
helpFunc
fi
}

View File

@@ -3,7 +3,7 @@ _pihole() {
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"
opts="admin blacklist chronometer debug disable enable flush help logging query reconfigure restartdns setupLCD status tail uninstall updateGravity updatePihole version whitelist checkout"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0

View File

@@ -1,136 +1,383 @@
/* CSS Reset */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; }
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; }
body { line-height: 1; }
ol, ul { list-style: none; }
blockquote, q { quotes: none; }
blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; }
table { border-collapse: collapse; border-spacing: 0; }
html { height: 100%; overflow-x: hidden; }
/* 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.
*
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
/* General Style */
a { color: rgba(0,60,120,0.95); text-decoration: none; } /* 1E3C5A */
a:hover { color: rgba(210,120,0,0.95); transition-duration: .2s; } /* 255, 128, 0 */
divs a { border-bottom: 1px dashed rgba(30,60,90,0.3); }
b { font-weight: bold; }
i { font-style: italic; }
/* Text Customisation Options ======> */
.title:before { content: "Website Blocked"; }
.altBtn:before { content: "Why am I here?"; }
.linkPH:before { content: "About Pi-hole"; }
.linkEmail:before { content: "Contact Admin"; }
footer, pre, td { font-family: monospace; padding-left: 15px; }
/*body, header { background: #E1E1E1; }*/
#bpOutput.add:before { content: "Info"; }
#bpOutput.add:after { content: "The domain is being whitelisted..."; }
#bpOutput.error:before, .unhandled:before { content: "Error"; }
#bpOutput.unhandled:after { content: "An unhandled exception occured. This may happen when your browser is unable to load jQuery, or when the webserver is denying access to the Pi-hole API."; }
#bpOutput.success:before { content: "Success"; }
#bpOutput.success:after { content: "Website has been whitelisted! You may need to flush your DNS cache"; }
.recentwl:before { content: "This site has been whitelisted. Please flush your DNS cache and/or restart your browser."; }
.unknown:before { content: "This website is not found in any of Pi-hole's blacklists. The reason you have arrived here is unknown."; }
.cname:before { content: "This site is an alias for "; } /* <a href="http://cname.com">cname.com</a> */
.cname:after { content: ", which may be blocked by Pi-hole."; }
.blacklist:before { content: "Manually Blacklisted"; }
.wildcard:before { content: "Manually Blacklisted by Wildcard"; }
.noblock:before { content: "Not found on any Blacklist"; }
#bpBlock:before { content: "Access to the following website has been denied:"; }
#bpFlag:before { content: "This is primarily due to being flagged as:"; }
#bpHelpTxt:before { content: "If you have an ongoing use for this website, please "; }
#bpHelpTxt a:before, #bpHelpTxt span:before { content: "ask the administrator"; }
#bpHelpTxt:after{ content: " of the Pi-hole on this network to have it whitelisted"; }
#bpBack:before { content: "Back to safety"; }
#bpInfo:before { content: "Technical Info"; }
#bpFoundIn:before { content: "This site is found in "; }
#bpFoundIn span:after { content: " of "; }
#bpFoundIn:after { content: " lists:"; }
#bpWhitelist:before { content: "Whitelist"; }
footer span:before { content: "Page generated on "; }
/* Hide whitelisting form entirely */
/* #bpWLButtons { display: none; } */
/* Text Customisation Options <=============================== */
/* http://necolas.github.io/normalize.css ======> */
html { font-family: sans-serif; line-height: 1.15; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; }
body { margin: 0; }
article, aside, footer, header, nav, section { display: block; }
h1 { font-size: 2em; margin: 0.67em 0; }
figcaption, figure, main { display: block; }
figure { margin: 1em 40px; }
hr { box-sizing: content-box; height: 0; overflow: visible; }
pre { font-family: monospace, monospace; font-size: 1em; }
a { background-color: transparent; -webkit-text-decoration-skip: objects; }
a:active, a:hover { outline-width: 0; }
abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; }
b, strong { font-weight: inherit; }
b, strong { font-weight: bolder; }
code, kbd, samp { font-family: monospace, monospace; font-size: 1em; }
dfn { font-style: italic; }
mark { background-color: #ff0; color: #000; }
small { font-size: 80%; }
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sub { bottom: -0.25em; }
sup { top: -0.5em; }
audio, video { display: inline-block; }
audio:not([controls]) { display: none; height: 0; }
img { border-style: none; }
svg:not(:root) { overflow: hidden; }
button, input, optgroup, select, textarea { font-family: sans-serif; font-size: 100%; line-height: 1.15; margin: 0; }
button, input { overflow: visible; }
button, select { text-transform: none; }
button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; }
button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; }
button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; }
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal; }
progress { display: inline-block; vertical-align: baseline; }
textarea { overflow: auto; }
[type="checkbox"], [type="radio"] { box-sizing: border-box; padding: 0; }
[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; }
[type="search"] { -webkit-appearance: textfield; outline-offset: -2px; }
[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; }
details, menu { display: block; }
summary { display: list-item; }
canvas { display: inline-block; }
template { display: none; }
[hidden] { display: none; }
/* Normalize.css <=============================== */
html { font-size: 62.5%; }
a { color: #3c8dbc; text-decoration: none; }
a:hover { color: #72afda; text-decoration: underline; }
b { color: rgb(68,68,68); }
p { margin: 0; }
label, .buttons a {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
label, .buttons *:not([disabled]) { cursor: pointer; }
/* Touch device dark tap highlight */
header h1 a, label, .buttons * { -webkit-tap-highlight-color: transparent; }
/* Webkit Focus Glow */
textarea, input, button { outline: none; }
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-weight: 400;
src: local("Source Sans Pro"), local("SourceSansPro-Regular"), url("/admin/style/vendor/SourceSansPro/SourceSansPro-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Source Sans Pro";
font-style: normal;
font-weight: 700;
src: local("Source Sans Pro Bold"), local("SourceSansPro-Bold"), url("/admin/style/vendor/SourceSansPro/SourceSansPro-Bold.ttf") format("truetype");
}
body {
background-image: -webkit-linear-gradient(top, rgba(240,240,240,0.95), rgba(190,190,190,0.95));
background-image: linear-gradient(to bottom, rgba(240,240,240,0.95), rgba(190,190,190,0.95));
background-attachment: fixed;
color: rgba(64,64,64,0.95);
font: 14px, sans-serif;
line-height: 1em;
background: #dbdbdb url("/admin/img/boxed-bg.jpg") repeat fixed;
color: #333;
font: 1.4rem "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 2.2rem;
}
/* User is greeted with a splash page when browsing to Pi-hole IP address */
#splashpage { background: #222; color: rgba(255,255,255,0.7); text-align: center; }
#splashpage img { margin: 5px; width: 256px; }
#splashpage b { color: inherit; }
#bpWrapper {
margin: 0 auto;
max-width: 1250px;
box-shadow: 0 0 8px rgba(0,0,0,0.5);
}
header {
min-width: 320px;
width: 100%;
text-shadow: 0 1px rgba(255,255,255,0.6);
display: table;
table-layout: fixed;
border: 1px solid rgba(0,0,0,0.25);
border-top-color: rgba(255,255,255,0.85);
border-style: solid none;
background-image: -webkit-linear-gradient(top, rgba(240,240,240,0.95), rgba(220,220,220,0.95));
background-image: linear-gradient(to bottom, rgba(240,240,240,0.95), rgba(220,220,220,0.95));
box-shadow: 0 0 1px 1px rgba(0,0,0,0.04);
background: #3c8dbc;
display: table;
position: relative;
width: 100%;
}
header h1, header div {
display: table-cell;
color: inherit;
font-weight: bold;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
box-sizing: border-box;
header h1, header h1 a, header .spc, header #bpAlt label {
display: table-cell;
color: #fff;
white-space: nowrap;
vertical-align: middle;
height: 50px; /* Must match #bpAbout top value */
}
header h1 {
font-size: 22px;
font-weight: bold;
width: 100%;
padding: 8px 0;
text-indent: 32px;
background: url("http://pi.hole/admin/img/logo.svg") left no-repeat;
background-size: 30px 22px;
h1 a {
background-color: rgba(0,0,0,0.1);
font-family: "Helvetica Neue", Helvetica, Arial ,sans-serif;
font-size: 2rem;
font-weight: normal;
min-width: 230px;
text-align: center;
}
header h1 a, h1 a:hover { color: inherit; }
header .alt { width: 85px; font-size: 0.8em; padding-right: 4px; text-align: right; line-height: 1.25em; }
.active { color: green; }
.inactive { color: red; }
h1 a:hover, header #bpAlt:hover { background-color: rgba(0,0,0,0.12); color: inherit; text-decoration: none; }
header .spc { width: 100%; }
header #bpAlt label {
background: url("/admin/img/logo.svg") no-repeat center left 15px;
background-size: 15px 23px;
padding: 0 15px;
text-indent: 30px;
}
[type=checkbox][id$="Toggle"] { display: none; }
[type=checkbox][id$="Toggle"]:checked ~ #bpAbout,
[type=checkbox][id$="Toggle"]:checked ~ #bpMoreInfo {
display: block; }
/* Click anywhere else on screen to hide #bpAbout */
#bpAboutToggle:checked {
display: block;
height: 300px; /* VH Fallback */
height: 100vh;
left: 0;
top: 0;
opacity: 0;
position: absolute;
width: 100%;
}
#bpAbout {
background: #3c8dbc;
border-bottom-left-radius: 5px;
border: 1px solid #FFF;
border-right-width: 0;
box-shadow: -1px 1px 1px rgba(0,0,0,0.12);
box-sizing: border-box;
display: none;
font-size: 1.7rem;
top: 50px;
position: absolute;
right: 0;
width: 280px;
z-index: 1;
}
.aboutPH {
box-sizing: border-box;
color: rgba(255,255,255,0.8);
display: block;
padding: 10px;
width: 100%;
text-align: center;
}
.aboutImg {
background: url("/admin/img/logo.svg") no-repeat center;
background-size: 90px 90px;
height: 90px;
margin: 0 auto;
padding: 2px;
width: 90px;
}
.aboutPH p { margin: 10px 0; }
.aboutPH small { display: block; font-size: 1.2rem; }
.aboutLink {
background: #fff;
border-top: 1px solid #ddd;
display: table;
font-size: 1.4rem;
text-align: center;
width: 100%;
}
.aboutLink a {
display: table-cell;
padding: 14px;
min-width: 50%;
}
main {
display: block;
width: 80%;
padding: 10px;
font-size: 1em;
background-color: rgba(255,255,255,0.85);
margin: 8px auto;
box-sizing: border-box;
border: 1px solid rgba(0,0,0,0.25);
box-shadow: 4px 4px rgba(0,0,0,0.1);
line-height: 1.2em;
border-radius: 8px;
background: #ecf0f5;
font-size: 1.65rem;
padding: 10px;
}
h2 { /* Rgba is shared with .transparent th */
font: 1.15em sans-serif;
background-color: rgba(255,0,0,0.4);
text-shadow: none;
line-height: 1.1em;
padding-bottom: 1px;
margin-top: 8px;
margin-bottom: 4px;
background: -webkit-linear-gradient(left, rgba(0,0,0,0.25), transparent 80%) no-repeat;
background: linear-gradient(to right, rgba(0,0,0,0.25), transparent 80%) no-repeat;
background-size: 100% 1px;
background-position: 0 17px;
#bpOutput {
background: #00c0ef;
border-radius: 3px;
border: 1px solid rgba(0,0,0,0.1);
color: #fff;
font-size: 1.4rem;
margin-bottom: 10px;
margin-top: 5px;
padding: 15px;
}
h2:first-child { margin-top: 0; }
h2 ~ *:not(h2) { margin-left: 4px; }
li { padding: 2px 0; }
li::before { content: "\00BB\00a0"; }
li a { position: relative; top: 1px; } /* Center bullet-point arrows */
/* Button Style */
.buttons a, button, input, .transparent th a { /* Swapped rgba is shared with input[type='url'] */
display: inline-block;
color: rgba(32,32,32,0.9);
font-weight: bold;
text-align: center;
cursor: pointer;
text-shadow: 0 1px rgba(255,255,255,0.2);
line-height: 0.86em;
font-size: 1em;
padding: 4px 8px;
background: #FAFAFA;
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.05), rgba(0,0,0,0.05));
background-image: linear-gradient(to bottom, rgba(255,255,255,0.05), rgba(0,0,0,0.05));
border: 1px solid rgba(0,0,0,0.25);
border-radius: 4px;
box-shadow: 0 1px 0 rgba(0,0,0,0.04);
#bpOutput:before {
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='14' viewBox='0 0 7 14'%3E%3Cpath fill='%23fff' d='M6,11a1.371,1.371,0,0,1,1,1v1a1.371,1.371,0,0,1-1,1H1a1.371,1.371,0,0,1-1-1V12a1.371,1.371,0,0,1,1-1H2V8H1A1.371,1.371,0,0,1,0,7V6A1.371,1.371,0,0,1,1,5H4A1.371,1.371,0,0,1,5,6v5H6ZM3.5,0A1.5,1.5,0,1,1,2,1.5,1.5,1.5,0,0,1,3.5,0Z'/%3E%3C/svg%3E") no-repeat center left;
display: block;
font-size: 1.8rem;
text-indent: 15px;
}
.buttons { white-space: nowrap; width: 100%; display: table; }
.buttons33 { white-space: nowrap; width: 33.333%; display: table; text-align: center; margin-left: 33.333% }
.mini a { width: 50%; }
a.safe { background-color: rgba(0,220,0,0.5); }
button.safe { background-color: rgba(0,220,0,0.5); }
a.warn { background-color: rgba(220,0,0,0.5); }
#bpOutput.hidden { display: none; }
#bpOutput.success { background: #00a65a; }
#bpOutput.error { background: #dd4b39; }
.blocked a, .mini a { display: table-cell; }
.blocked a.safe50 { width: 50%; background-color: rgba(0,220,0,0.5); }
.blocked a.safe33 { width: 33.333%; background-color: rgba(0,220,0,0.5); }
.blockMsg, .flagMsg {
font: bold 1.8rem Consolas, Courier, monospace;
padding: 5px 10px 10px 10px;
text-indent: 15px;
}
/* Types of text */
.msg { white-space: pre; overflow: auto; -webkit-overflow-scrolling: touch; display: block; line-height: 1.2em; font-weight: bold; font-size: 1.15em; margin: 4px 8px 8px 8px; white-space: pre-line; }
#bpHelpTxt { padding-bottom: 10px; }
footer { font-size: 0.8em; text-align: center; width: 87%; margin: 4px auto; }
.buttons {
border-spacing: 5px 0;
display: table;
width: 100%;
}
.buttons * {
-moz-appearance: none;
-webkit-appearance: none;
border-radius: 3px;
border: 1px solid rgba(0,0,0,0.1);
box-sizing: content-box;
display: table-cell;
font-size: 1.65rem;
margin-right: 5px;
min-height: 20px;
padding: 6px 12px;
position: relative;
text-align: center;
vertical-align: top;
white-space: nowrap;
width: auto;
}
.buttons a:hover { text-decoration: none; }
/* Button hover dark overlay */
.buttons *:not(input):not([disabled]):hover {
background-image: linear-gradient(to bottom, rgba(0,0,0,0.1), rgba(0,0,0,0.1));
color: #FFF;
}
/* Button active shadow inset */
.buttons *:not([disabled]):not(input):active {
box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);
}
/* Input border colour */
.buttons *:not([disabled]):hover, .buttons input:focus {
border-color: rgba(0,0,0,0.25);
}
#bpButtons * { width: 50%; color: #FFF; }
#bpBack { background-color: #00a65a; }
#bpInfo { background-color: #3c8dbc; }
#bpWhitelist { background-color: #dd4b39; }
#blockpage .buttons [type=password][disabled] { color: rgba(0,0,0,1); }
#blockpage .buttons [disabled] { color: rgba(0,0,0,0.55); background-color: #e3e3e3; }
#blockpage .buttons [type=password]:-ms-input-placeholder { color: rgba(51,51,51,0.8); }
input[type=password] { font-size: 1.5rem; }
@keyframes slidein { from { max-height: 0; opacity: 0; } to { max-height: 300px; opacity: 1; } }
#bpMoreToggle:checked ~ #bpMoreInfo { display: block; margin-top: 8px; animation: slidein 0.05s linear; }
#bpMoreInfo { display: none; margin-top: 10px; }
#bpQueryOutput {
font-size: 1.2rem;
line-height: 1.65rem;
margin: 5px 0 0 0;
overflow: auto;
padding: 0 5px;
-webkit-overflow-scrolling: touch;
}
#bpQueryOutput span { margin-right: 4px; }
#bpWLButtons { width: auto; margin-top: 10px; }
#bpWLButtons * { display: inline-block; }
#bpWLDomain { display: none; }
#bpWLPassword { width: 160px; }
#bpWhitelist { color: #fff; }
footer {
background: #fff;
border-top: 1px solid #d2d6de;
color: #444;
font: 1.2rem Consolas, Courier, monospace;
padding: 8px;
}
/* Responsive Content */
@media only screen and (max-width: 500px) {
h1 a { font-size: 1.8rem; min-width: 170px; }
footer span:before { content: "Generated "; }
footer span { display: block; }
}
@media only screen and (min-width: 1251px) {
#bpWrapper, footer { border-radius: 0 0 5px 5px; }
#bpAbout { border-right-width: 1px; }
}

View File

@@ -1 +0,0 @@
var x = "Pi-hole: A black hole for Internet advertisements."

View File

@@ -1,162 +1,346 @@
<?php
/* Detailed Pi-Hole Block Page: Show "Website Blocked" if user browses to site, but not to image/file requests based on the work of WaLLy3K for DietPi & Pi-Hole */
/* 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.
*
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
$uri = escapeshellcmd($_SERVER['REQUEST_URI']);
$serverName = escapeshellcmd($_SERVER['SERVER_NAME']);
// Sanitise HTTP_HOST output
$serverName = htmlspecialchars($_SERVER["HTTP_HOST"]);
// Retrieve server URI extension (EG: jpg, exe, php)
$uriExt = pathinfo($uri, PATHINFO_EXTENSION);
if (!is_file("/etc/pihole/setupVars.conf"))
die("[ERROR] File not found: <code>/etc/pihole/setupVars.conf</code>");
// Define which URL extensions get rendered as "Website Blocked"
$webExt = array('asp', 'htm', 'html', 'php', 'rss', 'xml');
// Get values from setupVars.conf
$setupVars = parse_ini_file("/etc/pihole/setupVars.conf");
$svPasswd = !empty($setupVars["WEBPASSWORD"]);
$svEmail = (!empty($setupVars["ADMIN_EMAIL"]) && filter_var($setupVars["ADMIN_EMAIL"], FILTER_VALIDATE_EMAIL)) ? $setupVars["ADMIN_EMAIL"] : "";
unset($setupVars);
if(in_array($uriExt, $webExt) || empty($uriExt))
{
// Requested resource has an extension listed in $webExt
// or no extension (index access to some folder incl. the root dir)
$showPage = true;
}
else
{
// Something else
$showPage = false;
// Set landing page location, found within /var/www/html/
$landPage = "../landing.php";
// Define array for hostnames to be accepted as self address for splash page
$authorizedHosts = [];
if (!empty($_SERVER["FQDN"])) {
// If setenv.add-environment = ("fqdn" => "true") is configured in lighttpd,
// append $serverName to $authorizedHosts
array_push($authorizedHosts, $serverName);
} else if (!empty($_SERVER["VIRTUAL_HOST"])) {
// Append virtual hostname to $authorizedHosts
array_push($authorizedHosts, $_SERVER["VIRTUAL_HOST"]);
}
// Handle incoming URI types
if (!$showPage)
{
?>
<html>
<head>
<script>window.close();</script></head>
<body>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
</body>
</html>
<?php
die();
// Set which extension types render as Block Page (Including "" for index.ext)
$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";
}
// Get Pi-Hole version
$piHoleVersion = exec('cd /etc/.pihole/ && git describe --tags --abbrev=0');
// Set mobile friendly viewport
$viewPort = '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>';
// Don't show the URI if it is the root directory
if($uri == "/")
{
$uri = "";
// Set response header
function setHeader($type = "x") {
header("X-Pi-hole: A black hole for Internet advertisements.");
if (isset($type) && $type === "js") header("Content-Type: application/javascript");
}
// Determine block page type
if ($serverName === "pi.hole") {
// Redirect to Web Interface
exit(header("Location: /admin"));
} elseif (filter_var($serverName, FILTER_VALIDATE_IP) || in_array($serverName, $authorizedHosts)) {
// Set Splash Page output
$splashPage = "
<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>
";
// Set splash/landing page based off presence of $landPage
$renderPage = is_file(getcwd()."/$landPage") ? include $landPage : "$splashPage";
// Unset variables so as to not be included in $landPage
unset($serverName, $svPasswd, $svEmail, $authorizedHosts, $validExtTypes, $currentUrlExt, $viewPort);
// Render splash/landing page when directly browsing via IP or authorised hostname
exit($renderPage);
} elseif ($currentUrlExt === "js") {
// Serve Pi-hole Javascript for blocked domains requesting JS
exit(setHeader("js").'var x = "Pi-hole: A black hole for Internet advertisements."');
} elseif (strpos($_SERVER["REQUEST_URI"], "?") !== FALSE && isset($_SERVER["HTTP_REFERER"])) {
// Serve blank image upon receiving REQUEST_URI w/ query string & HTTP_REFERRER
// e.g: An iframe of a blocked domain
exit(setHeader().'<html>
<head><script>window.close();</script></head>
<body><img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs="></body>
</html>');
} elseif (!in_array($currentUrlExt, $validExtTypes) || substr_count($_SERVER["REQUEST_URI"], "?")) {
// Serve SVG upon receiving non $validExtTypes URL extension or query string
// e.g: Not an iframe of a blocked domain, such as when browsing to a file/query directly
// QoL addition: Allow the SVG to be clicked on in order to quickly show the full Block Page
$blockImg = '<a href="/"><svg xmlns="http://www.w3.org/2000/svg" width="110" height="16"><defs><style>a {text-decoration: none;} circle {stroke: rgba(152,2,2,0.5); fill: none; stroke-width: 2;} rect {fill: rgba(152,2,2,0.5);} text {opacity: 0.3; font: 11px Arial;}</style></defs><circle cx="8" cy="8" r="7"/><rect x="10.3" y="-6" width="2" height="12" transform="rotate(45)"/><text x="19.3" y="12">Blocked by Pi-hole</text></svg></a>';
exit(setHeader()."<html>
<head>$viewPort</head>
<body>$blockImg</body>
</html>");
}
/* 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")))
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")) {
$adLists = "/etc/pihole/adlists.list";
} elseif (is_file("/etc/pihole/adlists.default")) {
$adLists = "/etc/pihole/adlists.default";
} else {
die("[ERROR] File not found: <code>/etc/pihole/adlists.list</code>");
}
// Get all URLs starting with "http" or "www" from adlists and re-index array numerically
$adlistsUrls = array_values(preg_grep("/(^http)|(^www)/i", file($adLists, FILE_IGNORE_NEW_LINES)));
if (empty($adlistsUrls))
die("[ERROR]: There are no adlist URL's found within <code>$adLists</code>");
// Get total number of blocklists (Including Whitelist, Blacklist & Wildcard lists)
$adlistsCount = count($adlistsUrls) + 3;
// Set query timeout
ini_set("default_socket_timeout", 3);
// Logic for querying blocklists
function queryAds($serverName) {
// Determine the time it takes while querying adlists
$preQueryTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"];
$queryAds = file("http://127.0.0.1/admin/scripts/pi-hole/php/queryads.php?domain=$serverName&bp", FILE_IGNORE_NEW_LINES);
$queryAds = array_values(array_filter(preg_replace("/data:\s+/", "", $queryAds)));
$queryTime = sprintf("%.0f", (microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]) - $preQueryTime);
// Exception Handling
try {
// Define Exceptions
if (strpos($queryAds[0], "No exact results") !== FALSE) {
// Return "none" into $queryAds array
return array("0" => "none");
} else if ($queryTime >= ini_get("default_socket_timeout")) {
// Connection Timeout
throw new Exception ("Connection timeout (".ini_get("default_socket_timeout")."s)");
} elseif (!strpos($queryAds[0], ".") !== false) {
// Unknown $queryAds output
throw new Exception ("Unhandled error message (<code>$queryAds[0]</code>)");
}
return $queryAds;
} catch (Exception $e) {
// Return exception as array
return array("0" => "error", "1" => $e->getMessage());
}
}
// Get results of queryads.php exact search
$queryAds = queryAds($serverName);
// Pass error through to Block Page
if ($queryAds[0] === "error")
die("[ERROR]: Unable to parse results from <i>queryads.php</i>: <code>".$queryAds[1]."</code>");
// Count total number of matching blocklists
$featuredTotal = count($queryAds);
// Place results into key => value array
$queryResults = null;
foreach ($queryAds as $str) {
$value = explode(" ", $str);
@$queryResults[$value[0]] .= "$value[1]";
}
// Determine if domain has been blacklisted, whitelisted, wildcarded or CNAME blocked
if (strpos($queryAds[0], "blacklist") !== FALSE) {
$notableFlagClass = "blacklist";
$adlistsUrls = array("π" => substr($queryAds[0], 2));
} elseif (strpos($queryAds[0], "whitelist") !== FALSE) {
$notableFlagClass = "noblock";
$adlistsUrls = array("π" => substr($queryAds[0], 2));
$wlInfo = "recentwl";
} elseif (strpos($queryAds[0], "wildcard") !== FALSE) {
$notableFlagClass = "wildcard";
$adlistsUrls = array("π" => substr($queryAds[0], 2));
} elseif ($queryAds[0] === "none") {
$featuredTotal = "0";
$notableFlagClass = "noblock";
// QoL addition: Determine appropriate info message if CNAME exists
// Suggests to the user that $serverName has a CNAME (alias) that may be blocked
$dnsRecord = dns_get_record("$serverName")[0];
if (array_key_exists("target", $dnsRecord)) {
$wlInfo = $dnsRecord['target'];
} else {
$wlInfo = "unknown";
}
}
// Set #bpOutput notification
$wlOutputClass = (isset($wlInfo) && $wlInfo === "recentwl") ? $wlInfo : "hidden";
$wlOutput = (isset($wlInfo) && $wlInfo !== "recentwl") ? "<a href='http://$wlInfo'>$wlInfo</a>" : "";
// Get Pi-hole Core version
$phVersion = exec("cd /etc/.pihole/ && git describe --long --tags");
// Print $execTime on development branches
// Testing for - is marginally faster than "git rev-parse --abbrev-ref HEAD"
if (explode("-", $phVersion)[1] != "0")
$execTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"];
// Please Note: Text is added via CSS to allow an admin to provide a localised
// language without the need to edit this file
setHeader();
?>
<!DOCTYPE html>
<!-- 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.
*
* This file is copyright under the latest version of the EUPL. -->
<html>
<head>
<meta charset='UTF-8'/>
<title>Website Blocked</title>
<link rel='stylesheet' href='http://pi.hole/pihole/blockingpage.css'/>
<link rel='shortcut icon' href='http://pi.hole/admin/img/favicon.png' type='image/png'/>
<meta name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0, user-scalable=no'/>
<meta name='robots' content='noindex,nofollow'/>
<meta charset="UTF-8">
<?=$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"/>
<title>● <?=$serverName ?></title>
<script src="<?=$proto ?>://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);';
echo '$("#bpWLPassword").attr("placeholder", "Password");';
}
?>
}
</script>
</head>
<body id="body">
<body id="blockpage"><div id="bpWrapper">
<header>
<h1><a href='/'>Website Blocked</a></h1>
<h1 id="bpTitle">
<a class="title" href="/"><?php //Website Blocked ?></a>
</h1>
<div class="spc"></div>
<input id="bpAboutToggle" type="checkbox"/>
<div id="bpAbout">
<div class="aboutPH">
<div class="aboutImg"/></div>
<p>Open Source Ad Blocker
<small>Designed for Raspberry Pi</small>
</p>
</div>
<div class="aboutLink">
<a class="linkPH" href="https://github.com/pi-hole/pi-hole/wiki/What-is-Pi-hole%3F-A-simple-explanation"><?php //About PH ?></a>
<?php if (!empty($svEmail)) echo '<a class="linkEmail" href="mailto:'.$svEmail.'"></a>'; ?>
</div>
</div>
<div id="bpAlt">
<label class="altBtn" for="bpAboutToggle"><?php //Why am I here? ?></label>
</div>
</header>
<main>
<div>Access to the following site has been blocked:<br/>
<span class='pre msg'><?php echo $serverName.$uri; ?></span></div>
<div>If you have an ongoing use for this website, please ask the owner of the Pi-hole in your network to have it whitelisted.</div>
<input id="domain" type="hidden" value="<?php echo $serverName; ?>">
<input id="quiet" type="hidden" value="yes">
<button id="btnSearch" class="buttons blocked" type="button" style="visibility: hidden;"></button>
This page is blocked because it is explicitly contained within the following block list(s):
<pre id="output" style="width: 100%; height: 100%;" hidden="true"></pre><br/>
<div class='buttons blocked'>
<a class='safe33' href='javascript:history.back()'>Go back</a>
<a class='safe33' id="whitelisting">Whitelist this page</a>
<a class='safe33' href='javascript:window.close()'>Close window</a>
</div>
<div style="width: 98%; text-align: center; padding: 10px;" hidden="true" id="whitelistingform">Password required!<br/>
<form>
<input name="list" type="hidden" value="white"><br/>
Domain:<br/>
<input name="domain" value="<?php echo $serverName ?>" disabled><br/><br/>
Password:<br/>
<input type="password" id="pw" name="pw"><br/><br/>
<button class="buttons33 safe" id="btnAdd" type="button">Whitelist</button>
</form><br/>
<pre id="whitelistingoutput" style="width: 100%; height: 100%; padding: 5px;" hidden="true"></pre><br/>
</div>
<div id="bpOutput" class="<?=$wlOutputClass ?>"><?=$wlOutput ?></div>
<div id="bpBlock">
<p class="blockMsg"><?=$serverName ?></p>
</div>
<?php if(isset($notableFlagClass)) { ?>
<div id="bpFlag">
<p class="flagMsg <?=$notableFlagClass ?>"></p>
</div>
<?php } ?>
<div id="bpHelpTxt"><?=$bpAskAdmin ?></div>
<div id="bpButtons" class="buttons">
<a id="bpBack" onclick="javascript:history.back()" href="about:home"></a>
<?php if ($featuredTotal > 0) echo '<label id="bpInfo" for="bpMoreToggle"></label>'; ?>
</div>
<input id="bpMoreToggle" type="checkbox">
<div id="bpMoreInfo">
<span id="bpFoundIn"><span><?=$featuredTotal ?></span><?=$adlistsCount ?></span>
<pre id='bpQueryOutput'><?php if ($featuredTotal > 0) foreach ($queryResults as $num => $value) { echo "<span>[$num]:</span>$adlistsUrls[$num]\n"; } ?></pre>
<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>
</form>
</div>
</main>
<footer>Generated <?php echo date('D g:i A, M d'); ?> by Pi-hole <?php echo $piHoleVersion; ?></footer>
<script src="http://pi.hole/admin/scripts/vendor/jquery.min.js"></script>
<script src="http://pi.hole/admin/scripts/pi-hole/js/queryads.js"></script>
<footer><span><?=date("l g:i A, F dS"); ?>.</span> Pi-hole <?=$phVersion ?> (<?=gethostname()."/".$_SERVER["SERVER_ADDR"]; if (isset($execTime)) printf("/%.2fs", $execTime); ?>)</footer>
</div>
<script>
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
function add() {
$("#bpOutput").removeClass("hidden error exception");
$("#bpOutput").addClass("add");
var domain = "<?=$serverName ?>";
var pw = $("#bpWLPassword");
if(domain.length === 0) {
return;
}
}
// Try to detect if page is loaded within iframe
if(inIframe())
{
// Within iframe
// hide content of page
$('#body').hide();
// remove background
document.body.style.backgroundImage = "none";
}
else
{
// Query adlists
$( "#btnSearch" ).click();
}
$( "#whitelisting" ).on( "click", function(){ $( "#whitelistingform" ).removeAttr( "hidden" ); });
function add() {
var domain = $("#domain");
var pw = $("#pw");
if(domain.val().length === 0){
return;
}
$.ajax({
url: "admin/scripts/pi-hole/php/add.php",
method: "post",
data: {"domain":domain.val(), "list":"white", "pw":pw.val()},
success: function(response) {
$( "#whitelistingoutput" ).removeAttr( "hidden" );
if(response.indexOf("Pi-hole blocking") !== -1)
{
// Reload page after 5 seconds
setTimeout(function(){window.location.reload(1);}, 5000);
$( "#whitelistingoutput" ).html("---> Success <---<br/>You may have to flush your DNS cache");
}
else
{
$( "#whitelistingoutput" ).html("---> "+response+" <---");
}
},
error: function(jqXHR, exception) {
$( "#whitelistingoutput" ).removeAttr( "hidden" );
$( "#whitelistingoutput" ).html("---> Unknown Error <---");
}
});
}
// Handle enter button for adding domains
$(document).keypress(function(e) {
if(e.which === 13 && $("#pw").is(":focus")) {
$.ajax({
url: "/admin/scripts/pi-hole/php/add.php",
method: "post",
data: {"domain":domain, "list":"white", "pw":pw.val()},
success: function(response) {
if(response.indexOf("Pi-hole blocking") !== -1) {
setTimeout(function(){window.location.reload(1);}, 10000);
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("success");
} else {
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("error");
$("#bpOutput").html(""+response+"");
}
},
error: function(jqXHR, exception) {
$("#bpOutput").removeClass("add");
$("#bpOutput").addClass("exception");
}
});
}
<?php if ($featuredTotal > 0) { ?>
$(document).keypress(function(e) {
if(e.which === 13 && $("#bpWLPassword").is(":focus")) {
add();
}
});
$("#bpWhitelist").on("click", function() {
add();
}
});
// Handle buttons
$("#btnAdd").on("click", function() {
add();
});
});
<?php } ?>
</script>
</body>
</html>
</body></html>

View File

@@ -1,13 +1,19 @@
# 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
# lighttpd 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.
# Lighttpd config for Pi-hole
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY OVERWRITTEN BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE: #
# /etc/lighttpd/external.conf #
###############################################################################
server.modules = (
"mod_access",
@@ -21,19 +27,18 @@ 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"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
url.access-deny = ( "~", ".inc", ".md", ".yml", ".ini" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
@@ -42,24 +47,28 @@ compress.filetype = ( "application/javascript", "text/css", "text/html
# 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"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
# Prevent Lighttpd from enabling Let's Encrypt SSL for every blocked domain
#include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
include_shell "find /etc/lighttpd/conf-enabled -name '*.conf' -a ! -name 'letsencrypt.conf' -printf 'include \"%p\"\n' 2>/dev/null"
# If the URL starts with /admin, it is the Web interface
$HTTP["url"] =~ "^/admin/" {
# Create a response header for debugging using curl -I
# Create a response header for debugging using curl -I
setenv.add-response-header = (
"X-Pi-hole" => "The Pi-hole Web interface is working!",
"X-Frame-Options" => "DENY"
)
$HTTP["url"] =~ ".ttf$" {
# Allow Block Page access to local fonts
setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )
}
}
# Rewite js requests, must be out of $HTTP block due to bug #2526
url.rewrite = ( "^(?!/admin/).*\.js$" => "pihole/index.js" )
# If the URL does not start with /admin, then it is a query for an ad domain
$HTTP["url"] =~ "^(?!/admin)/.*" {
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "A black hole for Internet advertisements." )
# Block . files from being served, such as .git, .github, .gitignore
$HTTP["url"] =~ "^/admin/\.(.*)" {
url.access-deny = ("")
}
# Add user chosen options held in external file

View File

@@ -1,13 +1,19 @@
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# lighttpd config for Pi-hole
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY OVERWRITTEN BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE: #
# /etc/lighttpd/external.conf #
###############################################################################
server.modules = (
"mod_access",
@@ -22,19 +28,19 @@ 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"
server.username = "lighttpd"
server.groupname = "lighttpd"
server.port = 80
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
url.access-deny = ( "~", ".inc", ".md", ".yml", ".ini" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
@@ -66,17 +72,21 @@ fastcgi.server = ( ".php" =>
# If the URL starts with /admin, it is the Web interface
$HTTP["url"] =~ "^/admin/" {
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "The Pi-hole Web interface is working!" )
# Create a response header for debugging using curl -I
setenv.add-response-header = (
"X-Pi-hole" => "The Pi-hole Web interface is working!",
"X-Frame-Options" => "DENY"
)
$HTTP["url"] =~ ".ttf$" {
# Allow Block Page access to local fonts
setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )
}
}
# Rewite js requests, must be out of $HTTP block due to bug #2526
url.rewrite = ( "^(?!/admin/).*\.js$" => "pihole/index.js" )
# If the URL does not start with /admin, then it is a query for an ad domain
$HTTP["url"] =~ "^(?!/admin)/.*" {
# Create a response header for debugging using curl -I
setenv.add-response-header = ( "X-Pi-hole" => "A black hole for Internet advertisements." )
# Block . files from being served, such as .git, .github, .gitignore
$HTTP["url"] =~ "^/admin/\.(.*)" {
url.access-deny = ("")
}
# Add user chosen options held in external file

21
advanced/logrotate Normal file
View File

@@ -0,0 +1,21 @@
/var/log/pihole.log {
# su #
daily
copytruncate
rotate 5
compress
delaycompress
notifempty
nomail
}
/var/log/pihole-FTL.log {
# su #
weekly
copytruncate
rotate 3
compress
delaycompress
notifempty
nomail
}

View File

@@ -0,0 +1,84 @@
#!/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
mkdir -p /var/run/pihole
mkdir -p /var/log/pihole
chown pihole:pihole /var/run/pihole /var/log/pihole
rm /var/run/pihole/FTL.sock
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

View File

@@ -1,26 +1,34 @@
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Updates ad sources every week
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
#
#
#
# This file is under source-control of the Pi-hole installation and update
# scripts, any changes made to this file will be overwritten when the softare
# is updated or re-installed. Please make any changes to the appropriate crontab
# or other cron file snippets.
# Pi-hole: Update the ad sources once a week on Sunday at 01:59
# Download any updates from the adlists
# 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
# Pi-hole: Flush the log daily at 00:00
# The flush script will use logrotate if available
# parameter "once": logrotate only once (default is twice)
# parameter "quiet": don't print messages
00 00 * * * root PATH="$PATH:/usr/local/bin/" pihole flush once quiet
# Pi-hole: Flush the log daily at 00:00 so it doesn't get out of control
# Stats will be viewable in the Web interface thanks to the cron job above
00 00 * * * root PATH="$PATH:/usr/local/bin/" pihole flush
@reboot root /usr/sbin/logrotate /etc/pihole/logrotate
# Pi-hole: Grab local version and branch every 10 minutes
*/10 * * * * root PATH="$PATH:/usr/local/bin/" pihole updatechecker local
# Pi-hole: Grab remote version every 24 hours
59 17 * * * root PATH="$PATH:/usr/local/bin/" pihole updatechecker remote
@reboot root PATH="$PATH:/usr/local/bin/" pihole updatechecker remote reboot

View File

@@ -1,11 +1,9 @@
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Allows the WebUI to use Pi-hole commands
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
#

File diff suppressed because it is too large Load Diff

View File

@@ -1,40 +1,64 @@
#!/usr/bin/env bash
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Completely uninstalls Pi-hole
#
# 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.
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
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
done
# Must be root to uninstall
str="Root user check"
if [[ ${EUID} -eq 0 ]]; then
echo "::: You are root."
echo -e " ${TICK} ${str}"
else
echo "::: Sudo will be used for the uninstall."
# Check if it is actually installed
# If it isn't, exit because the unnstall cannot complete
# 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 "::: Please install sudo or run this as root."
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"
PH_TEST="true"
source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"
# setupVars set in basic-install.sh
source "${setupVars}"
# distro_check() sourced from basic-install.sh
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[@]}")
fi
# Compatability
if [ -x "$(command -v rpm)" ]; then
# Fedora Family
if [ -x "$(command -v dnf)" ]; then
PKG_MANAGER="dnf"
else
PKG_MANAGER="yum"
fi
PKG_REMOVE="${PKG_MANAGER} remove -y"
PIHOLE_DEPS=( bind-utils bc dnsmasq lighttpd lighttpd-fastcgi php-common git curl unzip wget findutils )
package_check() {
rpm -qa | grep ^$1- > /dev/null
}
@@ -43,9 +67,7 @@ if [ -x "$(command -v rpm)" ]; then
}
elif [ -x "$(command -v apt-get)" ]; then
# Debian Family
PKG_MANAGER="apt-get"
PKG_REMOVE="${PKG_MANAGER} -y remove --purge"
PIHOLE_DEPS=( dnsutils bc dnsmasq lighttpd php5-common git curl unzip wget )
package_check() {
dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed"
}
@@ -54,62 +76,51 @@ elif [ -x "$(command -v apt-get)" ]; then
${SUDO} ${PKG_MANAGER} -y autoclean
}
else
echo "OS distribution not supported"
exit
echo -e " ${CROSS} OS distribution not supported"
exit 1
fi
spinner() {
local pid=$1
local delay=0.50
local spinstr='/-\|'
while [ "$(ps a | awk '{print $1}' | grep "${pid}")" ]; do
local temp=${spinstr#?}
printf " [%c] " "${spinstr}"
local spinstr=${temp}${spinstr%"$temp}"}
sleep ${delay}
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
removeAndPurge() {
# Purge dependencies
echo ":::"
for i in "${PIHOLE_DEPS[@]}"; do
echo ""
for i in "${DEPS[@]}"; do
package_check ${i} > /dev/null
if [ $? -eq 0 ]; then
if [[ "$?" -eq 0 ]]; then
while true; do
read -rp "::: Do you wish to remove ${i} from your system? [y/n]: " yn
read -rp " ${QST} Do you wish to remove ${COL_WHITE}${i}${COL_NC} from your system? [Y/N] " yn
case ${yn} in
[Yy]* ) printf ":::\tRemoving %s..." "${i}"; ${SUDO} ${PKG_REMOVE} "${i}" &> /dev/null & spinner $!; printf "done!\n"; break;;
[Nn]* ) printf ":::\tSkipping %s\n" "${i}"; break;;
* ) printf "::: You must answer yes or no!\n";;
[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
printf ":::\tPackage %s not installed... Not removing.\n" "${i}"
echo -e " ${INFO} Package ${i} not installed"
fi
done
# Remove dependency config files
echo "::: Removing dnsmasq config files..."
${SUDO} rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null
# 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"
# Take care of any additional package cleaning
printf "::: Auto removing & cleaning remaining dependencies..."
package_cleanup &> /dev/null & spinner $!; printf "done!\n";
echo -ne " ${INFO} Removing & cleaning remaining dependencies..."
package_cleanup &> /dev/null
echo -e "${OVER} ${TICK} Removed & cleaned up remaining dependencies"
# Call removeNoPurge to remove PiHole specific files
# Call removeNoPurge to remove Pi-hole specific files
removeNoPurge
}
removeNoPurge() {
echo ":::"
# Only web directories/files that are created by pihole should be removed.
echo "::: Removing the Pi-hole Web server files..."
# 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 /var/www/html/index.lighttpd.orig &> /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
@@ -117,65 +128,96 @@ removeNoPurge() {
${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
echo "::: Initial Pi-hole cron detected. Restoring the default system cron..."
${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
echo "::: Removing cron.d/pihole..."
${SUDO} rm /etc/cron.d/pihole &> /dev/null
${SUDO} rm -f /etc/cron.d/pihole &> /dev/null
echo -e " ${TICK} Removed /etc/cron.d/pihole"
fi
echo "::: Removing config files and scripts..."
package_check lighttpd > /dev/null
if [ $? -eq 1 ]; then
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 /etc/dnsmasq.d/adList.conf &> /dev/null
${SUDO} rm /etc/dnsmasq.d/01-pihole.conf &> /dev/null
${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 /usr/local/bin/pihole &> /dev/null
${SUDO} rm /etc/bash_completion.d/pihole &> /dev/null
${SUDO} rm /etc/sudoers.d/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
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 2>&1; then
echo "::: Removing pihole user..."
${SUDO} userdel -r pihole
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"
fi
fi
echo ":::"
printf "::: Finished removing PiHole from your system. Sorry to see you go!\n"
printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n"
printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L https://install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n"
printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!\n"
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 ###########
echo "::: Preparing to remove packages, be sure that each may be safely removed depending on your operating system."
echo "::: (SAFE TO REMOVE ALL ON RASPBIAN)"
if command -v vcgencmd &> /dev/null; then
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"
fi
while true; do
read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package) [y/n]: " yn
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

1002
gravity.sh

File diff suppressed because it is too large Load Diff

658
pihole
View File

@@ -1,29 +1,32 @@
#!/bin/bash
# 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
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Controller for all pihole scripts and functions.
#
# 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.
# This file is copyright under the latest version of the EUPL.
# 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 colfile="${PI_HOLE_SCRIPT_DIR}/COL_TABLE"
source "${colfile}"
PI_HOLE_SCRIPT_DIR="/opt/pihole"
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
if [ -x "$(command -v sudo)" ];then
if [[ -x "$(command -v sudo)" ]]; then
exec sudo bash "$0" "$@"
exit $?
else
echo "::: sudo is needed to run pihole commands. Please run this script as root or install sudo."
echo -e " ${CROSS} sudo is needed to run pihole commands. Please run this script as root or install sudo."
exit 1
fi
fi
webpageFunc() {
source /opt/pihole/webpage.sh
source "${PI_HOLE_SCRIPT_DIR}/webpage.sh"
main "$@"
exit 0
}
@@ -38,13 +41,30 @@ blacklistFunc() {
exit 0
}
wildcardFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
debugFunc() {
"${PI_HOLE_SCRIPT_DIR}"/piholeDebug.sh
local automated
local web
# Pull off the `debug` leaving passed call augmentation flags in $1
shift
if [[ "$@" == *"-a"* ]]; then
automated="true"
fi
if [[ "$@" == *"-w"* ]]; then
web="true"
fi
AUTOMATED=${automated:-} WEBCALL=${web:-} "${PI_HOLE_SCRIPT_DIR}"/piholeDebug.sh
exit 0
}
flushFunc() {
"${PI_HOLE_SCRIPT_DIR}"/piholeLogFlush.sh
"${PI_HOLE_SCRIPT_DIR}"/piholeLogFlush.sh "$@"
exit 0
}
@@ -63,36 +83,230 @@ updateGravityFunc() {
exit 0
}
setupLCDFunction() {
"${PI_HOLE_SCRIPT_DIR}"/setupLCD.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
}
scanList(){
domain="${1}"
list="${2}"
method="${3}"
if [[ ${method} == "-exact" ]] ; then
grep -i -E "(^|\s)${domain}($|\s)" "${list}"
else
grep -i "${domain}" "${list}"
fi
# 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
}
queryFunc() {
domain="${2}"
method="${3}"
lists=( /etc/pihole/list.* /etc/pihole/blacklist.txt)
for list in ${lists[@]}; do
result=$(scanList ${domain} ${list} ${method})
# Remove empty lines before couting number of results
count=$(sed '/^\s*$/d' <<< "$result" | wc -l)
echo "::: ${list} (${count} results)"
if [[ ${count} > 0 ]]; then
echo "${result}"
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
echo ""
done
exit 0
}
@@ -115,155 +329,308 @@ versionFunc() {
}
restartDNS() {
dnsmasqPid=$(pidof dnsmasq)
if [[ ${dnsmasqPid} ]]; then
# service already running - reload config
if [ -x "$(command -v systemctl)" ]; then
systemctl restart dnsmasq
else
service dnsmasq restart
fi
local svcOption svc str output status
svcOption="${1:-}"
# Determine if we should reload or restart dnsmasq
if [[ "${svcOption}" =~ "reload" ]]; then
# Using SIGHUP will NOT re-read any *.conf files
svc="killall -s SIGHUP dnsmasq"
else
# service not running, start it up
if [ -x "$(command -v systemctl)" ]; then
systemctl start dnsmasq
# Get PID of dnsmasq to determine if it needs to start or restart
if pidof dnsmasq &> /dev/null; then
svcOption="restart"
else
service dnsmasq start
svcOption="start"
fi
svc="service dnsmasq ${svcOption}"
fi
# Print output to Terminal, but not to Web Admin
str="${svcOption^}ing DNS service"
[[ -t 1 ]] && echo -ne " ${INFO} ${str}..."
output=$( { ${svc}; } 2>&1 )
status="$?"
if [[ "${status}" -eq 0 ]]; then
[[ -t 1 ]] && echo -e "${OVER} ${TICK} ${str}"
else
[[ ! -t 1 ]] && local OVER=""
echo -e "${OVER} ${CROSS} ${output}"
fi
# Send signal to FTL to have it re-parse the gravity files
killall -s SIGHUP pihole-FTL
}
piholeEnable() {
if [[ "${1}" == "0" ]] ; then
#Disable Pihole
if [[ "${2}" == "-h" ]] || [[ "${2}" == "--help" ]]; then
echo "Usage: pihole disable [time]
Example: 'pihole disable', or 'pihole disable 5m'
Disable Pi-hole subsystems
Time:
#s Disable Pi-hole functionality for # second(s)
#m Disable Pi-hole functionality for # minute(s)"
exit 0
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
echo "::: Blocking has been disabled!"
if [[ $# > 1 ]] ; then
if [[ ${2} == *"s"* ]] ; then
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"
fi
if [[ $# > 1 ]]; then
local error=false
if [[ "${2}" == *"s" ]]; then
tt=${2%"s"}
echo "::: Blocking will be re-enabled in ${tt} seconds"
nohup bash -c "sleep ${tt}; pihole enable" </dev/null &>/dev/null &
elif [[ ${2} == *"m"* ]] ; then
if [[ "${tt}" =~ ^-?[0-9]+$ ]];then
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 &
else
local error=true
fi
elif [[ "${2}" == *"m" ]]; then
tt=${2%"m"}
echo "::: Blocking will be re-enabled in ${tt} minutes"
tt=$((${tt}*60))
nohup bash -c "sleep ${tt}; pihole enable" </dev/null &>/dev/null &
if [[ "${tt}" =~ ^-?[0-9]+$ ]];then
local str="Disabling blocking for ${tt} minutes"
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 &
else
local error=true
fi
elif [[ -n "${2}" ]]; then
local error=true
else
echo "::: Unknown format for delayed reactivation of the blocking!"
echo "::: Example:"
echo "::: pihole disable 5s - will disable blocking for 5 seconds"
echo "::: pihole disable 7m - will disable blocking for 7 minutes"
echo "::: Blocking will not automatically be re-enabled!"
echo -e " ${INFO} Disabling blocking"
fi
if [[ ${error} == true ]];then
echo -e " ${COL_LIGHT_RED}Unknown format for delayed reactivation of the blocking!${COL_NC}"
echo -e " Try 'pihole disable --help' for more information."
exit 1
fi
local str="Pi-hole Disabled"
fi
else
#Enable pihole
echo "::: Blocking has been enabled!"
# Enable Pi-hole
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"
fi
fi
restartDNS
echo -e "${OVER} ${TICK} ${str}"
}
piholeLogging() {
shift
if [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]; then
echo "Usage: pihole logging [options]
Example: 'pihole logging on'
Specify whether the Pi-hole log should be used
if [[ "${1}" == "off" ]] ; then
#Disable Logging
Options:
on Enable 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
echo "::: Logging has been disabled!"
elif [[ "${1}" == "on" ]] ; then
#Enable logging
if [[ "${2}" != "noflush" ]]; then
# Flush logs
pihole -f
fi
echo -e " ${INFO} Disabling logging..."
local str="Logging has been disabled!"
elif [[ "${1}" == "on" ]]; then
# Enable logging
sed -i 's/^#log-queries/log-queries/' /etc/dnsmasq.d/01-pihole.conf
sed -i 's/^QUERY_LOGGING=false/QUERY_LOGGING=true/' /etc/pihole/setupVars.conf
echo "::: Logging has been enabled!"
echo -e " ${INFO} Enabling logging..."
local str="Logging has been enabled!"
else
echo "::: Invalid option passed, please pass 'on' or 'off'"
echo -e " ${COL_LIGHT_RED}Invalid option${COL_NC}
Try 'pihole logging --help' for more information."
exit 1
fi
restartDNS
echo -e "${OVER} ${TICK} ${str}"
}
piholeStatus() {
if [[ $(netstat -plnt | grep -c ':53 ') > 0 ]]; then
if [[ "${1}" != "web" ]] ; then
echo "::: DNS service is running"
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 [[ "${1}" != "web" ]]; then
echo -e " ${TICK} DNS service is running"
fi
else
if [[ "${1}" == "web" ]] ; then
echo "-1";
else
echo "::: DNS service is NOT running"
fi
return
case "${1}" in
"web") echo "-1";;
*) echo -e " ${CROSS} DNS service is NOT running";;
esac
return 0
fi
if [[ $(grep -i "^#addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf) ]] ; then
#list is commented out
if [[ "${1}" == "web" ]] ; then
echo 0;
else
echo "::: Pi-hole blocking is Disabled";
fi
elif [[ $(grep -i "^addn-hosts=/" /etc/dnsmasq.d/01-pihole.conf) ]] ; then
#list set
if [[ "${1}" == "web" ]] ; then
echo 1;
else
echo "::: Pi-hole blocking is Enabled";
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
# A config is commented out
case "${1}" in
"web") echo 0;;
*) echo -e " ${CROSS} Pi-hole blocking is Disabled";;
esac
elif [[ -n "${addnConfigs}" ]]; then
# Configs are set
case "${1}" in
"web") echo 1;;
*) echo -e " ${TICK} Pi-hole blocking is Enabled";;
esac
else
#addn-host not found
if [[ "${1}" == "web" ]] ; then
echo 99
else
echo "::: No hosts file linked to dnsmasq, adding it in enabled state"
fi
#add addn-host= to dnsmasq
# No configs were found
case "${1}" in
"web") echo 99;;
*) echo -e " ${INFO} No hosts file linked to dnsmasq, adding it in enabled state";;
esac
# Add addn-host= to dnsmasq
echo "addn-hosts=/etc/pihole/gravity.list" >> /etc/dnsmasq.d/01-pihole.conf
restartDNS
fi
}
tailFunc() {
echo "Press Ctrl-C to exit"
tail -F /var/log/pihole.log
echo -e " ${INFO} Press Ctrl-C to exit"
# Retrieve IPv4/6 addresses
source /etc/pihole/setupVars.conf
# Strip date from each line
# Colour blocklist/blacklist/wildcard entries as red
# Colour A/AAAA/DHCP strings as white
# 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,.*(query\\[A|DHCP).*,${COL_NC}&${COL_NC}," \
-e "s,.*,${COL_GRAY}&${COL_NC},"
exit 0
}
piholeCheckoutFunc() {
if [[ "$2" == "-h" ]] || [[ "$2" == "--help" ]]; then
echo "Usage: pihole checkout [repo] [branch]
Example: 'pihole checkout master' or 'pihole checkout core dev'
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
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"
exit 0
fi
source "${PI_HOLE_SCRIPT_DIR}"/piholeCheckout.sh
shift
checkout "$@"
}
tricorderFunc() {
if [[ ! -p "/dev/stdin" ]]; then
echo -e " ${INFO} Please do not call Tricorder directly"
exit 1
fi
if ! (echo > /dev/tcp/tricorder.pi-hole.net/9998) >/dev/null 2>&1; then
echo -e " ${CROSS} Unable to connect to Pi-hole's Tricorder server"
exit 1
fi
if command -v openssl &> /dev/null; then
openssl s_client -quiet -connect tricorder.pi-hole.net:9998 2> /dev/null < /dev/stdin
exit "$?"
else
echo -e " ${INFO} ${COL_YELLOW}Security Notice${COL_NC}: ${COL_WHITE}openssl${COL_NC} is not installed
Your debug log will be transmitted unencrypted via plain-text
There is a possibility that this could be intercepted by a third party
If you wish to cancel, press Ctrl-C to exit within 10 seconds"
secs="10"
while [[ "$secs" -gt "0" ]]; do
echo -ne "."
sleep 1
: $((secs--))
done
echo " "
nc tricorder.pi-hole.net 9999 < /dev/stdin
exit "$?"
fi
}
updateCheckFunc() {
"${PI_HOLE_SCRIPT_DIR}"/updatecheck.sh "$@"
exit 0
}
helpFunc() {
cat << EOM
::: Control all PiHole specific functions!
:::
::: Usage: pihole [options]
::: Add -h after -w (whitelist), -b (blacklist), -c (chronometer), or -a (admin) for more information on usage
:::
::: Options:
::: -w, whitelist Whitelist domains
::: -b, blacklist Blacklist domains
::: -d, debug Start a debugging session if having trouble
::: -f, flush Flush the pihole.log file
::: -t, tail Output the last lines of the pihole.log file. Lines are appended as the file grows
::: -up, updatePihole Update Pi-hole
::: -r, reconfigure Reconfigure or Repair Pi-hole
::: -g, updateGravity Update the list of ad-serving domains
::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it
::: -c, chronometer Calculates stats and displays to an LCD
::: -h, help Show this help dialog
::: -v, version Show current versions
::: -q, query Query the adlists for a specific domain
::: Use pihole -q domain -exact if you want to see exact matches only
::: -l, logging Enable or Disable logging (pass 'on' or 'off')
::: -a, admin Admin webpage options
::: uninstall Uninstall Pi-Hole from your system :(!
::: status Is Pi-Hole Enabled or Disabled
::: enable Enable Pi-Hole DNS Blocking
::: disable Disable Pi-Hole DNS Blocking
::: Blocking can also be disabled only temporarily, e.g.,
::: pihole disable 5m - will disable blocking for 5 minutes
::: restartdns Restart dnsmasq
EOM
echo "Usage: pihole [options]
Example: 'pihole -w -h'
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
Add '-h' for more info on whitelist/blacklist usage
Debugging Options:
-d, debug Start a debugging session
Add '-a' to enable automated debugging
-f, flush Flush the Pi-hole log
-r, reconfigure Reconfigure or Repair Pi-hole subsystems
-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
-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
-h, --help, help Show this help dialog
-l, logging Specify whether the Pi-hole log should be used
Add '-h' for more info on logging usage
-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 '-h' for more info on version usage
uninstall Uninstall Pi-hole from your system
status Display the running status of Pi-hole subsystems
enable Enable Pi-hole subsystems
disable Disable Pi-hole subsystems
Add '-h' for more info on disable usage
restartdns Restart Pi-hole subsystems
checkout Switch Pi-hole subsystems to a different Github branch
Add '-h' for more info on checkout usage";
exit 0
}
@@ -275,12 +642,12 @@ fi
case "${1}" in
"-w" | "whitelist" ) whitelistFunc "$@";;
"-b" | "blacklist" ) blacklistFunc "$@";;
"-d" | "debug" ) debugFunc;;
"-f" | "flush" ) flushFunc;;
"-wild" | "wildcard" ) wildcardFunc "$@";;
"-d" | "debug" ) debugFunc "$@";;
"-f" | "flush" ) flushFunc "$@";;
"-up" | "updatePihole" ) updatePiholeFunc;;
"-r" | "reconfigure" ) reconfigurePiholeFunc;;
"-g" | "updateGravity" ) updateGravityFunc "$@";;
"-s" | "setupLCD" ) setupLCDFunction;;
"-c" | "chronometer" ) chronometerFunc "$@";;
"-h" | "help" ) helpFunc;;
"-v" | "version" ) versionFunc "$@";;
@@ -288,10 +655,13 @@ case "${1}" in
"-l" | "logging" ) piholeLogging "$@";;
"uninstall" ) uninstallFunc;;
"enable" ) piholeEnable 1;;
"disable" ) piholeEnable 0 $2;;
"status" ) piholeStatus "$2";;
"restartdns" ) restartDNS;;
"disable" ) piholeEnable 0 "$2";;
"status" ) statusFunc "$2";;
"restartdns" ) restartDNS "$2";;
"-a" | "admin" ) webpageFunc "$@";;
"-t" | "tail" ) tailFunc;;
"checkout" ) piholeCheckoutFunc "$@";;
"tricorder" ) tricorderFunc;;
"updatechecker" ) updateCheckFunc "$@";;
* ) helpFunc;;
esac

View File

@@ -1,4 +1,4 @@
FROM debian:jessie
FROM buildpack-deps:jessie-scm
ENV GITDIR /etc/.pihole
ENV SCRIPTDIR /opt/pihole

View File

@@ -9,6 +9,10 @@ SETUPVARS = {
'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_setupVars_are_sourced_to_global_scope(Pihole):
''' currently update_dialogs sources setupVars with a dot,
then various other functions use the variables.
@@ -55,6 +59,8 @@ def test_setupVars_saved_to_file(Pihole):
TERM=xterm
source /opt/pihole/basic-install.sh
{}
mkdir -p /etc/dnsmasq.d
version_check_dnsmasq
finalExports
cat /etc/pihole/setupVars.conf
'''.format(set_setup_vars))
@@ -64,35 +70,367 @@ def test_setupVars_saved_to_file(Pihole):
for k,v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_configureFirewall_firewalld_no_errors(Pihole):
''' confirms firewalld rules are applied when appopriate '''
mock_command('firewall-cmd', '0', Pihole)
def test_configureFirewall_firewalld_running_no_errors(Pihole):
''' confirms firewalld rules are applied when firewallD is running '''
# firewallD returns 'running' as status
mock_command('firewall-cmd', {'*':('running', 0)}, Pihole)
# Whiptail dialog returns Ok for user prompt
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 dnsmasq'
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-port=80/tcp --add-port=53/tcp --add-port=53/udp' 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 '''
# firewallD returns non-running status
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'
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 '''
# firewallD returns running status
mock_command('firewall-cmd', {'*':('running', 0)}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', 1)}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
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('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
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 '''
# iptables command exists
mock_command('iptables', {'*':('', '0')}, Pihole)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '1')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
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)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '0')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
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
def test_configureFirewall_IPTables_enabled_not_exist_no_errors(Pihole):
''' 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)
# modinfo returns always true (ip_tables module check)
mock_command('modinfo', {'*':('', '0')}, Pihole)
# Whiptail dialog returns Cancel for user prompt
mock_command('whiptail', {'*':('', '0')}, Pihole)
configureFirewall = Pihole.run('''
source /opt/pihole/basic-install.sh
configureFirewall
''')
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
def test_installPiholeWeb_fresh_install_no_errors(Pihole):
''' 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
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'''
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
def test_update_package_cache_failure_no_errors(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
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 '''
# mock uname to return aarch64 platform
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)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + ' Detected ARM-aarch64 architecture'
assert expected_stdout in detectPlatform.stdout
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 '''
# mock uname to return armv6l platform
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)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
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 '''
# mock uname to return armv7l platform
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)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + ' Detected ARM-hf architecture (armv7+)'
assert expected_stdout in detectPlatform.stdout
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 '''
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
''')
expected_stdout = info_box + ' FTL Checks...'
assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + ' Detected x86_64 architecture'
assert expected_stdout in detectPlatform.stdout
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)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
''')
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
download_binary = Pihole.run('''
source /opt/pihole/basic-install.sh
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
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 '''
installed_binary = Pihole.run('''
source /opt/pihole/basic-install.sh
FTLdetect
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 '''
# support_files = Pihole.run('''
# source /opt/pihole/basic-install.sh
# FTLdetect
# stat -c '%a %n' /var/log/pihole-FTL.log
# stat -c '%a %n' /run/pihole-FTL.port
# stat -c '%a %n' /run/pihole-FTL.pid
# ls -lac /run
# ''')
# assert '644 /run/pihole-FTL.port' in support_files.stdout
# 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 '''
# 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)
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'
assert expected_stdout in detectPlatform.stdout
def test_IPv6_only_ULA(Pihole):
''' 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)
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
def test_IPv6_only_GUA(Pihole):
''' 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)
detectPlatform = Pihole.run('''
source /opt/pihole/basic-install.sh
useIPv6dialog
''')
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 '''
# 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)
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
def test_IPv6_ULA_GUA_test(Pihole):
''' 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)
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, result, container):
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 '''
''' TODO: support array of results that enable the results to change over multiple executions of a command '''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
exit {retcode}
'''.format(script=script, retcode=result))
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}
'''.format(script=full_script_path, content=mock_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)

View File

@@ -7,7 +7,7 @@ run_local = testinfra.get_backend(
def test_scripts_pass_shellcheck():
''' Make sure shellcheck does not find anything wrong with our shell scripts '''
shellcheck = "find . -type f \( -name 'update.sh' -o -name 'piholeDebug.sh' \) | while read file; do shellcheck \"$file\"; done;"
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