]> git.sur5r.net Git - openldap/commitdiff
Must use reentrant gethostbyaddr for reverse lookups. Other threads may
authorHoward Chu <hyc@openldap.org>
Wed, 11 Dec 2002 16:36:36 +0000 (16:36 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 11 Dec 2002 16:36:36 +0000 (16:36 +0000)
be doing lookups too (e.g., SASL/GSSAPI)

servers/slapd/daemon.c

index 94c002d14240d51068e6e6624f9ebc4234d55f39..68d845b8f0d0482ab9859ef643384c618d2d6e3a 100644 (file)
@@ -1612,19 +1612,25 @@ slapd_daemon_task(
                        ) {
 #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;