diff options
author | David Shaw <[email protected]> | 2004-10-16 21:31:36 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2004-10-16 21:31:36 +0000 |
commit | 4d79b138ac36bae970f03830a210f80e069d14d1 (patch) | |
tree | b989a17fd4f6eb7b08fba44386083e722fbe3d61 | |
parent | * gpgkeys_finger.c [_WIN32] (connect_server): Fix typo. (diff) | |
download | gnupg-4d79b138ac36bae970f03830a210f80e069d14d1.tar.gz gnupg-4d79b138ac36bae970f03830a210f80e069d14d1.zip |
* http.c (connect_server): [_WIN32] actually fill in the sin_addr so we
aren't always talking to localhost. Add some general sanity checking of
parameters learned from gethostbyname().
-rw-r--r-- | util/ChangeLog | 6 | ||||
-rw-r--r-- | util/http.c | 14 |
2 files changed, 19 insertions, 1 deletions
diff --git a/util/ChangeLog b/util/ChangeLog index 7264d0f64..5a20a817f 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,9 @@ +2004-10-16 David Shaw <[email protected]> + + * http.c (connect_server): [_WIN32] actually fill in the sin_addr + so we aren't always talking to localhost. Add some general sanity + checking of parameters learned from gethostbyname(). + 2004-10-15 Werner Koch <[email protected]> * vasprintf.c: New. Taken from gnupg 1.9. diff --git a/util/http.c b/util/http.c index 7ee088ebb..e1c3c25ef 100644 --- a/util/http.c +++ b/util/http.c @@ -780,6 +780,7 @@ connect_server( const char *server, ushort port, unsigned int flags ) addr.sin_family=AF_INET; addr.sin_port=htons(port); + memcpy(&addr.sin_addr,&inaddr,sizeof(inaddr)); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))==0) return sock; @@ -797,7 +798,6 @@ connect_server( const char *server, ushort port, unsigned int flags ) { /* We're using SRV, so append the tags */ char srvname[MAXDNAME]; - strcpy(srvname,"_hkp._tcp."); strncat(srvname,server,MAXDNAME-11); srvname[MAXDNAME-1]='\0'; @@ -872,11 +872,23 @@ connect_server( const char *server, ushort port, unsigned int flags ) } addr.sin_family=host->h_addrtype; + if(addr.sin_family!=AF_INET) + { + log_error("%s: unknown address family\n",srvlist[srv].target); + return -1; + } + addr.sin_port=htons(srvlist[srv].port); /* Try all A records until one responds. */ while(host->h_addr_list[i]) { + if(host->h_length!=4) + { + log_error("%s: illegal address length\n",srvlist[srv].target); + return -1; + } + memcpy(&addr.sin_addr,host->h_addr_list[i],host->h_length); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))==0) |