]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9287 use getaddrinfo for ldap_pvt_get_fqdn
authorHoward Chu <hyc@openldap.org>
Thu, 16 Jul 2020 20:08:36 +0000 (21:08 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 16 Jul 2020 21:33:53 +0000 (21:33 +0000)
If getaddrinfo is available, should use it here

libraries/libldap/util-int.c

index d962af4d3035c699d27eea5d9d313e1083f0660f..2695ee2b02293f3987f09c32c9006894ba780db9 100644 (file)
@@ -834,10 +834,15 @@ static char *safe_realloc( char **buf, int len )
 
 char * ldap_pvt_get_fqdn( char *name )
 {
-       char *fqdn, *ha_buf;
-       char hostbuf[MAXHOSTNAMELEN+1];
+#ifdef HAVE_GETADDRINFO
+       struct addrinfo hints, *res;
+#else
+       char *ha_buf;
        struct hostent *hp, he_buf;
-       int rc, local_h_errno;
+       int local_h_errno;
+#endif
+       int rc;
+       char *fqdn, hostbuf[MAXHOSTNAMELEN+1];
 
        if( name == NULL ) {
                if( gethostname( hostbuf, MAXHOSTNAMELEN ) == 0 ) {
@@ -848,6 +853,22 @@ char * ldap_pvt_get_fqdn( char *name )
                }
        }
 
+#ifdef HAVE_GETADDRINFO
+       memset( &hints, 0, sizeof( hints ));
+       hints.ai_family = AF_UNSPEC;
+       hints.ai_flags = AI_CANONNAME;
+
+       LDAP_MUTEX_LOCK( &ldap_int_resolv_mutex );
+       rc = getaddrinfo( name, NULL, &hints, &res );
+       LDAP_MUTEX_UNLOCK( &ldap_int_resolv_mutex );
+       if ( rc == 0 && res->ai_canonname ) {
+               fqdn = LDAP_STRDUP( res->ai_canonname );
+       } else {
+               fqdn = LDAP_STRDUP( name );
+       }
+       if ( rc == 0 )
+               freeaddrinfo( res );
+#else
        rc = ldap_pvt_gethostbyname_a( name,
                &he_buf, &ha_buf, &hp, &local_h_errno );
 
@@ -858,6 +879,7 @@ char * ldap_pvt_get_fqdn( char *name )
        }
 
        LDAP_FREE( ha_buf );
+#endif
        return fqdn;
 }