Merge branch 'feature/delete-host' of jacob.windle/hb into master

This commit is contained in:
Jacob Windle 2020-01-18 12:43:37 +00:00 committed by Gitea
commit b35703d936
2 changed files with 24 additions and 20 deletions

View File

@ -6,21 +6,27 @@ This is a system utility written in C that allows one to quickly black hole host
# How it Works # How it Works
The program "blackholes" hosts by setting their entries in /etc/hosts to be
`0.0.0.0` so that when one tries to resolve the host in the browser the host will
resolve to `0.0.0.0`.
The program will wake up in a configurable timeframe continuously, reading a config file into memory and making appropriate changes to the /etc/hosts based on what it reads from the config. The program will wake up in a configurable timeframe continuously, reading a config file into memory and making appropriate changes to the /etc/hosts based on what it reads from the config.
Starting the program like this allows for the program to run as a daemon:
```bash
sudo hb -period <wakeup period> -config <path/to/config> -daemon
```
The config file at the moment is just a newline separated list of hosts that will
be added to the /etc/hosts file.
# Motivations # Motivations
I would like to get better with C, and will be using C much more in the near future. In addition, I have issues with browsing to sites that hurt my productivity and am always on the command line. I would like to get better with C, and will be using C much more in the near future. In addition, I have issues with browsing to sites that hurt my productivity and am always on the command line.
# TODO # TODO
1. Get delete working for my /etc/hosts editor. - Debug logging
2. Daemonize this program to be started up by systemd. - Systemd unit file for running as a daemon
- As part of daemonization, remember and remove added hosts on teardown.
- Can do this with an atexit handler, and a routine in main.
3. Log dns requests that look at the hosts file -- To see how many go where
4. As part of daemonization -- only block hosts within a time limit.
- Sleep, wakeup, check if time has passed or not, block/unblock host,
sleep again.
5. Read hosts to block from a config file (to not pollute the /etc/hosts file)
6. Design a unified interface for reading a hosts file.

18
main.c
View File

@ -31,8 +31,7 @@ static char *CONFIG;
* @param mode whichever mode host file you want to open * @param mode whichever mode host file you want to open
* @return FILE * * @return FILE *
*/ */
FILE *fopenHostsFile(char *mode) FILE *fopenHostsFile(char *mode) {
{
return fopen(HOSTFILE, mode); return fopen(HOSTFILE, mode);
} }
@ -71,23 +70,22 @@ void modifyHostsFile(char *oldhost, char *newhost, int deleteHost) {
newHostsFile[strlen(newHostsFile)] = EOF; newHostsFile[strlen(newHostsFile)] = EOF;
// // Seek to 0 // // Seek to 0
// fseek(hostsFile, 0, SEEK_SET); fseek(hostsFile, 0, SEEK_SET);
fclose(hostsFile); // fclose(hostsFile);
// If this failed, write an error message to stderr // If this failed, write an error message to stderr
// ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) { ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) {
// fprintf(stderr, "Did not write anything!\n"); fprintf(stderr, "Did not write anything!\n");
// } }
fprintf(stderr, "New hosts file: \n%s\n", newHostsFile); fprintf(stderr, "New hosts file: \n%s\n", newHostsFile);
// fclose(hostsFile); fclose(hostsFile);
} }
/** /**
* Block a hosts using the hostsFile in FILE * Block a hosts using the hostsFile in FILE
*/ */
void blockHost(char *host) void blockHost(char *host) {
{
FILE *hostsFile = fopenHostsFile("a"); FILE *hostsFile = fopenHostsFile("a");
char blockRule[256]; char blockRule[256];
sprintf(blockRule, "%s %s\n", blockString, host); sprintf(blockRule, "%s %s\n", blockString, host);