Parse listenaddr for hostnames
authorWouter Verhelst <w@uter.be>
Sat, 27 Feb 2010 21:29:50 +0000 (22:29 +0100)
committerWouter Verhelst <w@uter.be>
Sat, 27 Feb 2010 21:29:50 +0000 (22:29 +0100)
Previously, a listen address had to be specified by IP address;
hostnames where not supported. This patch should fix that. It is useful
for those who wish to use something like 'listenaddr = localhost',
though using the IP address is really recommended for most other
situations.

nbd-server.c

index 2df14fc..122d2fe 100644 (file)
@@ -1502,6 +1502,7 @@ void setup_serve(SERVER *serve) {
 #else
        char yes='1';
 #endif /* sun */
+       struct hostent* he;
 
        af = AF_INET;
 #ifdef WITH_SDP
@@ -1536,8 +1537,9 @@ void setup_serve(SERVER *serve) {
        }
 #endif
        addrin.sin_port = htons(serve->port);
-       if(!inet_aton(serve->listenaddr, &(addrin.sin_addr)))
+       if(!(he = gethostbyname(serve->listenaddr)))
                err("could not parse listen address");
+        addrin.sin_addr = he->h_addr_list[0];
        if (bind(serve->socket, (struct sockaddr *) &addrin, addrinlen) < 0)
                err("bind: %m");
        DEBUG("listen, ");