diff --git a/src/lib/hostpid.c b/src/lib/hostpid.c index 3e91ade569..5ac00cf879 100644 --- a/src/lib/hostpid.c +++ b/src/lib/hostpid.c @@ -50,20 +50,31 @@ void hostpid_deinit(void) const char *my_hostdomain(void) { - struct hostent *hent; - const char *name; - - if (my_domain == NULL) { - name = getenv(MY_HOSTDOMAIN_ENV); - if (name == NULL) { - hent = gethostbyname(my_hostname); - name = hent != NULL ? hent->h_name : NULL; - if (name == NULL) { - /* failed, use just the hostname */ - name = my_hostname; - } - } - my_domain = i_strdup(name); - } - return my_domain; + const char *name; + struct addrinfo hints, *res; + + if (my_domain != NULL) { + return my_domain; + } + + name = getenv(MY_HOSTDOMAIN_ENV); + if (name != NULL) { + my_domain = i_strdup(name); + return my_domain; + } + + i_zero(&hints); + hints.ai_family = AF_UNSPEC; // IPV4 or IPV6 + hints.ai_socktype = SOCK_STREAM; // TCP + hints.ai_flags = AI_CANONNAME; + + if (getaddrinfo(my_hostname, NULL, &hints, &res) == 0) { + my_domain = i_strdup(res->ai_canonname); + freeaddrinfo(res); + return my_domain; + } + + /* failed, use just the hostname */ + my_domain = i_strdup(my_hostname); + return my_domain; }