X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/13f84dd50ca5754391dbd3296a5c7425f9363600..55669aa463e2ce09a1873831bba729d2a29d2188:/sbr/mts.c diff --git a/sbr/mts.c b/sbr/mts.c index cc5ff8e3..de7518c0 100644 --- a/sbr/mts.c +++ b/sbr/mts.c @@ -287,8 +287,7 @@ char * LocalName (void) { static char buffer[BUFSIZ] = ""; - struct hostent *hp; - + struct addrinfo hints, *res; #ifdef HAVE_UNAME struct utsname name; #endif @@ -303,20 +302,24 @@ LocalName (void) if (*localname) { strncpy (buffer, localname, sizeof(buffer)); } else { + memset(buffer, 0, sizeof(buffer)); #ifdef HAVE_UNAME /* first get our local name */ uname (&name); - strncpy (buffer, name.nodename, sizeof(buffer)); + strncpy (buffer, name.nodename, sizeof(buffer) - 1); #else /* first get our local name */ - gethostname (buffer, sizeof(buffer)); + gethostname (buffer, sizeof(buffer) - 1); #endif -#ifdef HAVE_SETHOSTENT - sethostent (1); -#endif /* now fully qualify our name */ - if ((hp = gethostbyname (buffer))) - strncpy (buffer, hp->h_name, sizeof(buffer)); + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + hints.ai_family = PF_UNSPEC; + if (getaddrinfo(buffer, NULL, &hints, &res) == 0) { + strncpy(buffer, res->ai_canonname, sizeof(buffer) - 1); + freeaddrinfo(res); + } } /*