X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=winnet.c;h=621c3cabb08da0289788df46dd97441646f503f9;hb=86e1a9516635f0f317350729b07d4e3c41fca78b;hp=238730c4f172ff194b1cf1d0d22bf56fcf621aa0;hpb=3730ada5ce457468441b32d7e84157e481b8ba75;p=PuTTY.git diff --git a/winnet.c b/winnet.c index 238730c4..621c3cab 100644 --- a/winnet.c +++ b/winnet.c @@ -87,11 +87,6 @@ struct SockAddr_tag { #ifdef IPV6 struct addrinfo *ai; /* Address IPv6 style. */ #endif - /* - * We need to have this lengthy enough to hold *any* hostname - * (including IPv6 reverse...) - */ - char realhost[8192]; }; struct buffer { @@ -213,11 +208,12 @@ SockAddr sk_namelookup(char *host, char **canonicalname) SockAddr ret = smalloc(sizeof(struct SockAddr_tag)); unsigned long a; struct hostent *h = NULL; + char realhost[8192]; /* Clear the structure and default to IPv4. */ memset(ret, 0, sizeof(struct SockAddr_tag)); ret->family = 0; /* We set this one when we have resolved the host. */ - *canonicalname = ret->realhost; /* This makes sure we always have a hostname to return. */ + *realhost = '\0'; if ((a = inet_addr(host)) == (unsigned long) INADDR_NONE) { #ifdef IPV6 @@ -255,7 +251,7 @@ SockAddr sk_namelookup(char *host, char **canonicalname) */ if (ret->family == 0) { /*debug(("Resolving \"%s\" with gethostbyname() (IPv4 only)...\n", host)); */ - if (h = gethostbyname(host)) + if ( (h = gethostbyname(host)) ) ret->family = AF_INET; } } @@ -312,10 +308,9 @@ SockAddr sk_namelookup(char *host, char **canonicalname) ((struct sockaddr *) ret->ai->ai_addr, ret->family == AF_INET ? sizeof(SOCKADDR_IN) : - sizeof(SOCKADDR_IN6), ret->realhost, - sizeof(ret->realhost), NULL, 0, 0) != 0) { - strncpy(ret->realhost, host, - sizeof(ret->realhost)); + sizeof(SOCKADDR_IN6), realhost, + sizeof(realhost), NULL, 0, 0) != 0) { + strncpy(realhost, host, sizeof(realhost)); } } } @@ -325,7 +320,7 @@ SockAddr sk_namelookup(char *host, char **canonicalname) { memcpy(&a, h->h_addr, sizeof(a)); /* This way we are always sure the h->h_name is valid :) */ - strncpy(ret->realhost, h->h_name, sizeof(ret->realhost)); + strncpy(realhost, h->h_name, sizeof(realhost)); } } #ifdef IPV6 @@ -337,9 +332,12 @@ SockAddr sk_namelookup(char *host, char **canonicalname) * success return from inet_addr. */ ret->family = AF_INET; - *canonicalname = host; + strncpy(realhost, host, sizeof(realhost)); } ret->address = ntohl(a); + realhost[lenof(realhost)-1] = '\0'; + *canonicalname = smalloc(1+strlen(realhost)); + strcpy(*canonicalname, realhost); return ret; } @@ -365,10 +363,10 @@ static void sk_tcp_flush(Socket s) */ } -void sk_tcp_close(Socket s); -void sk_tcp_write(Socket s, char *data, int len); -void sk_tcp_write_oob(Socket s, char *data, int len); -char *sk_tcp_socket_error(Socket s); +static void sk_tcp_close(Socket s); +static void sk_tcp_write(Socket s, char *data, int len); +static void sk_tcp_write_oob(Socket s, char *data, int len); +static char *sk_tcp_socket_error(Socket s); Socket sk_new(SockAddr addr, int port, int privport, int oobinline, Plug plug)