Loading ares/AUTHORS +5 −0 Original line number Diff line number Diff line Loading @@ -20,3 +20,8 @@ Brad Spencer Ravi Pratap William Ahern Bram Matthys Michael Wallner Vlad Dinulescu Brad House Shmulik Regev Ashish Sharma ares/CHANGES +9 −0 Original line number Diff line number Diff line Changelog for the c-ares project * June 2 2007 - Brad House's man pages for ares_save_options() and ares_destroy_options() were added. - Ashish Sharma provided a patch for supporting multiple entries in the /etc/hosts file. Patch edited for coding style and functionality by me (Daniel). * May 30 2007 - Shmulik Regev brought cryptographically secure transaction IDs: Loading ares/ares__get_hostent.c +1 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host) free(hostent->h_addr_list); free(hostent); } *host = NULL; return ARES_ENOMEM; } Loading ares/ares_free_hostent.c +4 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,10 @@ void ares_free_hostent(struct hostent *host) for (p = host->h_aliases; *p; p++) free(*p); free(host->h_aliases); free(host->h_addr_list[0]); for(p = host->h_addr_list; *p; p++) { free(*p); } free(host->h_addr_list); free(host); } ares/ares_gethostbyname.c +119 −20 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ static void next_lookup(struct host_query *hquery) { int status; const char *p; struct hostent *host; struct hostent *host = NULL; for (p = hquery->remaining_lookups; *p; p++) { Loading Loading @@ -151,7 +151,7 @@ static void host_callback(void *arg, int status, unsigned char *abuf, int alen) { struct host_query *hquery = (struct host_query *) arg; ares_channel channel = hquery->channel; struct hostent *host; struct hostent *host = NULL; if (status == ARES_SUCCESS) { Loading Loading @@ -242,12 +242,86 @@ static int fake_hostent(const char *name, int family, ares_host_callback callbac return 1; } static int add_host(struct hostent *hostent, struct hostent **host) { char **p; char **h_addr_list = NULL; struct hostent *hostptr = *host; int count = 0; int index = 0; if (hostptr == NULL) { *host = hostent; return 0; } for (p = hostptr->h_addr_list; *p; p++) { count++; } for (p = hostent->h_addr_list; *p; p++) { count++; } h_addr_list = malloc((count+1) * sizeof(char *)); if (!h_addr_list) { *host = NULL; return -1; } for (p = hostptr->h_addr_list; *p; p++) { h_addr_list[index] = malloc(sizeof(struct in_addr)); if (h_addr_list[index]) { memcpy(h_addr_list[index], *p, sizeof(struct in_addr)); } else { free(h_addr_list); return -1; } index++; } for(p = hostent->h_addr_list; *p; p++) { h_addr_list[index] = malloc(sizeof(struct in_addr)); if (h_addr_list[index]) { memcpy(h_addr_list[index], *p, sizeof(struct in_addr)); } else { free(h_addr_list); return -1; } index++; } h_addr_list[index] = NULL; for (p = hostptr->h_addr_list; *p; p++) { free(*p); } free(hostptr->h_addr_list); hostptr->h_addr_list = h_addr_list; return 0; } static int file_lookup(const char *name, int family, struct hostent **host) { FILE *fp; char **alias; int status; int error; int match; struct hostent *hostent = NULL; #ifdef WIN32 char PATH_HOSTS[MAX_PATH]; Loading Loading @@ -298,20 +372,45 @@ static int file_lookup(const char *name, int family, struct hostent **host) } while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) { match = 0; hostent = *host; if (strcasecmp((*host)->h_name, name) == 0) break; { match = 1; } else { for (alias = (*host)->h_aliases; *alias; alias++) { if (strcasecmp(*alias, name) == 0) { match = 1; break; } if (*alias) break; } } if (match) { if(!add_host(hostent, host)) ares_free_hostent(hostent); else { *host = NULL; } } else { ares_free_hostent(*host); *host = NULL; } } fclose(fp); if (status == ARES_EOF) { if ( *host) status = ARES_SUCCESS; else status = ARES_ENOTFOUND; } if (status != ARES_SUCCESS) *host = NULL; return status; Loading Loading
ares/AUTHORS +5 −0 Original line number Diff line number Diff line Loading @@ -20,3 +20,8 @@ Brad Spencer Ravi Pratap William Ahern Bram Matthys Michael Wallner Vlad Dinulescu Brad House Shmulik Regev Ashish Sharma
ares/CHANGES +9 −0 Original line number Diff line number Diff line Changelog for the c-ares project * June 2 2007 - Brad House's man pages for ares_save_options() and ares_destroy_options() were added. - Ashish Sharma provided a patch for supporting multiple entries in the /etc/hosts file. Patch edited for coding style and functionality by me (Daniel). * May 30 2007 - Shmulik Regev brought cryptographically secure transaction IDs: Loading
ares/ares__get_hostent.c +1 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host) free(hostent->h_addr_list); free(hostent); } *host = NULL; return ARES_ENOMEM; } Loading
ares/ares_free_hostent.c +4 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,10 @@ void ares_free_hostent(struct hostent *host) for (p = host->h_aliases; *p; p++) free(*p); free(host->h_aliases); free(host->h_addr_list[0]); for(p = host->h_addr_list; *p; p++) { free(*p); } free(host->h_addr_list); free(host); }
ares/ares_gethostbyname.c +119 −20 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ static void next_lookup(struct host_query *hquery) { int status; const char *p; struct hostent *host; struct hostent *host = NULL; for (p = hquery->remaining_lookups; *p; p++) { Loading Loading @@ -151,7 +151,7 @@ static void host_callback(void *arg, int status, unsigned char *abuf, int alen) { struct host_query *hquery = (struct host_query *) arg; ares_channel channel = hquery->channel; struct hostent *host; struct hostent *host = NULL; if (status == ARES_SUCCESS) { Loading Loading @@ -242,12 +242,86 @@ static int fake_hostent(const char *name, int family, ares_host_callback callbac return 1; } static int add_host(struct hostent *hostent, struct hostent **host) { char **p; char **h_addr_list = NULL; struct hostent *hostptr = *host; int count = 0; int index = 0; if (hostptr == NULL) { *host = hostent; return 0; } for (p = hostptr->h_addr_list; *p; p++) { count++; } for (p = hostent->h_addr_list; *p; p++) { count++; } h_addr_list = malloc((count+1) * sizeof(char *)); if (!h_addr_list) { *host = NULL; return -1; } for (p = hostptr->h_addr_list; *p; p++) { h_addr_list[index] = malloc(sizeof(struct in_addr)); if (h_addr_list[index]) { memcpy(h_addr_list[index], *p, sizeof(struct in_addr)); } else { free(h_addr_list); return -1; } index++; } for(p = hostent->h_addr_list; *p; p++) { h_addr_list[index] = malloc(sizeof(struct in_addr)); if (h_addr_list[index]) { memcpy(h_addr_list[index], *p, sizeof(struct in_addr)); } else { free(h_addr_list); return -1; } index++; } h_addr_list[index] = NULL; for (p = hostptr->h_addr_list; *p; p++) { free(*p); } free(hostptr->h_addr_list); hostptr->h_addr_list = h_addr_list; return 0; } static int file_lookup(const char *name, int family, struct hostent **host) { FILE *fp; char **alias; int status; int error; int match; struct hostent *hostent = NULL; #ifdef WIN32 char PATH_HOSTS[MAX_PATH]; Loading Loading @@ -298,20 +372,45 @@ static int file_lookup(const char *name, int family, struct hostent **host) } while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) { match = 0; hostent = *host; if (strcasecmp((*host)->h_name, name) == 0) break; { match = 1; } else { for (alias = (*host)->h_aliases; *alias; alias++) { if (strcasecmp(*alias, name) == 0) { match = 1; break; } if (*alias) break; } } if (match) { if(!add_host(hostent, host)) ares_free_hostent(hostent); else { *host = NULL; } } else { ares_free_hostent(*host); *host = NULL; } } fclose(fp); if (status == ARES_EOF) { if ( *host) status = ARES_SUCCESS; else status = ARES_ENOTFOUND; } if (status != ARES_SUCCESS) *host = NULL; return status; Loading