daemon: handle gethostbyname() error
PATCH 1/3 daemon: handle gethostbyname() error
If the user-supplied hostname can't be found then we should not use it. We already avoid doing that in the non-NO_IPV6 case by checking if the return value of getaddrinfo() is zero (success). Do the same in the NO_IPV6 case and make sure the return value of gethostbyname() isn't NULL before dereferencing this pointer.
Signed-off-by Rene Scharfe <[email protected]>
---
Most lines are just re-indented, not actually changed.
daemon.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-)
daemon.c +14 -13
@@ -553,20 +553,21 @@ static void parse_host_arg(char *extra_args, int buflen)static char addrbuf[HOST_NAME_MAX +1 ]; hent =gethostbyname (hostname); +if (hent) { + ap = hent->h_addr_list; +memset (&sa,0 ,sizeof sa); + sa.sin_family = hent->h_addrtype; + sa.sin_port =htons (0 ); +memcpy (&sa.sin_addr, *ap, hent->h_length); + +inet_ntop (hent->h_addrtype, &sa.sin_addr, + addrbuf,sizeof (addrbuf)); - ap = hent->h_addr_list; -memset (&sa,0 ,sizeof sa); - sa.sin_family = hent->h_addrtype; - sa.sin_port =htons (0 ); -memcpy (&sa.sin_addr, *ap, hent->h_length); - -inet_ntop (hent->h_addrtype, &sa.sin_addr, - addrbuf,sizeof (addrbuf)); - -free (canon_hostname); - canon_hostname =xstrdup (hent->h_name); -free (ip_address); - ip_address =xstrdup (addrbuf); +free (canon_hostname); + canon_hostname =xstrdup (hent->h_name); +free (ip_address); + ip_address =xstrdup (addrbuf); + }#endif } }
Signature · 1 line
2.1.2
PATCH 2/3 daemon: fix error message after bind()
Signed-off-by Rene Scharfe <[email protected]>
--- daemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
daemon.c +1 -1
@@ -924,7 +924,7 @@ static int setup_named_sock(char *listen_addr, int listen_port, struct socketlis }if (bind (sockfd, (struct sockaddr *)&sin,sizeof sin) <0 ) { -logerror ("Could not listen to %s: %s" , +logerror ("Could not bind to %s: %s" ,ip2str (AF_INET , (struct sockaddr *)&sin,sizeof (sin)),strerror (errno));close (sockfd);
Signature · 1 line
2.1.2
PATCH 3/3 daemon: remove write-only variable maxfd
It became unused when 6573faff (NO_IPV6 support for git daemon) replaced select() with poll().
Signed-off-by Rene Scharfe <[email protected]>
--- daemon.c | 4 ---- 1 file changed, 4 deletions(-)
daemon.c +0 -4
@@ -815,7 +815,6 @@ static const char *ip2str(int family, struct sockaddr *sin, socklen_t len)static int setup_named_sock (char *listen_addr,int listen_port,struct socketlist *socklist) {int socknum =0 ; -int maxfd =-1 ;char pbuf[NI_MAXSERV ];struct addrinfo hints, *ai0, *ai;int gai;
@@ -883,9 +882,6 @@ static int setup_named_sock(char *listen_addr, int listen_port, struct socketlisALLOC_GROW (socklist->list, socklist->nr +1 , socklist->alloc); socklist->list[socklist->nr++] = sockfd; socknum++; - -if (maxfd < sockfd) - maxfd = sockfd; }freeaddrinfo (ai0);
Signature · 1 line
2.1.2
All three look trivially correct. Thanks.