Loading apps/s_socket.c +2 −50 Original line number Diff line number Diff line Loading @@ -139,7 +139,6 @@ typedef unsigned int u_int; # include "netdb.h" # endif static struct hostent *GetHostByName(const char *name); # if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)) static void ssl_sock_cleanup(void); # endif Loading Loading @@ -564,7 +563,7 @@ static int do_accept(int acc_sock, int *sock, char **host) *host = app_malloc(strlen(h1->h_name) + 1, "copy hostname"); BUF_strlcpy(*host, h1->h_name, strlen(h1->h_name) + 1); h2 = GetHostByName(*host); h2 = gethostbyname(*host); if (h2 == NULL) { BIO_printf(bio_err, "gethostbyname failure\n"); closesocket(ret); Loading Loading @@ -655,7 +654,7 @@ static int host_ip(const char *str, unsigned char ip[4]) if (!ssl_sock_init()) return (0); he = GetHostByName(str); he = gethostbyname(str); if (he == NULL) { BIO_printf(bio_err, "gethostbyname failure\n"); goto err; Loading Loading @@ -693,51 +692,4 @@ int extract_port(const char *str, unsigned short *port_ptr) return (1); } # define GHBN_NUM 4 static struct ghbn_cache_st { char name[128]; struct hostent ent; unsigned long order; } ghbn_cache[GHBN_NUM]; static unsigned long ghbn_hits = 0L; static unsigned long ghbn_miss = 0L; static struct hostent *GetHostByName(const char *name) { struct hostent *ret; int i, lowi = 0; unsigned long low = (unsigned long)-1; for (i = 0; i < GHBN_NUM; i++) { if (low > ghbn_cache[i].order) { low = ghbn_cache[i].order; lowi = i; } if (ghbn_cache[i].order > 0) { if (strncmp(name, ghbn_cache[i].name, 128) == 0) break; } } if (i == GHBN_NUM) { /* no hit */ ghbn_miss++; ret = gethostbyname(name); if (ret == NULL) return (NULL); /* else add to cache */ if (strlen(name) < sizeof ghbn_cache[0].name) { strcpy(ghbn_cache[lowi].name, name); memcpy((char *)&(ghbn_cache[lowi].ent), ret, sizeof(struct hostent)); ghbn_cache[lowi].order = ghbn_miss + ghbn_hits; } return (ret); } else { ghbn_hits++; ret = &(ghbn_cache[i].ent); ghbn_cache[i].order = ghbn_miss + ghbn_hits; return (ret); } } #endif Loading
apps/s_socket.c +2 −50 Original line number Diff line number Diff line Loading @@ -139,7 +139,6 @@ typedef unsigned int u_int; # include "netdb.h" # endif static struct hostent *GetHostByName(const char *name); # if defined(OPENSSL_SYS_WINDOWS) || (defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK)) static void ssl_sock_cleanup(void); # endif Loading Loading @@ -564,7 +563,7 @@ static int do_accept(int acc_sock, int *sock, char **host) *host = app_malloc(strlen(h1->h_name) + 1, "copy hostname"); BUF_strlcpy(*host, h1->h_name, strlen(h1->h_name) + 1); h2 = GetHostByName(*host); h2 = gethostbyname(*host); if (h2 == NULL) { BIO_printf(bio_err, "gethostbyname failure\n"); closesocket(ret); Loading Loading @@ -655,7 +654,7 @@ static int host_ip(const char *str, unsigned char ip[4]) if (!ssl_sock_init()) return (0); he = GetHostByName(str); he = gethostbyname(str); if (he == NULL) { BIO_printf(bio_err, "gethostbyname failure\n"); goto err; Loading Loading @@ -693,51 +692,4 @@ int extract_port(const char *str, unsigned short *port_ptr) return (1); } # define GHBN_NUM 4 static struct ghbn_cache_st { char name[128]; struct hostent ent; unsigned long order; } ghbn_cache[GHBN_NUM]; static unsigned long ghbn_hits = 0L; static unsigned long ghbn_miss = 0L; static struct hostent *GetHostByName(const char *name) { struct hostent *ret; int i, lowi = 0; unsigned long low = (unsigned long)-1; for (i = 0; i < GHBN_NUM; i++) { if (low > ghbn_cache[i].order) { low = ghbn_cache[i].order; lowi = i; } if (ghbn_cache[i].order > 0) { if (strncmp(name, ghbn_cache[i].name, 128) == 0) break; } } if (i == GHBN_NUM) { /* no hit */ ghbn_miss++; ret = gethostbyname(name); if (ret == NULL) return (NULL); /* else add to cache */ if (strlen(name) < sizeof ghbn_cache[0].name) { strcpy(ghbn_cache[lowi].name, name); memcpy((char *)&(ghbn_cache[lowi].ent), ret, sizeof(struct hostent)); ghbn_cache[lowi].order = ghbn_miss + ghbn_hits; } return (ret); } else { ghbn_hits++; ret = &(ghbn_cache[i].ent); ghbn_cache[i].order = ghbn_miss + ghbn_hits; return (ret); } } #endif