Implementing deleteHost

pull/4/head
Jacob Windle 2020-01-17 08:08:11 -05:00
parent ccb0e90d3b
commit f5036783f9
1 changed files with 49 additions and 45 deletions

94
main.c
View File

@ -32,9 +32,6 @@ static char *HOSTFILE = "/etc/hosts";
static char *CONFIG;
// Our configuration
void replacehost(char *oldhost, char *newhost);
/**
* Return an open handle to the hosts file.
*
@ -46,6 +43,53 @@ FILE *fopenHostsFile(char *mode)
return fopen(HOSTFILE, mode);
}
/**
* Replace a host in the hosts file with the NEW host.
*
* @param oldhost
* @param newhost
* @param hostsFile
*/
void replacehost(char *oldhost, char *newhost, int deleteHost) {
FILE *hostsFile = fopenHostsFile("r");
char buf[256];
char *ptr, *f;
char newHostsFile[4096];
memset(newHostsFile, 0, 4096);
// fseek(hostsFile, 0, SEEK_SET);
while (fgets(buf, 256, hostsFile) != NULL)
{
f = strcasestr(buf, oldhost);
if (f != NULL) {
// Just skip writing this host to the hosts file if we are deleting it
if (deleteHost)
continue;
memset(buf, 0, sizeof(buf));
sprintf(buf, "%s %s\n", blockString, newhost);
}
strcat(newHostsFile, buf);
memset(buf, 0, sizeof(buf));
}
// Ensure we have an EOF at the end of the file.
newHostsFile[strlen(newHostsFile)] = EOF;
// // Seek to 0
// fseek(hostsFile, 0, SEEK_SET);
fclose(hostsFile);
// If this failed, write an error message to stderr
// ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) {
// fprintf(stderr, "Did not write anything!\n");
// }
fprintf(stderr, "New hosts file: \n%s\n", newHostsFile);
// fclose(hostsFile);
}
/**
* Block a hosts using the hostsFile in FILE
*/
@ -65,9 +109,10 @@ void blockHost(char *host)
void deleteHost(char *host)
{
replacehost(host, NULL, 1);
}
void showHosts()
{
pid_t child = fork();
@ -251,45 +296,4 @@ int main(int argc, char **argv)
free_list(&hosts);
}
/**
* Replace a host in the hosts file with the NEW host.
*
* @param oldhost
* @param newhost
* @param hostsFile
*/
void replacehost(char *oldhost, char *newhost) {
FILE *hostsFile = fopenHostsFile("r");
char buf[256];
char *ptr, *f;
char newHostsFile[4096];
memset(newHostsFile, 0, 4096);
// fseek(hostsFile, 0, SEEK_SET);
while (fgets(buf, 256, hostsFile) != NULL)
{
f = strcasestr(buf, oldhost);
if (f != NULL) {
memset(buf, 0, sizeof(buf));
sprintf(buf, "%s %s\n", blockString, newhost);
}
strcat(newHostsFile, buf);
memset(buf, 0, sizeof(buf));
}
// Ensure we have an EOF at the end of the file.
newHostsFile[strlen(newHostsFile)] = EOF;
// // Seek to 0
// fseek(hostsFile, 0, SEEK_SET);
fclose(hostsFile);
// If this failed, write an error message to stderr
// ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) {
// fprintf(stderr, "Did not write anything!\n");
// }
fprintf(stderr, "New hosts file: \n%s\n", newHostsFile);
// fclose(hostsFile);
}