) {
 #ifdef SLAPD_RLOOKUPS
                                if ( use_reverse_lookup ) {
+                                       struct hostent he;
+                                       int herr;
+                                       char *ha = NULL;
+                                       hp = NULL;
 #  ifdef LDAP_PF_INET6
                                        if ( from.sa_addr.sa_family == AF_INET6 )
-                                               hp = gethostbyaddr(
+                                               ldap_pvt_gethostbyaddr_a(
                                                        (char *)&(from.sa_in6_addr.sin6_addr),
                                                        sizeof(from.sa_in6_addr.sin6_addr),
-                                                       AF_INET6 );
+                                                       AF_INET6, &he, &ha,
+                                                       &hp, &herr );
                                        else
 #  endif /* LDAP_PF_INET6 */
-                                       hp = gethostbyaddr(
+                                       ldap_pvt_gethostbyaddr_a(
                                                (char *) &(from.sa_in_addr.sin_addr),
                                                sizeof(from.sa_in_addr.sin_addr),
-                                               AF_INET );
+                                               AF_INET, &he, &ha, &hp, &herr );
                                        dnsname = hp ? ldap_pvt_str2lower( hp->h_name ) : NULL;
+                                       if (ha) ldap_memfree( ha );
                                }
 #else
                                dnsname = NULL;