Documentation and signal handling.

This commit is contained in:
Jacob Windle 2019-12-13 09:29:27 -05:00
parent 3da1ee4f25
commit dbc49e15a6

35
main.c
View File

@ -10,12 +10,27 @@
#define ONFAILED(status, fn) if(status > fn) #define ONFAILED(status, fn) if(status > fn)
/** /**
* TODO - daemonize, add in reading of config file, * TODO: Add config file reading for daemonization.
* block sites within a certain time limit. * TODO: Allow daemonized process to call file reading/editing routines at will.
* TODO: Generalized routine for reading through a file and replacing a line.
* TODO: Generalized routine for reading a file.
*/ */
// Our rule we use to blackhole domains
const char *blockString = "0.0.0.0 "; const char *blockString = "0.0.0.0 ";
// The current hardcoded location of the hosts file.
static const char *HOSTFILE = "/etc/hosts"; static const char *HOSTFILE = "/etc/hosts";
/**
* SIGINT handler, cleans up resources on Ctrl-C
* @param signal
*/
void int_handler(int signal) {
// Clean up any resources.
fprintf(stderr, "SIGINT received, cleaning up...\n");
}
void replacehost(char *oldhost, char *newhost, FILE *hostsFile); void replacehost(char *oldhost, char *newhost, FILE *hostsFile);
/** /**
@ -129,15 +144,19 @@ void daemonize() {
*/ */
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
// Install a sigint handler to help us clean up.
signal(SIGINT, int_handler);
FILE *hostsFile; FILE *hostsFile;
if (getuid() != 0) if (getuid() != 0)
{ {
fprintf(stderr, "hb: Must run as root using sudo!\n"); fprintf(stderr, "hb: Must run as root using sudo!\n");
} }
printf("Argc: %d\n", argc); // Process our command line arguments.
for (int i = 0; i < argc; i++) for (int i = 0; i < argc; i++)
{ {
// Opens a hosts file in append mode, adding a host.
if (strcmp(argv[i], "add") == 0) if (strcmp(argv[i], "add") == 0)
{ {
if (argc < 3) { if (argc < 3) {
@ -147,26 +166,32 @@ int main(int argc, char **argv)
hostsFile = fopenHostsFile(1); hostsFile = fopenHostsFile(1);
blockHost(hostsFile, argv[i+1]); blockHost(hostsFile, argv[i+1]);
} }
// Replaces a host
// TODO: this currently duplicates the whole file and appends it to the end.
else if (strcmp(argv[i], "edit") == 0) else if (strcmp(argv[i], "edit") == 0)
{ {
hostsFile = fopenHostsFile(2); hostsFile = fopenHostsFile(2);
replacehost(argv[i+1], argv[i+2], hostsFile); replacehost(argv[i+1], argv[i+2], hostsFile);
} }
// Deletes a host.
else if (strcmp(argv[i], "delete") == 0) else if (strcmp(argv[i], "delete") == 0)
{ {
fprintf(stdout, "Soon to be implemented!\n"); fprintf(stdout, "Soon to be implemented!\n");
} }
// Shows usage.
else if (strcmp(argv[i], "-h") == 0) else if (strcmp(argv[i], "-h") == 0)
{ {
usage(); usage();
exit(0); exit(0);
} }
// Show the entire hosts file.
else if (strcmp(argv[i], "show") == 0) else if (strcmp(argv[i], "show") == 0)
{ {
showHosts(); showHosts();
} }
// Daemonize this process, allowing for hosts file to be automagically managed.
else { else {
daemonize(); // daemonize();
} }
} }