Compare commits

...

1162 Commits

Author SHA1 Message Date
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
6f1ed28d0a Merge pull request #1274 from pi-hole/development
Pi-hole Core v2.13
2017-03-02 14:34:43 -08: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
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
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
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
Adam Warner
fcc3d5450d Merge pull request #1263 from pi-hole/idea
accidentally the idea file
2017-02-20 22:16:50 +00: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
Adam Warner
763b51fe22 linux style line endings enforced 2017-02-20 21:12:04 +00: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
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
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
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
a2bc86fbcb Merge pull request #1085 from pi-hole/development
[RELEASE] Pi-hole Core 2.11.1
2017-01-04 12:30:29 -08: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
DL6ER
d4f833c739 Merge pull request #1090 from pi-hole/fix/dead-led-link
replace dead link to another LED blink project page
2017-01-04 16:19:32 +01:00
Jacob Salmela
806f44abe6 replace dead link to another LED blink project page 2017-01-04 09:01:03 -06:00
Mcat12
900bdc5ee2 Merge pull request #1083 from pi-hole/fix/DHCP
Improvements to DHCP settings
2017-01-03 17:06:17 -05:00
DL6ER
200995bf29 Make IPv6 features of Pi-hole DHCP server switchable 2017-01-03 14:24:33 +01:00
DL6ER
3a90c1c192 Source setupVars.conf before trying to access variables 2017-01-03 13:34:01 +01:00
Dan Schaper
cc68155dfa Merge remote-tracking branch 'origin/master' 2017-01-02 14:12:30 -08:00
Mcat12
b8545eb1df Merge pull request #1074 from pi-hole/development
[RELEASE] Pi-hole Core 2.11
2017-01-02 16:36:55 -05:00
Mcat12
76531da340 Merge pull request #1067 from pi-hole/fix/firewall_redux
Fix/firewall redux
2017-01-02 11:36:38 -05:00
Adam Warner
12bec1df68 Merge pull request #1048 from pi-hole/tweak/simplify_webpage.sh
Major simplification of webpage.sh + extend DHCP to IPv6
2017-01-02 14:28:26 +00: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
ad61852804 Test against empty string 2017-01-02 11:10:38 +01:00
DL6ER
dbd8aee4ee Add 'local' domain if not set in setupVers.conf 2017-01-02 11:08:54 +01:00
DL6ER
677694b01a Set 24h lease time if settings was empty before 2017-01-02 11:05:40 +01:00
DL6ER
85f0241c0d Reprocess DHCP settings after update 2017-01-02 10:50:59 +01:00
Dan Schaper
ade2185a9f Merge pull request #1073 from pi-hole/tweak/quidsup
Comment out QuidsUp
2017-01-01 15:35:55 -08:00
Dan Schaper
0d27005dda Comment out QuidsUp
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 15:31:17 -08:00
Dan Schaper
8ee2bdec4d Plain grep, escape the special characters.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 14:38:10 -08:00
Dan Schaper
de6ce276d0 Merge branch 'development' of github.com:pi-hole/pi-hole into fix/firewall_redux 2017-01-01 14:13:32 -08:00
Dan Schaper
fbea81dcd7 Merge pull request #1068 from pi-hole/fix/anti_glob
Misc tweaks to the installer script. Defensive git cloning, and ability to source the installer script.
2017-01-01 14:10:55 -08:00
Dan Schaper
502c349b8b Merge branches 'development' and 'fix/firewall_redux' of github.com:pi-hole/pi-hole into fix/firewall_redux 2017-01-01 13:47:56 -08:00
Adam Warner
5fb0aa70de Merge pull request #1008 from pi-hole/feature/track_pre-installed_packages
Feature/track pre installed packages
2017-01-01 20:29:02 +00:00
Dan Schaper
7750e1344c DRY displayFinalMessage
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 07:10:14 -08:00
Dan Schaper
8be37130e9 Move first check to main(), basic-install.sh can now be sourced.
Set `PH_TEST=true` then `source basic-install.sh`. Careful for `set -e`.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 06:45:03 -08:00
Dan Schaper
fa055481a7 Shellcheck screen size
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 06:32:49 -08:00
Dan Schaper
d080e5d7a8 Merge branch 'fix/anti_glob' of github.com:pi-hole/pi-hole into fix/anti_glob 2017-01-01 00:18:37 -08:00
Dan Schaper
ad07655630 Defensive git cloning
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 00:14:12 -08:00
Dan Schaper
7cceb8615a make_repo more defensive.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 00:13:51 -08:00
Dan Schaper
ab9c8f4859 make_repo more defensive.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2017-01-01 00:00:48 -08:00
Dan Schaper
ffb8a74111 Defensive is_repo
`is_repo` defended

Document return codes for `is_repo()`

`is_repo` tested for 128,1,0 return values.
2017-01-01 00:00:20 -08:00
Dan Schaper
45587194e5 Regex fun
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-31 21:33:05 -08:00
Dan Schaper
ccbf391913 More intelligence in iptables rulesets. Account for Policy ACCEPT, with
default rule DROP or REJECT as last rule.

Regex the conditions to make sure we are getting the right conditions.

Reframe the logic to simplify the chains and rules

Reframe the logic to simplify the chains and rules

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-31 21:16:22 -08:00
DL6ER
ebf0db4bbf Typo fixed 2016-12-31 17:17:46 +00:00
Mcat12
7765efa6c4 Merge pull request #1063 from pi-hole/fix/chmod_scripts
All scripts set executable
2016-12-31 12:01:10 -05:00
DL6ER
02d4b6794c Merge pull request #1066 from dgnthr/patch-1
Fixed a typo in the installation script
2016-12-31 17:30:56 +01:00
Dominik G
836b717346 Fixed a typo in the installation script 2016-12-31 17:25:48 +01: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
fc596e41d4 All scripts set executable 2016-12-30 18:35:16 -08:00
Mcat12
1f9b0f7cef Merge pull request #1061 from pi-hole/fix/blockpage-whitelist-path
Adjust blocking page paths from admin restructure
2016-12-30 15:43:39 -05:00
Mcat12
7bcc15e416 Adjust blocking page paths from admin restructure 2016-12-30 15:36:53 -05:00
DL6ER
1a3bdbaabf Merge pull request #1057 from pi-hole/new/whitelistonblockingpage
Allow whitelisting from blocking page
2016-12-30 21:07:34 +01:00
Mcat12
5e35fdbc52 Save blocking page CSS to pihole directory instead of admin 2016-12-30 14:42:15 -05:00
Mcat12
ab2c486f25 Fix password Enter handling
Also remove extranious form information, since JS handles that
2016-12-30 14:13:15 -05:00
Mcat12
7fd7430d38 Use pi.hole when getting js and css
If a user is able to get to this page, they must be using Pi-hole
2016-12-30 13:43:29 -05:00
Mcat12
089b98430f Fix formatting 2016-12-30 12:59:05 -05:00
DL6ER
5c7fc05a32 Enable DHCP logging by default 2016-12-30 16:31:57 +00:00
Mcat12
ced0d3c2c0 Merge pull request #1055 from pi-hole/fix/firewall_check
Restructure firewall detection and application.
2016-12-30 11:23:30 -05:00
Mcat12
1afc5d351d Merge pull request #1058 from pi-hole/cleanup/remove_swap
Delete swapfile generator, haven't used this in a long time.
2016-12-30 11:12:28 -05:00
DL6ER
09bbc81470 Add notice that the user might have to flush his DNS cache 2016-12-30 12:27:33 +00:00
Dan Schaper
f7274addcd Delete swapfile generator, haven't used this in a long time.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-30 04:08:32 -08:00
DL6ER
09bfa2ef77 Add whitelisting on blocking page feature 2016-12-30 12:03:45 +00:00
Dan Schaper
a48518d234 Update test rig for new firewalld
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-29 16:11:13 -08:00
Dan Schaper
a4a9879643 Restructure firewall detection and application.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-29 15:57:29 -08:00
Dan Schaper
d1ccd7a460 Merge pull request #1052 from pi-hole/fix/missing_modules
Detect missing kernel modules
2016-12-29 14:51:35 -08:00
DL6ER
9181a4a1d8 Apply dhcp lease time also for IPv6 2016-12-29 14:26:23 +00:00
DL6ER
3268e1611a Backend accept and apply dhcp lease time 2016-12-29 14:19:44 +00:00
Dan Schaper
ea9ec384c6 Disambiguate nested ifs.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-29 01:35:52 -08:00
Dan Schaper
bbb958b7ed Detect RPF breaking kernel updates.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-29 01:34:49 -08:00
DL6ER
cf724176dc Do stateful DHCPv6 and SLAAC 2016-12-28 20:02:48 +00:00
DL6ER
18d1c98f08 Merge pull request #1051 from pi-hole/fix/status
Test if DNS service is listening on local port 53 when reporting status
2016-12-28 20:47:37 +01:00
DL6ER
d0cd39a25f Added space behind :53 to only match port 53 2016-12-28 20:32:56 +01:00
DL6ER
03d4fcd17d Don't actually have to reapply DHCP settings since we are going to save it in a different file we don't replace by a template 2016-12-28 16:32:24 +00:00
DL6ER
02d658be65 Look for DHCP / DNS server settings which would have to be reapplied after updating (since we overwrite 01-pihole.conf) 2016-12-28 16:31:55 +00:00
DL6ER
1e627c7e8f Make webpage.sh fully library style 2016-12-28 16:25:14 +00:00
DL6ER
9170488b0a Test if DNS service is listening on local port 53 2016-12-28 15:58:48 +00:00
Dan Schaper
b02730a5ad Merge branches 'development' and 'feature/track_pre-installed_packages' of github.com:pi-hole/pi-hole into feature/track_pre-installed_packages
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

# Conflicts:
#	automated install/basic-install.sh
2016-12-27 22:50:00 -08:00
DL6ER
9af26cbaac Major simplification of webpage.sh 2016-12-28 02:14:47 +00:00
Dan Schaper
73741f1518 Merge pull request #1046 from pi-hole/tweak/subshells
Tweak/subshells
2016-12-27 16:00:07 -08:00
Dan Schaper
9a9cb61345 Shift epel-release to installer dependencies for CentOS
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-27 12:59:53 -08:00
Dan Schaper
6abd6d8879 Merge pull request #991 from pi-hole/webUIprivacymode
Backend for privacyMode on webUI
2016-12-27 12:46:54 -08:00
Dan Schaper
c3b51b4ceb Merge branch 'development' into feature/track_pre-installed_packages 2016-12-27 12:37:19 -08:00
DL6ER
321ea8a3a9 Merge branch 'development' into webUIprivacymode 2016-12-27 21:27:11 +01:00
Dan Schaper
4d6263872d Merge branch 'development' of github.com:pi-hole/pi-hole into tweak/subshells 2016-12-27 12:25:49 -08:00
Dan Schaper
fcdd58ac94 Merge pull request #1033 from pi-hole/updater_rewrite
update.sh code refactoring
2016-12-27 12:22:17 -08:00
Dan Schaper
ef8292d371 Merge branch 'development' into updater_rewrite 2016-12-27 11:59:52 -08:00
Dan Schaper
bc6a985f7c Merge branch 'development' of github.com:pi-hole/pi-hole into tweak/subshells 2016-12-27 11:53:46 -08:00
Dan Schaper
7320fc11d2 Check command -v directly, instead of subshelling out.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-27 11:53:23 -08:00
Dan Schaper
51f6d75db4 Merge pull request #1045 from pi-hole/tweak/always_update
Always update package cache where we can.
2016-12-27 11:51:00 -08:00
Dan Schaper
a328326e39 Formatting
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-27 11:41:07 -08:00
Dan Schaper
4eedf8a746 Always update package cache where we can.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-27 10:59:24 -08:00
Dan Schaper
c5f5252145 Merge pull request #961 from pi-hole/customblockpage
Custom Pi-Hole block page
2016-12-27 10:25:03 -08:00
Dan Schaper
3f189ae7fe Merge remote-tracking branch 'origin/master' 2016-12-27 09:25:25 -08:00
Mcat12
7fadd469c9 Merge pull request #1038 from pi-hole/fix/IPV6_detection
Check IPv6 routing
2016-12-27 11:42:23 -05:00
Mcat12
823e874d20 Merge pull request #1037 from pi-hole/tweak/IPv4_multi_address
Smarter pick of IPv4 address
2016-12-27 11:42:00 -05:00
Adam Warner
739aaafa9a Merge pull request #1041 from pi-hole/development
[RELEASE] Pi-Hole Core 2.10.2
2016-12-25 23:43:35 +00:00
Dan Schaper
62d001225a Merge pull request #1040 from pi-hole/fix/updater_git-C
Remove git -C from update.sh
2016-12-25 12:28:42 -08:00
DL6ER
e50947eb58 mend 2016-12-25 21:26:06 +01:00
DL6ER
ca056d32d2 Remove git -C 2016-12-25 21:22:59 +01:00
DL6ER
63a455f4f7 Merge pull request #1039 from pi-hole/revert_crontab_change
Revert PR #1018
2016-12-25 18:35:59 +01:00
DL6ER
a0e0465036 Revert "Merge pull request #1018 from pi-hole/diginc-patch-1"
This reverts commit ff3c36a7a2, reversing
changes made to 9355a8ad0e.
2016-12-25 17:32:59 +01:00
Dan Schaper
d174a9d015 Merge branch 'feature/track_pre-installed_packages' of github.com:pi-hole/pi-hole into feature/track_pre-installed_packages 2016-12-24 17:01:38 -08:00
Dan Schaper
7eb6124721 Don't call for package installs if there are no packages to install.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:57:07 -08:00
Dan Schaper
f458780ba7 Rebase onto development
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:56:31 -08:00
Dan Schaper
8ad52806de Quiet DNF
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:54:23 -08:00
Dan Schaper
dc22a50dcc Fedora dependency installer overhaul
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

Modify Fedora dependency installer

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

Fedora now installs and arrays only non-installed packages. Fedora also noops the cache update, since it updates at every dnf call anyays.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:54:20 -08:00
Dan Schaper
852341c601 Check for installation status within the parent function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:54:16 -08:00
Dan Schaper
d5ed6c1901 Find which packages already exist and only install new packages. Set up for unintall to know what packages we installed for later removal.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 16:54:13 -08:00
DL6ER
e15548cbf5 Add --quiet to git fetch in GitCheckUpdateAvail() 2016-12-25 01:18:58 +01:00
DL6ER
5e28e6b9ac Removed remaining git -C 2016-12-25 01:17:46 +01:00
DL6ER
c78d43f640 Merge pull request #1032 from pi-hole/fix/emptypassword
Save empty password
2016-12-25 00:51:21 +01:00
Dan Schaper
da41383476 Check IPv6 to see if the route is reachable, if not, don't use.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 15:26:05 -08:00
Dan Schaper
6ff79835da If only one interface available, don't show whiptail, just use that interface.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 15:08:39 -08:00
Dan Schaper
1d608b204a Only allow UP interfaces to be selected. (DOWN interfaces would have not given IP addresses anyways.)
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 14:50:50 -08:00
Dan Schaper
c2b8bed3a8 Get the IP address that is the source for the default route out. Fixes interfaces with multiple IP's assigned getting the wrong IPv4 chosen.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 14:43:57 -08:00
Dan Schaper
3365ef7aaa is_repo() returns values to caller, silence function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 11:54:04 -08:00
Dan Schaper
68c17b26dc Bashisms
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 11:41:42 -08:00
Dan Schaper
e647efd471 Shell script, not javascript
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-24 11:24:20 -08:00
DL6ER
15db1ffdd5 Remove variables not needed any more 2016-12-24 15:48:43 +01:00
DL6ER
4632b0f797 Updated updater logic 2016-12-24 15:40:31 +01:00
DL6ER
65c35a5530 Use new subroutine to determine if updates are available 2016-12-24 15:32:25 +01:00
DL6ER
c449a1c0e0 Added GitCheckUpdateAvail() 2016-12-24 15:19:39 +01:00
DL6ER
b020010f0d Removed some of the &> /dev/null 2016-12-24 15:08:30 +01:00
DL6ER
0276c72fe2 replace 'git -C' with long version (see #1009) 2016-12-24 15:05:57 +01:00
Dan Schaper
e4aec05d0f Merge branch 'feature/track_pre-installed_packages' of github.com:pi-hole/pi-hole into feature/track_pre-installed_packages 2016-12-23 16:54:25 -08:00
Dan Schaper
2919f852ad Import checkSelinux from master
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-23 16:30:26 -08:00
Dan Schaper
a6e3b9de37 Merge branch 'master' of github.com:pi-hole/pi-hole into feature/track_pre-installed_packages 2016-12-23 16:28:41 -08:00
DL6ER
04a9791be2 Save empty password 2016-12-23 23:41:40 +01:00
Dan Schaper
6b896a1c54 Merge remote-tracking branch 'origin/master' 2016-12-23 14:27:31 -08:00
Dan Schaper
cb8df06685 Merge branch 'development' into feature/track_pre-installed_packages 2016-12-23 14:10:01 -08:00
Adam Warner
bfe5506cc1 Merge pull request #1021 from pi-hole/development
[RELEASE] Pi-Hole Core 2.10.1
2016-12-23 21:57:02 +00:00
Dan Schaper
b64066fec7 Merge conflict
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-23 13:23:09 -08:00
Mcat12
ffd31d8330 Merge pull request #1031 from pi-hole/templates
replace 1-10 checkboxes to tidy up appearance
2016-12-23 16:06:29 -05:00
Promofaux
d89254fedf replace 1-10 checkboxes to tidy up appearance 2016-12-23 19:49:39 +00:00
Mcat12
a771ddf667 Merge pull request #1030 from pi-hole/readmeTypos
Accidentally a word.
2016-12-23 14:43:56 -05:00
Promofaux
ce2e410468 Accidentally a word.
Updated link
2016-12-23 19:39:37 +00:00
Adam Warner
c1982c04ff Merge pull request #1029 from pi-hole/bogusDNS_BOGUS_PRIVentries
remove `DNS_BOGUS_PRIV` from setupVars.conf
2016-12-23 19:32:13 +00:00
Promofaux
9a62026830 remove DNS_BOGUS_PRIV from setupVars.conf 2016-12-23 19:27:02 +00:00
Adam Warner
d12efccd0b Merge pull request #1028 from pi-hole/bcambl-selinux_notification
Bcambl selinux notification
2016-12-23 17:36:33 +00:00
Mcat12
54afffed19 Remove newline
Issue was already fixed
2016-12-23 12:30:33 -05:00
Mcat12
fc8fcdbece Add newline 2016-12-23 12:28:18 -05:00
Promofaux
abd1fedc9d . 2016-12-23 17:25:55 +00:00
Promofaux
9725985037 printf to echo. idgaf 2016-12-23 17:24:33 +00:00
Promofaux
754f3359ec too many echos spoil the branch 2016-12-23 17:22:31 +00:00
Promofaux
4c131b8c28 newlines 2016-12-23 17:21:23 +00:00
Promofaux
15c674ba29 verbosity 2016-12-23 17:20:33 +00:00
Promofaux
00aff6a906 maybe 2016-12-23 17:16:03 +00:00
Promofaux
c45c3a72b5 words words words 2016-12-23 17:06:33 +00:00
Promofaux
662d450651 adjust size of whiptail dialog 2016-12-23 16:58:58 +00:00
Promofaux
a8897becd2 Make sure whiptail is installed... 2016-12-23 16:55:56 +00:00
Mcat12
d0126f4454 Merge pull request #1027 from pi-hole/Mcat12/fix/alignUpdatingRepo
Align installer output for updating repo
2016-12-23 11:54:34 -05:00
Promofaux
fdb64a5702 untested convert user prompt to whiptail 2016-12-23 16:53:42 +00:00
Mcat12
73a80ff7dc Align installer output for updating repo 2016-12-23 11:51:34 -05:00
Promofaux
a795fd698d Merge branch 'selinux_notification' of https://github.com/bcambl/pi-hole into bcambl-selinux_notification 2016-12-23 16:48:16 +00:00
bcambl
2fb0dc0a4a add warning if SELinux is Enforcing 2016-12-23 10:27:52 -06:00
DL6ER
5b4653cf39 Merge pull request #1023 from pi-hole/fix/fedora_sudo
Fix Fedora sudo permissions
2016-12-23 17:13:57 +01:00
DL6ER
aa8e1497a3 Fixed error 2016-12-23 17:12:38 +01:00
DL6ER
eb13d846ef Merge pull request #1024 from pi-hole/fix/grep_case_insensitive
Make grep case insensitive
2016-12-23 17:07:08 +01:00
DL6ER
c674a175ee Make grep case insensitive 2016-12-23 17:02:56 +01:00
DL6ER
afabf30ec6 Fix Fedora web UI support 2016-12-23 16:57:51 +01:00
DL6ER
420158494d Merge pull request #1022 from pi-hole/fix/adlists.default
Internal (/etc/pihole/adlists.default)
2016-12-23 16:08:06 +01:00
DL6ER
6b7b0e0eb3 Test if /etc/pihole/adlists.default exists 2016-12-23 16:00:48 +01:00
Adam Warner
ad70db7e0e Merge pull request #1020 from bcambl/setDNS_before_ifcfg
Set dns before ifcfg (Fixes #1019)
2016-12-23 12:12:05 +00:00
Adam Warner
ef1ce66793 Merge pull request #1013 from pi-hole/fix/chronometer
Fix chronometer.sh
2016-12-23 11:12:20 +00:00
DL6ER
c364fd80b6 Merge pull request #994 from pi-hole/errorsshouldnotescapeblackholes
Errors should not escape black holes
2016-12-23 12:05:54 +01:00
Adam Warner
3bc5d1bae0 Merge pull request #989 from pi-hole/APIresolveclientsandupstream
Implement backend for AdminLTE/#253
2016-12-23 10:37:48 +00:00
Adam Warner
e4e34acba1 Merge pull request #1017 from bcambl/ensure_repo_directory
is_repo: ensure directory exists
2016-12-23 09:44:19 +00:00
Adam Warner
ff3c36a7a2 Merge pull request #1018 from pi-hole/diginc-patch-1
pihole.cron reduce duplication
2016-12-23 09:41:48 +00:00
bcambl
1e7e3259b5 choose dns servers prior to interface configuration
upstream DNS servers must be chosen prior interface configuration.
Fixes #1019
2016-12-22 22:42:32 -06:00
Adam Hill
5e53f484be Update pihole.cron
Stop repeating the path.
2016-12-22 22:00:17 -06:00
bcambl
513bc32d87 is_repo: ensure directory exists 2016-12-22 20:00:45 -06:00
Dan Schaper
e7c944ff0b Merge branches 'development' and 'feature/track_pre-installed_packages' of github.com:pi-hole/pi-hole into feature/track_pre-installed_packages 2016-12-22 12:25:07 -08:00
Dan Schaper
9355a8ad0e Merge pull request #1011 from pi-hole/fix/sudoers
Fix: Dynamic instead of static sudoers file
2016-12-22 12:20:01 -08:00
Dan Schaper
a74e48a138 Merge pull request #1014 from pi-hole/fix/Gravity_in_shell
Execute gravity in same shell as installer, don't subshell it.
2016-12-22 12:07:12 -08:00
Dan Schaper
ea5ee7b0f9 Execute gravity in same shell as installer, don't subshell it.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-22 11:30:36 -08:00
DL6ER
bc8cf1b2d8 Fixed wrong indentation 2016-12-22 19:23:06 +01:00
DL6ER
bb28d94884 Merge branch 'development' into customblockpage
Conflicts:
	automated install/basic-install.sh
2016-12-22 19:22:09 +01:00
DL6ER
a4f58b0a22 Look for "query[" instead of "query" to avoid false-positives, like listed below
root@raspberrypi:/etc/.pihole# grep 'query' /var/log/pihole.log | grep -v 'query\['
Dec 22 16:29:50 dnsmasq[30801]: forwarded code.jquery.com to 208.67.222.222
Dec 22 16:29:50 dnsmasq[30801]: reply code.jquery.com is <CNAME>
Dec 22 16:29:50 dnsmasq[30801]: reply code.jquery.netdna-cdn.com is 94.31.29.54
Dec 22 16:29:50 dnsmasq[30801]: reply code.jquery.netdna-cdn.com is 23.111.11.3
Dec 22 16:29:50 dnsmasq[30801]: reply code.jquery.netdna-cdn.com is 198.232.125.113
2016-12-22 19:09:37 +01:00
DL6ER
bcf8139708 Removed cat where we don't need it 2016-12-22 18:55:14 +01:00
DL6ER
9b0390c9da Space to Tab 2016-12-22 18:53:44 +01:00
DL6ER
e88f58c34e Remove grpping for today's log entries, because we flush the log every day 2016-12-22 18:45:53 +01:00
Blayne Campbell
8f402f5c77 Merge pull request #1009 from bcambl/fix_1004
replace 'git -C' with long version
2016-12-22 11:44:08 -06:00
DL6ER
60054da582 Add lighttpd user (OS dependent) to sudoers file 2016-12-22 13:26:11 +01:00
DL6ER
4626b8ced5 Removed fixed username from sudoers file 2016-12-22 13:18:38 +01:00
Dan Schaper
ab7d193f98 Still causing problems with Fedora and CentOS
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-22 03:21:37 -08:00
bcambl
cbf84c1840 replace subshell with command chain 2016-12-22 04:32:42 -06:00
Dan Schaper
420fb69166 Merge pull request #1005 from pi-hole/fix/create_install_directories
Create /opt/pihole before trying to install into it.
2016-12-22 01:47:07 -08:00
bcambl
c9c28cb59a replace 'git -C' with long version
The -C argument was introduced in git 1.8.4. CentOS 7.3 at the time of this commit provides v1.8.3.1.
see: https://git.kaarsemaker.net/git/commit/44e1e4d67d5148c245db362cc48c3cc6c2ec82ca/

Fixes #1004
2016-12-22 03:37:34 -06:00
Dan Schaper
9073f34b30 Quiet DNF
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-22 00:44:10 -08:00
Dan Schaper
fb5578c0d4 Fedora dependency installer overhaul
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>

Modify Fedora dependency installer

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

Fedora now installs and arrays only non-installed packages. Fedora also noops the cache update, since it updates at every dnf call anyays.

Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-22 00:29:04 -08:00
Dan Schaper
4244f716e0 Create /opt/pihole before trying to install into it.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-21 23:04:57 -08:00
Dan Schaper
07a4f970d4 Check for installation status within the parent function.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-21 22:57:42 -08:00
Dan Schaper
2335097c99 Find which packages already exist and only install new packages. Set up for unintall to know what packages we installed for later removal.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-21 22:20:23 -08:00
Adam Warner
bef0a2fef0 Merge pull request #987 from pi-hole/development
Pi-Hole Core release v2.10
2016-12-21 18:21:59 +00:00
DL6ER
c48e6c91f5 Merge pull request #999 from pi-hole/fix/install_deps_exit
Fix/install deps exit
2016-12-21 16:00:48 +01:00
DL6ER
f082b5ba54 Merge pull request #1001 from pi-hole/cleanup/remove_legacy_detect
Remove v1 legacy detection code.
2016-12-21 13:49:34 +01:00
DL6ER
8841bdd252 Reset the if's 2016-12-21 12:57:02 +01:00
DL6ER
58261098fb We should not call a function that Dan deleted 2016-12-21 12:07:44 +01:00
DL6ER
9432d3035a Merge branch 'development' into cleanup/remove_legacy_detect
Conflicts:
	automated install/basic-install.sh
2016-12-21 12:01:58 +01:00
DL6ER
9907fc2770 Merge branch 'development' into fix/install_deps_exit
Conflicts:
	automated install/basic-install.sh
2016-12-21 11:54:52 +01:00
DL6ER
d42caa8672 Merge pull request #1000 from pi-hole/fix/tab_space
Tabs to spaces and formatting.
2016-12-21 11:41:30 +01:00
Dan Schaper
8117ec8e20 Remove v1 legacy detection code.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-20 17:50:44 -08:00
Dan Schaper
ff2783f9fc Tabs to spaces and formatting.
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 17:22:57 -08:00
Dan Schaper
156a51c945 Remove extra display only variable.
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 17:04:46 -08:00
Dan Schaper
c72ffae4a2 Don't install extra packages (openresolv was installed over resolvconf). No longer need --fix-missing.
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 17:02:51 -08:00
Dan Schaper
7f3b0030ea LF
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 16:47:43 -08:00
Dan Schaper
9a626948f8 Use debconf for Deb/Ubu package installations.
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>

Alphabetic sort of dependency names

Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 16:22:31 -08:00
Dan Schaper
5c43df66a8 Remove spinner function, masked return values.
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 16:22:08 -08:00
Dan Schaper
d0e3c546f8 CRLF to CR (Win to Unix line endings)
Signed-off-by: Dan Schaper <dschaper@ganymeade.com>
2016-12-20 15:00:37 -08:00
DL6ER
a9cb93d801 Merge pull request #998 from pi-hole/LordKelvin
Lord Kelvin
2016-12-20 17:54:52 +01:00
DL6ER
ee8f29d178 Fixed typo, extended help text 2016-12-20 16:28:28 +01:00
DL6ER
da363070c7 Added Kelvin 2016-12-20 12:21:08 +01:00
DL6ER
50cf891e01 Merge pull request #996 from pi-hole/allowemptysecondDNSserver
Allow disabling second DNS server
2016-12-19 19:30:27 +01:00
DL6ER
715838cf89 Allow disabling second DNS server 2016-12-19 13:42:42 +01:00
DL6ER
cd0c3f9418 Better output if file has not been downloaded because it has not been changed 2016-12-17 23:46:28 +01:00
DL6ER
efaee2b68b Improvements for gravity (errors shouldn't be able to escape the black hole if even light cannot do this!) 2016-12-17 23:33:09 +01:00
DL6ER
372c699cc6 Merge pull request #993 from pi-hole/fix/one_step_refactor
Rename variables in one step
2016-12-17 00:15:20 +01:00
Dan Schaper
8cb01cdd29 One step to rename variables.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-16 15:08:30 -08:00
DL6ER
7a243f890e Backend for privacyMode on webUI 2016-12-16 17:33:01 +01:00
Adam Warner
10982a0f45 Merge pull request #990 from pi-hole/dontkillsetupVars.conf
Don't kill setupVars.conf on update/fresh install
2016-12-16 13:55:33 +00:00
DL6ER
d4c378ed5d Remove PIHOLE_INTERFACE if already set (not PIHOLE_DOMAIN) 2016-12-16 13:20:25 +01:00
DL6ER
7872f68a45 Only try to remove parts inthe file if the file already exists 2016-12-16 13:13:35 +01:00
DL6ER
ec8c848106 Don't kill already existing setupVars.conf on update (and fresh install) 2016-12-16 12:53:00 +01:00
Mcat12
3b50ce8c54 Merge pull request #977 from pi-hole/activatewebUIpw
Add password to webUI after update if there is none
2016-12-15 14:05:11 -05:00
DL6ER
afabb5957b Implement backend for https://github.com/pi-hole/AdminLTE/pull/253 2016-12-15 18:55:40 +01:00
DL6ER
1eeaa01234 Always put the information that we added a password if we did (not only on update but also on fresh install) 2016-12-15 15:22:44 +01:00
DL6ER
e2898217d2 Made message shorter 2016-12-15 15:20:41 +01:00
DL6ER
f81dadc5d0 Fix final message 2016-12-15 14:10:55 +01:00
Mcat12
a0019d86c5 Merge pull request #983 from pi-hole/cronpath
Fix missing path information for cron
2016-12-15 07:01:20 -05:00
DL6ER
3c4a9bba78 Minor change 2016-12-15 10:38:24 +01:00
Adam Warner
4348653431 Merge pull request #985 from pi-hole/pi.hole
A man has no name. Even though his name is Jaqen H'ghar
2016-12-15 08:49:22 +00:00
Dan Schaper
09cfa9bb20 Merge pull request #986 from pi-hole/autoCompletes
add missing pihole autocomplete commands
2016-12-14 12:58:50 -08:00
Promofaux
e7713a9028 add missing pihole autocomplete commands 2016-12-14 19:53:40 +00:00
Promofaux
906a1753be specifically comment out gravity.list addn-host 2016-12-14 19:42:20 +00:00
Promofaux
a3d519b671 no need to remove list, because of echo > 2016-12-14 19:33:15 +00:00
Promofaux
8591f9d576 check for list before removing it 2016-12-14 19:31:57 +00:00
Promofaux
c10ec5548f remove code that replaces tokens in 01-pihole.conf 2016-12-14 19:29:44 +00:00
Promofaux
684ac98c8e Remove hostname and pi.hole entries, move to /etc/pihole/local.list 2016-12-14 19:28:01 +00:00
Promofaux
db89fa9881 initial support for additional hosts file 2016-12-14 19:26:55 +00:00
Adam Warner
9a80421d73 Merge pull request #981 from pi-hole/quiet-dhcp
Improvement of backend of web UI Settings page
2016-12-14 19:11:49 +00:00
Mcat12
2ddacf40c0 Merge pull request #984 from pi-hole/Mcat12-auto-ipv6
Automatically enable IPv6
2016-12-14 13:59:55 -05:00
Mcat12
92f4824884 Automatically enable IPv6 2016-12-14 13:52:14 -05:00
DL6ER
9a2ffabc33 Fix missing path information 2016-12-14 17:33:20 +01:00
DL6ER
2977168da1 dnsmasq "bogus-priv" property 2016-12-14 16:16:25 +01:00
DL6ER
85e3f37503 dnsmasq "domain-needed" property 2016-12-14 16:09:57 +01:00
DL6ER
ba015c1918 Set domain name via Settings page 2016-12-14 14:24:09 +01:00
DL6ER
1556adb678 Also remove quiet-dhcp setting when disabling/enabling the Pi-Hole DHCP server 2016-12-14 12:12:36 +01:00
Adam Warner
6bfe729112 Merge pull request #979 from pi-hole/wwwdatapassword
Prevent web UI password change by web user
2016-12-13 16:33:41 +00:00
DL6ER
c340668870 Merge pull request #976 from pi-hole/websettingspage
Add necessary backend for the new "Settings" page of the web UI
2016-12-13 17:32:18 +01:00
DL6ER
207422f83a Added a missing space 2016-12-13 15:54:41 +01:00
DL6ER
004ba28378 Prevent web UI password change by web user 2016-12-13 15:52:28 +01:00
DL6ER
6f38801ed8 Add "Interface appearence" option 2016-12-13 14:59:52 +01:00
Adam Warner
1509eb7d82 Merge pull request #978 from pi-hole/Mcat12-adzhosts-list
Update ADZHOSTS list
2016-12-13 12:13:37 +00:00
DL6ER
b8d2bfc890 Wait 5 seconds before rebooting so the web UI can finish loading before being unreachable due to the reboot 2016-12-13 12:42:40 +01:00
Mcat12
8a2ee95e4a Update ADZHOSTS list 2016-12-12 15:30:47 -05:00
DL6ER
bc91716082 Suppress logging of DHCP actions to /var/log/pihole.log 2016-12-12 17:14:52 +01:00
DL6ER
a00034a6a7 Add password to webUI after update if there is none 2016-12-12 17:03:53 +01:00
DL6ER
8dc0dc4d69 Add DHCP-Server backend 2016-12-12 15:34:05 +01:00
DL6ER
2f4b7ce3dd Update dnsmasq file when changing upstream DNS servers and restart the service to get it active 2016-12-12 14:17:02 +01:00
DL6ER
d4f83cb1d4 Be able to set API_QUERY_LOG_SHOW 2016-12-12 13:15:07 +01:00
DL6ER
aaab3306a8 Add restart DNS capability 2016-12-12 10:38:21 +01:00
DL6ER
2bafa2f2ac Add reboot option 2016-12-11 22:33:27 +01:00
DL6ER
9ac378ae09 Set domains and clients which are excluded by the API 2016-12-11 19:30:04 +01:00
DL6ER
bf867bd9fd Set DNS servers from web UI 2016-12-11 16:54:27 +01:00
Adam Warner
7fd9ff43af Merge pull request #970 from trinapicot/fix/remove_lighty_conf
Update uninstall.sh for check on lighttpd installation
2016-12-09 23:40:50 +00:00
Adam Warner
bebb569c43 Merge pull request #964 from pi-hole/queryadsonlyexactmatches
pihole -q: Add option to show all partial or only exact matches
2016-12-09 23:25:15 +00:00
Mcat12
74e33bb1a0 Merge pull request #973 from pi-hole/taillog
Add tail argument to automatically "tail -f" pihole.log
2016-12-08 16:40:17 -05:00
Mcat12
b591df55b0 Tell user how to exit tail command 2016-12-08 16:35:50 -05:00
Mcat12
bddf31443c Merge pull request #974 from pi-hole/Mcat12-add-reconfigure-help
Add Reconfigure command to Pi-hole's list of commands
2016-12-08 15:55:36 -05:00
Mcat12
b9e0e88fe9 Update pihole 2016-12-08 15:47:30 -05:00
DL6ER
5120d9ec33 Add tail option 2016-12-08 21:15:03 +01:00
trinapicot
0a423ffd40 Fix check for lighttpd install before configuration directory removal 2016-12-07 20:31:34 -07:00
DL6ER
505c9e8979 Minor change 2016-12-06 14:08:45 +01:00
DL6ER
75deb02961 Don't query pihole if page is hidden anyhow 2016-12-06 14:05:48 +01:00
DL6ER
480211033d Detect if blocking page is loaded within frame or iframe. If so, hide everything 2016-12-06 14:05:02 +01:00
DL6ER
c0886cb5c6 pihole -q <domain> is partial matching (as before), pihole -q <domain> -exact is exact matching (new behavior) 2016-12-06 13:18:01 +01:00
DL6ER
294df8690c Do only one grep on each of the lists and count the number of non-empty lines in the result. Improves speed by factor of 2x 2016-12-06 09:55:17 +01:00
DL6ER
5374f652dd No need to modify lighttpd config file, since we overwrite it anyways 2016-12-06 08:43:24 +01:00
DL6ER
fb72ac9904 Show only exact matches for pihole -q 2016-12-06 08:18:49 +01:00
Mcat12
b6639d9e7e Merge pull request #962 from pi-hole/queryblacklist
Also query blacklist with pihole -q
2016-12-05 18:11:26 -05:00
DL6ER
74cb79252c Only looking for blocking entries (do not scan whitelist.txt) 2016-12-05 17:12:28 +01:00
DL6ER
6cd3c93472 Also query white- and blacklist 2016-12-05 17:09:49 +01:00
DL6ER
eb63e75379 No need for pipe here 2016-12-05 17:06:20 +01:00
DL6ER
ca9321624c Added padding for ad list results 2016-12-05 14:40:48 +01:00
DL6ER
40f18df90f Simplified CSS, removed external contents 2016-12-05 14:39:07 +01:00
DL6ER
0d63cfd6c3 Add 1x1 pixel GIF image. Can apparently be used to trick some of the please-don't-use-adblocker pages as many of them contain code like if ($('Ad').height() == 0) { prevent access to this page; } 2016-12-05 12:34:30 +01:00
DL6ER
3d6b22de6c Update index.php to include more detailed output 2016-12-05 12:12:01 +01:00
DL6ER
fc233fcdd3 Fixed typo 2016-12-05 12:10:05 +01:00
DL6ER
20370d4348 Update CSS file 2016-12-05 11:26:21 +01:00
DL6ER
0f90671241 Updated index.php to use CSS file unter admin/ 2016-12-05 10:51:41 +01:00
DL6ER
a866c4e388 Place blockingpage.css (former index.css) unter admin/ so we can load it also from some blocked sub-directories 2016-12-05 10:50:19 +01:00
DL6ER
e7241a989c Include CSS file 2016-12-04 22:20:51 +01:00
DL6ER
6e788668f9 Updated index.php 2016-12-04 22:17:33 +01:00
DL6ER
b246dba7e7 Rename index.html to index.php 2016-12-04 21:41:26 +01:00
Mcat12
f98de3d5db Merge pull request #941 from DL6ER/caseinsensitive
Improvements for black-/whitelist scripts
2016-12-04 14:33:10 -05:00
Mcat12
fab7d60373 Merge pull request #960 from unseen1980/patch-1
Ad blocker with armbian and orange pi
2016-12-04 14:20:48 -05:00
Christos Koutsiaris
b4e5358145 Ad blocker with armbian and orange pi 2016-12-04 18:40:01 +00:00
Adam Warner
486db1e797 Merge pull request #956 from trinapicot/development
Add check for lighty.conf before trying to move it
2016-12-03 17:11:16 +00:00
DL6ER
78cb43d0dc Revert "Simplified EscapeRegexp()"
This reverts commit 509cfd15f2.
2016-12-03 00:32:37 +01:00
trinapicot
870454330d Add check for lighty.conf before trying to move it 2016-12-02 13:54:11 -07:00
DL6ER
509cfd15f2 Simplified EscapeRegexp() 2016-12-02 14:17:34 +01:00
DL6ER
2061daa902 Don't forget to escape also the slash "/" 2016-12-02 14:11:17 +01:00
DL6ER
629ca970a1 Changed from single quoted filter expression to double quotes as reqeusted by codacy 2016-12-02 14:08:54 +01:00
DL6ER
c8ad6f23a8 Properly escape any special characters before using them in regexp manner 2016-12-02 12:57:04 +01:00
Mcat12
d8912fd0a7 Merge pull request #952 from pi-hole/fix/exit_codes
Fix/exit codes
2016-12-01 18:24:30 -05:00
Dan Schaper
925c80edd4 Catch more 1's
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-01 15:10:06 -08:00
Dan Schaper
2f6afd375b Merge pull request #942 from pi-hole/PromoFaux-patch-2
Update gravity.sh
2016-12-01 14:00:38 -08:00
Dan Schaper
d92646324c Double worded
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-01 13:59:58 -08:00
Dan Schaper
c9fe62a691 Clarify what the command is doing.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-01 13:58:40 -08:00
Dan Schaper
cb52ad3ba3 Revert other branch chages.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-01 13:31:35 -08:00
Dan Schaper
2ec4acfe52 Begin fixing exit values.
Signed-off-by: Dan Schaper <dan.schaper@pi-hole.net>
2016-12-01 12:21:08 -08:00
Mcat12
1c64f1d0cf Merge pull request #940 from pi-hole/PromoFaux-patch-1
Update .pullapprove.yml
2016-11-22 17:20:57 -05:00
Mcat12
48f4f44289 Merge pull request #944 from pi-hole/feature/Issue_template
Update ISSUE_TEMPLATE.md
2016-11-22 16:23:36 -05:00
Dan Schaper
80c19cbf7d Update ISSUE_TEMPLATE.md 2016-11-22 12:05:19 -08:00
Adam Warner
c97cfde9f9 Update gravity.sh
Only include domain part of lines that contain `/` e.g `www.fakenewswatch.com/megynkelly`
2016-11-21 22:51:59 +00:00
DL6ER
7b26b308ad No need for echo and pipe here! 2016-11-21 15:50:05 +01:00
DL6ER
4c10634d85 Convert domain names to lower case before checking validity of the domain 2016-11-21 15:49:11 +01:00
Mcat12
3ba7d7640f Merge pull request #933 from DL6ER/delayedreactivation
Add possiblity for delayed reactivation of blocking
2016-11-21 08:26:26 -05:00
Adam Warner
907995a221 Update .pullapprove.yml
reflect new approvers team
2016-11-21 13:13:39 +00:00
DL6ER
7bf0985a57 Extended help text of main pihole command 2016-11-21 11:30:34 +01:00
Dan Schaper
3ca21d8c8a Merge pull request #931 from pi-hole/update_tests
Add piholeDebug to CI Travis tests
2016-11-20 15:51:14 -08:00
Dan Schaper
a3a87c8883 Merge pull request #937 from pi-hole/feature/README
README updates
2016-11-20 15:23:49 -08:00
Adam Warner
de4401823e Merge pull request #924 from DL6ER/webpage.sh
Add webpage.sh
2016-11-20 21:43:44 +00:00
Adam Warner
3ee10f5983 Merge pull request #938 from DL6ER/another_done
Another done
2016-11-20 19:21:58 +00:00
Dan Schaper
0fc8ac8d4d Codacy Badge for Master 2016-11-20 09:44:39 -08:00
Dan Schaper
41bb53a29f Remove CC Badge, Link Vortex to Discourse 2016-11-20 09:42:45 -08:00
DL6ER
cdee6d55d3 Minor change 2016-11-20 17:40:22 +01:00
DL6ER
e5a1afaa26 Added another missing "done" 2016-11-20 17:31:27 +01:00
DL6ER
f50cbe74cb Changed -web (webpage) to -a (admin) 2016-11-20 15:15:27 +01:00
Dan Schaper
5dbbf91917 Link to AdminLTE 2016-11-19 15:08:35 -08:00
Mcat12
7424a29960 Update wiki link 2016-11-19 15:03:32 -08:00
Dan Schaper
eb22ca2467 Reset Code Stylings to group defalut 2016-11-19 15:03:12 -08:00
Dan Schaper
ddbcbe5458 Merge in git method instructions from other branch.
Move some bits around.

Start adding in logos to media links

More logos

Add BC logo

Change static images to use Asset server

Add and center control panel image
2016-11-19 15:01:56 -08:00
Dan Schaper
6e54cfd2ac Further refinements.
Trying to find a good flow for information and layout.
2016-11-19 14:57:49 -08:00
Mcat12
fc3d4b3def Update README.md 2016-11-19 14:57:38 -08:00
Jacob Salmela
df55b2c516 relocate and wordsmith donations 2016-11-19 14:57:29 -08:00
Jacob Salmela
4d9fb57e22 above the fold verbage
Try to let the user know in two sentences what Pi-hole can do for them.

Also, linked to Discourse hw/sw requirements.

fixed DO referral code.
2016-11-19 14:57:02 -08:00
Dan Schaper
3ed08b5c39 Add New Logo and other changes
Remove extra break

Center Badges and move DO Slug

Bump Vortex up a bit.

Last change for now.

Move things around a bit.

Pull overlay off black hole image
2016-11-19 14:55:52 -08:00
Dan Schaper
d715471426 Center Global 2016-11-19 14:47:46 -08:00
Dan Schaper
486a4929da Add click instructions 2016-11-19 14:46:30 -08:00
Dan Schaper
aacddb745b Swap Global Image
Global image, no berry, no overlay
2016-11-19 14:46:30 -08:00
Dan Schaper
924f499303 Add DO Slug and Copy to README 2016-11-19 14:46:30 -08:00
Dan Schaper
e863a200e8 Remove CC badge 2016-11-19 14:44:43 -08:00
Dan Schaper
bb7f8ae69d Add git clone method to installers 2016-11-19 14:44:13 -08:00
DL6ER
33b6fe72da Extended help text 2016-11-19 21:57:42 +01:00
DL6ER
733919be4a Implement possibility to remove password using "pihole -web -p" 2016-11-19 21:50:15 +01:00
Dan Schaper
4333e5487b Merge pull request #932 from pi-hole/feature/debug_timeout
feature/debug_timeout
2016-11-19 12:25:38 -08:00
Dan Schaper
22ead933b6 Merge pull request #936 from pi-hole/Mcat12-patch-1
Fix typo
2016-11-19 11:08:20 -08:00
Dan Schaper
d53a3af191 Merge pull request #899 from diginc/configureFirewall_unittest
Configure firewall unittest
2016-11-19 11:07:38 -08:00
Mcat12
08e7b7e0ad Fix typo 2016-11-19 14:00:56 -05:00
Dan Schaper
68cb0782c0 Add countdown timer 2016-11-18 13:27:06 -08:00
Adam Warner
0e5a8e0033 Merge pull request #934 from DL6ER/gravity.sh-done
Added missing "done." output to gravity.sh
2016-11-18 20:10:50 +00:00
DL6ER
4945f33254 Added "-n" to first echo call 2016-11-18 17:39:34 +01:00
DL6ER
3fa05293fc Fixed file permissions 2016-11-18 17:37:13 +01:00
DL6ER
27e5f2798d Added missing "done." output 2016-11-18 17:33:46 +01:00
DL6ER
291ca0874a Fixed two more typos 2016-11-18 12:16:26 +01:00
DL6ER
96f2aa1803 fixed typo 2016-11-17 23:36:53 +01:00
DL6ER
c6857501aa Removed check for availability of nohup 2016-11-17 23:31:11 +01:00
DL6ER
3aba1607b2 Removed debug echos 2016-11-17 23:04:46 +01:00
DL6ER
f667298b64 Added possiblity for delayed reactivation of blocking 2016-11-17 22:58:00 +01:00
Dan Schaper
0f4c8d4923 Set default timeout to 60 seconds 2016-11-17 11:00:11 -08:00
Dan Schaper
6d2c5b2312 Add debug timeoute 2016-11-17 10:58:58 -08:00
Dan Schaper
a95ce11ca6 Add debug timeoute 2016-11-17 10:39:51 -08:00
Dan Schaper
808503d526 Add piholeDebug to tests 2016-11-17 10:28:51 -08:00
Adam Warner
d4b6fb9214 Merge pull request #929 from pi-hole/cleanup/PR_template
Small change in template
2016-11-17 12:43:54 +00:00
Dan Schaper
9bce5a09f3 Small change in template
Just a space, and italicize
2016-11-16 21:42:54 -08:00
Mcat12
bd61f38169 Merge pull request #926 from zbholman/patch-2
Added removal of pihole user to the uninstall.sh
2016-11-16 17:31:56 -05:00
zbholman
cac9c63325 Added removal of pihole user to the uninstall.sh
Not sure if I should have created a variable for the username or if the echo is necessary. And this is my first time doing a pull request, hopefully it works out lol.
2016-11-16 17:06:30 -05:00
Adam Warner
e6d555ac31 Merge pull request #925 from pi-hole/feature/style_guide
Add GSG/Shell link
2016-11-16 22:03:18 +00:00
Dan Schaper
fd0dd9f54c Add GSG/Shell link 2016-11-16 13:55:29 -08:00
DL6ER
88c161769d Capitalized variable names. 2016-11-16 22:33:28 +01:00
DL6ER
01bf1ae92d Compute double hashes to avoid rainbow table vulnerability 2016-11-16 22:13:47 +01:00
DL6ER
9193c71cff Minor change 2016-11-16 21:36:19 +01:00
DL6ER
db278d81e4 Added webpage.sh 2016-11-16 21:34:43 +01:00
Dan Schaper
bdad454a0d Merge pull request #920 from pi-hole/PromoFaux-patch-1
Update piholeDebug.sh
2016-11-16 11:22:04 -08:00
Adam Warner
ac8064c754 Merge pull request #918 from nlamirault/patch-2
Add Pi-Hole exporter for Prometheus
2016-11-16 18:53:00 +00:00
Dan Schaper
736e963cef Merge pull request #919 from haydenknowles/development
moved newline to correct place
2016-11-15 18:40:00 -08:00
Adam Warner
b191cd73a7 Update piholeDebug.sh
wording
2016-11-15 13:28:18 +00:00
Hayden Knowles
86d3ca48ae moved newline to correct place 2016-11-15 22:40:57 +13:00
Nicolas Lamirault
fd7e4f2268 Add Pi-Hole Prometheus exporter project 2016-11-15 09:27:16 +01:00
Dan Schaper
e9475a9739 Merge pull request #887 from brontide/dependancy_cleanup
Dependancy cleanup
2016-11-07 21:45:23 -08:00
Dan Schaper
d4270e02e9 Merge pull request #902 from elpatron68/master
Added Link to blink1_pi-hole.py
2016-11-07 21:44:28 -08:00
Mcat12
b9a263ecb2 Merge pull request #907 from pi-hole/bugfix/chronometer-interface
replace hardcoded interface with var
2016-11-07 21:35:09 -05:00
Dan Schaper
4929d415a6 Merge pull request #906 from pi-hole/Fix/send-frs-into-orbit
Direct users to Discourse for FRs
2016-11-07 17:32:28 -08:00
Dan Schaper
b9e1f518aa Merge pull request #909 from bcambl/fix_ifcfg_append
Fedora: write interface config instead of append
2016-11-07 17:23:50 -08:00
bcambl
0caa44e979 write ifcfg instead of appending 2016-11-07 12:54:31 -06:00
Jacob Salmela
ca56ca5bd8 promo-tweak
Better logic introduced by @PromoFaux
2016-11-06 11:16:48 -06:00
Jacob Salmela
a0f0dff88e replace hardcoded interface with var
setupVars.conf is already sourced, so we just need to replace the
hardcoded value with the variable name.
2016-11-06 08:18:57 -06:00
Jacob Salmela
e5cc38a210 Direct users to Discourse for FRs
It's a better platform for it because users can vote and we can have
easier discussions for it.
2016-11-06 08:08:58 -06:00
Adam Warner
6cb5bb7200 Merge pull request #903 from pi-hole/feature/PRGuide
PR against Development guide
2016-11-04 21:17:20 +00:00
Dan Schaper
563696e291 PR against Development guide
PA will tag PR to Master with -1 approval in the next release. That will deny any PR's against Master from users and changing branches after the PR is started does not appear to modify the PA actions.
2016-11-04 14:01:01 -07:00
Markus Busche
c755b3c49e Added Link to blink1_pi-hole.py 2016-11-04 21:56:14 +01:00
diginc
b9f3493dbc move PH_TRUE to Dockerfiles to DRY 2016-11-03 22:34:04 -05:00
Dan Schaper
8c08e9e473 Merge pull request #891 from pi-hole/bugfix/chronometer-domain-count
Bugfix/chronometer domain count
2016-11-03 13:55:29 -07:00
Adam Hill
c2930b0ca5 remove the debug print in mock_command 2016-11-03 08:34:44 -05:00
Adam Warner
4300759287 Fix logic. If both v6 and v4 divide by two, else dont. 2016-11-03 08:01:25 +00:00
Adam Warner
fc1854cadd Merge pull request #897 from pi-hole/feature/travisDevBadge
Update README.md
2016-11-03 07:49:30 +00:00
Adam Warner
933973b12c Merge pull request #898 from pi-hole/fix/removeCC
Remove CodeClimate yaml, Travis new ShellChecker
2016-11-03 07:48:36 +00:00
diginc
5b54b9cb11 update Pihole fixture comment 2016-11-03 00:05:19 -05:00
diginc
d2f815bba7 no longer need to write bash test scripts 2016-11-03 00:02:28 -05:00
diginc
a5a067d50f switching testinfra's Docker run from dash to bash 2016-11-02 23:58:54 -05:00
diginc
699e299345 add a comment about bash vs dash. future refact needed 2016-11-02 23:40:50 -05:00
diginc
05e114173d update comments, add configureFirewall test
* Comments to clarify some of the existing tests
* mock_command to allow recording of calls and mocking return calls in bash
* new configureFirewall test (only the first one of it's many paths)
2016-11-02 23:25:13 -05:00
Dan Schaper
d958b3ff65 Remove CodeClimate yaml, Travis new ShellChecker 2016-11-02 20:14:04 -07:00
diginc
0d7e06a141 remove old pytest output file 2016-11-02 22:13:39 -05:00
diginc
633095aee1 switch to consistent style 2016-11-02 22:13:05 -05:00
Dan Schaper
a4aeb9a1dd Update README.md 2016-11-02 20:07:51 -07:00
Eric Warnke
71005e1db3 Merge with change of spacing in development 2016-11-02 19:01:34 -04:00
Promofaux
d7d6d6f991 Update to use new Var name 2016-11-02 21:46:30 +00:00
Adam Warner
5986121cfc Merge pull request #896 from pi-hole/bugfix/649
Check for missing index.html, replace if missing.
2016-11-02 21:27:45 +00:00
Promofaux
c452a4569e .js 2016-11-02 21:17:00 +00:00
Promofaux
a182a208dc Tidy up output 2016-11-02 21:06:12 +00:00
Promofaux
d273b4b48b Check for missing index.html, replace if missing. 2016-11-02 20:57:56 +00:00
Adam Warner
afed7d4af0 Merge pull request #890 from pi-hole/feature/defensiveTweaks
Feature/defensive tweaks
2016-11-02 20:23:04 +00:00
Promofaux
b429e890ad move web interface message inside "if not update" block. Check for pi-hole deps AFTER whiptails 2016-11-02 20:16:36 +00:00
Promofaux
2f976504e8 switch out -eq for == 2016-11-02 20:06:21 +00:00
Dan Schaper
b5fc88227b Merge .gitignore 2016-11-02 12:36:00 -07:00
Dan Schaper
4b7b859db9 Gotta catch 'em all...' 2016-11-02 12:29:55 -07:00
Dan Schaper
f7d0de53bb Compare string to string. 2016-11-02 12:11:34 -07:00
Dan Schaper
603ec997ba Remove testing block. 2016-11-02 12:09:33 -07:00
Dan Schaper
f7266ef4c8 Version remote check returns -1 on failure to detect curl silent failing. Update detects loss of contact to GitHub or fallthrough condition and reports to user. 2016-11-02 12:07:59 -07:00
Dan Schaper
3d43e1568c Use explicit calls for function to self-document 2016-11-02 11:39:22 -07:00
Dan Schaper
3cf6a65da9 Remove *.yml ignoring
Travis YAML might not be good to ignore.
2016-11-02 11:32:53 -07:00
Dan Schaper
c1a3f003e8 Rename the only utilty function left that didn't say repo 2016-11-02 11:18:13 -07:00
Dan Schaper
3f61aea7fc Utility functions fully quiet now. Calling functions have the echos. 2016-11-02 11:09:53 -07:00
Dan Schaper
bd68db51e0 ShellCheck split local declaration and assignment. 2016-11-02 11:01:50 -07:00
Dan Schaper
b8a5ed710e Take echos out of utility functions and move up a level. 2016-11-02 10:51:09 -07:00
Dan Schaper
34be601dd7 Test for lexicographically less than tag version. 2016-11-02 10:42:05 -07:00
Dan Schaper
1d64ad1ccd Stash all changed files, clean directory and pull updates. 2016-11-02 10:39:27 -07:00
Dan Schaper
dfb4ac0365 Keep .yml's from going to user local repos. 2016-11-02 09:52:15 -07:00
Dan Schaper
f2d7a3d26d Merge branch 'feature/defensiveTweaks' of https://github.com/pi-hole/pi-hole into feature/defensiveTweaks 2016-11-02 09:48:00 -07:00
Dan Schaper
6d415a7384 Merge pull request #894 from diginc/InstallFixes_UnitTests
Unit tests framework and some basic tests
2016-11-02 09:42:20 -07:00
Dan Schaper
0ef8832b04 whitespace 2016-11-02 09:36:30 -07:00
Dan Schaper
e42a037b7d Grep -i instead of cat. 2016-11-02 09:28:00 -07:00
Dan Schaper
fe18d69b65 Grep should start at the beginning of line to make sure it doesn't fire on # beginning lines. 2016-11-02 09:25:32 -07:00
Dan Schaper
a1a9a7fa9e Clarify which DNS entry we are modifying. 2016-11-02 08:52:23 -07:00
Dan Schaper
07029f93e3 Match team convention in naming. 2016-11-02 08:34:56 -07:00
Dan Schaper
e99ef9c093 Cap the variables and echo out the proper environment. 2016-11-02 08:22:45 -07:00
Dan Schaper
fef9ab674e Pi-hole CORE installer variables are being changed to standardize scripts. 2016-11-02 07:53:02 -07:00
Adam Warner
ee37c37cab fix update output logic. version number variables should not be read only! 2016-11-02 14:29:20 +00:00
Dan Schaper
b636c1e1f8 Whitespace. 2016-11-02 07:00:43 -07:00
Dan Schaper
8b9f0487c0 Merge branch 'feature/defensiveTweaks' of https://github.com/pi-hole/pi-hole into feature/defensiveTweaks
# Conflicts:
#	advanced/Scripts/update.sh
#	automated install/basic-install.sh
2016-11-02 06:57:33 -07:00
Adam Warner
a6cbd5a2fd Merge pull request #895 from pi-hole/Feature/defensiveTweaks
Further tweaks to local repo handling
2016-11-02 13:42:24 +00:00
Dan Schaper
ece1667fb0 Refactor and move some bits. 2016-11-02 06:41:51 -07:00
Adam Warner
50bd8b4a09 Further tweaks to local repo handling 2016-11-02 13:34:57 +00:00
Dan Schaper
93d91353a1 All tabs now spaced 2016-11-02 05:49:33 -07:00
Dan Schaper
8dc9143b34 Just delete, no need to cd there first. 2016-11-02 05:45:29 -07:00
Dan Schaper
a0d9a1133c Factoring and combining functions 2016-11-02 05:34:39 -07:00
Dan Schaper
7740e4268c Consistency and standards basic-install start. 2016-11-02 05:17:28 -07:00
Adam Warner
f36e4ba336 Cherry picking 3f049fa79, conflict fix 2016-11-02 04:34:02 -07:00
Adam Warner
3df2ef8587 Cherry picking f6f6f6d, conflict fix 2016-11-02 04:31:28 -07:00
Adam Warner
354309fcad set QUERY_LOGGING default to true 2016-11-02 04:28:58 -07:00
Dan Schaper
e832bfc61e Merge branch 'feature/defensiveTweaks' of github.com:pi-hole/pi-hole into feature/defensiveTweaks 2016-11-02 04:22:29 -07:00
Adam Warner
99057ed859 Update var names from setupVars.conf in gravity.sh 2016-11-02 04:21:54 -07:00
Adam Warner
c47c5e466f consistency 2016-11-02 04:18:52 -07:00
Adam Warner
edd00e8e70 consistency 2016-11-02 04:12:37 -07:00
Adam Warner
82e7de2aaa Account for variable name changes 2016-11-02 04:12:21 -07:00
Adam Warner
b723714c0c Convention : https://google.github.io/styleguide/shell.xml?showone=Constants_and_Environment_Variable_Names#Constants_and_Environment_Variable_Names 2016-11-02 04:12:06 -07:00
Adam Warner
a2903b6e63 Consistency 2016-11-02 04:11:54 -07:00
Dan Schaper
9a1876571b Prototype whiptails so they don't fall to shell. Need to do this to all functions. 2016-11-02 04:11:41 -07:00
Dan Schaper
c07d7165ab Global variables CAP'ed 2016-11-02 04:11:27 -07:00
Dan Schaper
d695c5972f local variables just to be safe and make sure they stay in this function. 2016-11-02 04:11:09 -07:00
Dan Schaper
bbc09ed313 Swap variable names. 2016-11-02 04:10:57 -07:00
Promofaux
1d21b0da9a enable or disable logging from pihole command 2016-11-02 04:10:43 -07:00
Promofaux
617a147706 Wording adjustment 2016-11-02 04:10:29 -07:00
Promofaux
d4dccfdb2d Cherry pick 229439c 2016-11-02 04:08:53 -07:00
Dan Schaper
035e4bf727 Move value checks to if calls. 2016-11-02 03:55:04 -07:00
Dan Schaper
9ec5bbd560 Actually get is_repo to return a value and have it expected. 2016-11-02 03:38:35 -07:00
Dan Schaper
34482c5ed6 Modified is_repo 2016-11-02 03:09:59 -07:00
Dan Schaper
7d414b5628 Move version messages to main function, check for repos. 2016-11-02 01:12:02 -07:00
Dan Schaper
d9528dfd09 Bash is funny with returns. 2016-11-02 00:51:38 -07:00
Dan Schaper
12f5f8ba00 Begin to bring code up to Pi-hole conventions. Block installScripts and begin factoring out redundant code. 2016-11-02 00:14:25 -07:00
Dan Schaper
db0f3307e0 Only take out scripts in the directory, don't remove the directory as a whole. Need this for the future installs. 2016-11-01 22:48:30 -07:00
Dan Schaper
9c83825cb8 Merge branch 'feature/defensiveTweaks' of https://github.com/pi-hole/pi-hole into feature/defensiveTweaks 2016-11-01 22:20:32 -07:00
Dan Schaper
7a22471787 New naming convention, and reorder functions as bash would prefer them to be. 2016-11-01 22:19:40 -07:00
diginc
7548d9a8fe point shellcheck at update.sh instead 2016-11-01 23:56:46 -05:00
diginc
26789f9b36 add travis and python requirements 2016-11-01 23:53:11 -05:00
diginc
b4524839bb Merge branch 'development' of https://github.com/pi-hole/pi-hole into InstallFixes_UnitTests 2016-11-01 23:52:20 -05:00
Dan Schaper
6605c269cf Merge pull request #893 from diginc/feature/defensiveTweaks
Feature/defensive tweaks tweaks
2016-11-01 21:35:20 -07:00
diginc
c30478bf4a cleanup and use sentintel in is_repo 2016-11-01 23:21:50 -05:00
diginc
d986746ef9 missing quote added 2016-11-01 23:07:20 -05:00
diginc
a8fa061f2e quote all the assignments prevent accidental glob splitting 2016-11-01 23:02:06 -05:00
diginc
72015b0226 reduce complexity and un needed cat 2016-11-01 23:00:14 -05:00
Jacob Salmela
f8e9726922 source setupVars and check for the correct variable 2016-11-01 19:01:48 -05:00
Jacob Salmela
884363bd05 remove ipv6 check since it's already in setupVars 2016-11-01 19:01:28 -05:00
Dan Schaper
bdd240ecb6 Shellcheck catch for always true expansion. 2016-11-01 15:36:27 -07:00
Dan Schaper
04da292df9 Missed one spinner, updated and exit script if github is unreachable. 2016-11-01 12:17:38 -07:00
Dan Schaper
85b8676b8e Remove spinner, no functions here should last that long, and it masks a few potential exit avenues. 2016-11-01 12:16:46 -07:00
Dan Schaper
114bc13c23 Specify path, cron may not know where the files are located. 2016-11-01 12:03:26 -07:00
Dan Schaper
5fef5f1ed4 Break down is_repo to make sure it does what is expected. 2016-11-01 11:54:14 -07:00
Dan Schaper
807b60b0e6 Missed the second reinstaller.... 2016-11-01 11:44:16 -07:00
Dan Schaper
fbc800e556 If unattened reinstall fails, notify user and exit script immediately. 2016-11-01 11:42:18 -07:00
Dan Schaper
1991ee7a7d Google Style Guide. readonly and cap constants. 2016-11-01 11:36:44 -07:00
Dan Schaper
ffbfadbccf Detail what the script does. 2016-11-01 11:33:04 -07:00
Dan Schaper
c3e2bce956 Variables declared as strings, make sure they are strings when we use them in functions. 2016-11-01 11:26:57 -07:00
Dan Schaper
0c9520d7e3 Protect against unexepcted return values (GitHub not responding as we'd expect.) And make sure bash doesn't maul the variables and cause firing of unattended reinstall of application when values returned aren't as expected. 2016-11-01 11:18:41 -07:00
Dan Schaper
1e7e5230cc Clarify what exactly is being called and the expected returned value format 2016-11-01 11:15:21 -07:00
Dan Schaper
f1efc97357 Clairfy condition to make sure they operate as per the specs of the logic flow layout. 2016-11-01 11:04:33 -07:00
Eric Warnke
fb5ac6d6d7 We should prefer the php metapackage if it's there, falling back on php5 if it's not 2016-10-31 21:31:13 -04:00
Eric Warnke
4e7ca51beb Added dependancy for ping and lsof used in debug scripts 2016-10-31 21:24:57 -04:00
Adam Warner
d561600a31 Merge pull request #863 from brontide/wheezy_fix2
[Test] Wheezy install fix by selecting appropriate deps, made the php check …
2016-10-31 22:35:46 +00:00
Adam Warner
024e843998 Merge pull request #884 from pi-hole/PromoFaux-patch-2
Update pullapprove into master
2016-10-30 17:17:53 +00:00
Adam Warner
126f275e18 Update pullapprove into master
Requires approval of ALL members of the `admin` team.
2016-10-30 17:15:35 +00:00
Dan Schaper
c65e5ff8e0 Merge pull request #882 from pi-hole/feature/DiscourseREADME
Feature/discourse readme
2016-10-30 08:05:48 -07:00
Dan Schaper
ef13e67572 Update README.md 2016-10-30 07:11:34 -07:00
Dan Schaper
7920fcbb5e Add linux.die.net links
Add links for online manpages.
2016-10-30 07:09:03 -07:00
Dan Schaper
fa36fdeb03 Update README
Add discourse links, remove last of Optimal, bring Other Devices up to the top, update alternate install instructions.
2016-10-30 07:06:27 -07:00
Adam Warner
c143b5ccb4 Merge pull request #881 from pi-hole/feature/doc-update
Update last modified date for adlist
2016-10-30 14:04:30 +00:00
Dan Schaper
05c8406fca Update last modified date for adlist 2016-10-30 06:37:36 -07:00
Dan Schaper
69e3a45083 Merge pull request #874 from pi-hole/development
Next release 2.9.5
2016-10-29 17:01:51 -07:00
Dan Schaper
45259b6ec6 Merge branch 'master' into development 2016-10-29 16:59:02 -07:00
Adam Warner
d6fe48112c Merge pull request #857 from pi-hole/feature/debugUpdate
Debug Updates
2016-10-29 23:15:07 +01:00
Dan Schaper
dcf6e6b14d Clarify user action required to end the scripts. 2016-10-29 12:24:22 -07:00
Dan Schaper
908697a963 User token instructions, and small bugfix for missing separator. 2016-10-29 12:04:18 -07:00
Dan Schaper
bdaf961196 Merge pull request #876 from brontide/list_fix
[bug] Grep was leaking a file not found if blacklist didn't exist
2016-10-29 07:15:22 -07:00
Dan Schaper
6bd5d9b1a4 Merge pull request #879 from pi-hole/PromoFaux-patch-2
Update README.md
2016-10-29 07:13:26 -07:00
Adam Warner
beb0dae5a7 Update README.md
Add code climate badge
2016-10-29 14:46:09 +01:00
Dan Schaper
fad2d6b1d1 Return values start showin up now. Logic operators too... 2016-10-28 15:53:18 -07:00
Dan Schaper
9cd830b6aa Start to refine tests and clean up code. 2016-10-28 15:37:45 -07:00
Dan Schaper
d9a16b0ff4 Clear up bottom half of script with fewer redundenicies. 2016-10-28 15:25:06 -07:00
Dan Schaper
cb5c94ef5e Sorry, left that gravity.list parser in. Big debug files. Cleared that up. 2016-10-28 15:13:04 -07:00
Dan Schaper
85fbd66871 Good commit point, number of changes 2016-10-28 14:52:08 -07:00
Eric Warnke
3da75d6125 Grep was leaking a file not found if blacklist didn't exist 2016-10-28 17:28:04 -04:00
Dan Schaper
d4a3a5c180 Trying to implement The Brontide Idiom for design. 2016-10-28 10:42:30 -07:00
Eric Warnke
65e0fcbf10 Merge branch 'development' of https://github.com/pi-hole/pi-hole into wheezy_fix2 2016-10-28 13:14:00 -04:00
Dan Schaper
e22aca49c8 Merge pull request #813 from das7pad/development
Create missing directory for lighttpd
2016-10-28 10:05:08 -07:00
Dan Schaper
71e3a473d6 Fix = underbar 2016-10-28 07:16:16 -07:00
Dan Schaper
c2cfc09f63 Clean up more of the UX and log. Lots to go. 2016-10-28 07:06:05 -07:00
Dan Schaper
cbfad28f7e Merge pull request #873 from pi-hole/PromoFaux-patch-2
Create .codeclimate.yml
2016-10-28 07:04:53 -07:00
Adam Warner
6a4a468022 Create .codeclimate.yml 2016-10-28 15:02:03 +01:00
Dan Schaper
01f10b56e8 Refactor out some more reudndant code. 2016-10-28 06:51:30 -07:00
Dan Schaper
90ec0a610e Tricorder is introduced. 2016-10-28 04:42:45 -07:00
Dan Schaper
42bff1ce1b Move parse utility to be near other parsing functions. 2016-10-28 03:53:53 -07:00
Dan Schaper
e3c7a1f31f Top half user output updated. 2016-10-28 03:49:03 -07:00
Dan Schaper
0debbffa70 Add a couple of parsing utility functions. 2016-10-28 03:45:07 -07:00
Jacob Salmela
473b58d26d Merge pull request #704 from stonedbovines/development
lighttpd.conf templates change
2016-10-27 20:22:46 -05:00
Adam Warner
7e9498f04c Merge pull request #869 from pi-hole/feature/listen-address-1
Remove `listen-address` directive
2016-10-27 19:59:58 +01:00
Dan Schaper
300001e766 Remove listen-address directive
Since we declare an `interface` `dnsmasq` should ignore the `listen-address` directive thus making redundant. Removed.
2016-10-27 11:56:16 -07:00
Adam Warner
21fc6344bf Merge pull request #849 from pi-hole/aManHasNoNameResolution
[BugFix] A man has no name resolution
2016-10-27 19:41:07 +01:00
Adam Warner
a38edd891f Merge pull request #867 from pi-hole/gravTweaks
No need to reference script that does not exist...
2016-10-27 18:09:28 +01:00
Promofaux
794fa21137 install uninstall.sh... 2016-10-27 12:44:21 +01:00
Eric Warnke
977d1d1998 Merge branch 'development' of https://github.com/pi-hole/pi-hole into wheezy_fix2 2016-10-27 07:37:40 -04:00
Promofaux
cde003bc98 \ all the /s! 2016-10-27 11:13:00 +01:00
Promofaux
9e4e1d1cb2 improve comments 2016-10-27 11:09:24 +01:00
Promofaux
60142cd960 remove reference to whitelist.sh (no longer exists) replace with pihole -w 2016-10-27 11:06:11 +01:00
Dan Schaper
f9570a82cc Remove glitchy daemon detection. 2016-10-27 00:58:24 -07:00
Dan Schaper
36285ead57 Just becuase this is bugging me, but I'll fix it later. 2016-10-27 00:32:18 -07:00
Dan Schaper
13e488dace Daemon check for lighttpd and dnsmasq. 2016-10-27 00:30:51 -07:00
Dan Schaper
f169da8fd0 Set for quiet temporarily. 2016-10-26 14:48:11 -07:00
Dan Schaper
60741298b7 Cut more verbosity. Prep for lsof parsing and daemon tests. 2016-10-26 14:33:47 -07:00
Dan Schaper
f73734acb0 Only check IPv6 Gateway if it exists. 2016-10-26 13:57:57 -07:00
Dan Schaper
fc360abe43 Only check IPv6 if system is enabled. 2016-10-26 12:22:20 -07:00
Adam Warner
3996e11425 Merge pull request #859 from pi-hole/ImproveWhitelistBlacklist
Improvements to White and Blacklists
2016-10-26 19:52:16 +01:00
Eric Warnke
3a4fe3e391 Wheezy install fix by selecting appropriate deps, made the php check the same 2016-10-26 14:47:29 -04:00
Dan Schaper
98db002770 Tighten IP test reponse to user. 2016-10-26 11:38:19 -07:00
Dan Schaper
7c89b6934a Merge pull request #860 from brontide/screen_detection
Screen detection, sane minimums for whiptail dailogs
2016-10-26 11:06:43 -07:00
Adam Warner
380a19274d Merge pull request #861 from brontide/lighttpd_bug2526_fix
[test] fix known bug with older lighttpd syntax
2016-10-26 19:04:20 +01:00
Eric Warnke
f1c1caf7bd url.rewrite does not work in $HTTP block lighttpd bug #2526 2016-10-26 11:49:42 -04:00
Eric Warnke
e2997b8135 Due to lighttpd bug 2526 the url.rewrite for javascript must be placed
outside of the $HTTP block or it will never evaluate.
2016-10-26 11:49:31 -04:00
Eric Warnke
4ed6e4d016 Tiny screens get sane minimums 2016-10-26 11:15:02 -04:00
Eric Warnke
ac8d24a1ce Even with no detected screen size, it should presume 80x24 2016-10-26 11:14:54 -04:00
Eric Warnke
fc776921d5 stty is more compatible and does not require any additional dependancies for busybox 2016-10-26 11:14:46 -04:00
Adam Warner
55a653aca4 clear out /opt/pihole folder before installing scripts 2016-10-26 10:00:00 +01:00
Adam Warner
0d6a6b97f9 remove whitelist and blacklist scripts 2016-10-26 09:56:45 +01:00
Adam Warner
469ff45f01 create list.sh. Combines whitelist and blacklist scripts in an effort to reduce code duplication.
update pihole script to reflect new white/blacklist command.
2016-10-26 09:36:02 +01:00
Dan Schaper
bc077acfb8 Merge pull request #853 from pi-hole/gravFix
Gravity fix
2016-10-25 21:57:47 -07:00
Dan Schaper
4269626f5d Attribute source for bashism. 2016-10-25 21:53:41 -07:00
Dan Schaper
8fa897aadb Add back in sourcing files (setupVars.conf) and tweak ip_check 2016-10-25 21:39:28 -07:00
Dan Schaper
f549618d12 Move environment IPv6 interface check to ip_check and fix IPv6 source routing issue. 2016-10-25 21:25:57 -07:00
Dan Schaper
2fa47aaf31 Source routing is deprecated by RFC5095 2016-10-25 20:53:18 -07:00
Dan Schaper
b0874fb23a Temporarily get rid of gateway sourcing from setupVars, temporarily. 2016-10-25 19:53:00 -07:00
Dan Schaper
fb70fd77e8 Prototype version_check, add helper functions for logging and echo. 2016-10-25 17:50:14 -07:00
Dan Schaper
01f17f9cbb Reduce header verbosity. New header writer. 2016-10-25 17:19:33 -07:00
Promofaux
4c853defb2 add if traps to check for existence of whitelist.txt / blacklist.txt 2016-10-25 22:27:35 +01:00
Adam Warner
bd0db56ba0 actually fix up logic 2016-10-25 15:29:02 +01:00
Adam Warner
95f0b3710d fix up logic 2016-10-25 15:27:13 +01:00
Adam Warner
e0ac109dd1 remove hostname insertion into gravity.list from gravity.sh 2016-10-25 15:07:29 +01:00
Adam Warner
86349527e7 replace HOSTNAME tokens in 01-pihole.conf 2016-10-25 15:06:37 +01:00
Adam Warner
18005ceee8 add hostname lines in 01-pihole.conf 2016-10-25 15:03:49 +01:00
Adam Warner
7653b3d088 Remove pi.hole references in gravity.sh 2016-10-25 15:01:16 +01:00
Adam Warner
911053f63f Replace IPv4 and IPv6 tokens in 01-pihole.conf for pi.hole resolution. 2016-10-25 15:00:18 +01:00
Adam Warner
eb52f81a5c add pi.hole entries to 01-pihole.conf 2016-10-25 14:54:10 +01:00
Adam Warner
4839953328 Merge pull request #844 from pi-hole/EnforceTemplate
Update ISSUE_TEMPLATE.md
2016-10-25 17:57:06 +06:00
Adam Warner
aba0d93fda Merge pull request #814 from pi-hole/promoTweaksTheSecond
Various tweaks and fixes: Part 2 (Plus Pause/Resume button functionality!)
2016-10-25 17:43:40 +06:00
Adam Warner
0de74c0448 Merge pull request #848 from pi-hole/PromoFaux-patch-1
Update .pullapprove.yml
2016-10-25 17:38:04 +06:00
Adam Warner
ee927346b7 Update .pullapprove.yml
Update to V2. Only require 2 approvers on development, and 3 on master
2016-10-25 12:36:05 +01:00
Dan Schaper
2f8015cbca Update PULL_REQUEST_TEMPLATE.md 2016-10-24 14:50:47 -07:00
Dan Schaper
f3bf7c4b38 Update ISSUE_TEMPLATE.md 2016-10-24 14:48:38 -07:00
Adam Warner
e37c4d57da Merge pull request #842 from pi-hole/Fix/template-spacing
fix check box spacing
2016-10-25 02:32:34 +06:00
Jacob Salmela
acff90c000 fix check box spacing
I have seen several issues/PRs with the extra space.  removing the
extra whitespace might help to keep the formatting when being submitted.
2016-10-24 14:58:13 -05:00
Adam Warner
5f9e72dd71 Merge pull request #835 from pi-hole/debugFixes
Debug script tweaks.
2016-10-24 19:40:27 +06:00
Adam Warner
be0bcb8f7d Merge pull request #838 from airencracken/hotfix-missing-newline
Fix missing newline
2016-10-24 15:48:53 +06:00
Adam Warner
44c3d56439 Merge pull request #836 from pi-hole/UdemyAttribution
Udemy attribution
2016-10-24 13:54:14 +06:00
Marcus Hildum
519d731ddd Fix missing newline
My mistake
2016-10-23 16:45:51 -07:00
Dan Schaper
119c00c22a Merge pull request #837 from pi-hole/UdemyAttribution-1
Update PULL_REQUEST_TEMPLATE.md
2016-10-23 15:53:27 -07:00
Dan Schaper
12596dd697 Update PULL_REQUEST_TEMPLATE.md 2016-10-23 15:50:59 -07:00
Dan Schaper
cb38f5f0d7 Move attribution to bottom since our bots quote from top
Bot's keeps quoting the attribution line in snippets (Discourse, GitLab, Mattermost)
2016-10-23 15:50:03 -07:00
Promofaux
b49384ffe4 intent 2016-10-23 22:44:21 +01:00
Promofaux
7fb622638b flip reload logic. Do not reload if there are not changes made to blacklist.txt 2016-10-23 22:44:06 +01:00
Promofaux
bd0cc134bf MERGE FAIL :ashamed_face: 2016-10-23 22:43:11 +01:00
Promofaux
476fd1f695 indentation 2016-10-23 22:38:18 +01:00
Promofaux
96053d13be Flip reload logic. Do not reload lists if no changes made to whitelist.txt 2016-10-23 22:38:06 +01:00
Promofaux
c958bed418 Consistency changes. Replace MOST uses of echo >> ${DebugLog} with usage of log_write function 2016-10-23 22:31:20 +01:00
Promofaux
2b2c240d39 Fix shebang line broken in #831
Remove root check and references to ${SUDO}

Check for /etc/pihole/setupVars.conf and use piholeInterace in IPv6 checks as suggest by @jacobsalmela https://github.com/pi-hole/pi-hole/pull/831#issuecomment-255606854
2016-10-23 22:15:10 +01:00
Adam Warner
1f0ae16216 Merge pull request #831 from airencracken/development
Consistent Style in Bash
2016-10-23 20:03:30 +01:00
Promofaux
b79392ba2c exit after displaying white/blacklist 2016-10-23 19:49:51 +01:00
Promofaux
8ee98f0a4a remove a space 2016-10-23 19:47:31 +01:00
Promofaux
82e78fb651 Add output to pihole disable and pihole enable 2016-10-23 19:44:40 +01:00
Promofaux
d0826b2c33 Merge branch 'development' of https://github.com/airencracken/pi-hole into airencracken-dev 2016-10-23 19:33:28 +01:00
Promofaux
ff588200c0 Merge branch 'promoTweaksTheSecond' of https://github.com/pi-hole/pi-hole into promoTweaksTheSecond 2016-10-23 19:11:36 +01:00
Marcus Hildum
5d6072524c Consistency
Missed one
2016-10-22 10:26:00 -07:00
Marcus Hildum
07a66a70fc Consistency
More of the same
2016-10-22 10:12:05 -07:00
Marcus Hildum
69ba8a3c2f Consistency
Again trying to move the repo to one style. Doesn't matter if it's
changed afterwards, but one style instead of about five seems
saner.
2016-10-22 10:01:15 -07:00
Marcus Hildum
a30c75ef71 Consistency
Cleanup!
2016-10-22 00:35:44 -07:00
Marcus Hildum
d0b3727c5d Consistency
Yet more cleanup
2016-10-22 00:32:36 -07:00
Marcus Hildum
6e94bf5b6d Consistency
You know the drill
2016-10-22 00:14:38 -07:00
Marcus Hildum
0f04e270a7 consistency
Just more cleanup
2016-10-22 00:10:25 -07:00
Marcus Hildum
ec4f5007e7 remove bad { 2016-10-21 23:59:31 -07:00
Marcus Hildum
21b906e0e0 Consistency
More of the same
2016-10-21 23:57:47 -07:00
Marcus Hildum
7ebaf8e843 Consistency
Now with block indents!
2016-10-21 23:23:31 -07:00
Marcus Hildum
640398ced4 Consistency
We went with tabs earlier, may as well make that the "standard".
Easy enough to switch to spaces too if that's desired with expand(1)
2016-10-21 23:17:14 -07:00
Marcus Hildum
ebbe1fc236 More consistency
Odd mix of variables quoted with and without no-op parameter expansion

(i.e. ${thing})

More ${thing} than not, make that the standard
2016-10-21 23:11:17 -07:00
Marcus Hildum
aac8e45397 Imbue gravity.sh with some consistency
Mish-mash of tabs and spaces used for indentation. Mostly tabs though,
so going with those. Also indenting blocks and enforcing the

loop statement; do
done

style over the newline for do since it seemed to be more common.
2016-10-21 23:02:45 -07:00
Marcus Hildum
5ebfa5ecf7 heredoc for helpfunc in pihole 2016-10-21 22:53:04 -07:00
Marcus Hildum
12e041c9ef Merge remote-tracking branch 'upstream/development' into development 2016-10-21 22:49:21 -07:00
Marcus Hildum
54913f06a3 Merge remote-tracking branch 'upstream/master' into development 2016-10-21 22:49:13 -07:00
Adam Warner
44a36368a2 Merge pull request #822 from pi-hole/ChangeWarning
Add file change warning to header
2016-10-21 11:24:12 +01:00
Adam Warner
8f9ff930b3 Merge pull request #823 from tuplink/EnableOrDisable
Enable or disable
2016-10-21 11:02:10 +01:00
tuplink
e199f6db87 spelling updates 2016-10-20 21:15:11 -04:00
tuplink
c83dd3ccd7 change spacing 2016-10-20 18:45:27 -04:00
tuplink
78fbafa1cd test out new status logic 2016-10-20 18:40:03 -04:00
Promofaux
c0012540ed Re-add shebang 2016-10-20 21:08:07 +01:00
Promofaux
9ab6df0e54 Merge branch 'development' into promoTweaksTheSecond
# Conflicts:
#	advanced/Scripts/blacklist.sh
#	advanced/Scripts/whitelist.sh
2016-10-20 21:06:28 +01:00
Tommy Huff
685b775b68 rework status if statments 2016-10-20 11:24:34 -04:00
Tommy Huff
9056a5a7b6 fix spelling / replace tabs with spaces in help 2016-10-20 11:05:49 -04:00
Tommy Huff
e1c56bcbfe remove a commit in whitelist 2016-10-20 10:19:03 -04:00
Tommy Huff
15d68467a1 attempt to fix 2016-10-20 10:12:02 -04:00
Tommy Huff
3b6ecc573e fix conflict
Merge remote-tracking branch 'upstream/promoTweaksTheSecond' into EnableOrDisable
2016-10-20 10:09:23 -04:00
Tommy Huff
9427b1e594 Merge branch 'promoTweaksTheSecond' into EnableOrDisable 2016-10-20 09:55:22 -04:00
Tommy Huff
3ca3eaa62c change restartdnsmasq to restartdns 2016-10-20 09:40:45 -04:00
Tommy Huff
dda448e050 use finction in pihole to restart dnsmasq 2016-10-20 09:15:03 -04:00
Tommy Huff
60873144ea make last line of script return a new line been bugging me for awhile 2016-10-20 09:09:35 -04:00
Tommy Huff
a9d17c96be include status at end of gravity so if it is disabled you will see it when running 2016-10-20 09:03:20 -04:00
Tommy Huff
aaee895b2b add pihole status web option to return 1 or 0 for easy use with php 2016-10-20 08:58:36 -04:00
Tommy Huff
7d7e17b351 add toggle to enable or disable pi-hole 2016-10-20 08:45:20 -04:00
Adam Warner
c71a976e76 kill off an old ugly hack 2016-10-20 13:37:07 +01:00
Adam Warner
3623183072 Remove reference to non-existent script 2016-10-20 13:29:12 +01:00
Dan Schaper
e6bd979aeb Can't spell
Fix spelling error
2016-10-20 04:27:12 -07:00
Adam Warner
266c160108 Merge pull request #818 from airencracken/development
Standardize function declaration
2016-10-20 12:01:41 +01:00
Dan Schaper
b5b6350cc7 Add file change warning to header 2016-10-20 03:42:25 -07:00
tuplink
bbcf4800de use pihole instead of direct path 2016-10-20 06:30:48 -04:00
tuplink
41056ace02 use pihole instead of direct path 2016-10-20 06:29:53 -04:00
Dan Schaper
60a80dd678 Merge pull request #819 from pi-hole/adlistremoval
Remove problem list, sends in Unicode - Not adware
2016-10-20 02:41:22 -07:00
Marcus Hildum
0efda04920 Use heredocs instead of multiple calls to echo
There were a lot of places (like in help functions) that used multiple
echo calls instead of heredocs. Personal opinion but this seems cleaner.
2016-10-19 20:46:37 -07:00
Dan Schaper
8819e58882 Remove problem list, sends in Unicode - Not adware
Fixes #816
2016-10-19 20:15:36 -07:00
Marcus Hildum
28eeaf201b Standardize function declaration
There were no fewer than three styles of function declaration going
on in these files, so I attempted to standardize them to the typical

myfucn() {
}

style.
2016-10-19 19:47:45 -07:00
tuplink
74bfcea6a8 add blacklistScript var 2016-10-19 22:00:03 -04:00
tuplink
16f1d7fad9 Blacklist unwhitelisted 2016-10-19 21:50:34 -04:00
Promofaux
9aa38cf0ae mv patternbuffer instead of cp, then no need to clean up 2016-10-19 23:57:43 +01:00
Promofaux
a7fa7466fb remove no longer needed code 2016-10-19 23:54:43 +01:00
Promofaux
3f73c61cee cache event horizon before white/blacklists are applied for quicker processing on white/blacklist calls of gravity 2016-10-19 23:52:54 +01:00
Promofaux
a64f4cd871 whitelist script now only directly edits whitelist.txt. DOES NOT TOUCH HOST FILE, instead calls gravity with a no download argument 2016-10-19 23:17:20 +01:00
Promofaux
a41eff1276 Blacklist script now only directly edits blacklist.txt. DOES NOT TOUCH HOST FILE, instead calls gravity with a no download argument 2016-10-19 23:16:52 +01:00
Promofaux
b88fe572fe Whitelist/Blacklist domains directly in the Event Horizon. 2016-10-19 23:15:05 +01:00
Promofaux
59ba6f8aec add flag to skip download of lists 2016-10-19 22:06:19 +01:00
Promofaux
25343da6b7 wrong variable name 2016-10-19 20:03:29 +01:00
Promofaux
60d17b97f5 spacing 2016-10-19 19:51:32 +01:00
Promofaux
8cb72d87e4 make IPv4/IPv6 checking more robust in gravity 2016-10-19 19:50:21 +01:00
Jakob Ackermann
8872594ab9 create upload dir for lighttpd
directory is missing in the installation process but is used in the
lighttpd.conf
2016-10-19 14:27:17 +02:00
Jakob Ackermann
b50584119b Merge remote-tracking branch 'refs/remotes/pi-hole/development' into development 2016-10-19 14:24:02 +02:00
Jakob Ackermann
975f4f2a17 Merge remote-tracking branch 'refs/remotes/pi-hole/development' into development 2016-10-19 14:15:06 +02:00
Dan Schaper
16e4f79f09 Merge pull request #809 from pi-hole/PromoTweaks
Promo tweaks
2016-10-18 17:37:52 -07:00
Adam Warner
76cae20c33 Merge pull request #803 from pi-hole/attributes
Create .gitattributes
2016-10-18 19:51:44 +01:00
Adam Warner
b66f23cfd0 account for new update script 2016-10-18 14:19:44 +01:00
Adam Warner
27d6e5d8cf Complete overhaul of update logic. Moved to seperate script 2016-10-18 14:19:25 +01:00
Adam Warner
ff5d5b97c3 stash any changes in local repo 2016-10-18 13:54:09 +01:00
Adam Warner
ce46c4dec4 remove prematurely added code 2016-10-18 12:11:02 +01:00
Adam Warner
77e8be09a1 handle passing arguments to version script 2016-10-18 12:07:42 +01:00
Adam Warner
013d77488a complete overhaul of version script. Now with optional arguments! 2016-10-18 12:07:11 +01:00
Adam Warner
29ad2496b6 don't output "elevating with sudo" in pihole script, just do it. 2016-10-18 12:05:48 +01:00
Adam Warner
97a013b2b7 Add direction to change upstream servers in setupVars.conf 2016-10-18 10:35:22 +01:00
Adam Warner
77808223dc remove stock comments from 01-pihole.conf and add warning to the top 2016-10-18 10:05:10 +01:00
Jacob Salmela
fc89851ce9 Merge pull request #805 from pi-hole/development
Hotfix for installer bug, MASTER
2016-10-17 22:41:02 -05:00
Dan Schaper
c4c6555814 Merge branch 'master' into development 2016-10-17 19:57:05 -07:00
Dan Schaper
df0087fb23 Merge pull request #804 from pi-hole/hotfix/curlRefire
Refire with curl
2016-10-17 19:27:46 -07:00
Dan Schaper
ef3c13fe2b Refire with curl 2016-10-17 19:22:56 -07:00
Dan Schaper
0ad704e532 Update .gitattributes 2016-10-17 18:31:06 -07:00
Dan Schaper
2220d2dab8 Create .gitattributes 2016-10-17 18:28:38 -07:00
Promofaux
49f48e2aaa wrong word. #admincrimes 2016-10-17 22:24:59 +01:00
Adam Warner
dce24df379 Merge pull request #794 from pi-hole/development
[RELEASE] v2.9.3
2016-10-17 15:45:21 +01:00
Adam Warner
b59136c262 Merge pull request #800 from bcambl/ifcfg_backup
fix typo
2016-10-16 22:15:39 +01:00
bcambl
fb9664b636 fix typo 2016-10-16 15:11:47 -06:00
Adam Warner
5b736ae05e Merge pull request #799 from bcambl/ifcfg_backup
use an excluded extension for ifcfg backup
2016-10-16 20:50:54 +01:00
bcambl
ee114b3075 use an excluded extension for ifcfg backup 2016-10-16 13:28:14 -06:00
Adam Warner
123b16991b Merge pull request #798 from pi-hole/dnsmasqrestartchange
Some bug fixes before release
2016-10-16 17:25:30 +01:00
Promofaux
5792fc0bef change wording depending on choice 2016-10-16 17:23:26 +01:00
Promofaux
42c93917ef bug I forgot to fix before piholeUpdate was merged to development 2016-10-16 17:19:44 +01:00
Promofaux
8c0f860601 Use systemctl/service calls instead of killall to restart/reload dnsmasq 2016-10-16 17:16:59 +01:00
Adam Warner
df30a4c0d1 Merge pull request #779 from bcambl/fedora_fixes
Fedora fixes
2016-10-16 15:46:50 +01:00
Adam Warner
9ce13f0035 Merge pull request #790 from pi-hole/piholeUpdate
Various refactoring.
2016-10-15 23:51:07 +01:00
Promofaux
3884b01503 Forgot a 2016-10-15 23:21:13 +01:00
Promofaux
a84c3adeab if uniformity then dan = happy 2016-10-15 23:19:26 +01:00
Promofaux
a65b784907 repeat after me: repetition is a bit repetitive. 2016-10-15 21:26:41 +01:00
Promofaux
05dadad2e1 repair sounds better than refresh 2016-10-15 21:22:46 +01:00
Promofaux
3a9b39b842 adjust text in update_dialogs() whiptail 2016-10-15 21:12:13 +01:00
Promofaux
e612003293 handle arguments better, convert to flags, echo when they're set to true. 2016-10-15 20:52:20 +01:00
Promofaux
a43577fa26 add reconfigure flag to -r command 2016-10-15 20:43:03 +01:00
Promofaux
7e10dcdcf0 update pihole bash-completion 2016-10-15 20:12:16 +01:00
Promofaux
7ee1110351 ugh. pihole.conf. 2016-10-15 20:09:38 +01:00
Promofaux
51c4c51d9e Add trap to check existence of setupVars 2016-10-15 20:03:33 +01:00
Promofaux
fc4fe54099 standardise function naming 2016-10-15 20:02:57 +01:00
Dan Schaper
b5b240d0be Merge pull request #789 from pi-hole/legacy_setupVars
reflect name change of some of the variables in setupVars
2016-10-15 11:41:58 -07:00
Promofaux
4c42f00a86 remove uses of ${SUDO} and root check from gravity. As this is handled by pihole command. 2016-10-15 18:42:53 +01:00
Promofaux
090fbd04af Remove ${SUDO} usages and root checks from scripts called by pihole command as they should not be called directly. 2016-10-15 17:54:04 +01:00
Promofaux
461de48625 function declarations as per basic-install.sh 2016-10-15 17:25:17 +01:00
Promofaux
9352ba6e4a about time we exit 0'd 2016-10-15 17:16:44 +01:00
Promofaux
5e883239f9 remove calls for ${SUDO} as per basic-install.sh. 2016-10-15 17:15:59 +01:00
Promofaux
5ea08a2120 add -r to reconfigure pihole (basically runs basic-install.sh from /etc/.pihole) 2016-10-15 17:07:08 +01:00
Promofaux
a6fa60868b spacing 2016-10-15 15:41:48 +01:00
Promofaux
99878ae7d6 reflect name change of some of the variables in setupVars 2016-10-15 15:40:12 +01:00
bcambl
26202014a2 stdout formatting 2016-10-12 20:35:08 -06:00
bcambl
f4f8b96788 remove systemd selinux rules on init systems
fixes the failing SELinux policy compile on init based systems
2016-10-12 20:35:08 -06:00
bcambl
e5ede16749 update yum/dnf package count grepfu
see pull #774
2016-10-12 20:33:13 -06:00
bcambl
fbe3547129 EPEL is not required on Fedora
epel-release installs the EPEL package repository (Extra Packages for Enterprise Linux)
Dependencies from this repository should available by default on Fedora
2016-10-12 20:26:48 -06:00
Dan Schaper
23f7363c70 Merge pull request #774 from pi-hole/InstallFixes2
InstallFixes2
2016-10-12 11:47:15 -07:00
diginc
97c44042e1 Adding failing shellcheck test and results
Should be useful for showing others why other changes were made in the next commit.
2016-10-10 23:28:34 -05:00
diginc
a03caea549 setupVar tests passing for debian & centos 2016-10-10 23:14:39 -05:00
Promofaux
aa23fb1d56 choose* 2016-10-10 22:34:12 +01:00
Promofaux
4f35aac6dd transpose $ and " 2016-10-10 22:32:30 +01:00
Dan Schaper
4418ca9e9f Missing quote replacement. 2016-10-10 11:41:29 -07:00
Dan Schaper
570611fc09 CentOS Firewall fix 2016-10-10 11:30:15 -07:00
Dan Schaper
94dd5b1ebe More CentOS fixes. 2016-10-10 11:05:29 -07:00
Dan Schaper
74524e024d Always check PIHOLE_dependencies. 2016-10-10 10:36:19 -07:00
Adam Warner
324e00194f Merge pull request #766 from pi-hole/Mcat12-move-contributor
Move contributer file
2016-10-10 17:35:22 +01:00
Dan Schaper
e42b6dcc8e create_pihole_user update @diginc. 2016-10-10 09:21:28 -07:00
Dan Schaper
d71b799e75 More cleanups, localize variables, clean formatting. 2016-10-10 08:23:14 -07:00
Dan Schaper
87e7121332 Gravity.sh checks for null value for variables, obliging that expectation. 2016-10-10 07:32:16 -07:00
Dan Schaper
94f6354c94 Spinner blocks set -e trying to get it in functions that won't crash out... 2016-10-10 07:25:43 -07:00
Dan Schaper
b79059ebdb Start to add the spinner back in! 2016-10-10 06:46:30 -07:00
Dan Schaper
07b7e8a1a6 Track down a couple more variable name changes. 2016-10-10 06:33:56 -07:00
Dan Schaper
7ae2fc37c0 Match up descriptive variable names with setupVars.conf. Rectifies Ubuntu 16.04 gravity.list bug. 2016-10-10 06:23:17 -07:00
Dan Schaper
4f98c1bebb Boolean operators inside quotes don't work well... 2016-10-10 06:16:00 -07:00
Dan Schaper
2feec01e10 Add start_service and enable_service functions to handle restating services and setting services to start on reboot. 2016-10-10 06:06:34 -07:00
Dan Schaper
72b95e192e Fix logic bug in setup_user, update how setupVars are sourced so they will only be used if the user selects update and not if they select install. 2016-10-10 05:45:37 -07:00
Dan Schaper
47aad254d8 localized some more variables 2016-10-10 03:56:03 -07:00
Dan Schaper
bc14074d2a Tighten up Update Whiptail appearance. 2016-10-10 03:39:32 -07:00
Dan Schaper
5ab5b1a190 Overhaul dnsmasq version 3 way handshake configuration files. 2016-10-10 03:23:52 -07:00
Dan Schaper
b055f190f5 Factor out interfaces detection. 2016-10-10 03:16:22 -07:00
Dan Schaper
84b8953352 Remove quiet flags from package managment variables. Set quiets in functions by redirecting output. 2016-10-10 02:58:38 -07:00
Dan Schaper
93a591d487 Linting from ShellCheck 2016-10-10 02:57:04 -07:00
Dan Schaper
e6c0f38a7c Monolithic changes in one commit again. 2016-10-10 02:24:03 -07:00
Dan Schaper
d169305e5d Merge branch 'Fix/installerIssues' into development 2016-10-10 09:08:35 +00:00
Dan Schaper
f107ae4f9b Merge conflict resolution 2016-10-10 09:08:25 +00:00
Dan Schaper
bad7a08804 Refactor and rename create_pihole_user. Now to actually use the user created... 2016-10-10 01:51:19 -07:00
Dan Schaper
25cbf4cb35 Factor out legacy location script removal. 2016-10-10 01:43:10 -07:00
Dan Schaper
7f179f9a58 Remove sourcing bash completion, would fall off as soon as the subshell terminated. 2016-10-10 01:40:56 -07:00
Dan Schaper
5287ea8537 Refactor stopServices into stop_service and accept arguments for service to stop. Quiet output from a few other functions. 2016-10-10 01:25:11 -07:00
Dan Schaper
43e2aaebf0 rename updateDialogs to update_dialogs 2016-10-10 01:04:59 -07:00
Dan Schaper
e60eb66283 UpdateDialogs are now a Whiptail Menu, self-explanatory. 2016-10-10 01:04:03 -07:00
Dan Schaper
ca59b808d8 Git clone/update now occurs right after installer dependency checks. Allows for inclusion of installer source files in the repo. Passes set -e 2016-10-10 00:02:50 -07:00
Dan Schaper
8a15fd44d5 Update is_repo() to use git status for validity checks. 2016-10-09 23:53:18 -07:00
Dan Schaper
dac2b8942e Typo fix to generate commit. 2016-10-09 22:38:00 -07:00
Dan Schaper
54a1c5b63a Revert inadvertent commits
IDLE keeps committing direct to development.
2016-10-09 22:35:14 -07:00
Dan Schaper
61b02bf6d3 Add OR TRUE to PKG_COUNT so that a 0 package to update doesn't grep -c to an exit value of 1. 2016-10-09 22:27:37 -07:00
Dan Schaper
9d048b2fdf Move Pi-hole dependency checks to main() and out of duplicated install and update functions. Bring them up a level in the subshells. 2016-10-09 22:24:13 -07:00
Dan Schaper
d9e28a7422 factor out installer_dependencies 2016-10-09 22:05:06 -07:00
Dan Schaper
1fecdf42ca Move git to installer deps, refactor some functions. 2016-10-09 22:00:23 -07:00
Dan Schaper
d4bf85b67c Self contain package_check into package_check_install. Passes set -e test. 2016-10-09 21:44:45 -07:00
Dan Schaper
7131ff27c3 Attempt to set -e 2016-10-09 21:32:25 -07:00
Dan Schaper
a30f78c1c8 Oneliner php version check, passes set -e check. 2016-10-09 21:31:36 -07:00
Dan Schaper
7e0afffca8 Revert inadvertent commits 2016-10-09 19:41:32 -07:00
Dan Schaper
293c60fb9c Exit script on failure to install dependent package. 2016-10-09 13:52:36 -07:00
Dan Schaper
f5be8b2a5e Single dependency package check function, will exit if any errors with message to update cache. 2016-10-09 13:43:01 -07:00
Dan Schaper
6772603c15 Relocate cache check to its own function 2016-10-09 12:34:53 -07:00
Jacob Salmela
a22904f99b Merge pull request #769 from pi-hole/Fix/PackageCacheFresh
Fix/package cache fresh
2016-10-09 09:00:52 -05:00
Jacob Salmela
6710d2852f Merge pull request #770 from pi-hole/Fix/InstallerWrap
#admincrimes Fix/installer wrap
2016-10-09 08:41:47 -05:00
Dan Schaper
b157bc5cd7 Fixes #768 Check the staleness of the package index instead of the package cache. 2016-10-08 13:47:35 -07:00
Dan Schaper
10e1a03c76 runGravity is called after finalExports in the Debian install side. 2016-10-08 12:58:42 -07:00
Dan Schaper
d20df92e9f Script will now run as root, removed sudo from function calls. 2016-10-08 12:56:26 -07:00
Dan Schaper
44170207ac Add main function and fire script from main call. Prevents script from running before it is entirely downloaded. 2016-10-08 12:17:04 -07:00
Mcat12
9354799a26 Move contributer file
This will make it more visible to a user and fixes the link in the PR template.
2016-10-08 12:06:23 -04:00
Dan Schaper
33745be745 Merge pull request #753 from pi-hole/feature/RemoveBarePHP
Remove bare php package from dependencies
2016-10-07 21:32:07 -07:00
Adam Warner
6a28070017 Too many -s 2016-10-07 13:09:27 +01:00
Dan Schaper
91b948332e Merge pull request #754 from pi-hole/fix/bashConditional
fix/bashConditional
2016-10-07 03:42:22 -07:00
Dan Schaper
d1a7fe2d44 fix/bashConditional 2016-10-07 03:36:34 -07:00
Adam Warner
8224ef20a4 Merge pull request #748 from das7pad/development
add mimetype for .svg
2016-10-07 10:52:02 +01:00
Dan Schaper
a4c3464bc8 Merge pull request #749 from pi-hole/feature/installMethod
Change installScripts to use install
2016-10-07 02:51:33 -07:00
Adam Warner
5966d76e9a Merge pull request #729 from pi-hole/development
Pi-hole version 2.9.2
2016-10-07 10:49:06 +01:00
Dan Schaper
c39324d11f Remove bare php package from dependencies
`php5` package can trigger install of Apache2. Without this package in deps, PHP is still installed and operational.
2016-10-07 00:24:25 -07:00
Dan Schaper
8c151c62ce echo's don't need sudo 2016-10-05 10:46:10 -07:00
Dan Schaper
50d16d8215 Finish install conversion for installScripts() 2016-10-05 10:45:17 -07:00
Dan Schaper
3bbac9a5f2 install pihole 2016-10-05 10:19:47 -07:00
Dan Schaper
3600fd277e Don't need sudo to echo to term. 2016-10-05 10:16:56 -07:00
Dan Schaper
e8bb4a7e36 Continue migration to install 2016-10-05 10:14:36 -07:00
Dan Schaper
36987cb1cc Continue migration to install 2016-10-05 09:57:48 -07:00
Dan Schaper
5382b4fa37 Change installScripts to use install
Use the install program instead of copying files and directories in installScripts function.
2016-10-05 09:42:15 -07:00
Jakob Ackermann
28ef8068c8 add mimetype for .svg
Chrome does not display .svg-images without the correct mimetype
2016-10-05 01:20:30 +02:00
Jacob Salmela
ca0cbd68d6 Merge pull request #743 from pi-hole/whatDuplicates
What duplicates
2016-10-04 08:53:51 -05:00
Promofaux
c281b47905 Mover {SUDO} mkdir -p /etc/pihole/ back to the beginning. 2016-10-02 12:44:33 +01:00
Promofaux
aca5064743 --force seems to light. lets try --i_do_not_follow_recommendations 2016-10-02 11:16:48 +01:00
Promofaux
6f780316c4 remove whiptail dependency from verifyFreeDiskSpace.
Add argument detection to skip disk space. This is because curling to bash does not support waiting for user input.
2016-10-02 11:09:14 +01:00
Promofaux
4e262d81f0 wrap these vars in {} to matcht he rest of the script 2016-10-02 10:39:09 +01:00
Promofaux
6c2ff950ee remote duplicate ${SUDO} mkdir /etc/pihole 2016-10-02 10:33:59 +01:00
Promofaux
7684069d0b verifyFreeDiskSpace BEFORE installing any dependencies 2016-10-02 10:33:04 +01:00
Promofaux
73c85ae68a remove duplicate calls to installConfigs 2016-10-02 10:30:55 +01:00
Dan Schaper
911e39ba09 Merge pull request #726 from pi-hole/DebugUpdate
DebugUpdate
2016-10-01 13:47:15 -07:00
Dan Schaper
9a421d510a Ignore comments in adlists.list section. 2016-10-01 13:16:58 -07:00
Adam Warner
3bc7172e5e Merge pull request #738 from pi-hole/updateFix
Add check at the beginning of update script to check for existence of…
2016-10-01 17:03:31 +01:00
Promofaux
1a83988e26 Add check at the beginning of update script to check for existence of local repos. If not, redirect user to run install command again. 2016-10-01 16:56:03 +01:00
Adam Warner
0d0fc2504a Merge pull request #735 from diginc/patch-1
Update README.md
2016-10-01 04:54:19 +01:00
Adam Hill
0d4402ee0c Update README.md
Updating the old x86 only reference on the link to my docker project.
2016-09-30 17:01:44 -05:00
Adam Warner
722def9362 Merge pull request #734 from pi-hole/phpVerCheckFix
Fix the php version check command (Thanks @diginc!)
2016-09-30 22:48:39 +01:00
Promofaux
6a8bef83b3 Fix the php version check command (Thanks @diginc!) 2016-09-30 22:40:43 +01:00
Dan Schaper
a9c3e2c7ba Add log_write function. Update version_check to use logical conditionals. 2016-09-28 13:09:38 -07:00
Dan Schaper
7fcb40739d Close IF statement 2016-09-28 10:25:37 -07:00
Dan Schaper
5a3d319677 Add fail check to dig local and remote. 2016-09-28 10:24:44 -07:00
Dan Schaper
8466d0b681 Change NSLOOKUP to dig for resolver tests, add dnsmasq specific records check 2016-09-28 10:14:47 -07:00
Dan Schaper
5de179f1eb Remove blacklist comparison. 2016-09-28 09:52:11 -07:00
Dan Schaper
36e10595cc Change netstat to lsof. 2016-09-28 09:51:14 -07:00
Jacob Salmela
78c8723629 Merge pull request #708 from pi-hole/github-templates
Update Github templates
2016-09-27 22:12:36 -05:00
Dan Schaper
edd7f28104 Add internet checks to IP section 2016-09-27 19:39:28 -07:00
Dan Schaper
dba1ab3fc0 Remove compareWhitelist 2016-09-27 19:31:21 -07:00
Dan Schaper
3df9c48012 Include ping statistics in default gateway checks. 2016-09-27 19:30:37 -07:00
Jacob Salmela
6f6450bcff simplify a bit more
Removed a few checkboxes.  I really don't want to deter people from
submitting issue because of a wall of text, but some of this
information we really can use to be more helpful.
2016-09-27 08:23:52 -05:00
Jacob Salmela
1f34203167 Merge pull request #722 from pi-hole/BugFix718
Fix #718
2016-09-27 08:08:42 -05:00
Jacob Salmela
fed20648c6 Merge pull request #727 from pi-hole/BugFix725
Fix 725 and 653
2016-09-27 08:07:34 -05:00
Adam Warner
3fc3c5cae4 Add iproute2 to fix #653 2016-09-27 11:15:46 +01:00
Adam Warner
daa5366b57 Check if php5 is available in apt-cache, if so install it, else just install php 2016-09-27 11:11:47 +01:00
Dan Schaper
ac1c299369 Revert overzealous renaming of Pi-hole in pihole.log detection. 2016-09-26 20:54:05 -07:00
Dan Schaper
5bbb3ac49a Standardize Pi-hole naming. 2016-09-26 20:50:03 -07:00
Dan Schaper
014bdf911a Add open port detection 2016-09-26 20:39:39 -07:00
Dan Schaper
874853fe18 Add lighttpd to version check 2016-09-26 19:23:30 -07:00
Dan Schaper
274b71f8bc Relocate hostname checks 2016-09-26 18:52:12 -07:00
Dan Schaper
c41d543d81 Handle lack of IPv6 gracefully. 2016-09-26 18:27:02 -07:00
Dan Schaper
7729ddab30 Mode code realignment. Handle lack of IPv6 gateway gracefully. 2016-09-26 18:21:58 -07:00
Dan Schaper
60c0e59a83 Add IPv6 intelligence to debug 2016-09-26 18:06:31 -07:00
Adam Warner
ac49e639bd Fix #718 2016-09-26 11:58:07 +01:00
Adam Warner
f01b20c2af Merge pull request #711 from pi-hole/EggPatch-1
Egg patch 1
2016-09-22 10:50:56 +01:00
Dan Schaper
a0d47be088 Merge conflict resolution 2016-09-21 17:20:25 -07:00
Dan Schaper
521374e238 Update .pullapprove.yml 2016-09-21 16:53:50 -07:00
Jacob Salmela
34806ee2c2 1-10 codebase familiarity
Also tried to simplify the language a bit so as not to deter people
from submitting issues.  We may need to simplify it more
2016-09-21 08:39:32 -05:00
Jacob Salmela
4a0d5138a1 move CONTRIBUTING.MD to .github 2016-09-20 15:30:27 -05:00
Jacob Salmela
e6a3758899 new template based on udemy-dl 2016-09-20 15:29:20 -05:00
Jacob Salmela
fcb7d9111e new template based on udemy-dl 2016-09-20 15:14:15 -05:00
Jacob Salmela
d907731027 new template based on udemy-dl 2016-09-20 15:10:34 -05:00
Dan Schaper
ac8d295bb9 Merge pull request #668 from bcambl/dns-hostname-fixes
Dns hostname fixes
2016-09-20 10:16:15 -07:00
Jacob Salmela
a963beb96e Merge pull request #703 from pi-hole/PromoFaux-patch-1
Add additional instruction.
2016-09-20 08:34:04 -05:00
Steve Dobinson
737b510116 Update lighttpd.conf.fedora
Allow for password protection (or other user-initiated options) without clobbering already chosen user options.
2016-09-20 10:38:58 +01:00
Steve Dobinson
47cba83450 Update lighttpd.conf.debian
Allow for password protection (or other user-initiated options) without clobbering already chosen user options.
2016-09-20 10:34:21 +01:00
bcambl
21d4199a38 Merge branch 'development' into dns-hostname-fixes 2016-09-19 17:33:32 -06:00
Adam Warner
655c422c3c Add additional instruction.
Include "(Press space to select)" on ChooseInterface
2016-09-19 22:17:58 +01:00
Adam Warner
b6f8bd408f Merge pull request #702 from pi-hole/PromoFaux-patch-1
Change reset_on_push to false
2016-09-19 21:12:33 +01:00
Adam Warner
a3edd0b976 Change reset_on_push to false
So we don't have to reapprove every time the branch is updated.
2016-09-19 21:06:28 +01:00
Adam Warner
8e8efa5caf Merge pull request #695 from pi-hole/gravTweak
Enable support for /etc/pihole/setupVars.conf in gravity
2016-09-19 20:57:51 +01:00
Adam Warner
a41b8f62a2 Merge branch 'development' into gravTweak 2016-09-19 20:55:58 +01:00
Dan Schaper
452ee8c2df Merge pull request #692 from pi-hole/PromoFaux-patch-1
Update piholeDebug.sh
2016-09-19 12:55:26 -07:00
Dan Schaper
5ca6599ca9 Merge branch 'development' into gravTweak 2016-09-19 12:54:58 -07:00
Adam Warner
dcedf6bfd0 Merge branch 'development' into PromoFaux-patch-1 2016-09-19 20:54:04 +01:00
Adam Warner
1f4b43645b Merge pull request #679 from pi-hole/updateTweaks
Make `pihole -up` a bit more intelligent
2016-09-19 20:46:22 +01:00
Promofaux
3d5140458b Change cron job 2016-09-19 20:43:04 +01:00
Promofaux
f16574085f remove code made redundant by the existence of /etc/pihole/setupVars.conf 2016-09-16 23:09:14 +01:00
Promofaux
3ed62d45f5 Source IP addresses from /etc/pihole/setupVars.conf 2016-09-16 23:05:08 +01:00
Adam Warner
b1a7b0a186 Update piholeDebug.sh
I can spell, honest.
2016-09-15 15:16:06 +01:00
Promofaux
ec0c68621c add blank line after Current version display 2016-09-12 19:40:34 +01:00
Promofaux
a0977af081 remove references to UpdateDashboard.sh 2016-09-12 19:10:12 +01:00
Promofaux
a3ef9efd2f remove updateDashboard script 2016-09-12 19:09:19 +01:00
Promofaux
d58f7c6ec9 Remove references to dashboard update Script 2016-09-12 19:08:33 +01:00
Promofaux
d124c2c12e Expand to check web admin versions 2016-09-12 18:57:19 +01:00
Promofaux
0229f70761 Make updatePiholeFunc a bit smarter. Only run update if version is not the latest. 2016-09-12 18:29:04 +01:00
Promofaux
dde9281139 Only pull master branch, the rest aren't needed! 2016-09-12 18:12:31 +01:00
Adam Warner
6eedfb572e Merge pull request #676 from pi-hole/development
2.9.1
2016-09-12 14:56:25 +01:00
Adam Warner
edf81a232d Merge pull request #671 from pi-hole/PromoFaux-patch-1
Add cron to apt-get dependencies
2016-09-09 20:23:34 +01:00
Adam Warner
c2cb92a0b0 Add cron to apt-get dependencies 2016-09-08 23:42:05 +01:00
bcambl
640af300cb additional hostname checks in gravity.sh
- Test if /etc/hostname exists before attempting to cat the file.
 - Add alternative hostname discovery via hostname command
 - Add an error message to stdout if unable to determine host fqdn
2016-09-07 21:16:52 -06:00
bcambl
6c0c6182e9 fix newline in configureSelinux stdout 2016-09-07 21:16:52 -06:00
bcambl
05ad4445b5 add dns to sysconfig interface configuration 2016-09-07 21:16:51 -06:00
bcambl
1dd9f0747e add gateway to interface configuration
pi-hole@9cb4e8b broke #593
original commit 8550b76
2016-09-07 21:16:36 -06:00
Dan Schaper
150e01be8b Merge pull request #667 from pi-hole/piholeBashCompletionUpdate
Add the newer pihole command tags to the bash auto complete!
2016-09-06 15:02:13 -07:00
Promofaux
95ee3216c4 Add the newer pihole command tags to the bash auto complete! 2016-09-06 21:57:17 +01:00
Adam Warner
3b5e409b38 Merge pull request #666 from pi-hole/PromoFaux-patch-1
Change log flush time to 00:00
2016-09-06 19:30:36 +01:00
Adam Warner
eb201b614a Change log flush time to 00:00 2016-09-06 19:29:30 +01:00
Adam Warner
162a6b8b5c Merge pull request #665 from pi-hole/FleshOutPiholeQ
Make the output of pihole -q a bit clearer. Bye Bye nifty one-liner!
2016-09-06 19:25:03 +01:00
Promofaux
4ec01769cb Appease Jacob. 2016-09-06 19:21:56 +01:00
Promofaux
19b656132d Make the output of pihole -q a bit clearer. Bye Bye nifty one-liner! 2016-09-06 19:16:04 +01:00
Adam Warner
6305c7e2ab Merge pull request #663 from pi-hole/Bugfix660
Switch fedora and debian install check order
2016-09-05 18:32:55 +01:00
Promofaux
04c60e8a1c Switch fedora and debian install check order 2016-09-05 15:52:09 +01:00
Adam Warner
b6ceb06a32 Merge pull request #655 from pi-hole/PromoFaux-patch-1
Replace `truncate` command with `echo " " >`
2016-09-02 19:34:50 +01:00
Adam Warner
8cb2f85a08 Replace truncate command with echo " " > 2016-09-02 16:39:34 +01:00
Adam Warner
7ccfb6ea88 Merge pull request #651 from pi-hole/PromoFaux-patch-1
Remove defunct list from adlists.default
2016-09-02 14:12:32 +01:00
Adam Warner
531398b532 Remove defunct list from adlists.default
See issue #650
2016-09-02 11:27:13 +01:00
47 changed files with 4506 additions and 2750 deletions

38
.gitattributes vendored Normal file
View File

@@ -0,0 +1,38 @@
# FROM https://github.com/libgit2/libgit2sharp
# Text files that should be normalized to LF in odb.
*.cs text diff=csharp
*.config text
*.sln text
*.csproj text
*.md text
*.sh text
*.ps1 text
*.cmd text
*.bat text
*.markdown text
*.msbuild text
Lib/* binary
GitHub.Tests.Integration/Resources/* binary
# Binary files that should not be normalized or diffed
*.png binary
*.jpg binary
*.gif binary
*.pfx binary
*.snk binary
*.dll binary
*.exe binary
*.lib binary
*.exp binary
*.pdb binary
*.sdf binary
*.7z binary
# Catch all for anything we forgot. Add rules if you get CRLF -> LF warnings.
* text eol=lf

View File

@@ -1,7 +1,33 @@
##### Expected Behaviour:
**In raising this issue, I confirm the following (please check boxes, eg [X]) Failure to fill the template will close your issue:**
- [] 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)).
**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}_
---
**[FEATURE REQUEST | QUESTION | OTHER]:**
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.
**[BUG | ISSUE] Expected Behaviour:**
##### Actual Behaviour:
**[BUG | ISSUE] Actual Behaviour:**
##### Steps to reproduce this issue:
**[BUG | ISSUE] Steps to reproduce:**
-
-
-
-
**(Optional) Debug token generated by `pihole -d`:**
`<token>`
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._

View File

@@ -1,11 +1,19 @@
Fixes #[issue number] .
**By submitting this pull request, I confirm the following (please check boxes, eg [X]) _Failure to fill the template will close your PR_:**
Changes proposed in this pull request:
***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).
- [] 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}_
@pi-hole/gravity
---
_{replace this line with your pull request content}_
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._

6
.gitignore vendored
View File

@@ -1 +1,7 @@
.DS_Store
*.pyc
*.swp
__pycache__
.cache
.pullapprove.yml

25
.idea/codeStyleSettings.xml generated Normal file
View File

@@ -0,0 +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>
</option>
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>

View File

@@ -1,14 +1,38 @@
approve_by_comment: true
approve_regex: '^(Approved|:shipit:|:\+1:)'
reject_regex: '^(Rejected|:-1:)'
reset_on_push: true
author_approval: required
reviewers:
members:
- brantje
- dschaper
- jacobsalmela
- Mcat12
- PromoFaux
name: pullapprove
required: 3
version: 2
always_pending:
title_regex: '(WIP|wip)'
labels:
- wip
explanation: 'This PR is a work in progress...'
group_defaults:
reset_on_push:
enabled: true
reject_value: -2
approve_regex: '^(Approved|:shipit:|:\+1:|Engage)'
reject_regex: '^(Rejected|:-1:|Borg)'
author_approval:
auto: true
groups:
development:
approve_by_comment:
enabled: true
conditions:
branches:
- development
required: 2
teams:
- approvers
master:
approve_by_comment:
enabled: true
conditions:
branches:
- master
required: -1
teams:
- admin

10
.travis.yml Normal file
View File

@@ -0,0 +1,10 @@
sudo: required
services:
- docker
language: python
python:
- "2.7"
install:
- pip install -r requirements.txt
script: py.test -vv

View File

@@ -1,8 +1,38 @@
This is a basic checklist for now, We will update it in the future.
_This template was created based on the work of [`udemy-dl`](https://github.com/nishad/udemy-dl/blob/master/LICENSE)._
* Fork the repo and create your new branch based on the `development` branch.
* Commit Unix line endings
* If you want, try to keep to the theme of black holes/gravity. This can add some fun to your submission.
* Submit Pull Requests to the development branch only.
* Before Submitting your Pull Request, merge `development` with your new branch and fix any conflicts. (Make sure you don't break anything in development!)
* Be patient. We will review all submitted pull requests, but our focus is on stability.. please don't be offended if we reject your PR, or it appears we're doing nothing with it! We'll get around to it..
# Contributors Guide
Please read and understand the contribution guide before creating an issue or pull request.
## Etiquette
- Our goal for Pi-hole is **stability before features**. This means we focus on squashing critical bugs before adding new features. Often, we can do both in tandem, but bugs will take priority over a new feature.
- Pi-hole is open source and [powered by donations](https://pi-hole.net/donate/), and as such, we give our **free time** to build, maintain, and **provide user support** for this project. It would be extremely unfair for us to suffer abuse or anger for our hard work, so please take a moment to consider that.
- Please be considerate towards the developers and other users when raising issues or presenting pull requests.
- Respect our decision(s), and do not be upset or abusive if your submission is not used.
## Viability
When requesting or submitting new features, first consider whether it might be useful to others. Open source projects are used by many people, who may have entirely different needs to your own. Think about whether or not your feature is likely to be used by other users of the project.
## Procedure
**Before filing an issue:**
- Attempt to replicate and **document** the problem, to ensure that it wasn't a coincidental incident.
- Check to make sure your feature suggestion isn't already present within the project.
- Check the pull requests tab to ensure that the bug doesn't have a fix in progress.
- Check the pull requests tab to ensure that the feature isn't already in progress.
**Before submitting a pull request:**
- 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.
## Technical Requirements
- Submit Pull Requests to the **development branch only**.
- 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.
- (Optional fun) keep to the theme of Star Trek/black holes/gravity.

390
LICENSE
View File

@@ -1,339 +1,167 @@
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.
-------------------------------------------------------------
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.
European Union Public Licence
V. 1.1
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.
EUPL (C) the European Community 2007
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.
This European Union Public Licence (the "EUPL") applies to the Work or Software (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).
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.
The Original 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 Original Work:
The precise terms and conditions for copying, distribution and
modification follow.
Licensed under the EUPL V.1.1
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
or has expressed by any other mean his willingness to license under the EUPL.
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".
1. Definitions
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.
In this Licence, the following terms have the following meaning:
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 Licence: this Licence.
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.
- The Original Work or the Software: the software distributed and/or communicated by the Licensor under this Licence, available as Source Code and also as Executable Code as the case may be.
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:
- 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.
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
- The Work: the Original Work and/or its Derivative Works.
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 Source Code: the human-readable form of the Work which is the most convenient for people to study and modify.
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.)
- The Executable Code: any code which has generally been compiled and which is meant to be interpreted by a computer as a program.
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.
- The Licensor: the natural or legal person that distributes and/or communicates the Work under 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.
- Contributor(s): any natural or legal person who modifies the Work under the Licence, or otherwise contributes to the creation of a Derivative Work.
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.
- The Licensee or "You": any natural or legal person who makes any usage of the Software under the terms of the Licence.
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:
- Distribution and/or Communication: any act of selling, giving, lending, renting, distributing, communicating, transmitting, or otherwise making available, on-line or off-line, copies of the Work or providing access to its essential functionalities at the disposal of any other natural or legal person.
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,
2. Scope of the rights granted by the Licence
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 Licensor hereby grants You a world-wide, royalty-free, non-exclusive, sub-licensable licence to do the following, for the duration of copyright vested in the Original Work:
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.)
- use the Work in any circumstance and for all usage,
- reproduce the Work,
- modify the Original 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,
- sub-license rights in the Work or copies thereof.
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.
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.
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.
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.
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 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.
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.
3. Communication of the Source Code
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.
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 and/or communicate 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.
4. Limitations on copyright
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.
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 Original Work or Software, of the exhaustion of those rights or of other applicable limitations thereto.
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.
5. Obligations of the Licensee
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest 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:
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.
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 and/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.
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.
Copyleft clause: If the Licensee distributes and/or communicates copies of the Original Works or Derivative Works based upon the Original Work, this Distribution and/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. 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.
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.
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative Works or copies thereof based upon both the Original Work and another work licensed under a Compatible Licence, this Distribution and/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 Licensees obligations under the Compatible Licence conflict with his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail.
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.
Provision of Source Code: When distributing and/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 and/or communicate the Work.
NO WARRANTY
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.
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.
6. Chain of Authorship
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.
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.
END OF TERMS AND CONDITIONS
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.
How to Apply These Terms to Your New Programs
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 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.
7. Disclaimer of Warranty
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.
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 software development.
{description}
Copyright (C) {year} {fullname}
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 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 disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work.
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.
8. Disclaimer of Liability
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.
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.
Also add information on how to contact you by electronic and paper mail.
9. Additional agreements
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
While distributing the Original Work or Derivative Works, You may choose to conclude an additional agreement to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or services consistent with this Licence. However, in accepting such 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 such warranty or additional liability.
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.
10. Acceptance of the Licence
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.
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.
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:
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 and/or Communication by You of the Work or copies thereof.
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
11. Information to the public
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
In case of any Distribution and/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.
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.
12. Termination of the Licence
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.
13. Miscellaneous
Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the Work licensed hereunder.
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 and/or reformed so as necessary to make it valid and enforceable.
The European Commission may publish other linguistic versions and/or new versions of this Licence, 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.
14. Jurisdiction
Any litigation resulting from the interpretation of this License, arising between the European Commission, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice of the European Communities, as laid down in article 238 of the Treaty establishing the European Community.
Any litigation arising between Parties, other than the European Commission, 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.
15. Applicable Law
This Licence shall be governed by the law of the European Union country where the Licensor resides or has his registered office.
This licence shall be governed by the Belgian law if:
- a litigation arises between the European Commission, as a Licensor, and any Licensee;
- the Licensor, other than the European Commission, has no residence or registered office inside a European Union country.
===
Appendix
"Compatible Licences" according to article 5 EUPL are:
- GNU General Public License (GNU GPL) v. 2
- Open Software License (OSL) v. 2.1, v. 3.0
- Common Public License v. 1.0
- Eclipse Public License v. 1.0
- Cecill v. 2.0

146
README.md
View File

@@ -1,79 +1,128 @@
[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=3011939)](https://www.bountysource.com/trackers/3011939-pi-hole-pi-hole?utm_source=3011939&utm_medium=shield&utm_campaign=TRACKER_BADGE)
<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>
</p>
# Automated Install
<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>
Designed For Raspberry Pi A+, B, B+, 2, 3B, and Zero (with an Ethernet/Wi-Fi adapter)
Works on most Debian and CentOS/RHEL based distributions!
## The multi-platform, network-wide ad blocker
1. Install Raspbian
2. Run the command below (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!)
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.
## `curl -L https://install.pi-hole.net | bash`
- Web Browsers
- Cell Phones
- Smart TV's
- Internet-connected home automation
- Anything that communicates with the Internet
### Alternative Semi-Automated install
<p align="center">
<a href=http://www.digitalocean.com/?refcode=344d234950e1><img src="https://assets.pi-hole.net/static/DOHostingSlug.png"></a>
</p>
## 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.
```
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd Pi-hole/automated\ install/
bash basic-install.sh
```
##### Or
```bash
wget -O basic-install.sh https://install.pi-hole.net
chmod +x basic-install.sh
./basic-install.sh
bash basic-install.sh
```
If you wish to read over the script before running it, then after the `wget` command, do `nano basic-install.sh` to open a text viewer
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 Pi-hole as their DNS server.
Once installed, [configure your router to have **DHCP clients use the Pi as their DNS server**](http://pi-hole.net/faq/can-i-set-the-pi-hole-to-be-the-dns-server-at-my-router-so-i-dont-have-to-change-settings-for-my-devices/) 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/).
## What is Pi-hole and how do I install it?
<p align="center">
<a href=https://www.youtube.com/watch?v=vKWjx1AQYgs><img src="https://assets.pi-hole.net/static/video-explainer.png"></a>
</p>
## How To Install Pi-hole
[![60-second install tutorial](http://i.imgur.com/5TEc3a6.png)](https://www.youtube.com/watch?v=TzFLJqUeirA)
## How It Works
**Watch the 60-second video below to get a quick overview**
[![Pi-hole exlplained](http://i.imgur.com/pG1m937.png)](https://youtu.be/9Eti3xibiho)
## Pi-hole Is Free, But Powered By Your Donations
Send a one-time donation or sign up for Optimal.com's service using our link below to provide us with a small portion of the monthly fee.
- ![Paypal](http://i.imgur.com/3muNfxu.png) : [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3J2L3Z4DHW9UY)
- ![Flattr](http://i.imgur.com/ZFceFRu.png) : [Donate](https://flattr.com/submit/auto?user_id=jacobsalmela&url=https://github.com/pi-hole/pi-hole)
- ![Bitcoin](http://i.imgur.com/FIlmOMG.png) : 1GKnevUnVaQM2pQieMyeHkpr8DXfkpfAtL
## Get Help Or Connect With Us On The Web
- [@The_Pi_Hole](https://twitter.com/The_Pi_Hole)
- [/r/pihole](https://www.reddit.com/r/pihole/)
- [Pi-hole YouTube channel](https://www.youtube.com/channel/UCT5kq9w0wSjogzJb81C9U0w)
- [Wiki](https://github.com/pi-hole/pi-hole/wiki/Customization)
- [FAQs](https://pi-hole.net/help/)
- [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)
## Technical Details
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.
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.
### Gravity
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)).
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`.
## Web Interface
The [Web interface](https://github.com/jacobsalmela/AdminLTE#pi-hole-admin-dashboard) will be installed automatically so you can view stats and change settings. You can find it at:
#### Other Operating Systems
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.
### Web Interface
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:
`http://192.168.1.x/admin/index.php` or `http://pi.hole/admin`
![Pi-hole Advanced Stats Dashboard](http://i.imgur.com/gTq2GbS.png)
![Pi-hole Advanced Stats Dashboard](https://assets.pi-hole.net/static/dashboard212.png)
### Whitelist and blacklist
Domains can be whitelisted and blacklisted using two pre-installed scripts. See [the wiki page](https://github.com/pi-hole/pi-hole/wiki/Whitelisting-and-Blacklisting) for more details ![Whitelist editor in the Web interface](http://i.imgur.com/ogu2ewg.png)
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/whitelist212.png"></a>
</p>
### Settings
The settings page lets you control and configure your Pi-hole. You can do things like:
- enable Pi-hole's built-in DHCP server
- exclude domains from the graphs
- configure upstream DNS servers
- and more!
![Settings page](https://assets.pi-hole.net/static/settings212.png)
#### Built-in DHCP Server
Pi-hole ships with a built-in DHCP server. This allows you to let your network devices use Pi-hole as their DNS server if your router does not let you adjust the DHCP options.
<p align="center">
<a href=hhttps://discourse.pi-hole.net/t/how-do-i-configure-my-devices-to-use-pi-hole-as-their-dns-server/245><img src="https://assets.pi-hole.net/static/piholedhcpserver.png"></a>
</p>
## API
A basic read-only API can be accessed at `/admin/api.php`. It returns the following JSON:
```json
``` json
{
"domains_being_blocked": "136708",
"dns_queries_today": "18108",
@@ -86,14 +135,15 @@ The same output can be achieved on the CLI by running `chronometer.sh -j`
## Real-time Statistics
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)
You can view [real-time stats](https://discourse.pi-hole.net/t/how-do-i-view-my-pi-holes-stats-over-ssh-or-on-an-lcd-using-chronometer/240) 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)
## Pi-hole Projects
- [An ad blocking Magic Mirror](https://zonksec.com/blog/magic-mirror-dns-filtering/#dnssoftware)
- [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://www.stinebaugh.info/get-led-alerts-for-each-blocked-ad-using-pi-hole/)
- [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)
- [x86 Docker container that runs Pi-hole](https://hub.docker.com/r/diginc/pi-hole/)
- [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)
@@ -103,6 +153,9 @@ You can view [real-time stats](http://pi-hole.net/faq/install-the-real-time-lcd-
- [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
- [Pi-hole Droid - open source Android client](https://github.com/friimaind/pi-hole-droid)
## Coverage
@@ -119,7 +172,4 @@ You can view [real-time stats](http://pi-hole.net/faq/install-the-real-time-lcd-
- [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/)
## Other Operating Systems
This script will work for other UNIX-like systems with some slight **modifications**. As long as you can install `dnsmasq` and a Webserver, it should work OK. The automated install is only for a clean install of a Debian based system, such as the Raspberry Pi.
- [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/)

View File

@@ -1,4 +1,4 @@
## Pi-hole ad-list default sources. Updated 22/05/2016 #########################
## 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` #
@@ -14,8 +14,7 @@
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
# Other lists we consider safe:
http://adblock.gjtech.net/?format=unix-hosts
http://mirror1.malwaredomains.com/files/justdomains
https://mirror1.malwaredomains.com/files/justdomains
http://sysctl.org/cameleon/hosts
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
@@ -24,12 +23,12 @@ https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
# hosts-file.net list. Updated frequently, but has been known to block legitimate sites.
https://hosts-file.net/ad_servers.txt
# Mahakala list. Has been known to block legitimage domains including the entire .com range.
# Mahakala list. Has been known to block legitimate 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/
#https://adblock.mahakala.is/
# ADZHOSTS list. Has been known to block legitimate domains
#http://optimate.dl.sourceforge.net/project/adzhosts/HOSTS.txt
#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
@@ -38,14 +37,11 @@ https://hosts-file.net/ad_servers.txt
#http://securemecca.com/Downloads/hosts.txt
# Quidsup's tracker list
https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt
#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
# List of known C&C malware servers (see https://github.com/pi-hole/pi-hole/issues/528)
https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
# 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
@@ -53,5 +49,5 @@ https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.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.
# Combination of several 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

@@ -9,53 +9,36 @@
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# If you want dnsmasq to read another file, as well as /etc/hosts, use
# this.
###############################################################################
# FILE AUTOMATICALLY POPULATED BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# IF YOU WISH TO CHANGE THE UPSTREAM SERVERS, CHANGE THEM IN: #
# /etc/pihole/setupVars.conf #
# #
# ANY OTHER CHANGES SHOULD BE MADE IN A SEPERATE CONFIG FILE #
# OR IN /etc/dnsmasq.conf #
###############################################################################
addn-hosts=/etc/pihole/gravity.list
addn-hosts=/etc/pihole/local.list
# The following two options make you a better netizen, since they
# tell dnsmasq to filter out queries which the public DNS cannot
# answer, and which load the servers (especially the root servers)
# unnecessarily. If you have a dial-on-demand link they also stop
# these requests from bringing up the link unnecessarily.
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# If you don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead (see below), then
# uncomment this.
no-resolv
# Add other name servers here, with domain specs if they are for
# non-public domains.
server=@DNS1@
server=@DNS2@
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
interface=@INT@
# Or which to listen on by address (remember to include 127.0.0.1 if
# you use this.)
listen-address=127.0.0.1
# Set the cachesize here.
cache-size=10000
# For debugging purposes, log each DNS query as it passes through
# dnsmasq.
log-queries
log-facility=/var/log/pihole.log
# Normally responses which come from /etc/hosts and the DHCP lease
# file have Time-To-Live set as zero, which conventionally means
# do not cache further. If you are happy to trade lower load on the
# server for potentially stale date, you can set a time-to-live (in
# seconds) here.
local-ttl=300
# This allows it to continue functioning without being blocked by syslog, and allows syslog to use dnsmasq for DNS queries without risking deadlock
log-async

View File

@@ -1,237 +0,0 @@
#!/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
# Blacklists domains
#
# 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.
#rootcheck
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [ -x "$(command -v sudo)" ];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
function helpFunc()
{
echo "::: Immediately blacklists one or more domains in the hosts file"
echo ":::"
echo ":::"
echo "::: Usage: pihole -b domain1 [domain2 ...]"
echo "::: Options:"
echo "::: -d, --delmode Remove domains from the blacklist"
echo "::: -nr, --noreload Update blacklist without refreshing dnsmasq"
echo "::: -f, --force Force updating of the hosts files, even if there are no changes"
echo "::: -q, --quiet output is less verbose"
echo "::: -h, --help Show this help dialog"
echo "::: -l, --list Display your blacklisted domains"
exit 1
}
if [[ $# = 0 ]]; then
helpFunc
fi
#globals
basename=pihole
piholeDir=/etc/${basename}
adList=${piholeDir}/gravity.list
blacklist=${piholeDir}/blacklist.txt
reload=true
addmode=true
force=false
verbose=true
domList=()
domToRemoveList=()
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
if [[ -f ${piholeIPfile} ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat ${piholeIPfile})
#rm $piholeIPfile
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
fi
modifyHost=false
# After setting defaults, check if there's local overrides
if [[ -r ${piholeDir}/pihole.conf ]];then
echo "::: Local calibration requested..."
. ${piholeDir}/pihole.conf
fi
if [[ -f ${piholeIPv6file} ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
function HandleOther(){
#check validity of domain
validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
if [ -z "$validDomain" ]; then
echo "::: $1 is not a valid argument or domain name"
else
domList=("${domList[@]}" ${validDomain})
fi
}
function PopBlacklistFile(){
#check blacklist file exists, and if not, create it
if [[ ! -f ${blacklist} ]];then
touch ${blacklist}
fi
for dom in "${domList[@]}"; do
if "$addmode"; then
AddDomain "$dom"
else
RemoveDomain "$dom"
fi
done
}
function AddDomain(){
#| sed 's/\./\\./g'
bool=false
grep -Ex -q "$1" ${blacklist} || bool=true
if ${bool}; then
#domain not found in the blacklist file, add it!
if ${verbose}; then
echo -n "::: Adding $1 to blacklist file..."
fi
echo "$1" >> ${blacklist}
modifyHost=true
echo " done!"
else
if ${verbose}; then
echo "::: $1 already exists in $blacklist! No need to add"
fi
fi
}
function RemoveDomain(){
bool=false
grep -Ex -q "$1" ${blacklist} || bool=true
if ${bool}; then
#Domain is not in the blacklist file, no need to Remove
if ${verbose}; then
echo "::: $1 is NOT blacklisted! No need to remove"
fi
else
#Domain is in the blacklist file, add to a temporary array
if ${verbose}; then
echo "::: Un-blacklisting $dom..."
fi
domToRemoveList=("${domToRemoveList[@]}" $1)
modifyHost=true
fi
}
function ModifyHostFile(){
if ${addmode}; then
#add domains to the hosts file
if [[ -r ${blacklist} ]];then
numberOf=$(cat ${blacklist} | sed '/^\s*$/d' | wc -l)
plural=; [[ "$numberOf" != "1" ]] && plural=s
echo ":::"
echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..."
if [[ -n ${piholeIPv6} ]];then
cat ${blacklist} | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${adList}
else
cat ${blacklist} | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>${adList}
fi
fi
else
echo ":::"
for dom in "${domToRemoveList[@]}"
do
#we need to remove the domains from the blacklist file and the host file
echo "::: $dom"
echo -n "::: removing from HOSTS file..."
echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' ${adList}
echo " done!"
echo -n "::: removing from blackist.txt..."
echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' ${blacklist}
echo " done!"
done
fi
}
function Reload() {
# Reload hosts file
echo ":::"
echo -n "::: Refresh lists in dnsmasq..."
dnsmasqPid=$(pidof dnsmasq)
if [[ ${dnsmasqPid} ]]; then
# service already running - reload config
${SUDO} killall -s HUP dnsmasq
else
# service not running, start it up
${SUDO} service dnsmasq start
fi
echo " done!"
}
function DisplayBlist() {
verbose=false
echo -e " Displaying Gravity Affected Domains \n"
count=1
while IFS= read -r AD
do
echo "${count}: $AD"
count=$((count+1))
done < "$blacklist"
}
###################################################
for var in "$@"
do
case "$var" in
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) DisplayBlist;;
* ) HandleOther "$var";;
esac
done
PopBlacklistFile
if ${modifyHost} || ${force}; then
ModifyHostFile
else
if ${verbose}; then
echo "::: No changes need to be made"
fi
exit 1
fi
if ${reload}; then
Reload
fi

View File

@@ -1,87 +1,41 @@
#!/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.
#
# 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.
#Functions##############################################################################################################
piLog="/var/log/pihole.log"
gravity="/etc/pihole/gravity.list"
today=$(date "+%b %e")
. /etc/pihole/setupVars.conf
function CalcBlockedDomains(){
CheckIPv6
if [ -e "$gravity" ]; then
#Are we IPV6 or IPV4?
if [[ -n ${piholeIPv6} ]];then
#We are IPV6
blockedDomainsTotal=$(wc -l /etc/pihole/gravity.list | awk '{print $1/2}')
else
#We are IPV4
blockedDomainsTotal=$(wc -l /etc/pihole/gravity.list | awk '{print $1}')
fi
else
blockedDomainsTotal="Err."
fi
# Borrowed/modified from https://gist.github.com/cjus/1047794
function GetJSONValue {
retVal=$(echo $1 | sed 's/\\\\\//\//g' | \
sed 's/[{}]//g' | \
awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | \
sed 's/\"\:/\|/g' | \
sed 's/[\,]/ /g' | \
sed 's/\"//g' | \
grep -w $2)
echo ${retVal##*|}
}
function CalcQueriesToday(){
if [ -e "$piLog" ];then
queriesToday=$(cat "$piLog" | grep "$today" | awk '/query/ {print $6}' | wc -l)
else
queriesToday="Err."
fi
outputJSON() {
json=$(curl -s -X GET http://127.0.0.1/admin/api.php?summaryRaw)
echo ${json}
}
function CalcblockedToday(){
if [ -e "$piLog" ] && [ -e "$gravity" ];then
blockedToday=$(cat ${piLog} | awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' | wc -l)
else
blockedToday="Err."
fi
}
function 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
}
function CheckIPv6(){
piholeIPv6file="/etc/pihole/.useIPv6"
if [[ -f ${piholeIPv6file} ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
}
function outputJSON(){
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
CalcBlockedDomains
printf '{"domains_being_blocked":"%s","dns_queries_today":"%s","ads_blocked_today":"%s","ads_percentage_today":"%s"}\n' "$blockedDomainsTotal" "$queriesToday" "$blockedToday" "$percentBlockedToday"
}
function normalChrono(){
for (( ; ; ))
do
normalChrono() {
for (( ; ; )); do
clear
# Displays a colorful Pi-hole logo
echo " ___ _ _ _"
@@ -89,7 +43,7 @@ function normalChrono(){
echo "| _/ |___| ' \/ _ \ / -_)"
echo "|_| |_| |_||_\___/_\___|"
echo ""
echo " $(ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -d':' -f2)"
echo " ${IPV4_ADDRESS}"
echo ""
uptime | cut -d' ' -f11-
#uptime -p #Doesn't work on all versions of uptime
@@ -98,51 +52,44 @@ function normalChrono(){
# 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;}'
#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)
json=$(curl -s -X GET http://127.0.0.1/admin/api.php?summaryRaw)
domains=$(printf "%'.f" $(GetJSONValue ${json} "domains_being_blocked")) #add commas in
queries=$(printf "%'.f" $(GetJSONValue ${json} "dns_queries_today"))
blocked=$(printf "%'.f" $(GetJSONValue ${json} "ads_blocked_today"))
LC_NUMERIC=C percentage=$(printf "%0.2f\n" $(GetJSONValue ${json} "ads_percentage_today")) #2 decimal places
CalcQueriesToday
CalcblockedToday
CalcPercentBlockedToday
echo "Blocking: ${domains}"
echo "Queries: ${queries}"
CalcBlockedDomains
echo "Blocking: $blockedDomainsTotal"
#below commented line does not add up to todaysQueryCount
#echo "Queries: $todaysQueryCountV4 / $todaysQueryCountV6"
echo "Queries: $queriesToday" #same total calculation as dashboard
echo "Pi-holed: $blockedToday ($percentBlockedToday%)"
echo "Pi-holed: ${blocked} (${percentage}%)"
sleep 5
done
}
function displayHelp(){
echo "::: Displays stats about your piHole!"
echo ":::"
echo "::: Usage: sudo pihole -c [optional:-j]"
echo "::: Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds"
echo ":::"
echo "::: Options:"
echo "::: -j, --json output stats as JSON formatted string"
echo "::: -h, --help display this help text"
exit 1
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
}
if [[ $# = 0 ]]; then
normalChrono
fi
for var in "$@"
do
case "$var" in
"-j" | "--json" ) outputJSON;;
"-h" | "--help" ) displayHelp;;
* ) exit 1;;
esac
for var in "$@"; do
case "$var" in
"-j" | "--json" ) outputJSON;;
"-h" | "--help" ) displayHelp;;
* ) exit 1;;
esac
done

231
advanced/Scripts/list.sh Executable file
View File

@@ -0,0 +1,231 @@
#!/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.
#
# Whitelists and blacklists domains
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
#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=""
helpFunc() {
if [[ ${listMain} == ${whitelist} ]]; then
letter="w"
word="white"
else
letter="b"
word="black"
fi
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
if [[ "${letter}" == "b" ]]; then
echo "::: -wild, --wildcard Add wildcard entry (only blacklist)"
fi
exit 0
}
EscapeRegexp() {
# This way we may safely insert an arbitrary
# string in our regular expressions
# Also remove leading "." if present
echo $* | sed 's/^\.*//' | sed "s/[]\.|$(){}?+*^]/\\\\&/g" | sed "s/\\//\\\\\//g"
}
HandleOther(){
# First, convert everything to lowercase
domain=$(sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" <<< "$1")
#check validity of domain
validDomain=$(echo "${domain}" | perl -lne 'print if /(?!.*[^a-z0-9-\.].*)^((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9-]+\.)*[a-z]{2,63}/')
if [ -z "${validDomain}" ]; then
echo "::: $1 is not a valid argument or domain name"
else
domList=("${domList[@]}" ${validDomain})
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
}
AddDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
if [[ "${list}" == "${whitelist}" || "${list}" == "${blacklist}" ]]; then
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 "::: 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
elif [[ "${list}" == "${wildcardlist}" ]]; then
source "${piholeDir}/setupVars.conf"
#Remove the /* from the end of the IPv4addr.
IPV4_ADDRESS=${IPV4_ADDRESS%/*}
IPV6_ADDRESS=${IPV6_ADDRESS}
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 "::: Adding $1 to wildcard blacklist..."
fi
reload=true
echo "address=/$1/${IPV4_ADDRESS}" >> "${wildcardlist}"
if [[ ${#IPV6_ADDRESS} > 0 ]] ; then
echo "address=/$1/${IPV6_ADDRESS}" >> "${wildcardlist}"
fi
else
if [[ "${verbose}" == true ]]; then
echo "::: ${1} already exists in wildcard blacklist, no need to add!"
fi
fi
fi
}
RemoveDomain() {
list="$2"
domain=$(EscapeRegexp "$1")
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
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
else
if [[ "${verbose}" == true ]]; then
echo "::: ${1} does not exist in ${list}, no need to remove!"
fi
fi
elif [[ "${list}" == "${wildcardlist}" ]]; then
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 "::: Removing $1 from $list..."
# /I flag: search case-insensitive
sed -i "/address=\/${domain}/Id" "${list}"
reload=true
else
if [[ "${verbose}" == true ]]; then
echo "::: ${1} does not exist in ${list}, no need to remove!"
fi
fi
fi
}
Reload() {
# Reload hosts file
pihole -g -sd
}
Displaylist() {
if [[ ${listMain} == ${whitelist} ]]; then
string="gravity resistant domains"
else
string="domains caught in the sinkhole"
fi
verbose=false
echo -e " Displaying $string \n"
count=1
while IFS= read -r RD; do
echo "${count}: ${RD}"
count=$((count+1))
done < "${listMain}"
exit 0;
}
for var in "$@"; do
case "${var}" in
"-w" | "whitelist" ) listMain="${whitelist}"; listAlt="${blacklist}";;
"-b" | "blacklist" ) listMain="${blacklist}"; listAlt="${whitelist}";;
"-wild" | "wildcard" ) listMain="${wildcardlist}";;
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) Displaylist;;
* ) HandleOther "${var}";;
esac
done
shift
if [[ $# = 0 ]]; then
helpFunc
fi
PoplistFile
if ${reload}; then
Reload
fi

View File

@@ -1,361 +1,442 @@
#!/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
# Generates pihole_debug.log in /var/log/ to be used for troubleshooting.
# (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.
# Generates pihole_debug.log to be used for troubleshooting.
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
set -o pipefail
######## GLOBAL VARS ########
VARSFILE="/etc/pihole/setupVars.conf"
DEBUG_LOG="/var/log/pihole_debug.log"
DNSMASQFILE="/etc/dnsmasq.conf"
PIHOLECONFFILE="/etc/dnsmasq.d/01-pihole.conf"
DNSMASQCONFDIR="/etc/dnsmasq.d/*"
LIGHTTPDFILE="/etc/lighttpd/lighttpd.conf"
LIGHTTPDERRFILE="/var/log/lighttpd/error.log"
GRAVITYFILE="/etc/pihole/gravity.list"
HOSTSFILE="/etc/hosts"
WHITELISTFILE="/etc/pihole/whitelist.txt"
BLACKLISTFILE="/etc/pihole/blacklist.txt"
ADLISTSFILE="/etc/pihole/adlists.list"
ADLISTFILE="/etc/pihole/adlists.list"
PIHOLELOG="/var/log/pihole.log"
WHITELISTMATCHES="/tmp/whitelistmatches.list"
######## FIRST CHECK ########
# Must be root to debug
if [[ $EUID -eq 0 ]]; then
echo "::: You are root... Beginning debug!"
else
echo "::: Sudo will be used for debugging."
# Check if sudo is actually installed
if [ -x "$(command -v sudo)" ]; then
export SUDO="sudo"
else
echo "::: Please install sudo or run this as root."
exit 1
fi
fi
TIMEOUT=60
# Header info and introduction
cat << EOM
::: Beginning Pi-hole debug at $(date)!
:::
::: This process collects information from your Pi-hole, and optionally uploads
::: it to a unique and random directory on tricorder.pi-hole.net.
:::
::: NOTE: All log files auto-delete after 48 hours and ONLY the Pi-hole developers
::: can access your data via the given token. We have taken these extra steps to
::: secure your data and will work to further reduce any personal information gathered.
:::
::: Please read and note any issues, and follow any directions advised during this process.
EOM
# Ensure the file exists, create if not, clear if exists.
if [ ! -f "$DEBUG_LOG" ]; then
${SUDO} touch ${DEBUG_LOG}
${SUDO} chmod 644 ${DEBUG_LOG}
${SUDO} chown "$USER":root ${DEBUG_LOG}
else
truncate -s 0 ${DEBUG_LOG}
fi
truncate --size=0 "${DEBUG_LOG}"
chmod 644 ${DEBUG_LOG}
chown "$USER":pihole ${DEBUG_LOG}
source ${VARSFILE}
### Private functions exist here ###
function versionCheck {
echo "#######################################" >> ${DEBUG_LOG}
echo "########## Versions Section ###########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
TMP=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
echo "Pi-hole Version: $TMP" >> ${DEBUG_LOG}
TMP=$(cd /var/www/html/admin && git describe --tags --abbrev=0)
echo "WebUI Version: $TMP" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
log_write() {
echo "${1}" >> "${DEBUG_LOG}"
}
function distroCheck {
echo "#######################################" >> ${DEBUG_LOG}
echo "######## Distribution Section #########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
TMP=$(cat /etc/*release || echo "Failed to find release")
echo "Distribution Version: $TMP" >> ${DEBUG_LOG}
}
function compareWhitelist {
if [ ! -f "$WHITELISTMATCHES" ]; then
${SUDO} touch ${WHITELISTMATCHES}
${SUDO} chmod 644 ${WHITELISTMATCHES}
${SUDO} chown "$USER":root ${WHITELISTMATCHES}
else
truncate -s 0 ${WHITELISTMATCHES}
fi
echo "#######################################" >> ${DEBUG_LOG}
echo "######## Whitelist Comparison #########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
while read -r line; do
TMP=$(grep -w ".* $line$" "$GRAVITYFILE")
if [ ! -z "$TMP" ]; then
echo "$TMP" >> ${DEBUG_LOG}
echo "$TMP" >> ${WHITELISTMATCHES}
fi
done < "$WHITELISTFILE"
echo >> ${DEBUG_LOG}
log_echo() {
case ${1} in
-n)
echo -n "::: ${2}"
log_write "${2}"
;;
-r)
echo "::: ${2}"
log_write "${2}"
;;
-l)
echo "${2}"
log_write "${2}"
;;
*)
echo "::: ${1}"
log_write "${1}"
esac
}
function compareBlacklist {
echo "#######################################" >> ${DEBUG_LOG}
echo "######## Blacklist Comparison #########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
while read -r line; do
if [ ! -z "$line" ]; then
grep -w ".* $line$" "$GRAVITYFILE" >> ${DEBUG_LOG}
fi
done < "$BLACKLISTFILE"
echo >> ${DEBUG_LOG}
header_write() {
log_echo ""
log_echo "${1}"
log_write ""
}
function testNslookup {
TESTURL="doubleclick.com"
echo "#######################################" >> ${DEBUG_LOG}
echo "############ NSLookup Test ############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
file_parse() {
while read -r line; do
if [ ! -z "${line}" ]; then
[[ "${line}" =~ ^#.*$ || ! "${line}" ]] && continue
log_write "${line}"
fi
done < "${1}"
log_write ""
}
block_parse() {
log_write "${1}"
}
lsof_parse() {
local user
local process
user=$(echo ${1} | cut -f 3 -d ' ' | cut -c 2-)
process=$(echo ${1} | cut -f 2 -d ' ' | cut -c 2-)
[[ ${2} -eq ${process} ]] \
&& echo "::: Correctly configured." \
|| log_echo "::: Failure: Incorrectly configured daemon."
log_write "Found user ${user} with process ${process}"
}
version_check() {
header_write "Detecting Installed Package Versions:"
local error_found
error_found=0
local pi_hole_ver="$(cd /etc/.pihole/ && git describe --tags --abbrev=0)" \
&& log_echo -r "Pi-hole: $pi_hole_ver" || (log_echo "Pi-hole git repository not detected." && error_found=1)
local admin_ver="$(cd /var/www/html/admin && git describe --tags --abbrev=0)" \
&& log_echo -r "WebUI: $admin_ver" || (log_echo "Pi-hole Admin Pages git repository not detected." && error_found=1)
local light_ver="$(lighttpd -v |& head -n1 | cut -d " " -f1)" \
&& log_echo -r "${light_ver}" || (log_echo "lighttpd not installed." && error_found=1)
local php_ver="$(php -v |& head -n1)" \
&& log_echo -r "${php_ver}" || (log_echo "PHP not installed." && error_found=1)
(local pi_hole_branch="$(cd /etc/.pihole/ && git rev-parse --abbrev-ref HEAD)" && log_echo -r "Pi-hole branch: ${pi_hole_branch}") || log_echo "Unable to obtain Pi-hole branch"
(local pi_hole_rev="$(cd /etc/.pihole/ && git describe --long --dirty --tags)" && log_echo -r "Pi-hole rev: ${pi_hole_rev}") || log_echo "Unable to obtain Pi-hole revision"
(local admin_branch="$(cd /var/www/html/admin && git rev-parse --abbrev-ref HEAD)" && log_echo -r "AdminLTE branch: ${admin_branch}") || log_echo "Unable to obtain AdminLTE branch"
(local admin_rev="$(cd /var/www/html/admin && git describe --long --dirty --tags)" && log_echo -r "AdminLTE rev: ${admin_rev}") || log_echo "Unable to obtain AdminLTE revision"
return "${error_found}"
}
dir_check() {
header_write "Detecting contents of ${1}:"
for file in $1*; do
header_write "File ${file} found"
echo -n "::: Parsing..."
file_parse "${file}"
echo "done"
done
echo ":::"
}
files_check() {
#Check non-zero length existence of ${1}
header_write "Detecting existence of ${1}:"
local search_file="${1}"
if [[ -s ${search_file} ]]; then
echo -n "::: File exists, parsing..."
file_parse "${search_file}"
echo "done"
return 0
else
log_echo "${1} not found!"
return 1
fi
echo ":::"
}
source_file() {
local file_found=$(files_check "${1}") \
&& (source "${1}" &> /dev/null && echo "${file_found} and was successfully sourced") \
|| log_echo -l "${file_found} and could not be sourced"
}
distro_check() {
local soft_fail
header_write "Detecting installed OS Distribution"
soft_fail=0
local distro="$(cat /etc/*release)" && block_parse "${distro}" || (log_echo "Distribution details not found." && soft_fail=1)
return "${soft_fail}"
}
processor_check() {
header_write "Checking processor variety"
log_write $(uname -m) && return 0 || return 1
}
ipv6_check() {
# Check if system is IPv6 enabled, for use in other functions
if [[ $IPV6_ADDRESS ]]; then
ls /proc/net/if_inet6 &>/dev/null
return 0
else
return 1
fi
}
ip_check() {
local protocol=${1}
local gravity=${2}
local ip_addr_list="$(ip -${protocol} addr show dev ${PIHOLE_INTERFACE} | awk -F ' ' '{ for(i=1;i<=NF;i++) if ($i ~ '/^inet/') print $(i+1) }')"
if [[ -n ${ip_addr_list} ]]; then
log_write "IPv${protocol} on ${PIHOLE_INTERFACE}"
log_write "Gravity configured for: ${2:-NOT CONFIGURED}"
log_write "----"
log_write "${ip_addr_list}"
echo "::: IPv${protocol} addresses located on ${PIHOLE_INTERFACE}"
ip_ping_check ${protocol}
return $(( 0 + $? ))
else
log_echo "No IPv${protocol} found on ${PIHOLE_INTERFACE}"
return 1
fi
}
ip_ping_check() {
local protocol=${1}
local cmd
if [[ ${protocol} == "6" ]]; then
cmd="ping6"
g_addr="2001:4860:4860::8888"
else
cmd="ping"
g_addr="8.8.8.8"
fi
local ip_def_gateway=$(ip -${protocol} route | grep default | cut -d ' ' -f 3)
if [[ -n ${ip_def_gateway} ]]; then
echo -n "::: Pinging default IPv${protocol} gateway: "
if ! ping_gateway="$(${cmd} -q -W 3 -c 3 -n ${ip_def_gateway} -I ${PIHOLE_INTERFACE} | tail -n 3)"; then
echo "Gateway did not respond."
return 1
else
echo "Gateway responded."
log_write "${ping_gateway}"
fi
echo -n "::: Pinging Internet via IPv${protocol}: "
if ! ping_inet="$(${cmd} -q -W 3 -c 3 -n ${g_addr} -I ${PIHOLE_INTERFACE} | tail -n 3)"; then
echo "Query did not respond."
return 1
else
echo "Query responded."
log_write "${ping_inet}"
fi
else
log_echo " No gateway detected."
fi
return 0
}
port_check() {
local lsof_value
lsof_value=$(lsof -i ${1}:${2} -FcL | tr '\n' ' ') \
&& lsof_parse "${lsof_value}" "${3}" \
|| log_echo "Failure: IPv${1} Port not in use"
}
daemon_check() {
# Check for daemon ${1} on port ${2}
header_write "Daemon Process Information"
echo "::: Checking ${2} port for ${1} listener."
if [[ ${IPV6_READY} ]]; then
port_check 6 "${2}" "${1}"
fi
lsof_value=$(lsof -i 4:${2} -FcL | tr '\n' ' ') \
port_check 4 "${2}" "${1}"
}
testResolver() {
header_write "Resolver Functions Check"
# Find a blocked url that has not been whitelisted.
if [ -s "$WHITELISTMATCHES" ]; then
TESTURL="doubleclick.com"
if [ -s "${WHITELISTMATCHES}" ]; then
while read -r line; do
CUTURL=${line#*" "}
if [ "$CUTURL" != "Pi-Hole.IsWorking.OK" ]; then
if [ "${CUTURL}" != "Pi-Hole.IsWorking.OK" ]; then
while read -r line2; do
CUTURL2=${line2#*" "}
if [ "$CUTURL" != "$CUTURL2" ]; then
TESTURL="$CUTURL"
if [ "${CUTURL}" != "${CUTURL2}" ]; then
TESTURL="${CUTURL}"
break 2
fi
done < "$WHITELISTMATCHES"
done < "${WHITELISTMATCHES}"
fi
done < "$GRAVITYFILE"
done < "${GRAVITYFILE}"
fi
echo "NSLOOKUP of $TESTURL from PiHole:" >> ${DEBUG_LOG}
nslookup "$TESTURL" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
echo "NSLOOKUP of $TESTURL from 8.8.8.8:" >> ${DEBUG_LOG}
nslookup "$TESTURL" 8.8.8.8 >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
log_write "Resolution of ${TESTURL} from Pi-hole:"
LOCALDIG=$(dig "${TESTURL}" @127.0.0.1)
if [[ $? = 0 ]]; then
log_write "${LOCALDIG}"
else
log_write "Failed to resolve ${TESTURL} on Pi-hole"
fi
log_write ""
log_write "Resolution of ${TESTURL} from 8.8.8.8:"
REMOTEDIG=$(dig "${TESTURL}" @8.8.8.8)
if [[ $? = 0 ]]; then
log_write "${REMOTEDIG}"
else
log_write "Failed to resolve ${TESTURL} on 8.8.8.8"
fi
log_write ""
log_write "Pi-hole dnsmasq specific records lookups"
log_write "Cache Size:"
dig +short chaos txt cachesize.bind >> ${DEBUG_LOG}
log_write "Upstream Servers:"
dig +short chaos txt servers.bind >> ${DEBUG_LOG}
log_write ""
}
function checkProcesses {
echo "#######################################" >> ${DEBUG_LOG}
echo "########### Processes Check ###########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
echo ":::"
echo "::: Logging status of lighttpd and dnsmasq..."
checkProcesses() {
header_write "Processes Check"
echo "::: Logging status of lighttpd and dnsmasq..."
PROCESSES=( lighttpd dnsmasq )
for i in "${PROCESSES[@]}"
do
echo "" >> ${DEBUG_LOG}
echo -n "$i" >> "$DEBUG_LOG"
echo " processes status:" >> ${DEBUG_LOG}
${SUDO} systemctl -l status "$i" >> "$DEBUG_LOG"
for i in "${PROCESSES[@]}"; do
log_write ""
log_write "${i}"
log_write " processes status:"
systemctl -l status "${i}" >> "${DEBUG_LOG}"
done
log_write ""
}
function debugLighttpd {
echo "::: Writing lighttpd to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############ lighttpd.conf ############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$LIGHTTPDFILE" ]
then
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> ${DEBUG_LOG}
fi
done < "$LIGHTTPDFILE"
echo >> ${DEBUG_LOG}
else
echo "No lighttpd.conf file found!" >> ${DEBUG_LOG}
printf ":::\tNo lighttpd.conf file found\n"
fi
if [ -e "$LIGHTTPDERRFILE" ]
then
echo "#######################################" >> ${DEBUG_LOG}
echo "######### lighttpd error.log ##########" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
cat "$LIGHTTPDERRFILE" >> ${DEBUG_LOG}
else
echo "No lighttpd error.log file found!" >> ${DEBUG_LOG}
printf ":::\tNo lighttpd error.log file found\n"
fi
echo >> ${DEBUG_LOG}
debugLighttpd() {
echo "::: Checking for necessary lighttpd files."
files_check "${LIGHTTPDFILE}"
files_check "${LIGHTTPDERRFILE}"
echo ":::"
}
countdown() {
local tuvix
tuvix=${TIMEOUT}
printf "::: Logging will automatically teminate in %s seconds\n" "${TIMEOUT}"
while [ $tuvix -ge 1 ]
do
printf ":::\t%s seconds left. " "${tuvix}"
if [[ -z "${WEBCALL}" ]]; then
printf "\r"
else
printf "\n"
fi
sleep 5
tuvix=$(( tuvix - 5 ))
done
}
### END FUNCTIONS ###
### Check Pi internet connections ###
# Log the IP addresses of this Pi
IPADDR=$(${SUDO} ifconfig | perl -nle 's/dr:(\S+)/print $1/e')
echo "::: Writing local IPs to debug log"
echo "IP Addresses of this Pi:" >> ${DEBUG_LOG}
echo "$IPADDR" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
# Gather version of required packages / repositories
version_check || echo "REQUIRED FILES MISSING"
# Check for newer setupVars storage file
source_file "/etc/pihole/setupVars.conf"
# Gather information about the running distribution
distro_check || echo "Distro Check soft fail"
# Gather processor type
processor_check || echo "Processor Check soft fail"
# Check if we can connect to the local gateway
GATEWAY_CHECK=$(ping -q -w 1 -c 1 "$(ip r | grep default | cut -d ' ' -f 3)" > /dev/null && echo ok || echo error)
echo "Gateway check:" >> ${DEBUG_LOG}
echo "$GATEWAY_CHECK" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
ip_check 6 ${IPV6_ADDRESS}
ip_check 4 ${IPV4_ADDRESS}
versionCheck
distroCheck
compareWhitelist
compareBlacklist
testNslookup
daemon_check lighttpd http
daemon_check dnsmasq domain
checkProcesses
testResolver
debugLighttpd
echo "::: Writing dnsmasq.conf to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############### Dnsmasq ###############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$DNSMASQFILE" ]
then
#cat $DNSMASQFILE >> $DEBUG_LOG
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> ${DEBUG_LOG}
fi
done < "$DNSMASQFILE"
echo >> ${DEBUG_LOG}
else
echo "No dnsmasq.conf file found!" >> ${DEBUG_LOG}
printf ":::\tNo dnsmasq.conf file found!\n"
fi
files_check "${DNSMASQFILE}"
dir_check "${DNSMASQCONFDIR}"
files_check "${WHITELISTFILE}"
files_check "${BLACKLISTFILE}"
files_check "${ADLISTFILE}"
echo "::: Writing 01-pihole.conf to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "########### 01-pihole.conf ############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$PIHOLECONFFILE" ]
then
while read -r line; do
if [ ! -z "$line" ]; then
[[ "$line" =~ ^#.*$ ]] && continue
echo "$line" >> ${DEBUG_LOG}
fi
done < "$PIHOLECONFFILE"
echo >> ${DEBUG_LOG}
else
echo "No 01-pihole.conf file found!" >> ${DEBUG_LOG}
printf ":::\tNo 01-pihole.conf file found\n"
fi
echo "::: Writing size of gravity.list to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############ gravity.list #############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$GRAVITYFILE" ]
then
wc -l "$GRAVITYFILE" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
else
echo "No gravity.list file found!" >> ${DEBUG_LOG}
printf ":::\tNo gravity.list file found\n"
fi
header_write "Analyzing gravity.list"
# Write the hostname output to compare against entries in /etc/hosts, which is logged next
echo "Hostname of this pihole is: " >> ${DEBUG_LOG}
hostname >> ${DEBUG_LOG}
gravity_length=$(grep -c ^ "${GRAVITYFILE}") \
&& log_write "${GRAVITYFILE} is ${gravity_length} lines long." \
|| log_echo "Warning: No gravity.list file found!"
echo "::: Writing hosts file to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "################ Hosts ################" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$HOSTSFILE" ]
then
cat "$HOSTSFILE" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
else
echo "No hosts file found!" >> ${DEBUG_LOG}
printf ":::\tNo hosts file found!\n"
fi
header_write "Analyzing pihole.log"
### PiHole application specific logging ###
echo "::: Writing whitelist to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############## Whitelist ##############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$WHITELISTFILE" ]
then
cat "$WHITELISTFILE" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
else
echo "No whitelist.txt file found!" >> ${DEBUG_LOG}
printf ":::\tNo whitelist.txt file found!\n"
fi
pihole_length=$(grep -c ^ "${PIHOLELOG}") \
&& log_write "${PIHOLELOG} is ${pihole_length} lines long." \
|| log_echo "Warning: No pihole.log file found!"
echo "::: Writing blacklist to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############## Blacklist ##############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$BLACKLISTFILE" ]
then
cat "$BLACKLISTFILE" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
else
echo "No blacklist.txt file found!" >> ${DEBUG_LOG}
printf ":::\tNo blacklist.txt file found!\n"
fi
echo "::: Writing adlists.list to debug log..."
echo "#######################################" >> ${DEBUG_LOG}
echo "############ adlists.list #############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$ADLISTSFILE" ]
then
cat "$ADLISTSFILE" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
else
echo "No adlists.list file found... using adlists.default!" >> ${DEBUG_LOG}
printf ":::\tNo adlists.list file found... using adlists.default!\n"
fi
pihole_size=$(du -h "${PIHOLELOG}" | awk '{ print $1 }') \
&& log_write "${PIHOLELOG} is ${pihole_size}." \
|| log_echo "Warning: No pihole.log file found!"
# Continuously append the pihole.log file to the pihole_debug.log file
function dumpPiHoleLog {
dumpPiHoleLog() {
trap '{ echo -e "\n::: Finishing debug write from interrupt... Quitting!" ; exit 1; }' INT
echo -e "::: Writing current pihole traffic to debug log...\n:::\tTry loading any/all sites that you are having trouble with now... \n:::\t(Press ctrl+C to finish)"
echo "#######################################" >> ${DEBUG_LOG}
echo "############# pihole.log ##############" >> ${DEBUG_LOG}
echo "#######################################" >> ${DEBUG_LOG}
if [ -e "$PIHOLELOG" ]
then
while true; do
tail -f "$PIHOLELOG" >> ${DEBUG_LOG}
echo >> ${DEBUG_LOG}
done
echo "::: "
echo "::: --= User Action Required =--"
echo -e "::: Try loading a site that you are having trouble with now from a client web browser.. \n:::\t(Press CTRL+C to finish logging.)"
header_write "pihole.log"
if [ -e "${PIHOLELOG}" ]; then
# Dummy process to use for flagging down tail to terminate
countdown &
tail -n0 -f --pid=$! "${PIHOLELOG}" >> ${DEBUG_LOG}
else
echo "No pihole.log file found!" >> ${DEBUG_LOG}
log_write "No pihole.log file found!"
printf ":::\tNo pihole.log file found!\n"
fi
}
# Anything to be done after capturing of pihole.log terminates
function finalWork {
echo "::: Finshed debugging!"
echo "::: The degug log can be uploaded to Termbin.com for easier sharing."
read -r -p "::: Would you like to upload the log? [y/N] " response
case ${response} in
[yY][eE][sS]|[yY])
TERMBIN=$(cat /var/log/pihole_debug.log | nc termbin.com 9999)
;;
*)
echo "::: Log will NOT be uploaded to Termbin."
;;
esac
# Check if termbin.com is reachable. When it's not, point to local log instead
if [ -n "$TERMBIN" ]
then
echo "::: Debug log can be found at : $TERMBIN"
else
echo "::: Debug log can be found at : /var/log/pihole_debug.log"
fi
finalWork() {
local tricorder
echo "::: Finshed debugging!"
echo "::: The debug log can be uploaded to tricorder.pi-hole.net for sharing with developers only."
if [[ "${AUTOMATED}" ]]; then
echo "::: Debug script running in automated mode, uploading log to tricorder..."
tricorder=$(cat /var/log/pihole_debug.log | nc tricorder.pi-hole.net 9999)
else
read -r -p "::: Would you like to upload the log? [y/N] " response
case ${response} in
[yY][eE][sS]|[yY])
tricorder=$(cat /var/log/pihole_debug.log | nc tricorder.pi-hole.net 9999)
;;
*)
echo "::: Log will NOT be uploaded to tricorder."
;;
esac
fi
# Check if tricorder.pi-hole.net is reachable and provide token.
if [ -n "${tricorder}" ]; then
echo "::: ---=== Your debug token is : ${tricorder} Please make a note of it. ===---"
echo "::: Contact the Pi-hole team with your token for assistance."
echo "::: Thank you."
else
echo "::: There was an error uploading your debug log."
echo "::: Please try again or contact the Pi-hole team for assistance."
fi
echo "::: A local copy of the Debug log can be found at : /var/log/pihole_debug.log"
}
trap finalWork EXIT

View File

@@ -1,15 +1,20 @@
#!/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.
#
# Flushes /var/log/pihole.log
#
# 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.
echo -n "::: Flushing /var/log/pihole.log ..."
truncate -s 0 /var/log/pihole.log
# Test if logrotate is available on this system
if command -v /usr/sbin/logrotate &> /dev/null; then
/usr/sbin/logrotate --force /etc/pihole/logrotate
else
echo " " > /var/log/pihole.log
fi
echo "... done!"

View File

@@ -1,57 +1,42 @@
#!/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 ###########
# Run this script as root or under sudo
echo ":::"
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [ -x "$(command -v sudo)" ];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
# Borrowed from adafruit-pitft-helper < borrowed from raspi-config
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L324-L334
getInitSys() {
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
SYSTEMD=1
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
SYSTEMD=0
else
echo "Unrecognised init system"
return 1
fi
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
SYSTEMD=1
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
SYSTEMD=0
else
echo "Unrecognised init system"
return 1
fi
}
# Borrowed from adafruit-pitft-helper:
# https://github.com/adafruit/Adafruit-PiTFT-Helper/blob/master/adafruit-pitft-helper#L274-L285
autoLoginPiToConsole() {
if [ -e /etc/init.d/lightdm ]; then
if [ ${SYSTEMD} -eq 1 ]; then
${SUDO} systemctl set-default multi-user.target
${SUDO} ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
else
${SUDO} update-rc.d lightdm disable 2
${SUDO} sed /etc/inittab -i -e "s/1:2345:respawn:\/sbin\/getty --noclear 38400 tty1/1:2345:respawn:\/bin\/login -f pi tty1 <\/dev\/tty1 >\/dev\/tty1 2>&1/"
fi
fi
if [ -e /etc/init.d/lightdm ]; then
if [ ${SYSTEMD} -eq 1 ]; then
systemctl set-default multi-user.target
ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
else
update-rc.d lightdm disable 2
sed /etc/inittab -i -e "s/1:2345:respawn:\/sbin\/getty --noclear 38400 tty1/1:2345:respawn:\/bin\/login -f pi tty1 <\/dev\/tty1 >\/dev\/tty1 2>&1/"
fi
fi
}
######### SCRIPT ###########
@@ -66,23 +51,23 @@ echo /usr/local/bin/chronometer.sh >> /home/pi/.bashrc
# Set up the LCD screen based on Adafruits instuctions:
# https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/easy-install
curl -SLs https://apt.adafruit.com/add-pin | ${SUDO} bash
${SUDO} apt-get -y install raspberrypi-bootloader
${SUDO} apt-get -y install adafruit-pitft-helper
${SUDO} adafruit-pitft-helper -t 28r
curl -SLs https://apt.adafruit.com/add-pin | bash
apt-get -y install raspberrypi-bootloader
apt-get -y install adafruit-pitft-helper
adafruit-pitft-helper -t 28r
# Download the cmdline.txt file that prevents the screen from going blank after a period of time
${SUDO} mv /boot/cmdline.txt /boot/cmdline.orig
${SUDO} curl -o /boot/cmdline.txt https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/cmdline.txt
mv /boot/cmdline.txt /boot/cmdline.orig
curl -o /boot/cmdline.txt https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/cmdline.txt
# Back up the original file and download the new one
${SUDO} mv /etc/default/console-setup /etc/default/console-setup.orig
${SUDO} curl -o /etc/default/console-setup https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/console-setup
mv /etc/default/console-setup /etc/default/console-setup.orig
curl -o /etc/default/console-setup https://raw.githubusercontent.com/pi-hole/pi-hole/master/advanced/console-setup
# Instantly apply the font change to the LCD screen
${SUDO} setupcon
setupcon
${SUDO} reboot
reboot
# Start showing the stats on the screen by running the command on another tty:
# http://unix.stackexchange.com/questions/170063/start-a-process-on-a-different-tty

181
advanced/Scripts/update.sh Executable file
View File

@@ -0,0 +1,181 @@
#!/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.
#
# 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.
#
# 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"
PH_TEST=true
source ${PI_HOLE_FILES_DIR}/automated\ install/basic-install.sh
# 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}"
# Fetch latest changes in this repo
git fetch --quiet origin
# @ alone is a shortcut for HEAD. Older versions of git
# need @{0}
LOCAL="$(git rev-parse @{0})"
# 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 "::: Error: Local revision could not be obtained, ask Pi-hole support."
echo "::: Additional debugging output:"
git status
exit
fi
if [[ ${#REMOTE} == 0 ]]; then
echo "::: Error: Remote revision could not be obtained, ask Pi-hole support."
echo "::: Additional debugging output:"
git status
exit
fi
# Change back to original directory
cd "${curdir}"
if [[ "${LOCAL}" != "${REMOTE}" ]]; then
# Local branch is behind remote branch -> Update
return 0
else
# Local branch is up-to-date or in a situation
# where this updater cannot be used (like on a
# branch that exists only locally)
return 1
fi
}
main() {
local pihole_version_current
local web_version_current
#This is unlikely
if ! is_repo "${PI_HOLE_FILES_DIR}" ; then
echo "::: Critical Error: Core Pi-Hole repo is missing from system!"
echo "::: Please re-run install script from https://github.com/pi-hole/pi-hole"
exit 1;
fi
echo "::: Checking for updates..."
if GitCheckUpdateAvail "${PI_HOLE_FILES_DIR}" ; then
core_update=true
echo "::: Pi-hole Core: update available"
else
core_update=false
echo "::: Pi-hole Core: up to date"
fi
if [[ ${INSTALL_WEB} == true ]]; then
if ! is_repo "${ADMIN_INTERFACE_DIR}" ; then
echo "::: Critical Error: Web Admin repo is missing from system!"
echo "::: Please re-run install script from https://github.com/pi-hole/pi-hole"
exit 1;
fi
if GitCheckUpdateAvail "${ADMIN_INTERFACE_DIR}" ; then
web_update=true
echo "::: Web Interface: update available"
else
web_update=false
echo "::: Web Interface: up to date"
fi
# Logic
# If Core up to date AND web up to date:
# Do nothing
# If Core up to date AND web NOT up to date:
# Pull web repo
# If Core NOT up to date AND web up to date:
# pull pihole repo, run install --unattended -- reconfigure
# if Core NOT up to date AND web NOT up to date:
# pull pihole repo run install --unattended
if ! ${core_update} && ! ${web_update} ; then
echo ":::"
echo "::: Everything is up to date!"
exit 0
elif ! ${core_update} && ${web_update} ; then
echo ":::"
echo "::: Pi-hole Web Admin files out of date"
getGitFiles "${ADMIN_INTERFACE_DIR}" "${ADMIN_INTERFACE_GIT_URL}"
elif ${core_update} && ! ${web_update} ; then
echo ":::"
echo "::: 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 "Unable to complete update, contact Pi-hole" && exit 1
elif ${core_update} && ${web_update} ; then
echo ":::"
echo "::: Updating Everything"
getGitFiles "${PI_HOLE_FILES_DIR}" "${PI_HOLE_GIT_URL}"
${PI_HOLE_FILES_DIR}/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
fi
else # Web Admin not installed, so only verify if core is up to date
if ! ${core_update}; then
echo ":::"
echo "::: Everything is up to date!"
exit 0
else
echo ":::"
echo "::: 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 "Unable to complete update, contact Pi-hole" && 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'"
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'"
fi
echo ""
exit 0
}
main

View File

@@ -1,69 +0,0 @@
#!/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
# Updates the Pi-hole web interface
#
# 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.
WEB_INTERFACE_GIT_URL="https://github.com/pi-hole/AdminLTE.git"
WEB_INTERFACE_DIR="/var/www/html/admin"
main() {
prerequisites
if ! is_repo; then
make_repo
fi
update_repo
}
prerequisites() {
# must be root to update
if [[ $EUID -ne 0 ]]; then
sudo bash "$0" "$@"
exit $?
fi
# web interface must already exist. this is a (lazy)
# check to make sure pihole is actually installed.
if [ ! -d "$WEB_INTERFACE_DIR" ]; then
echo "$WEB_INTERFACE_DIR not found. Exiting."
exit 1
fi
if ! type "git" > /dev/null; then
apt-get -y install git
fi
}
is_repo() {
# if the web interface directory does not have a .git folder
# it means its using the master.zip archive from the install
# script.
if [ ! -d "$WEB_INTERFACE_DIR/.git" ]; then
return 1
fi
return 0
}
# removes the web interface installed from the master.zip archive and
# replaces it with the current master branch from github
make_repo() {
# remove the non-repod interface and clone the interface
rm -rf ${WEB_INTERFACE_DIR}
git clone "$WEB_INTERFACE_GIT_URL" "$WEB_INTERFACE_DIR"
}
# pulls the latest master branch from github
update_repo() {
# pull the latest commits
cd "$WEB_INTERFACE_DIR"
git pull
}
main

110
advanced/Scripts/version.sh Normal file → Executable file
View File

@@ -1,20 +1,102 @@
#!/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 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.
# shows version numbers
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
piholeVersion=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
webVersion=$(cd /var/www/html/admin/ && 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/",$//')
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 "::: Pi-hole version is $piholeVersion (Latest version is $piholeVersionLatest)"
echo "::: Web-Admin version is $webVersion (Latest version is $webVersionLatest)"
# Flags:
latest=false
current=false
DEFAULT="-1"
normalOutput() {
piholeVersion=$(cd /etc/.pihole/ && git describe --tags --abbrev=0)
webVersion=$(cd /var/www/html/admin/ && 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/",$//')
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 "::: Pi-hole version is ${piholeVersion} (Latest version is ${piholeVersionLatest:-${DEFAULT}})"
echo "::: Web-Admin version is ${webVersion} (Latest version is ${webVersionLatest:-${DEFAULT}})"
}
webOutput() {
for var in "$@"; do
case "${var}" in
"-l" | "--latest" ) latest=true;;
"-c" | "--current" ) current=true;;
* ) echo "::: Invalid Option!"; exit 1;
esac
done
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
}
coreOutput() {
for var in "$@"; do
case "${var}" in
"-l" | "--latest" ) latest=true;;
"-c" | "--current" ) current=true;;
* ) echo "::: Invalid Option!"; exit 1;
esac
done
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
}
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
}
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

447
advanced/Scripts/webpage.sh Executable file
View File

@@ -0,0 +1,447 @@
#!/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.
#
# Web interface settings
#
# 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"
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
::: -i, interface Setup interface listening behavior of dnsmasq
::: pihole -a -i local : Listen on all interfaces, but allow only queries from
::: devices that are at most one hop away (local devices)
::: pihole -a -i single : Listen only on one interface (see PIHOLE_INTERFACE)
::: pihole -a -i all : Listen on all interfaces, permit all origins
EOM
exit 0
}
add_setting() {
echo "${1}=${2}" >> "${setupVars}"
}
delete_setting() {
sed -i "/${1}/d" "${setupVars}"
}
change_setting() {
delete_setting "${1}"
add_setting "${1}" "${2}"
}
add_dnsmasq_setting() {
if [[ "${2}" != "" ]]; then
echo "${1}=${2}" >> "${dnsmasqconfig}"
else
echo "${1}" >> "${dnsmasqconfig}"
fi
}
delete_dnsmasq_setting() {
sed -i "/${1}/d" "${dnsmasqconfig}"
}
SetTemperatureUnit(){
change_setting "TEMPERATUREUNIT" "${unit}"
}
SetWebPassword(){
if [ "${SUDO_USER}" == "www-data" ]; then
echo "Security measure: user www-data is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
if [ "${SUDO_USER}" == "lighttpd" ]; then
echo "Security measure: user lighttpd is not allowed to change webUI password!"
echo "Exiting"
exit 1
fi
# 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.*$//')
# Save hash to file
change_setting "WEBPASSWORD" "${hash}"
echo "New password set"
else
change_setting "WEBPASSWORD" ""
echo "Password removed"
fi
}
ProcessDNSSettings() {
source "${setupVars}"
delete_dnsmasq_setting "server"
COUNTER=1
while [[ 1 ]]; do
var=PIHOLE_DNS_${COUNTER}
if [ -z "${!var}" ]; then
break;
fi
add_dnsmasq_setting "server" "${!var}"
let COUNTER=COUNTER+1
done
delete_dnsmasq_setting "domain-needed"
if [[ "${DNS_FQDN_REQUIRED}" == true ]]; then
add_dnsmasq_setting "domain-needed"
fi
delete_dnsmasq_setting "bogus-priv"
if [[ "${DNS_BOGUS_PRIV}" == true ]]; then
add_dnsmasq_setting "bogus-priv"
fi
delete_dnsmasq_setting "dnssec"
delete_dnsmasq_setting "trust-anchor="
if [[ "${DNSSEC}" == true ]]; then
echo "dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
" >> "${dnsmasqconfig}"
fi
delete_dnsmasq_setting "host-record"
if [ ! -z "${HOSTRECORD+x}" ]; 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
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" ]]; then
change_setting "DNS_BOGUS_PRIV" "true"
else
change_setting "DNS_BOGUS_PRIV" "false"
fi
if [[ "${args[5]}" == "dnssec" ]]; then
change_setting "DNSSEC" "true"
else
change_setting "DNSSEC" "false"
fi
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
}
SetExcludeDomains(){
change_setting "API_EXCLUDE_DOMAINS" "${args[2]}"
}
SetExcludeClients(){
change_setting "API_EXCLUDE_CLIENTS" "${args[2]}"
}
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
}
SetQueryLogOptions(){
change_setting "API_QUERY_LOG_SHOW" "${args[2]}"
}
ProcessDHCPSettings() {
source "${setupVars}"
if [[ "${DHCP_ACTIVE}" == "true" ]]; then
interface=$(grep 'PIHOLE_INTERFACE=' /etc/pihole/setupVars.conf | sed "s/.*=//")
# Use eth0 as fallback interface
if [ -z ${interface} ]; then
interface="eth0"
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="24h"
change_setting "DHCP_LEASETIME" "${leasetime}"
else
leasetime="${DHCP_LEASETIME}h"
fi
# 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 #
###############################################################################
dhcp-authoritative
dhcp-range=${DHCP_START},${DHCP_END},${leasetime}
dhcp-option=option:router,${DHCP_ROUTER}
dhcp-leasefile=/etc/pihole/dhcp.leases
#quiet-dhcp
" > "${dhcpconfig}"
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
else
rm "${dhcpconfig}" &> /dev/null
fi
}
EnableDHCP(){
change_setting "DHCP_ACTIVE" "true"
change_setting "DHCP_START" "${args[2]}"
change_setting "DHCP_END" "${args[3]}"
change_setting "DHCP_ROUTER" "${args[4]}"
change_setting "DHCP_LEASETIME" "${args[5]}"
change_setting "PIHOLE_DOMAIN" "${args[6]}"
change_setting "DHCP_IPv6" "${args[7]}"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
ProcessDHCPSettings
RestartDNS
}
DisableDHCP(){
change_setting "DHCP_ACTIVE" "false"
# Remove possible old setting from file
delete_dnsmasq_setting "dhcp-"
delete_dnsmasq_setting "quiet-dhcp"
ProcessDHCPSettings
RestartDNS
}
SetWebUILayout(){
change_setting "WEBUIBOXEDLAYOUT" "${args[2]}"
}
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]}"
if [[ "${typ}" == "forward" ]]; then
change_setting "API_GET_UPSTREAM_DNS_HOSTNAME" "${state}"
elif [[ "${typ}" == "clients" ]]; then
change_setting "API_GET_CLIENT_HOSTNAME" "${state}"
fi
}
AddDHCPStaticAddress() {
mac="${args[2]}"
ip="${args[3]}"
host="${args[4]}"
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 [ -n "${args[3]}" ]; then
change_setting "HOSTRECORD" "${args[2]},${args[3]}"
echo "Setting host record for ${args[2]} -> ${args[3]}"
else
change_setting "HOSTRECORD" ""
echo "Removing host record"
fi
ProcessDNSSettings
# Restart dnsmasq to load new configuration
RestartDNS
}
SetListeningMode(){
source "${setupVars}"
if [[ "${args[2]}" == "all" ]] ; then
echo "Listening on all interfaces, permiting all origins, hope you have a firewall!"
change_setting "DNSMASQ_LISTENING" "all"
elif [[ "${args[2]}" == "local" ]] ; then
echo "Listening on all interfaces, permitting only origins that are at most one hop away (local devices)"
change_setting "DNSMASQ_LISTENING" "local"
else
echo "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
}
main() {
args=("$@")
case "${args[1]}" in
"-p" | "password" ) SetWebPassword;;
"-c" | "celsius" ) unit="C"; SetTemperatureUnit;;
"-f" | "fahrenheit" ) unit="F"; SetTemperatureUnit;;
"-k" | "kelvin" ) unit="K"; SetTemperatureUnit;;
"setdns" ) SetDNSServers;;
"setexcludedomains" ) SetExcludeDomains;;
"setexcludeclients" ) SetExcludeClients;;
"reboot" ) Reboot;;
"restartdns" ) RestartDNS;;
"setquerylog" ) SetQueryLogOptions;;
"enabledhcp" ) EnableDHCP;;
"disabledhcp" ) DisableDHCP;;
"layout" ) SetWebUILayout;;
"-h" | "--help" ) helpFunc;;
"privacymode" ) SetPrivacyMode;;
"resolve" ) ResolutionSettings;;
"addstaticdhcp" ) AddDHCPStaticAddress;;
"removestaticdhcp" ) RemoveDHCPStaticAddress;;
"hostrecord" ) SetHostRecord;;
"-i" | "interface" ) SetListeningMode;;
* ) helpFunc;;
esac
shift
if [[ $# = 0 ]]; then
helpFunc
fi
}

View File

@@ -1,254 +0,0 @@
#!/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 domains
#
# 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.
#rootcheck
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [ -x "$(command -v sudo)" ];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
function helpFunc()
{
echo "::: Immediately whitelists one or more domains in the hosts file"
echo ":::"
echo "::: Usage: pihole -w domain1 [domain2 ...]"
echo ":::"
echo "::: Options:"
echo "::: -d, --delmode Remove domains from the whitelist"
echo "::: -nr, --noreload Update Whitelist without refreshing dnsmasq"
echo "::: -f, --force Force updating of the hosts files, even if there are no changes"
echo "::: -q, --quiet output is less verbose"
echo "::: -h, --help Show this help dialog"
echo "::: -l, --list Display your whitelisted domains"
exit 1
}
if [[ $# = 0 ]]; then
helpFunc
fi
#globals
basename=pihole
piholeDir=/etc/${basename}
adList=${piholeDir}/gravity.list
whitelist=${piholeDir}/whitelist.txt
reload=true
addmode=true
force=false
verbose=true
domList=()
domToRemoveList=()
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
if [[ -f ${piholeIPfile} ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat ${piholeIPfile})
#rm $piholeIPfile
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
fi
modifyHost=false
# After setting defaults, check if there's local overrides
if [[ -r ${piholeDir}/pihole.conf ]];then
echo "::: Local calibration requested..."
. ${piholeDir}/pihole.conf
fi
if [[ -f ${piholeIPv6file} ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
function HandleOther(){
#check validity of domain
validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/')
if [ -z "$validDomain" ]; then
echo "::: $1 is not a valid argument or domain name"
else
domList=("${domList[@]}" ${validDomain})
fi
}
function PopWhitelistFile(){
#check whitelist file exists, and if not, create it
if [[ ! -f ${whitelist} ]];then
touch ${whitelist}
fi
for dom in "${domList[@]}"
do
if ${addmode}; then
AddDomain "$dom"
else
RemoveDomain "$dom"
fi
done
}
function AddDomain(){
#| sed 's/\./\\./g'
bool=false
grep -Ex -q "$1" ${whitelist} || bool=true
if ${bool}; then
#domain not found in the whitelist file, add it!
if ${verbose}; then
echo -n "::: Adding $1 to $whitelist..."
fi
echo "$1" >> ${whitelist}
modifyHost=true
if ${verbose}; then
echo " done!"
fi
else
if ${verbose}; then
echo "::: $1 already exists in $whitelist, no need to add!"
fi
fi
}
function RemoveDomain(){
bool=false
grep -Ex -q "$1" ${whitelist} || bool=true
if ${bool}; then
#Domain is not in the whitelist file, no need to Remove
if ${verbose}; then
echo "::: $1 is NOT whitelisted! No need to remove"
fi
else
#Domain is in the whitelist file, add to a temporary array and remove from whitelist file
#if $verbose; then
#echo "::: Un-whitelisting $dom..."
#fi
domToRemoveList=("${domToRemoveList[@]}" $1)
modifyHost=true
fi
}
function ModifyHostFile(){
if ${addmode}; then
#remove domains in from hosts file
if [[ -r ${whitelist} ]];then
# Remove whitelist entries
numberOf=$(cat ${whitelist} | sed '/^\s*$/d' | wc -l)
plural=; [[ "$numberOf" != "1" ]] && plural=s
echo ":::"
echo -n "::: Modifying HOSTS file to whitelist $numberOf domain${plural}..."
awk -F':' '{print $1}' ${whitelist} | while read -r line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp
awk -F':' '{print $1}' ${whitelist} | while read -r line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp
echo "l" >> /etc/pihole/whitelist.tmp
grep -F -x -v -f ${piholeDir}/whitelist.tmp ${adList} > ${piholeDir}/gravity.tmp
rm ${adList}
mv ${piholeDir}/gravity.tmp ${adList}
rm ${piholeDir}/whitelist.tmp
echo " done!"
fi
else
#we need to add the removed domains to the hosts file
echo ":::"
echo "::: Modifying HOSTS file to un-whitelist domains..."
for rdom in "${domToRemoveList[@]}"
do
if grep -q "$rdom" /etc/pihole/*.domains; then
echo "::: AdLists contain $rdom, re-adding block"
if [[ -n ${piholeIPv6} ]];then
echo -n "::: Restoring block for $rdom on IPv4 and IPv6..."
echo "$rdom" | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${adList}
echo " done!"
else
echo -n "::: Restoring block for $rdom on IPv4..."
echo "$rdom" | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>${adList}
echo " done!"
fi
fi
echo -n "::: Removing $rdom from $whitelist..."
echo "$rdom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' ${whitelist}
echo " done!"
done
fi
}
function Reload() {
# Reload hosts file
echo ":::"
echo -n "::: Refresh lists in dnsmasq..."
dnsmasqPid=$(pidof dnsmasq)
if [[ ${dnsmasqPid} ]]; then
# service already running - reload config
${SUDO} killall -s HUP dnsmasq
else
# service not running, start it up
${SUDO} service dnsmasq start
fi
echo " done!"
}
function DisplayWlist() {
verbose=false
echo -e " Displaying Gravity Resistant Domains \n"
count=1
while IFS= read -r RD
do
echo "${count}: $RD"
count=$((count+1))
done < "$whitelist"
}
###################################################
for var in "$@"
do
case "$var" in
"-nr"| "--noreload" ) reload=false;;
"-d" | "--delmode" ) addmode=false;;
"-f" | "--force" ) force=true;;
"-q" | "--quiet" ) verbose=false;;
"-h" | "--help" ) helpFunc;;
"-l" | "--list" ) DisplayWlist;;
* ) HandleOther "$var";;
esac
done
PopWhitelistFile
if ${modifyHost} || ${force}; then
ModifyHostFile
else
if ${verbose}; then
echo ":::"
echo "::: No changes need to be made"
fi
exit 1
fi
if ${reload}; then
Reload
fi

View File

@@ -1,12 +1,11 @@
_pihole()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="whitelist blacklist debug flush updateDashboard updateGravity setupLCD chronometer uninstall help"
_pihole() {
local cur prev opts
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"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _pihole pihole
complete -F _pihole pihole

136
advanced/blockingpage.css Normal file
View File

@@ -0,0 +1,136 @@
/* 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; }
/* 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; }
footer, pre, td { font-family: monospace; padding-left: 15px; }
/*body, header { background: #E1E1E1; }*/
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;
}
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);
}
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 {
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;
}
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; }
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;
}
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;
}
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);
}
.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); }
.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); }
/* 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; }
footer { font-size: 0.8em; text-align: center; width: 87%; margin: 4px auto; }

View File

@@ -1,12 +0,0 @@
# 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
# Swap file config
#
# 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.
CONF_SWAPSIZE=500

View File

@@ -1,7 +0,0 @@
<html>
<head>
<script>window.close();</script>
</head>
<body>
</body>
</html>

183
advanced/index.php Normal file
View File

@@ -0,0 +1,183 @@
<?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 */
$uri = escapeshellcmd($_SERVER['REQUEST_URI']);
$serverName = escapeshellcmd($_SERVER['SERVER_NAME']);
// Retrieve server URI extension (EG: jpg, exe, php)
$uriExt = pathinfo($uri, PATHINFO_EXTENSION);
// Define which URL extensions get rendered as "Website Blocked"
$webExt = array('asp', 'htm', 'html', 'php', 'rss', 'xml');
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;
}
// 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();
}
// Get Pi-Hole version
$piHoleVersion = exec('cd /etc/.pihole/ && git describe --tags --abbrev=0');
// Don't show the URI if it is the root directory
if($uri == "/")
{
$uri = "";
}
?>
<!DOCTYPE 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'/>
</head>
<body id="body">
<header>
<h1><a href='/'>Website Blocked</a></h1>
</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">
<p>Note that whitelisting domains which are blocked using the wildcard method won't work.</p>
<p>Password required!</p><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>
</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>
// Create event for when the output is appended to
(function($) {
var origAppend = $.fn.append;
$.fn.append = function () {
return origAppend.apply(this, arguments).trigger("append");
};
})(jQuery);
</script>
<script src="http://pi.hole/admin/scripts/pi-hole/js/queryads.js"></script>
<script>
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
// 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" ); });
// Remove whitelist functionality if the domain was blocked because of a wildcard
$( "#output" ).bind("append", function(){
if($( "#output" ).contents()[0].data.indexOf("Wildcard blocking") !== -1)
{
$( "#whitelisting" ).hide();
$( "#whitelistingform" ).hide();
}
});
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")) {
add();
}
});
// Handle buttons
$("#btnAdd").on("click", function() {
add();
});
</script>
</body>
</html>

View File

@@ -1,17 +1,26 @@
# 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 SEPERATE CONFIG FILE: #
# /etc/lighttpd/external.conf #
###############################################################################
server.modules = (
"mod_access",
"mod_accesslog",
"mod_auth",
"mod_expire",
"mod_compress",
"mod_redirect",
@@ -20,15 +29,15 @@ server.modules = (
)
server.document-root = "/var/www/html"
server.error-handler-404 = "pihole/index.html"
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" )
@@ -52,10 +61,21 @@ $HTTP["url"] =~ "^/admin/" {
)
}
# 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." )
# rewrite only js requests
url.rewrite = ("(.*).js" => "pihole/index.js")
}
# Entering just "pi.hole" into a browser redirects to "pi.hole/admin/"
$HTTP["host"] == "pi.hole" {
$HTTP["url"] == "/" {
url.redirect = ( "" => "/admin/" )
}
}
# Add user chosen options held in external file
include_shell "cat external.conf 2>/dev/null"

View File

@@ -1,16 +1,25 @@
# 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 SEPERATE CONFIG FILE: #
# /etc/lighttpd/external.conf #
###############################################################################
server.modules = (
"mod_access",
"mod_auth",
"mod_fastcgi",
"mod_accesslog",
"mod_expire",
@@ -21,15 +30,15 @@ server.modules = (
)
server.document-root = "/var/www/html"
server.error-handler-404 = "pihole/index.html"
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" )
@@ -46,7 +55,8 @@ mimetype.assign = ( ".png" => "image/png",
".css" => "text/css; charset=utf-8",
".js" => "application/javascript",
".json" => "application/json",
".txt" => "text/plain" )
".txt" => "text/plain",
".svg" => "image/svg+xml" )
# default listening port for IPv6 falls back to the IPv4 port
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
@@ -68,10 +78,21 @@ $HTTP["url"] =~ "^/admin/" {
setenv.add-response-header = ( "X-Pi-hole" => "The Pi-hole Web interface is working!" )
}
# 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." )
# rewrite only js requests
url.rewrite = ("(.*).js" => "pihole/index.js")
}
# Entering just "pi.hole" into a browser redirects to "pi.hole/admin/"
$HTTP["host"] == "pi.hole" {
$HTTP["url"] == "/" {
url.redirect = ( "" => "/admin/" )
}
}
# Add user chosen options held in external file
include_shell "cat external.conf 2>/dev/null"

10
advanced/logrotate Normal file
View File

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

View File

@@ -1,26 +1,29 @@
# 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
59 1 * * 7 root /usr/local/bin/pihole updateGravity
59 1 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updateGravity
# Pi-hole: Update the Web interface shortly after gravity runs
# This should also update the version number if it is changed in the dashboard repo
30 2 * * 7 root /usr/local/bin/pihole updateDashboard
# Pi-hole: Update Pi-hole! Uncomment to enable auto update
#30 2 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updatePihole
# Pi-hole: Parse the log file before it is flushed and save the stats to a database
# This will be used for a historical view of your Pi-hole's performance
#50 23 * * * root /usr/local/bin/dailyLog.sh # note: this is outdated
# Pi-hole: Flush the log daily at 11:58 so it doesn't get out of control
# 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
58 23 * * * root /usr/local/bin/pihole flush
# The flush script will use logrotate if available
00 00 * * * root PATH="$PATH:/usr/local/bin/" pihole flush
@reboot root /usr/sbin/logrotate /etc/pihole/logrotate

View File

@@ -1,12 +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.
www-data ALL=NOPASSWD: /usr/local/bin/pihole
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
#

View File

@@ -1,87 +0,0 @@
module pihole 1.0;
require {
type var_log_t;
type unconfined_t;
type init_t;
type auditd_t;
type syslogd_t;
type NetworkManager_t;
type mdadm_t;
type tuned_t;
type avahi_t;
type irqbalance_t;
type system_dbusd_t;
type kernel_t;
type httpd_sys_script_t;
type systemd_logind_t;
type httpd_t;
type policykit_t;
type dnsmasq_t;
type udev_t;
type postfix_pickup_t;
type sshd_t;
type crond_t;
type getty_t;
type lvm_t;
type postfix_qmgr_t;
type postfix_master_t;
class dir { getattr search };
class file { read open setattr };
}
#============= dnsmasq_t ==============
allow dnsmasq_t var_log_t:file { open setattr };
#============= httpd_t ==============
allow httpd_t var_log_t:file { read open };
#============= httpd_sys_script_t (class: dir) ==============
allow httpd_sys_script_t NetworkManager_t:dir { getattr search };
allow httpd_sys_script_t auditd_t:dir { getattr search };
allow httpd_sys_script_t avahi_t:dir { getattr search };
allow httpd_sys_script_t crond_t:dir { getattr search };
allow httpd_sys_script_t dnsmasq_t:dir { getattr search };
allow httpd_sys_script_t getty_t:dir { getattr search };
allow httpd_sys_script_t httpd_t:dir { getattr search };
allow httpd_sys_script_t init_t:dir { getattr search };
allow httpd_sys_script_t irqbalance_t:dir { getattr search };
allow httpd_sys_script_t kernel_t:dir { getattr search };
allow httpd_sys_script_t lvm_t:dir { getattr search };
allow httpd_sys_script_t mdadm_t:dir { getattr search };
allow httpd_sys_script_t policykit_t:dir { getattr search };
allow httpd_sys_script_t postfix_master_t:dir { getattr search };
allow httpd_sys_script_t postfix_pickup_t:dir { getattr search };
allow httpd_sys_script_t postfix_qmgr_t:dir { getattr search };
allow httpd_sys_script_t sshd_t:dir { getattr search };
allow httpd_sys_script_t syslogd_t:dir { getattr search };
allow httpd_sys_script_t system_dbusd_t:dir { getattr search };
allow httpd_sys_script_t systemd_logind_t:dir { getattr search };
allow httpd_sys_script_t tuned_t:dir { getattr search };
allow httpd_sys_script_t udev_t:dir { getattr search };
allow httpd_sys_script_t unconfined_t:dir { getattr search };
#============= httpd_sys_script_t (class: file) ==============
allow httpd_sys_script_t NetworkManager_t:file { read open };
allow httpd_sys_script_t auditd_t:file { read open };
allow httpd_sys_script_t avahi_t:file { read open };
allow httpd_sys_script_t crond_t:file { read open };
allow httpd_sys_script_t dnsmasq_t:file { read open };
allow httpd_sys_script_t getty_t:file { read open };
allow httpd_sys_script_t httpd_t:file { read open };
allow httpd_sys_script_t init_t:file { read open };
allow httpd_sys_script_t irqbalance_t:file { read open };
allow httpd_sys_script_t kernel_t:file { read open };
allow httpd_sys_script_t lvm_t:file { read open };
allow httpd_sys_script_t mdadm_t:file { read open };
allow httpd_sys_script_t policykit_t:file { read open };
allow httpd_sys_script_t postfix_master_t:file { read open };
allow httpd_sys_script_t postfix_pickup_t:file { read open };
allow httpd_sys_script_t postfix_qmgr_t:file { read open };
allow httpd_sys_script_t sshd_t:file { read open };
allow httpd_sys_script_t syslogd_t:file { read open };
allow httpd_sys_script_t system_dbusd_t:file { read open };
allow httpd_sys_script_t systemd_logind_t:file { read open };
allow httpd_sys_script_t tuned_t:file { read open };
allow httpd_sys_script_t udev_t:file { read open };
allow httpd_sys_script_t unconfined_t:file { read open };

File diff suppressed because it is too large Load Diff

View File

@@ -1,39 +1,39 @@
#!/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.
# Must be root to uninstall
if [[ $EUID -eq 0 ]];then
if [[ ${EUID} -eq 0 ]]; then
echo "::: You are root."
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
if [ -x "$(command -v sudo)" ];then
# Check if it is actually installed
# If it isn't, exit because the unnstall cannot complete
if [ -x "$(command -v sudo)" ]; then
export SUDO="sudo"
else
echo "::: Please install sudo or run this as root."
exit 1
fi
else
echo "::: Please install sudo or run this as root."
exit 1
fi
fi
# Compatability
if [ -x "$(command -v rpm)" ];then
if [ -x "$(command -v rpm)" ]; then
# Fedora Family
if [ -x "$(command -v dnf)" ];then
if [ -x "$(command -v dnf)" ]; then
PKG_MANAGER="dnf"
else
PKG_MANAGER="yum"
fi
PKG_REMOVE="$PKG_MANAGER remove -y"
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
@@ -41,10 +41,10 @@ if [ -x "$(command -v rpm)" ];then
package_cleanup() {
${SUDO} ${PKG_MANAGER} -y autoremove
}
elif [ -x "$(command -v apt-get)" ];then
elif [ -x "$(command -v apt-get)" ]; then
# Debian Family
PKG_MANAGER="apt-get"
PKG_REMOVE="$PKG_MANAGER -y remove --purge"
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"
@@ -58,37 +58,36 @@ else
exit
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"
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"
}
function removeAndPurge {
removeAndPurge() {
# Purge dependencies
echo ":::"
echo ":::"
for i in "${PIHOLE_DEPS[@]}"; do
package_check ${i} > /dev/null
if [ $? -eq 0 ]; then
while true; do
read -rp "::: Do you wish to remove $i from your system? [y/n]: " yn
read -rp "::: Do you wish to remove ${i} 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" "$i\n"; break;;
[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";;
esac
done
else
printf ":::\tPackage %s not installed... Not removing.\n" "$i"
printf ":::\tPackage %s not installed... Not removing.\n" "${i}"
fi
done
@@ -104,7 +103,7 @@ echo ":::"
removeNoPurge
}
function removeNoPurge {
removeNoPurge() {
echo ":::"
# Only web directories/files that are created by pihole should be removed.
echo "::: Removing the Pi-hole Web server files..."
@@ -137,7 +136,7 @@ function removeNoPurge {
fi
echo "::: Removing config files and scripts..."
package_check ${i} > /dev/null
package_check lighttpd > /dev/null
if [ $? -eq 1 ]; then
${SUDO} rm -rf /etc/lighttpd/ &> /dev/null
else
@@ -156,10 +155,16 @@ function removeNoPurge {
${SUDO} rm /etc/bash_completion.d/pihole &> /dev/null
${SUDO} rm /etc/sudoers.d/pihole &> /dev/null
# If the pihole user exists, then remove
if id "pihole" >/dev/null 2>&1; then
echo "::: Removing pihole user..."
${SUDO} userdel -r pihole
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 "::: Reinstall by simpling running\n:::\n:::\tcurl -sSL 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"
}
@@ -170,7 +175,7 @@ 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
case ${yn} in
[Yy]* ) removeAndPurge; break;;
[Nn]* ) removeNoPurge; break;;
esac
done

1
autotest Executable file
View File

@@ -0,0 +1 @@
py.test -v -f test/

View File

@@ -1,92 +1,75 @@
#!/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.
#
# Compiles a list of ad-serving domains by downloading them from multiple sources
#
# 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.
# Run this script as root or under sudo
echo ":::"
if [[ $EUID -eq 0 ]];then
echo "::: You are root."
else
echo "::: sudo will be used."
# Check if it is actually installed
# If it isn't, exit because the install cannot complete
if [ -x "$(command -v sudo)" ];then
export SUDO="sudo"
else
echo "::: Please install sudo or run this script as root."
exit 1
fi
fi
function helpFunc()
{
echo "::: Pull in domains from adlists"
echo ":::"
echo "::: Usage: pihole -g"
echo ":::"
echo "::: Options:"
echo "::: -f, --force Force lists to be downloaded, even if they don't need updating."
echo "::: -h, --help Show this help dialog"
exit 1
helpFunc() {
cat << EOM
::: Pull in domains from adlists
:::
::: Usage: pihole -g
:::
::: Options:
::: -f, --force Force lists to be downloaded, even if they don't need updating.
::: -h, --help Show this help dialog
EOM
exit 0
}
piholeIPfile=/etc/pihole/piholeIP
piholeIPv6file=/etc/pihole/.useIPv6
adListFile=/etc/pihole/adlists.list
adListDefault=/etc/pihole/adlists.default
whitelistScript=/opt/pihole/whitelist.sh
blacklistScript=/opt/pihole/blacklist.sh
whitelistScript="pihole -w"
whitelistFile=/etc/pihole/whitelist.txt
blacklistFile=/etc/pihole/blacklist.txt
readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
if [[ -f ${piholeIPfile} ]];then
# If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script
piholeIP=$(cat ${piholeIPfile})
#rm $piholeIPfile
#Source the setupVars from install script for the IP
setupVars=/etc/pihole/setupVars.conf
if [[ -f ${setupVars} ]];then
. /etc/pihole/setupVars.conf
else
# Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script
IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}')
piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}')
piholeIP=${piholeIPCIDR%/*}
echo "::: WARNING: /etc/pihole/setupVars.conf missing. Possible installation failure."
echo "::: Please run 'pihole -r', and choose the 'reconfigure' option to reconfigure."
exit 1
fi
if [[ -f ${piholeIPv6file} ]];then
# If the file exists, then the user previously chose to use IPv6 in the automated installer
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }')
fi
#Remove the /* from the end of the IPv4addr.
IPV4_ADDRESS=${IPV4_ADDRESS%/*}
IPV6_ADDRESS=${IPV6_ADDRESS}
# Variables for various stages of downloading and formatting the list
## Nate 3/26/2016 - Commented unused variables
basename=pihole
piholeDir=/etc/${basename}
adList=${piholeDir}/gravity.list
#blacklist=$piholeDir/blacklist.txt
#whitelist=$piholeDir/whitelist.txt
#latentWhitelist=$piholeDir/latentWhitelist.txt
localList=${piholeDir}/local.list
justDomainsExtension=domains
matterandlight=${basename}.0.matterandlight.txt
matterAndLight=${basename}.0.matterandlight.txt
supernova=${basename}.1.supernova.txt
eventHorizon=${basename}.2.eventHorizon.txt
preEventHorizon=list.preEventHorizon
eventHorizon=${basename}.2.supernova.txt
accretionDisc=${basename}.3.accretionDisc.txt
#eyeOfTheNeedle=$basename.4.wormhole.txt
# After setting defaults, check if there's local overrides
if [[ -r ${piholeDir}/pihole.conf ]];then
echo "::: Local calibration requested..."
. ${piholeDir}/pihole.conf
skipDownload=false
# Warn users still using pihole.conf that it no longer has any effect (I imagine about 2 people use it)
if [[ -r ${piholeDir}/pihole.conf ]]; then
echo "::: pihole.conf file no longer supported. Over-rides in this file are ignored."
fi
###########################
# collapse - begin formation of pihole
function gravity_collapse() {
gravity_collapse() {
echo "::: Neutrino emissions detected..."
echo ":::"
#Decide if we're using a custom ad block list, or defaults.
@@ -94,7 +77,7 @@ function gravity_collapse() {
#custom file found, use this instead of default
echo -n "::: Custom adList file detected. Reading..."
sources=()
while read -r line; do
while IFS= read -r line || [[ -n "$line" ]]; do
#Do not read commented out or blank lines
if [[ ${line} = \#* ]] || [[ ! ${line} ]]; then
echo "" > /dev/null
@@ -107,7 +90,7 @@ function gravity_collapse() {
#no custom file found, use defaults!
echo -n "::: No custom adlist file detected, reading from default file..."
sources=()
while read -r line; do
while IFS= read -r line || [[ -n "$line" ]]; do
#Do not read commented out or blank lines
if [[ ${line} = \#* ]] || [[ ! ${line} ]]; then
echo "" > /dev/null
@@ -117,40 +100,40 @@ function gravity_collapse() {
done < ${adListDefault}
echo " done!"
fi
# Create the pihole resource directory if it doesn't exist. Future files will be stored here
if [[ -d ${piholeDir} ]];then
# Temporary hack to allow non-root access to pihole directory
# Will update later, needed for existing installs, new installs should
# create this directory as non-root
${SUDO} chmod 777 ${piholeDir}
echo ":::"
echo "::: Existing pihole directory found"
else
echo "::: Creating pihole directory..."
mkdir ${piholeDir}
${SUDO} chmod 777 ${piholeDir}
fi
}
# patternCheck - check to see if curl downloaded any new files.
function gravity_patternCheck() {
gravity_patternCheck() {
patternBuffer=$1
# check if the patternbuffer is a non-zero length file
if [[ -s "$patternBuffer" ]];then
# Some of the blocklists are copyright, they need to be downloaded
# and stored as is. They can be processed for content after they
# have been saved.
cp "$patternBuffer" "$saveLocation"
echo " List updated, transport successful!"
success=$2
error=$3
if [ $success = true ]; then
# check if download was successful but list has not been modified
if [ "${error}" == "304" ]; then
echo "::: No changes detected, transport skipped!"
# check if the patternbuffer is a non-zero length file
elif [[ -s "${patternBuffer}" ]]; then
# Some of the blocklists are copyright, they need to be downloaded
# and stored as is. They can be processed for content after they
# have been saved.
mv "${patternBuffer}" "${saveLocation}"
echo "::: List updated, transport successful!"
else
# Empty file -> use previously downloaded list
echo "::: Received empty file, using cached one (list not updated!)"
fi
else
# curl didn't download any host files, probably because of the date check
echo " No changes detected, transport skipped!"
# check if cached list exists
if [[ -r "${saveLocation}" ]]; then
echo "::: List download failed, using cached list (list not updated!)"
else
echo "::: Download failed and no cached list available (list will not be considered)"
fi
fi
}
# transport - curl the specified url with any needed command extentions
function gravity_transport() {
gravity_transport() {
url=$1
cmd_ext=$2
agent=$3
@@ -160,210 +143,284 @@ function gravity_transport() {
heisenbergCompensator=""
if [[ -r ${saveLocation} ]]; then
# if domain has been saved, add file for date check to only download newer
heisenbergCompensator="-z $saveLocation"
heisenbergCompensator="-z ${saveLocation}"
fi
# Silently curl url
curl -s -L ${cmd_ext} ${heisenbergCompensator} -A "$agent" ${url} > ${patternBuffer}
# Check for list updates
gravity_patternCheck "$patternBuffer"
# Cleanup
rm -f "$patternBuffer"
err=$(curl -s -L ${cmd_ext} ${heisenbergCompensator} -w %{http_code} -A "${agent}" ${url} -o ${patternBuffer})
echo " done"
# Analyze http response
echo -n "::: Status: "
case "$err" in
"200" ) echo "Success (OK)"; success=true;;
"304" ) echo "Not modified"; success=true;;
"403" ) echo "Forbidden"; success=false;;
"404" ) echo "Not found"; success=false;;
"408" ) echo "Time-out"; success=false;;
"451" ) echo "Unavailable For Legal Reasons"; success=false;;
"521" ) echo "Web Server Is Down (Cloudflare)"; success=false;;
"522" ) echo "Connection Timed Out (Cloudflare)"; success=false;;
"500" ) echo "Internal Server Error"; success=false;;
* ) echo "Status $err"; success=false;;
esac
# Process result
gravity_patternCheck "${patternBuffer}" ${success} "${err}"
}
# spinup - main gravity function
function gravity_spinup() {
gravity_spinup() {
echo ":::"
# Loop through domain list. Download each one and remove commented lines (lines beginning with '# 'or '/') and # blank lines
for ((i = 0; i < "${#sources[@]}"; i++))
do
url=${sources[$i]}
# Get just the domain from the URL
domain=$(echo "$url" | cut -d'/' -f3)
for ((i = 0; i < "${#sources[@]}"; i++)); do
url=${sources[$i]}
# Get just the domain from the URL
domain=$(echo "${url}" | cut -d'/' -f3)
# Save the file as list.#.domain
saveLocation=${piholeDir}/list.${i}.${domain}.${justDomainsExtension}
activeDomains[$i]=${saveLocation}
# Save the file as list.#.domain
saveLocation=${piholeDir}/list.${i}.${domain}.${justDomainsExtension}
activeDomains[$i]=${saveLocation}
agent="Mozilla/10.0"
agent="Mozilla/10.0"
echo -n "::: Getting $domain list..."
# Use a case statement to download lists that need special cURL commands
# to complete properly and reset the user agent when required
case "${domain}" in
"adblock.mahakala.is")
agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
cmd_ext="-e http://forum.xda-developers.com/"
;;
# Use a case statement to download lists that need special cURL commands
# to complete properly and reset the user agent when required
case "$domain" in
"adblock.mahakala.is")
agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
cmd_ext="-e http://forum.xda-developers.com/"
;;
"pgl.yoyo.org")
cmd_ext="-d mimetype=plaintext -d hostformat=hosts"
;;
"pgl.yoyo.org")
cmd_ext="-d mimetype=plaintext -d hostformat=hosts"
;;
# Default is a simple request
*) cmd_ext=""
esac
gravity_transport "$url" "$cmd_ext" "$agent"
if [[ "${skipDownload}" == false ]]; then
echo -n "::: Getting $domain list..."
gravity_transport "$url" "$cmd_ext" "$agent"
fi
done
}
# Schwarzchild - aggregate domains to one list and add blacklisted domains
function gravity_Schwarzchild() {
gravity_Schwarzchild() {
echo "::: "
# Find all active domains and compile them into one file and remove CRs
echo -n "::: Aggregating list of domains..."
truncate -s 0 ${piholeDir}/${matterandlight}
for i in "${activeDomains[@]}"
do
cat "$i" | tr -d '\r' >> ${piholeDir}/${matterandlight}
truncate -s 0 ${piholeDir}/${matterAndLight}
for i in "${activeDomains[@]}"; do
# Only assimilate list if it is available (download might have faild permanently)
if [[ -r "${i}" ]]; then
cat "${i}" | tr -d '\r' >> ${piholeDir}/${matterAndLight}
fi
done
echo " done!"
}
function gravity_Blacklist(){
# Append blacklist entries if they exist
echo -n "::: Running blacklist script to update HOSTS file...."
${blacklistScript} -f -nr -q > /dev/null
gravity_Blacklist() {
# Append blacklist entries to eventHorizon if they exist
if [[ -f "${blacklistFile}" ]]; then
numBlacklisted=$(wc -l < "${blacklistFile}")
plural=; [[ "$numBlacklisted" != "1" ]] && plural=s
echo -n "::: Blacklisting $numBlacklisted domain${plural}..."
cat ${blacklistFile} >> ${piholeDir}/${eventHorizon}
echo " done!"
else
echo "::: Nothing to blacklist!"
fi
numBlacklisted=$(wc -l < "/etc/pihole/blacklist.txt")
plural=; [[ "$numBlacklisted" != "1" ]] && plural=s
echo " $numBlacklisted domain${plural} blacklisted!"
}
function gravity_Whitelist() {
gravity_Wildcard() {
# Return number of wildcards in output - don't actually handle wildcards
if [[ -f "${wildcardlist}" ]]; then
numWildcards=$(grep -c ^ "${wildcardlist}")
if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
let numWildcards/=2
fi
plural=; [[ "$numWildcards" != "1" ]] && plural=s
echo "::: Wildcard blocked domain${plural}: $numWildcards"
else
echo "::: No wildcards used!"
fi
}
gravity_Whitelist() {
#${piholeDir}/${eventHorizon})
echo ":::"
# Prevent our sources from being pulled into the hole
plural=; [[ "${sources[@]}" != "1" ]] && plural=s
echo -n "::: Adding ${#sources[@]} adlist source${plural} to the whitelist..."
echo -n "::: Adding adlist source${plural} to the whitelist..."
urls=()
for url in "${sources[@]}"
do
tmp=$(echo "$url" | awk -F '/' '{print $3}')
urls=("${urls[@]}" ${tmp})
for url in "${sources[@]}"; do
tmp=$(echo "${url}" | awk -F '/' '{print $3}')
urls=("${urls[@]}" ${tmp})
done
echo " done!"
echo -n "::: Running whitelist script to update HOSTS file...."
${whitelistScript} -f -nr -q "${urls[@]}" > /dev/null
numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt")
plural=; [[ "$numWhitelisted" != "1" ]] && plural=s
echo " $numWhitelisted domain${plural} whitelisted!"
# Ensure adlist domains are in whitelist.txt
${whitelistScript} -nr -q "${urls[@]}" > /dev/null
# Check whitelist.txt exists.
if [[ -f "${whitelistFile}" ]]; then
# Remove anything in whitelist.txt from the Event Horizon
numWhitelisted=$(wc -l < "${whitelistFile}")
plural=; [[ "$numWhitelisted" != "1" ]] && plural=s
echo -n "::: Whitelisting $numWhitelisted domain${plural}..."
#print everything from preEventHorizon into eventHorizon EXCEPT domains in whitelist.txt
grep -F -x -v -f ${whitelistFile} ${piholeDir}/${preEventHorizon} > ${piholeDir}/${eventHorizon}
echo " done!"
else
echo "::: Nothing to whitelist!"
fi
}
function gravity_unique() {
gravity_unique() {
# Sort and remove duplicates
echo -n "::: Removing duplicate domains...."
sort -u ${piholeDir}/${supernova} > ${piholeDir}/${eventHorizon}
sort -u ${piholeDir}/${supernova} > ${piholeDir}/${preEventHorizon}
echo " done!"
numberOf=$(wc -l < ${piholeDir}/${eventHorizon})
numberOf=$(wc -l < ${piholeDir}/${preEventHorizon})
echo "::: $numberOf unique domains trapped in the event horizon."
}
function gravity_hostFormat() {
gravity_hostFormat() {
# Format domain list as "192.168.x.x domain.com"
echo "::: Formatting domains into a HOSTS file..."
hostname=$(</etc/hostname)
# If there is a value in the $piholeIPv6, then IPv6 will be used, so the awk command modified to create a line for both protocols
if [[ -n ${piholeIPv6} ]];then
# Add hostname and dummy domain to the top of gravity.list to make ping result return a friendlier looking domain! Also allows for an easy way to access the Pi-hole admin console (pi.hole/admin)
echo -e "$piholeIP $hostname\n$piholeIPv6 $hostname\n$piholeIP pi.hole\n$piholeIPv6 pi.hole" > ${piholeDir}/${accretionDisc}
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
echo -n "::: Formatting domains into a HOSTS file..."
if [[ -f /etc/hostname ]]; then
hostname=$(</etc/hostname)
elif [ -x "$(command -v hostname)" ]; then
hostname=$(hostname -f)
else
# Otherwise, just create gravity.list as normal using IPv4
# Add hostname and dummy domain to the top of gravity.list to make ping result return a friendlier looking domain! Also allows for an easy way to access the Pi-hole admin console (pi.hole/admin)
echo -e "$piholeIP $hostname\n$piholeIP pi.hole" > ${piholeDir}/${accretionDisc}
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
echo "::: Error: Unable to determine fully qualified domain name of host"
fi
# Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both.
if [[ -n "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV6_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole\n${IPV6_ADDRESS} pi.hole" > ${localList}
# Both IPv4 and IPv6
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
elif [[ -n "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
echo -e "${IPV4_ADDRESS} ${hostname}\n${IPV4_ADDRESS} pi.hole" > ${localList}
# Only IPv4
cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPV4_ADDRESS" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
elif [[ -z "${IPV4_ADDRESS}" && -n "${IPV6_ADDRESS}" ]];then
echo -e "${IPV6_ADDRESS} ${hostname}\n${IPV6_ADDRESS} pi.hole" > ${localList}
# Only IPv6
cat ${piholeDir}/${eventHorizon} | awk -v ipv6addr="$IPV6_ADDRESS" '{sub(/\r$/,""); print ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
elif [[ -z "${IPV4_ADDRESS}" && -z "${IPV6_ADDRESS}" ]];then
echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values"
exit 1
fi
# Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it
cp ${piholeDir}/${accretionDisc} ${adList}
echo " done!"
}
# blackbody - remove any remnant files from script processes
function gravity_blackbody() {
gravity_blackbody() {
# Loop through list files
for file in ${piholeDir}/*.${justDomainsExtension}
do
for file in ${piholeDir}/*.${justDomainsExtension}; do
# If list is in active array then leave it (noop) else rm the list
if [[ " ${activeDomains[@]} " =~ ${file} ]]; then
:
else
rm -f "$file"
rm -f "${file}"
fi
done
}
function gravity_advanced() {
gravity_advanced() {
# Remove comments and print only the domain name
# Most of the lists downloaded are already in hosts file format but the spacing/formating is not contigious
# This helps with that and makes it easier to read
# It also helps with debugging so each stage of the script can be researched more in depth
echo -n "::: Formatting list of domains to remove comments...."
awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' ${piholeDir}/${matterandlight} | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > ${piholeDir}/${supernova}
#awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' ${piholeDir}/${matterAndLight} | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > ${piholeDir}/${supernova}
#Above line does not correctly grab domains where comment is on the same line (e.g 'addomain.com #comment')
#Awk -F splits on given IFS, we grab the right hand side (chops trailing #coments and /'s to grab the domain only.
#Last awk command takes non-commented lines and if they have 2 fields, take the left field (the domain) and leave
#+ the right (IP address), otherwise grab the single field.
cat ${piholeDir}/${matterAndLight} | \
awk -F '#' '{print $1}' | \
awk -F '/' '{print $1}' | \
awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' | \
sed -nr -e 's/\.{2,}/./g' -e '/\./p' > ${piholeDir}/${supernova}
echo " done!"
numberOf=$(wc -l < ${piholeDir}/${supernova})
echo "::: $numberOf domains being pulled in by gravity..."
echo "::: ${numberOf} domains being pulled in by gravity..."
gravity_unique
}
function gravity_reload() {
gravity_reload() {
#Clear no longer needed files...
echo ":::"
echo -n "::: Cleaning up un-needed files..."
${SUDO} rm ${piholeDir}/pihole.*.txt
rm ${piholeDir}/pihole.*.txt
echo " done!"
# Reload hosts file
echo ":::"
echo -n "::: Refresh lists in dnsmasq..."
#ensure /etc/dnsmasq.d/01-pihole.conf is pointing at the correct list!
#First escape forward slashes in the path:
adList=${adList//\//\\\/}
#Now replace the line in dnsmasq file
${SUDO} sed -i "s/^addn-hosts.*/addn-hosts=$adList/" /etc/dnsmasq.d/01-pihole.conf
dnsmasqPid=$(pidof dnsmasq)
# sed -i "s/^addn-hosts.*/addn-hosts=$adList/" /etc/dnsmasq.d/01-pihole.conf
find "$piholeDir" -type f -exec ${SUDO} chmod 666 {} \;
if [[ ${dnsmasqPid} ]]; then
# service already running - reload config
${SUDO} killall -s HUP dnsmasq
else
# service not running, start it up
${SUDO} service dnsmasq start
fi
pihole restartdns
echo " done!"
}
for var in "$@"
do
case "$var" in
"-f" | "--force" ) forceGrav=true;;
"-h" | "--help" ) helpFunc;;
esac
for var in "$@"; do
case "${var}" in
"-f" | "--force" ) forceGrav=true;;
"-h" | "--help" ) helpFunc;;
"-sd" | "--skip-download" ) skipDownload=true;;
esac
done
#Overwrite adlists.default from /etc/.pihole in case any changes have been made. Changes should be saved in /etc/adlists.list
if [[ ${forceGrav} == true ]]; then
if [[ "${forceGrav}" == true ]]; then
echo -n "::: Deleting exising list cache..."
${SUDO} rm /etc/pihole/list.*
rm /etc/pihole/list.*
echo " done!"
fi
${SUDO} cp /etc/.pihole/adlists.default /etc/pihole/adlists.default
#Overwrite adlists.default from /etc/.pihole in case any changes have been made. Changes should be saved in /etc/adlists.list
cp /etc/.pihole/adlists.default /etc/pihole/adlists.default
gravity_collapse
gravity_spinup
gravity_Schwarzchild
gravity_advanced
gravity_hostFormat
gravity_blackbody
if [[ "${skipDownload}" == false ]]; then
gravity_Schwarzchild
gravity_advanced
else
echo "::: Using cached Event Horizon list..."
numberOf=$(wc -l < ${piholeDir}/${preEventHorizon})
echo "::: $numberOf unique domains trapped in the event horizon."
fi
gravity_Whitelist
gravity_Blacklist
gravity_Wildcard
gravity_hostFormat
gravity_blackbody
gravity_reload
pihole status

392
pihole
View File

@@ -1,139 +1,345 @@
#!/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.
PI_HOLE_SCRIPT_DIR="/opt/pihole"
readonly wildcardlist="/etc/dnsmasq.d/03-pihole-wildcard.conf"
# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
#echo "::: You are root."
#else
#echo "::: Sudo will be used for this tool."
# Check if it is actually installed
# If it isn't, exit because the pihole cannot be invoked without privileges.
if [ -x "$(command -v sudo)" ];then
export SUDO="sudo"
exec sudo bash "$0" "$@"
exit $?
else
echo "::: Please install sudo or run this as root."
echo "::: sudo is needed to run pihole commands. Please run this script as root or install sudo."
exit 1
fi
fi
function whitelistFunc {
shift
${SUDO} /opt/pihole/whitelist.sh "$@"
exit 1
webpageFunc() {
source /opt/pihole/webpage.sh
main "$@"
exit 0
}
function blacklistFunc {
shift
${SUDO} /opt/pihole/blacklist.sh "$@"
exit 1
whitelistFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
function debugFunc {
${SUDO} /opt/pihole/piholeDebug.sh
exit 1
blacklistFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
function flushFunc {
${SUDO} /opt/pihole/piholeLogFlush.sh
exit 1
wildcardFunc() {
"${PI_HOLE_SCRIPT_DIR}"/list.sh "$@"
exit 0
}
function updateDashboardFunc {
${SUDO} /opt/pihole/updateDashboard.sh
exit 1
debugFunc() {
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
}
function updatePiholeFunc {
echo "::: Fetching latest changes from Github..."
cd /etc/.pihole
${SUDO} git pull
${SUDO} /etc/.pihole/automated\ install/basic-install.sh pihole
exit 1
flushFunc() {
"${PI_HOLE_SCRIPT_DIR}"/piholeLogFlush.sh
exit 0
}
function updateGravityFunc {
${SUDO} /opt/pihole/gravity.sh "$@"
exit 1
updatePiholeFunc() {
"${PI_HOLE_SCRIPT_DIR}"/update.sh
exit 0
}
function setupLCDFunction {
${SUDO} /opt/pihole/setupLCD.sh
exit 1
reconfigurePiholeFunc() {
/etc/.pihole/automated\ install/basic-install.sh --reconfigure
exit 0;
}
function queryFunc {
domain=$2
for list in /etc/pihole/list.*;do echo $list;grep ${domain} $list;done
exit 1
updateGravityFunc() {
"${PI_HOLE_SCRIPT_DIR}"/gravity.sh "$@"
exit 0
}
function chronometerFunc {
shift
${SUDO} /opt/pihole/chronometer.sh "$@"
exit 1
scanList(){
domain="${1}"
list="${2}"
method="${3}"
if [[ ${method} == "-exact" ]] ; then
grep -i -E "(^|\s)${domain}($|\s)" "${list}"
else
grep -i "${domain}" "${list}"
fi
}
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
if [ -e "${list}" ]; then
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}"
fi
echo ""
else
echo "::: ${list} does not exist"
echo ""
fi
done
# Scan for possible wildcard matches
local wildcards=($(processWildcards "${domain}"))
for domain in ${wildcards[@]}; do
result=$(scanList "\/${domain}\/" ${wildcardlist})
# Remove empty lines before couting number of results
count=$(sed '/^\s*$/d' <<< "$result" | wc -l)
if [[ ${count} > 0 ]]; then
echo "::: Wildcard blocking ${domain} (${count} results)"
echo "${result}"
echo ""
fi
done
exit 0
}
chronometerFunc() {
shift
"${PI_HOLE_SCRIPT_DIR}"/chronometer.sh "$@"
exit 0
}
function uninstallFunc {
${SUDO} /opt/pihole/uninstall.sh
exit 1
uninstallFunc() {
"${PI_HOLE_SCRIPT_DIR}"/uninstall.sh
exit 0
}
function versionFunc {
${SUDO} /opt/pihole/version.sh
exit 1
versionFunc() {
shift
"${PI_HOLE_SCRIPT_DIR}"/version.sh "$@"
exit 0
}
function helpFunc {
echo "::: Control all PiHole specific functions!"
echo ":::"
echo "::: Usage: pihole [options]"
echo "::: Add -h after -w (whitelist), -b (blacklist), or -c (chronometer) for more information on usage"
echo ":::"
echo "::: Options:"
echo "::: -w, whitelist Whitelist domains"
echo "::: -b, blacklist Blacklist domains"
echo "::: -d, debug Start a debugging session if having trouble"
echo "::: -f, flush Flush the pihole.log file"
echo "::: -ud, updateDashboard Update the web dashboard manually"
echo "::: -up, updatePihole Update Pi-hole"
echo "::: -g, updateGravity Update the list of ad-serving domains"
echo "::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it"
echo "::: -c, chronometer Calculates stats and displays to an LCD"
echo "::: -h, help Show this help dialog"
echo "::: -v, version Show current versions"
echo "::: -q, query Query the adlists for a specific domain"
echo "::: uninstall Uninstall Pi-Hole from your system :(!"
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
else
# service not running, start it up
if [ -x "$(command -v systemctl)" ]; then
systemctl start dnsmasq
else
service dnsmasq start
fi
fi
}
piholeEnable() {
if [[ "${1}" == "0" ]] ; then
#Disable Pihole
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
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
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 &
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!"
fi
fi
else
#Enable pihole
echo "::: Blocking has been enabled!"
sed -i 's/^#addn-hosts/addn-hosts/' /etc/dnsmasq.d/01-pihole.conf
fi
restartDNS
}
piholeLogging() {
shift
if [[ "${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
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!"
else
echo "::: Invalid option passed, please pass 'on' or 'off'"
exit 1
fi
restartDNS
}
piholeStatus() {
if [[ $(netstat -plnt | grep -c ':53 ') > 0 ]]; then
if [[ "${1}" != "web" ]] ; then
echo "::: DNS service is running"
fi
else
if [[ "${1}" == "web" ]] ; then
echo "-1";
else
echo "::: DNS service is NOT running"
fi
return
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
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
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
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 domain(s)
::: -b, blacklist Blacklist domain(s) (exact match)
::: -wild, wildcard Blacklist whole domain(s) (wildcard)
::: -d, debug Start a debugging session
::: Automated debugging can be enabled with `-a`.
::: 'pihole -d -a'
::: -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 components
::: -r, reconfigure Reconfigure or Repair Pi-hole
::: -g, updateGravity Update the list of ad-serving domains
::: -c, chronometer Calculates stats and displays to an LCD
::: -h, help Show this help dialog
::: -v, version Show installed versions of Pi-Hole and Web-Admin
::: -q, query Query the adlists for a specific domain
::: 'pihole -q domain -exact' shows 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
exit 0
}
if [[ $# = 0 ]]; then
helpFunc
helpFunc
fi
# Handle redirecting to specific functions based on arguments
case "$1" in
"-w" | "whitelist" ) whitelistFunc "$@";;
"-b" | "blacklist" ) blacklistFunc "$@";;
"-d" | "debug" ) debugFunc;;
"-f" | "flush" ) flushFunc;;
"-ud" | "updateDashboard" ) updateDashboardFunc;;
"-up" | "updatePihole" ) updatePiholeFunc;;
"-g" | "updateGravity" ) updateGravityFunc "$@";;
"-s" | "setupLCD" ) setupLCDFunction;;
"-c" | "chronometer" ) chronometerFunc "$@";;
"-h" | "help" ) helpFunc;;
"-v" | "version" ) versionFunc;;
"-q" | "query" ) queryFunc "$@";;
"uninstall" ) uninstallFunc;;
* ) helpFunc;;
case "${1}" in
"-w" | "whitelist" ) whitelistFunc "$@";;
"-b" | "blacklist" ) blacklistFunc "$@";;
"-wild" | "wildcard" ) wildcardFunc "$@";;
"-d" | "debug" ) debugFunc "$@";;
"-f" | "flush" ) flushFunc;;
"-up" | "updatePihole" ) updatePiholeFunc;;
"-r" | "reconfigure" ) reconfigurePiholeFunc;;
"-g" | "updateGravity" ) updateGravityFunc "$@";;
"-c" | "chronometer" ) chronometerFunc "$@";;
"-h" | "help" ) helpFunc;;
"-v" | "version" ) versionFunc "$@";;
"-q" | "query" ) queryFunc "$@";;
"-l" | "logging" ) piholeLogging "$@";;
"uninstall" ) uninstallFunc;;
"enable" ) piholeEnable 1;;
"disable" ) piholeEnable 0 $2;;
"status" ) piholeStatus "$2";;
"restartdns" ) restartDNS;;
"-a" | "admin" ) webpageFunc "$@";;
"-t" | "tail" ) tailFunc;;
* ) helpFunc;;
esac

5
requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
docker-compose
pytest
pytest-xdist
pytest-cov
testinfra

0
test/__init__.py Normal file
View File

16
test/centos.Dockerfile Normal file
View File

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

61
test/conftest.py Normal file
View File

@@ -0,0 +1,61 @@
import pytest
import testinfra
check_output = testinfra.get_backend(
"local://"
).get_module("Command").check_output
@pytest.fixture
def Pihole(Docker):
''' used to contain some script stubbing, now pretty much an alias.
Also provides bash as the default run function shell '''
def run_bash(self, command, *args, **kwargs):
cmd = self.get_command(command, *args)
if self.user is not None:
out = self.run_local(
"docker exec -u %s %s /bin/bash -c %s",
self.user, self.name, cmd)
else:
out = self.run_local(
"docker exec %s /bin/bash -c %s", self.name, cmd)
out.command = self.encode(cmd)
return out
funcType = type(Docker.run)
Docker.run = funcType(run_bash, Docker, testinfra.backend.docker.DockerBackend)
return Docker
@pytest.fixture
def Docker(request, args, image, cmd):
''' combine our fixtures into a docker run command and setup finalizer to cleanup '''
assert 'docker' in check_output('id'), "Are you in the docker group?"
docker_run = "docker run {} {} {}".format(args, image, cmd)
docker_id = check_output(docker_run)
def teardown():
check_output("docker rm -f %s", docker_id)
request.addfinalizer(teardown)
docker_container = testinfra.get_backend("docker://" + docker_id)
docker_container.id = docker_id
return docker_container
@pytest.fixture
def args(request):
''' -t became required when tput began being used '''
return '-t -d'
@pytest.fixture(params=['debian', 'centos'])
def tag(request):
''' consumed by image to make the test matrix '''
return request.param
@pytest.fixture()
def image(request, tag):
''' built by test_000_build_containers.py '''
return 'pytest_pihole:{}'.format(tag)
@pytest.fixture()
def cmd(request):
''' default to doing nothing by tailing null, but don't exit '''
return 'tail -f /dev/null'

16
test/debian.Dockerfile Normal file
View File

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

View File

@@ -0,0 +1,18 @@
''' This file starts with 000 to make it run first '''
import pytest
import testinfra
run_local = testinfra.get_backend(
"local://"
).get_module("Command").run
@pytest.mark.parametrize("image,tag", [
( 'test/debian.Dockerfile', 'pytest_pihole:debian' ),
( 'test/centos.Dockerfile', 'pytest_pihole:centos' ),
])
def test_build_pihole_image(image, tag):
build_cmd = run_local('docker build -f {} -t {} .'.format(image, tag))
if build_cmd.rc != 0:
print build_cmd.stdout
print build_cmd.stderr
assert build_cmd.rc == 0

View File

@@ -0,0 +1,325 @@
import pytest
from textwrap import dedent
SETUPVARS = {
'PIHOLE_INTERFACE' : 'eth99',
'IPV4_ADDRESS' : '1.1.1.1',
'IPV6_ADDRESS' : 'FE80::240:D0FF:FE48:4672',
'PIHOLE_DNS_1' : '4.2.2.1',
'PIHOLE_DNS_2' : '4.2.2.2'
}
def test_setupVars_are_sourced_to_global_scope(Pihole):
''' currently update_dialogs sources setupVars with a dot,
then various other functions use the variables.
This confirms the sourced variables are in scope between functions '''
setup_var_file = 'cat <<EOF> /etc/pihole/setupVars.conf\n'
for k,v in SETUPVARS.iteritems():
setup_var_file += "{}={}\n".format(k, v)
setup_var_file += "EOF\n"
Pihole.run(setup_var_file)
script = dedent('''\
set -e
printSetupVars() {
# Currently debug test function only
echo "Outputting sourced variables"
echo "PIHOLE_INTERFACE=${PIHOLE_INTERFACE}"
echo "IPV4_ADDRESS=${IPV4_ADDRESS}"
echo "IPV6_ADDRESS=${IPV6_ADDRESS}"
echo "PIHOLE_DNS_1=${PIHOLE_DNS_1}"
echo "PIHOLE_DNS_2=${PIHOLE_DNS_2}"
}
update_dialogs() {
. /etc/pihole/setupVars.conf
}
update_dialogs
printSetupVars
''')
output = run_script(Pihole, script).stdout
for k,v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_setupVars_saved_to_file(Pihole):
''' confirm saved settings are written to a file for future updates to re-use '''
set_setup_vars = '\n' # dedent works better with this and padding matching script below
for k,v in SETUPVARS.iteritems():
set_setup_vars += " {}={}\n".format(k, v)
Pihole.run(set_setup_vars).stdout
script = dedent('''\
set -e
echo start
TERM=xterm
source /opt/pihole/basic-install.sh
{}
finalExports
cat /etc/pihole/setupVars.conf
'''.format(set_setup_vars))
output = run_script(Pihole, script).stdout
for k,v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_configureFirewall_firewalld_running_no_errors(Pihole):
''' confirms firewalld rules are applied when firewallD is running '''
# 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.'
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 --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 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' in web_directory
assert 'blockingpage.css' in web_directory
def test_installPiholeWeb_empty_directory_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed in an emtpy directory '''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
mkdir -p /var/www/html/pihole
installPiholeWeb
''')
assert 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' not in installWeb.stdout
assert 'index.php missing, replacing...' in installWeb.stdout
assert 'index.js missing, replacing...' in installWeb.stdout
assert 'blockingpage.css missing, replacing...' in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' in web_directory
assert 'blockingpage.css' in web_directory
def test_installPiholeWeb_index_php_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed when necessary '''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
mkdir -p /var/www/html/pihole
touch /var/www/html/pihole/index.php
installPiholeWeb
''')
assert 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' not in installWeb.stdout
assert 'Existing index.php detected, not overwriting' in installWeb.stdout
assert 'index.js missing, replacing...' in installWeb.stdout
assert 'blockingpage.css missing, replacing...' in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' in web_directory
assert 'blockingpage.css' in web_directory
def test_installPiholeWeb_index_js_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed when necessary '''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
mkdir -p /var/www/html/pihole
touch /var/www/html/pihole/index.js
installPiholeWeb
''')
assert 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' not in installWeb.stdout
assert 'index.php missing, replacing...' in installWeb.stdout
assert 'Existing index.js detected, not overwriting' in installWeb.stdout
assert 'blockingpage.css missing, replacing...' in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' in web_directory
assert 'blockingpage.css' in web_directory
def test_installPiholeWeb_blockingpage_css_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed when necessary '''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
mkdir -p /var/www/html/pihole
touch /var/www/html/pihole/blockingpage.css
installPiholeWeb
''')
assert 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' not in installWeb.stdout
assert 'index.php missing, replacing...' in installWeb.stdout
assert 'index.js missing, replacing...' in installWeb.stdout
assert 'Existing blockingpage.css detected, not overwriting' in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' in web_directory
assert 'blockingpage.css' in web_directory
def test_installPiholeWeb_already_populated_no_errors(Pihole):
''' confirms all web page assets from Core repo are installed when necessary '''
installWeb = Pihole.run('''
source /opt/pihole/basic-install.sh
mkdir -p /var/www/html/pihole
touch /var/www/html/pihole/index.php
touch /var/www/html/pihole/index.js
touch /var/www/html/pihole/blockingpage.css
installPiholeWeb
''')
assert 'Installing pihole custom index page...' in installWeb.stdout
assert 'No default index.lighttpd.html file found... not backing up' not in installWeb.stdout
assert 'Existing index.php detected, not overwriting' in installWeb.stdout
assert 'index.php missing, replacing...' not in installWeb.stdout
assert 'Existing index.js detected, not overwriting' in installWeb.stdout
assert 'index.js missing, replacing...' not in installWeb.stdout
assert 'Existing blockingpage.css detected, not overwriting' in installWeb.stdout
assert 'blockingpage.css missing, replacing... ' not in installWeb.stdout
web_directory = Pihole.run('ls -r /var/www/html/pihole').stdout
assert 'index.php' in web_directory
assert 'index.js' 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 'Updating local cache of available packages...' in updateCache.stdout
assert 'ERROR' not in updateCache.stdout
assert 'done!' 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 'Updating local cache of available packages...' in updateCache.stdout
assert 'ERROR' in updateCache.stdout
assert 'done!' not in updateCache.stdout
# Helper functions
def mock_command(script, args, container):
''' Allows for setup of commands we don't really want to have to run for real in unit tests '''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
case "\$1" in'''.format(script=script))
for k, v in args.iteritems():
case = dedent('''
{arg})
echo {res}
exit {retcode}
;;'''.format(arg=k, res=v[0], retcode=v[1]))
mock_script += case
mock_script += dedent('''
esac''')
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
rm -f /var/log/{scriptlog}'''.format(script=full_script_path, content=mock_script, scriptlog=script))
def run_script(Pihole, script):
result = Pihole.run(script)
assert result.rc == 0
return result

13
test/test_shellcheck.py Normal file
View File

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