Date: Sat, 21 Aug 2010 17:15:37 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r211576 - projects/sv/usr.sbin/netdumpsrv Message-ID: <201008211715.o7LHFb8b075894@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Sat Aug 21 17:15:37 2010 New Revision: 211576 URL: http://svn.freebsd.org/changeset/base/211576 Log: Replace the use of the old gethostbyname() with getnameinfo(). Modified: projects/sv/usr.sbin/netdumpsrv/netdump_server.c Modified: projects/sv/usr.sbin/netdumpsrv/netdump_server.c ============================================================================== --- projects/sv/usr.sbin/netdumpsrv/netdump_server.c Sat Aug 21 16:47:41 2010 (r211575) +++ projects/sv/usr.sbin/netdumpsrv/netdump_server.c Sat Aug 21 17:15:37 2010 (r211576) @@ -74,7 +74,7 @@ struct netdump_client SLIST_ENTRY(netdump_client) iter; char infofilename[MAXPATHLEN]; char corefilename[MAXPATHLEN]; - char hostname[MAXHOSTNAMELEN]; + char hostname[NI_MAXHOST]; struct in_addr ip; FILE *infofile; int corefd; @@ -93,7 +93,7 @@ struct in_addr bindip; struct pidfh *pfh; int sock; -static struct netdump_client *alloc_client(struct in_addr *ip); +static struct netdump_client *alloc_client(struct sockaddr_in *sip); static void eventloop(void); static void exec_handler(struct netdump_client *client, const char *reason); @@ -119,14 +119,15 @@ static void send_ack(struct netdump_cl static void signal_shutdown(int sig); static void timeout_clients(void); -static struct netdump_client *alloc_client(struct in_addr *ip) +static struct netdump_client *alloc_client(struct sockaddr_in *sip) { struct sockaddr_in saddr; struct netdump_client *client; - struct hostent *hp; - int i, fd, bufsz; + struct in_addr *ip; + char *firstdot; + int i, ecode, fd, bufsz; - assert(ip != NULL); + assert(sip != NULL); client = calloc(1, sizeof(*client)); if (!client) @@ -134,27 +135,25 @@ static struct netdump_client *alloc_clie LOGERR_PERROR("calloc()"); return NULL; } + ip = &sip->sin_addr; bcopy(ip, &client->ip, sizeof(*ip)); client->corefd = -1; client->sock = -1; client->last_msg = now; - /* XXX: To be replaced by getnameinfo(). Get the hostname */ - if ((hp = gethostbyaddr((const char *)ip, sizeof(*ip), AF_INET)) == NULL || - !hp->h_name || strlen(hp->h_name) == 0) - { -#if 0 - /* Can't resolve; use IP */ - addr2ascii(AF_INET, ip, sizeof(*ip), client->hostname); -#endif - } - else - { - char *firstdot; - - /* Grab the hostname */ - strncpy(client->hostname, hp->h_name, MAXHOSTNAMELEN); - hp->h_name[MAXHOSTNAMELEN-1]='\0'; + ecode = getnameinfo((struct sockaddr *)sip, sip->sin_len, client->hostname, + sizeof(client->hostname), NULL, 0, NI_NAMEREQD); + if (ecode != 0) { + + /* Can't resolve, try with a numeric IP. */ + ecode = getnameinfo((struct sockaddr *)sip, sip->sin_len, + client->hostname, sizeof(client->hostname), NULL, 0, 0); + if (ecode != 0) { + LOGERR("getnameinfo(): %s\n", gai_strerror(ecode)); + free(client); + return NULL; + } + } else { /* Strip off the domain name */ firstdot = strchr(client->hostname, '.'); @@ -408,7 +407,7 @@ static void handle_herald(struct sockadd handle_timeout(client); } - client = alloc_client(&from->sin_addr); + client = alloc_client(from); if (!client) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008211715.o7LHFb8b075894>