]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/util-int.c
ITS#4844 add missing overlays
[openldap] / libraries / libldap / util-int.c
index 4254c5f7337dede5006fe255ff21a45146756cab..6b24d63565db919789a1ef4502ba9e1d33a9fc5d 100644 (file)
@@ -1,25 +1,28 @@
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Portions Copyright 1998 A. Hartgers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
+/* ACKNOWLEDGEMENTS:
+ * This work was initially developed by Bart Hartgers for inclusion in
+ * OpenLDAP Software.
+ */
+
 /*
  * util-int.c  Various functions to replace missing threadsafe ones.
- *                               Without the real *_r funcs, things will
- *                               work, but might not be threadsafe. 
- * 
- * Written by Bart Hartgers.
- *
- * Copyright 1998, A. Hartgers, All rights reserved.
- * This software is not subject to any license of Eindhoven University of
- * Technology, since it was written in my spare time.
- *                     
- * Redistribution and use in source and binary forms are permitted only
- * as authorized by the OpenLDAP Public License.  A copy of this
- * license is available at http://www.OpenLDAP.org/license.html or
- * in file LICENSE in the top-level directory of the distribution.
- */ 
-
+ *                             Without the real *_r funcs, things will
+ *                             work, but might not be threadsafe. 
+ */
 
 #include "portable.h"
 
 extern int h_errno;
 #endif
 
+#ifdef HAVE_HSTRERROR
+# define HSTRERROR(e)  hstrerror(e)
+#else
+# define HSTRERROR(e)  hp_strerror(e)
+#endif
+
 #ifndef LDAP_R_COMPILE
 # undef HAVE_REENTRANT_FUNCTIONS
 # undef HAVE_CTIME_R
@@ -50,9 +59,9 @@ extern int h_errno;
 # include <ldap_pvt_thread.h>
   ldap_pvt_thread_mutex_t ldap_int_resolv_mutex;
 
-#if (defined( HAVE_CTIME_R ) || defined( HAVE_REENTRANT_FUNCTIONS)) \
-       && defined( CTIME_R_NARGS )
-# define USE_CTIME_R
+# if (defined( HAVE_CTIME_R ) || defined( HAVE_REENTRANT_FUNCTIONS)) \
+        && defined( CTIME_R_NARGS )
+#   define USE_CTIME_R
 # else
        static ldap_pvt_thread_mutex_t ldap_int_ctime_mutex;
 # endif
@@ -101,12 +110,14 @@ char *ldap_pvt_ctime( const time_t *tp, char *buf )
 #define BUFSTART (1024-32)
 #define BUFMAX (32*1024-32)
 
+#if defined(LDAP_R_COMPILE)
 static char *safe_realloc( char **buf, int len );
 
-#if !defined(HAVE_GETHOSTBYNAME_R) && defined(LDAP_R_COMPILE)
+#if !(defined(HAVE_GETHOSTBYNAME_R) && defined(HAVE_GETHOSTBYADDR_R))
 static int copy_hostent( struct hostent *res,
        char **buf, struct hostent * src );
 #endif
+#endif
 
 int ldap_pvt_gethostbyname_a(
        const char *name, 
@@ -186,7 +197,7 @@ int ldap_pvt_gethostbyname_a(
 #endif 
 }
 
-#ifndef GETNAMEINFO
+#if !defined( HAVE_GETNAMEINFO ) && !defined( HAVE_HSTRERROR )
 static const char *
 hp_strerror( int err )
 {
@@ -220,7 +231,7 @@ int ldap_pvt_get_hname(
 #if defined( LDAP_R_COMPILE )
        ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex );
 #endif
-       if ( rc ) *err = AC_GAI_STRERROR( rc );
+       if ( rc ) *err = (char *)AC_GAI_STRERROR( rc );
        return rc;
 
 #else /* !HAVE_GETNAMEINFO */
@@ -246,7 +257,7 @@ int ldap_pvt_get_hname(
                alen = sizeof(sin->sin_addr);
        } else {
                rc = NO_RECOVERY;
-               *err = (char *)hp_strerror( rc );
+               *err = (char *)HSTRERROR( rc );
                return rc;
        }
 #if defined( HAVE_GETHOSTBYADDR_R )
@@ -278,7 +289,7 @@ int ldap_pvt_get_hname(
        if (hp) {
                strncpy( name, hp->h_name, namelen );
        } else {
-               *err = (char *)hp_strerror( h_errno );
+               *err = (char *)HSTRERROR( h_errno );
        }
        LDAP_FREE(buf);
 #else /* HAVE_GETHOSTBYADDR_R */
@@ -292,7 +303,7 @@ int ldap_pvt_get_hname(
                rc = 0;
        } else {
                rc = h_errno;
-               *err = (char *)hp_strerror( h_errno );
+               *err = (char *)HSTRERROR( h_errno );
        }
 #if defined( LDAP_R_COMPILE )
        ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex );
@@ -396,6 +407,10 @@ void ldap_int_utils_init( void )
        ldap_pvt_thread_mutex_init( &ldap_int_ctime_mutex );
 #endif
        ldap_pvt_thread_mutex_init( &ldap_int_resolv_mutex );
+
+#ifdef HAVE_CYRUS_SASL
+       ldap_pvt_thread_mutex_init( &ldap_int_sasl_mutex );
+#endif
 #endif
 
        /* call other module init functions here... */
@@ -450,7 +465,7 @@ static int copy_hostent(
        int     n_alias=0;
        int     total_alias_len=0;
        int     n_addr=0;
-       int     total_addr_len;
+       int     total_addr_len=0;
        int     total_len;
          
        /* calculate the size needed for the buffer */
@@ -539,7 +554,8 @@ char * ldap_pvt_get_fqdn( char *name )
        return fqdn;
 }
 
-#if defined( HAVE_GETADDRINFO ) && !defined( HAVE_GAI_STRERROR )
+#if ( defined( HAVE_GETADDRINFO ) || defined( HAVE_GETNAMEINFO ) ) \
+       && !defined( HAVE_GAI_STRERROR )
 char *ldap_pvt_gai_strerror (int code) {
        static struct {
                int code;