X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b8771f9615ecfa8989e8982aac33bb31eeaaec22..740819ef7b3b96451e16b2fa3891d46cfc73ec64:/socket.c diff --git a/socket.c b/socket.c index e642082e..84622515 100644 --- a/socket.c +++ b/socket.c @@ -30,8 +30,6 @@ #include "lib/addrinfo.h" #endif -// extern int af; /* NO MORE BLOODY GLOBALS! */ - /* Establish a proxy connection on an open socket to a web roxy by * using the CONNECT method. */ static int establish_proxy_connection(int fd, char *host, int port) @@ -599,12 +597,12 @@ char *client_name(int fd) if (getpeername(fd, (struct sockaddr *)&ss, &length)) { /* FIXME: Can we really not continue? */ rprintf(FERROR, RSYNC_NAME ": getpeername on fd%d failed: %s\n", - strerror(errno)); + fd, strerror(errno)); exit_cleanup(RERR_SOCKETIO); } #ifdef INET6 - if (ss.ss_family == AF_INET6 && + if (ss.sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)&ss)->sin6_addr)) { struct sockaddr_in6 sin6; struct sockaddr_in *sin; @@ -656,7 +654,7 @@ char *client_name(int fd) break; } - /* TODO: Do a forward lookup as well to prevent spoofing */ + /* TODO: Do a forward lookup as well to prevent spoofing */ if (res == NULL) { strcpy(name_buf, def); @@ -669,69 +667,6 @@ char *client_name(int fd) return name_buf; } -/** - * Convert a string to an IP address. The string can be a name or - * dotted decimal number. - * - * Returns a pointer to a static in_addr struct -- if you call this - * more than once then you should copy it. - * - * TODO: Use getaddrinfo() instead, or make this function call getnameinfo - **/ -struct in_addr *ip_address(const char *str) -{ - static struct in_addr ret; - struct hostent *hp; - - if (!str) { - rprintf (FERROR, "ip_address received NULL name\n"); - return NULL; - } - - /* try as an IP address */ - if (inet_aton(str, &ret) != 0) { - return &ret; - } - - /* otherwise assume it's a network name of some sort and use - gethostbyname */ - if ((hp = gethostbyname (str)) == 0) { - rprintf(FERROR, "gethostbyname failed for \"%s\": unknown host?\n",str); - return NULL; - } - - if (hp->h_addr == NULL) { - rprintf(FERROR, "gethostbyname: host address is invalid for host \"%s\"\n",str); - return NULL; - } - - if (hp->h_length > sizeof ret) { - rprintf(FERROR, "gethostbyname: host address for \"%s\" is too large\n", - str); - return NULL; - } - - if (hp->h_addrtype != AF_INET) { - rprintf (FERROR, "gethostname: host address for \"%s\" is not IPv4\n", - str); - return NULL; - } - - /* This is kind of difficult. The only field in ret is - s_addr, which is the IP address as a 32-bit int. On - UNICOS, s_addr is in fact a *bitfield* for reasons best - know to Cray. This means we can't memcpy in to it. On the - other hand, h_addr is a char*, so we can't just assign. - - Since there's meant to be only one field inside the in_addr - structure we will try just copying over the top and see how - that goes. */ - memcpy (&ret, hp->h_addr, hp->h_length); - - return &ret; -} - - /******************************************************************* this is like socketpair but uses tcp. It is used by the Samba