From 22d98c85c3ece96dd2e3d9b76195973d0639cd49 Mon Sep 17 00:00:00 2001
From: Kurt Zeilenga <kurt@openldap.org>
Date: Sat, 22 May 1999 06:11:48 +0000
Subject: [PATCH] ldap.h:  added comments  removed LDAP_MAX_ATTR_LEN  removed
 LDAP_COMPAT* from <ldap.h> but not code.  move LDAP_DEFAULT_REFHOPCOUNT to
 ldap-int.h  added experimental options macros  added LDAP_CONTROL_REFERRALS
 macros libldap:  Replace ld_attrbuffer with per use allocated attributed. 
 ldap_first/next_attribute attributes now must be freed (as per draft). 
 unifdef -DLDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS

---
 include/ldap.h                 | 64 ++++++++++++++++---------
 libraries/libldap/abandon.c    | 12 +----
 libraries/libldap/bind.c       |  2 -
 libraries/libldap/cldap.c      |  2 -
 libraries/libldap/getattr.c    | 23 +++++----
 libraries/libldap/getvalues.c  | 31 ++++++++-----
 libraries/libldap/init.c       |  3 --
 libraries/libldap/kbind.c      |  4 --
 libraries/libldap/ldap-int.h   | 28 +++--------
 libraries/libldap/open.c       | 13 ------
 libraries/libldap/os-ip.c      | 10 ----
 libraries/libldap/references.c | 14 +++++-
 libraries/libldap/request.c    | 48 +++----------------
 libraries/libldap/result.c     | 85 +---------------------------------
 libraries/libldap/test.c       | 12 ++---
 libraries/libldap/unbind.c     | 13 ------
 libraries/libldap/url.c        | 12 -----
 servers/slapd/bind.c           |  3 +-
 servers/slapd/connection.c     |  2 +
 servers/slapd/slap.h           |  2 +-
 20 files changed, 109 insertions(+), 274 deletions(-)

diff --git a/include/ldap.h b/include/ldap.h
index f1d4c7d792..cbda15c325 100644
--- a/include/ldap.h
+++ b/include/ldap.h
@@ -69,13 +69,12 @@ LDAP_BEGIN_DECL
 #define LDAP_NO_ATTRS				"1.1"
 #define LDAP_ALL_USER_ATTRIBUTES	"*"
 
-#define LDAP_COMPAT20
-#define LDAP_COMPAT30
-#if defined(LDAP_COMPAT20) || defined(LDAP_COMPAT30)
-#define LDAP_COMPAT
-#endif
-
-/* LDAP_OPTions defined by draft-ldapext-ldap-c-api-02 */
+/*
+ * LDAP_OPTions defined by draft-ldapext-ldap-c-api-02
+ * 0x0000 - 0x0fff reserved for api options
+ * 0x1000 - 0x3fff reserved for api extended options
+ * 0x4000 - 0x7fff reserved for private and experimental options
+ */
 #define LDAP_OPT_API_INFO			0x0000
 #define LDAP_OPT_DESC				0x0001
 #define LDAP_OPT_DEREF				0x0002
@@ -96,12 +95,17 @@ LDAP_BEGIN_DECL
 #define	LDAP_OPT_ERROR_NUMBER		0x0031
 #define LDAP_OPT_ERROR_STRING		0x0032
 
-/* not defined by current draft */
-/*	for LDAPv2 compatibility */
-#define LDAP_OPT_DNS				0x1001	/* use DN & DNS */
+/* 0x33 - 0x0fff not defined by current draft */
+
+/* extended options - none */
+
+/* private and experimental options */
+#define LDAP_OPT_DNS				0x4001	/* use DN & DNS */
 
 /* OpenLDAP specific options */
-#define LDAP_OPT_DEBUG_LEVEL		0x4001	/* OpenLDAP - debug level */
+#define LDAP_OPT_DEBUG_LEVEL		0x5001	/* debug level */
+#define LDAP_OPT_TIMEOUT			0x5002	/* default timeout */
+#define LDAP_OPT_REFHOPLIMIT		0x5003	/* ref hop limit */
 
 /* on/off values */
 #define LDAP_OPT_ON		((void *) 1)
@@ -120,7 +124,7 @@ typedef struct ldapapiinfo {
 	int		ldapai_vendor_version;		/* supplier-specific version * 100 */
 } LDAPAPIInfo;
 
-#define LDAP_FEATURE_INFO_VERSION 1 /* version of api feature structure */
+#define LDAP_FEATURE_INFO_VERSION (1) /* version of api feature structure */
 typedef struct ldap_apifeature_info {
 	int		ldapaif_info_version; /* version of this struct (1) */
 	char*	ldapaif_name;    /* matches LDAP_API_FEATURE_... less the prefix */
@@ -133,7 +137,15 @@ typedef struct ldapcontrol {
 	char			ldctl_iscritical;
 } LDAPControl, *PLDAPControl;
 
-#define LDAP_MAX_ATTR_LEN	100
+/* LDAP "Standard" Controls */
+#define LDAP_CONTROL_REFERRALS	"1.2.840.113666.1.4.616"
+#define LDAP_CHASE_SUBORDINATE_REFERRALS	0x0020
+#define LDAP_CHASE_EXTERNAL_REFERRALS	0x0040
+
+/* LDAP "Extension" Controls */
+
+/* LDAP "Private/Experiemental" Controls */
+
 
 /* 
  * specific LDAP instantiations of BER types we know about
@@ -350,7 +362,7 @@ typedef struct ldapmod {
 #define LDAP_IS_LEAF			0x23 /* not LDAPv3 */
 #define LDAP_ALIAS_DEREF_PROBLEM	0x24
 
-#define LDAP_NAME_ERROR(n)	(((n) & 0x00f0) == 0x0020)
+#define LDAP_NAME_ERROR(n)	(((int)(n) & 0x00f0) == 0x0020)
 
 #define LDAP_INAPPROPRIATE_AUTH		0x30
 #define LDAP_INVALID_CREDENTIALS	0x31
@@ -389,9 +401,6 @@ typedef struct ldapmod {
 #define LDAP_CLIENT_LOOP				0x60	/* new */
 #define LDAP_REFERRAL_LIMIT_EXCEEDED	0x61	/* new */
 
-/* default limit on nesting of referrals */
-#define LDAP_DEFAULT_REFHOPLIMIT	5
-
 /*
  * This structure represents both ldap messages and ldap responses.
  * These are really the same, except in the case of search responses,
@@ -477,11 +486,14 @@ typedef struct ldap_url_desc {
 } LDAPURLDesc;
 
 #define LDAP_URL_ERR_NOTLDAP	0x01	/* URL doesn't begin with "ldap://" */
-#define LDAP_URL_ERR_NODN	0x02	/* URL has no DN (required) */
+#define LDAP_URL_ERR_NODN		0x02	/* URL has no DN (required) */
 #define LDAP_URL_ERR_BADSCOPE	0x03	/* URL scope string is invalid */
-#define LDAP_URL_ERR_MEM	0x04	/* can't allocate memory space */
+#define LDAP_URL_ERR_MEM		0x04	/* can't allocate memory space */
 
-/* avoid pulling in headers */
+/*
+ * The API draft spec says we should declare (or cause to be declared)
+ * 'struct timeval'.   We don't.  See LDAPext discussions.
+ */
 struct timeval;
 
 /*
@@ -791,11 +803,17 @@ ldap_delete_s LDAP_P((
  * in error.c:
  */
 LDAP_F( int )
-ldap_result2error LDAP_P(( LDAP *ld, LDAPMessage *r, int freeit ));
+ldap_result2error LDAP_P((	/* deprecated */
+	LDAP *ld,
+	LDAPMessage *r,
+	int freeit ));
+
 LDAP_F( char *)
-ldap_err2string LDAP_P(( int err ));
+ldap_err2string LDAP_P((
+	int err ));
+
 LDAP_F( void )
-ldap_perror LDAP_P((
+ldap_perror LDAP_P((	/* deprecated */
 	LDAP *ld,
 	LDAP_CONST char *s ));
 
diff --git a/libraries/libldap/abandon.c b/libraries/libldap/abandon.c
index b2b2b83009..b9d666eb44 100644
--- a/libraries/libldap/abandon.c
+++ b/libraries/libldap/abandon.c
@@ -86,9 +86,7 @@ do_abandon(
 	BerElement	*ber;
 	int		i, err, sendabandon;
 	Sockbuf		*sb;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPRequest	*lr;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	/*
 	 * An abandon request looks like this:
@@ -100,7 +98,6 @@ do_abandon(
 
 	sendabandon = 1;
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	/* find the request that we are abandoning */
 	for ( lr = ld->ld_requests; lr != NULL; lr = lr->lr_next ) {
 		if ( lr->lr_msgid == msgid ) {	/* this message */
@@ -123,7 +120,6 @@ do_abandon(
 			sendabandon = 0;
 		}
 	}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	if ( ldap_msgdelete( ld, msgid ) == 0 ) {
 		ld->ld_errno = LDAP_SUCCESS;
@@ -178,12 +174,9 @@ do_abandon(
 
 			} else {
 				/* send the message */
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 				if ( lr != NULL ) {
 					sb = lr->lr_conn->lconn_sb;
-				} else
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-				{
+				} else {
 					sb = &ld->ld_sb;
 				}
 
@@ -197,7 +190,6 @@ do_abandon(
 		}
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	if ( lr != NULL ) {
 		if ( sendabandon ) {
 			ldap_free_connection( ld, lr->lr_conn, 0, 1 );
@@ -206,8 +198,6 @@ do_abandon(
 			ldap_free_request( ld, lr );
 		}
 	}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-
 
 	if ( ld->ld_abandoned == NULL ) {
 		if ( (ld->ld_abandoned = (int *) malloc( 2 * sizeof(int) ))
diff --git a/libraries/libldap/bind.c b/libraries/libldap/bind.c
index 2ef983f649..336c229f0f 100644
--- a/libraries/libldap/bind.c
+++ b/libraries/libldap/bind.c
@@ -117,11 +117,9 @@ ldap_bind_s(
 }
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 void
 ldap_set_rebind_proc( LDAP *ld, int (*rebindproc)( LDAP *ld, char **dnp,
 	char **passwdp, int *authmethodp, int freeit ))
 {
 	ld->ld_rebindproc = rebindproc;
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
diff --git a/libraries/libldap/cldap.c b/libraries/libldap/cldap.c
index 145633e921..def3e8b6df 100644
--- a/libraries/libldap/cldap.c
+++ b/libraries/libldap/cldap.c
@@ -156,9 +156,7 @@ cldap_open( char *host, int port )
     }
 
     if ( ld->ld_cldapaddrs == NULL
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	    || ( ld->ld_defconn = ldap_new_connection( ld, NULL, 1,0,0 )) == NULL
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	    ) {
 	ldap_ld_free( ld, 0 );
 	DO_RETURN( NULL );
diff --git a/libraries/libldap/getattr.c b/libraries/libldap/getattr.c
index 8e655da12e..3155b45d3e 100644
--- a/libraries/libldap/getattr.c
+++ b/libraries/libldap/getattr.c
@@ -24,7 +24,11 @@
 char *
 ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
 {
-	long	len;
+	char *attr;
+
+	assert( ld != NULL );
+	assert( entry != NULL );
+	assert( ber != NULL );
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_first_attribute\n", 0, 0, 0 );
 
@@ -41,8 +45,7 @@ ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
 	 * positioned right before the next attribute type/value sequence.
 	 */
 
-	len = LDAP_MAX_ATTR_LEN;
-	if ( ber_scanf( *ber, "{x{{sx}", ld->ld_attrbuffer, &len )
+	if ( ber_scanf( *ber, "{x{{ax}", &attr )
 	    == LBER_ERROR ) {
 		ld->ld_errno = LDAP_DECODING_ERROR;
 		ber_free( *ber, 0 );
@@ -50,25 +53,27 @@ ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
 		return( NULL );
 	}
 
-	return( ld->ld_attrbuffer );
+	return( attr );
 }
 
 /* ARGSUSED */
 char *
 ldap_next_attribute( LDAP *ld, LDAPMessage *entry, BerElement *ber )
 {
-	long	len;
+	char *attr;
+
+	assert( ld != NULL );
+	assert( entry != NULL );
+	assert( ber != NULL );
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_next_attribute\n", 0, 0, 0 );
 
 	/* skip sequence, snarf attribute type, skip values */
-	len = LDAP_MAX_ATTR_LEN;
-	if ( ber_scanf( ber, "{sx}", ld->ld_attrbuffer, &len ) 
+	if ( ber_scanf( ber, "{ax}", &attr ) 
 	    == LBER_ERROR ) {
 		ld->ld_errno = LDAP_DECODING_ERROR;
-		/* ber_free( ber, 0 ); *//* don't free the BerElement */
 		return( NULL );
 	}
 
-	return( ld->ld_attrbuffer );
+	return( attr );
 }
diff --git a/libraries/libldap/getvalues.c b/libraries/libldap/getvalues.c
index f593e045be..865688e535 100644
--- a/libraries/libldap/getvalues.c
+++ b/libraries/libldap/getvalues.c
@@ -25,9 +25,8 @@ char **
 ldap_get_values( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 {
 	BerElement	ber;
-	char		attr[LDAP_MAX_ATTR_LEN];
+	char		*attr;
 	int		found = 0;
-	long		len;
 	char		**vals;
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_get_values\n", 0, 0, 0 );
@@ -35,8 +34,7 @@ ldap_get_values( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 	ber = *entry->lm_ber;
 
 	/* skip sequence, dn, sequence of, and snag the first attr */
-	len = sizeof(attr);
-	if ( ber_scanf( &ber, "{x{{s", attr, &len ) == LBER_ERROR ) {
+	if ( ber_scanf( &ber, "{x{{a", &attr ) == LBER_ERROR ) {
 		ld->ld_errno = LDAP_DECODING_ERROR;
 		return( NULL );
 	}
@@ -46,16 +44,22 @@ ldap_get_values( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 
 	/* break out on success, return out on error */
 	while ( ! found ) {
-		len = sizeof(attr);
-		if ( ber_scanf( &ber, "x}{s", attr, &len ) == LBER_ERROR ) {
+		free(attr);
+		attr = NULL;
+
+		if ( ber_scanf( &ber, "x}{a", &attr ) == LBER_ERROR ) {
 			ld->ld_errno = LDAP_DECODING_ERROR;
 			return( NULL );
 		}
 
 		if ( strcasecmp( target, attr ) == 0 )
 			break;
+
 	}
 
+	free(attr);
+	attr = NULL;
+
 	/* 
 	 * if we get this far, we've found the attribute and are sitting
 	 * just before the set of values.
@@ -73,9 +77,8 @@ struct berval **
 ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 {
 	BerElement	ber;
-	char		attr[LDAP_MAX_ATTR_LEN];
+	char		*attr;
 	int		found = 0;
-	long		len;
 	struct berval	**vals;
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_get_values_len\n", 0, 0, 0 );
@@ -83,8 +86,7 @@ ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 	ber = *entry->lm_ber;
 
 	/* skip sequence, dn, sequence of, and snag the first attr */
-	len = sizeof(attr);
-	if ( ber_scanf( &ber, "{x{{s", attr, &len ) == LBER_ERROR ) {
+	if ( ber_scanf( &ber, "{x{{a", &attr ) == LBER_ERROR ) {
 		ld->ld_errno = LDAP_DECODING_ERROR;
 		return( NULL );
 	}
@@ -94,8 +96,10 @@ ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 
 	/* break out on success, return out on error */
 	while ( ! found ) {
-		len = sizeof(attr);
-		if ( ber_scanf( &ber, "x}{s", attr, &len ) == LBER_ERROR ) {
+		free( attr );
+		attr = NULL;
+
+		if ( ber_scanf( &ber, "x}{a", &attr ) == LBER_ERROR ) {
 			ld->ld_errno = LDAP_DECODING_ERROR;
 			return( NULL );
 		}
@@ -104,6 +108,9 @@ ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 			break;
 	}
 
+	free( attr );
+	attr = NULL;
+
 	/* 
 	 * if we get this far, we've found the attribute and are sitting
 	 * just before the set of values.
diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c
index 7a71af3488..0317d26a48 100644
--- a/libraries/libldap/init.c
+++ b/libraries/libldap/init.c
@@ -306,10 +306,7 @@ void openldap_ldap_initialize( void )
 
 	LDAP_BOOL_ZERO(&gopts);
 
-#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) || \
-	LDAP_VERSION_MAX > LDAP_VERSION2
 	LDAP_BOOL_SET(&gopts, LDAP_BOOL_REFERRALS);
-#endif
 
 	openldap_ldap_initialized = 1;
 
diff --git a/libraries/libldap/kbind.c b/libraries/libldap/kbind.c
index 68f8db3ee3..5ab59d8463 100644
--- a/libraries/libldap/kbind.c
+++ b/libraries/libldap/kbind.c
@@ -262,11 +262,7 @@ ldap_get_kerberosv4_credentials(
 		return( NULL );
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	krbinstance = ld->ld_defconn->lconn_krbinstance;
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-	krbinstance = ld->ld_host;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	if ( (err = krb_mk_req( &ktxt, service, krbinstance, realm, 0 ))
 	    != KSUCCESS ) {
diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h
index b13507df30..3e236a80d2 100644
--- a/libraries/libldap/ldap-int.h
+++ b/libraries/libldap/ldap-int.h
@@ -37,16 +37,17 @@ LDAP_BEGIN_DECL
 #define LDAP_URL_URLCOLON_LEN	4
 #define NULLLDAPURLDESC ((LDAPURLDesc *)NULL)
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 #define LDAP_REF_STR		"Referral:\n"
 #define LDAP_REF_STR_LEN	10
 #define LDAP_LDAP_REF_STR	LDAP_URL_PREFIX
 #define LDAP_LDAP_REF_STR_LEN	LDAP_URL_PREFIX_LEN
+
+#define LDAP_DEFAULT_REFHOPLIMIT 5
+
 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
 #define LDAP_DX_REF_STR		"dx://"
 #define LDAP_DX_REF_STR_LEN	5
 #endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 #define LDAP_BOOL_REFERRALS		0
 #define LDAP_BOOL_RESTART		1
@@ -102,7 +103,6 @@ struct ldapoptions {
 	LDAP_BOOLEANS ldo_booleans;	/* boolean options */
 };
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 /*
  * structure for tracking LDAP server host, ports, DNs, etc.
  */
@@ -156,7 +156,6 @@ typedef struct ldapreq {
 	struct ldapreq	*lr_prev;	/* previous request */
 	struct ldapreq	*lr_next;	/* next request */
 } LDAPRequest;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 /*
  * structure for client cache
@@ -220,35 +219,27 @@ struct ldap {
 	int		ld_msgid;
 
 	/* do not mess with these */
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPRequest	*ld_requests;	/* list of outstanding requests */
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-	LDAPMessage	*ld_requests;	/* list of outstanding requests */
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	LDAPMessage	*ld_responses;	/* list of outstanding responses */
+
 	int		*ld_abandoned;	/* array of abandoned requests */
-	char		ld_attrbuffer[LDAP_MAX_ATTR_LEN];
+
 	LDAPCache	*ld_cache;	/* non-null if cache is initialized */
 	/* stuff used by connectionless searches. */
    	char		*ld_cldapdn;	/* DN used in connectionless search */
 	int		ld_cldapnaddr; /* number of addresses */
    	void		**ld_cldapaddrs;/* addresses to send request to */
-#ifndef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS	
-	/* BerElement that this connection is receiving. */
-	BerElement	ld_ber;
-#endif	
+
 	/* do not mess with the rest though */
 	BERTranslateProc ld_lber_encode_translate_proc;
 	BERTranslateProc ld_lber_decode_translate_proc;
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPConn	*ld_defconn;	/* default connection */
 	LDAPConn	*ld_conns;	/* list of server connections */
 	void		*ld_selectinfo;	/* platform specifics for select */
 	int		(*ld_rebindproc)( struct ldap *ld, char **dnp,
 				char **passwdp, int *authmethodp, int freeit );
 				/* routine to get info needed for re-bind */
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 };
 
 /*
@@ -326,7 +317,6 @@ void ldap_close_connection( Sockbuf *sb );
 char *ldap_host_connected_to( Sockbuf *sb );
 #endif /* HAVE_KERBEROS */
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 int do_ldap_select( LDAP *ld, struct timeval *timeout );
 void *ldap_new_select_info( void );
 void ldap_free_select_info( void *sip );
@@ -335,7 +325,6 @@ void ldap_mark_select_read( LDAP *ld, Sockbuf *sb );
 void ldap_mark_select_clear( LDAP *ld, Sockbuf *sb );
 int ldap_is_read_ready( LDAP *ld, Sockbuf *sb );
 int ldap_is_write_ready( LDAP *ld, Sockbuf *sb );
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 
 /*
@@ -346,8 +335,6 @@ int ldap_send_initial_request( LDAP *ld, unsigned long msgtype,
 BerElement *ldap_alloc_ber_with_options( LDAP *ld );
 void ldap_set_ber_options( LDAP *ld, BerElement *ber );
 
-#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) \
-	|| defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS )
 int ldap_send_server_request( LDAP *ld, BerElement *ber, int msgid,
 	LDAPRequest *parentreq, LDAPServer *srvlist, LDAPConn *lc,
 	int bind );
@@ -358,12 +345,9 @@ void ldap_free_request( LDAP *ld, LDAPRequest *lr );
 void ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind );
 void ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all );
 void ldap_dump_requests_and_responses( LDAP *ld );
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS || LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 int ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp );
 int ldap_append_referral( LDAP *ld, char **referralsp, char *s );
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 /*
  * in result.c:
diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c
index e9fbba2ed5..5149af1df6 100644
--- a/libraries/libldap/open.c
+++ b/libraries/libldap/open.c
@@ -39,9 +39,7 @@ LDAP *
 ldap_open( LDAP_CONST char *host, int port )
 {
 	LDAP		*ld;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPServer	*srv;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_open\n", 0, 0, 0 );
 
@@ -49,7 +47,6 @@ ldap_open( LDAP_CONST char *host, int port )
 		return( NULL );
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	if (( srv = (LDAPServer *)calloc( 1, sizeof( LDAPServer ))) ==
 	    NULL || ( ld->ld_defhost != NULL && ( srv->lsrv_host =
 	    strdup( ld->ld_defhost )) == NULL )) {
@@ -67,14 +64,6 @@ ldap_open( LDAP_CONST char *host, int port )
 	}
 	++ld->ld_defconn->lconn_refcnt;	/* so it never gets closed/freed */
 
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-	if ( open_ldap_connection( ld, &ld->ld_sb, ld->ld_defhost,
-	    ld->ld_defport, &ld->ld_host, 0 ) < 0 ) {
-		ldap_ld_free( ld, 0, NULL, NULL );
-		return( NULL );
-	}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-
 	Debug( LDAP_DEBUG_TRACE, "ldap_open successful, ld_host is %s\n",
 		( ld->ld_host == NULL ) ? "(null)" : ld->ld_host, 0, 0 );
 
@@ -173,7 +162,6 @@ ldap_init( LDAP_CONST char *defhost, int defport )
 			openldap_ldap_global_options.ldo_defbase);
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	if (( ld->ld_selectinfo = ldap_new_select_info()) == NULL ) {
 		free( (char*) ld->ld_options.ldo_defhost );
 		if ( ld->ld_options.ldo_defbase == NULL ) {
@@ -183,7 +171,6 @@ ldap_init( LDAP_CONST char *defhost, int defport )
 	    WSACleanup( );
 		return( NULL );
 	}
-#endif
 
 	if(defport != 0) {
 		ld->ld_defport = defport;
diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c
index e30fcb5a82..e46ff5eb84 100644
--- a/libraries/libldap/os-ip.c
+++ b/libraries/libldap/os-ip.c
@@ -48,9 +48,7 @@ ldap_connect_to_host( Sockbuf *sb, const char *host, unsigned long address,
 	struct sockaddr_in	sin;
 	struct hostent		*hp = NULL;
 #ifdef notyet
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	ioctl_t			status;	/* for ioctl call */
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 #endif /* notyet */
    
    	/* buffers for ldap_pvt_gethostbyname_a */
@@ -89,13 +87,11 @@ ldap_connect_to_host( Sockbuf *sb, const char *host, unsigned long address,
 			DO_RETURN( -1 );
 		}
 #ifdef notyet
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		status = 1;
 		if ( async && ioctl( s, FIONBIO, (caddr_t)&status ) == -1 ) {
 			Debug( LDAP_DEBUG_ANY, "FIONBIO ioctl failed on %d\n",
 			    s, 0, 0 );
 		}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 #endif /* notyet */
 		(void)memset( (char *)&sin, 0, sizeof( struct sockaddr_in ));
 		sin.sin_family = AF_INET;
@@ -114,7 +110,6 @@ ldap_connect_to_host( Sockbuf *sb, const char *host, unsigned long address,
 		        errno = WSAGetLastError();
 #endif
 #ifdef notyet
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 #ifdef EAGAIN
 			if ( errno == EINPROGRESS || errno == EAGAIN ) {
 #else /* EAGAIN */
@@ -125,7 +120,6 @@ ldap_connect_to_host( Sockbuf *sb, const char *host, unsigned long address,
 				rc = -2;
 				break;
 			}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 #endif /* notyet */
 
 #ifdef LDAP_DEBUG		
@@ -145,13 +139,11 @@ ldap_connect_to_host( Sockbuf *sb, const char *host, unsigned long address,
 	if ( connected ) {
 	   
 #ifdef notyet
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		status = 0;
 		if ( !async && ioctl( s, FIONBIO, (caddr_t)&on ) == -1 ) {
 			Debug( LDAP_DEBUG_ANY, "FIONBIO ioctl failed on %d\n",
 			    s, 0, 0 );
 		}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 #endif /* notyet */
 
 		Debug( LDAP_DEBUG_TRACE, "sd %d connected to: %s\n",
@@ -216,7 +208,6 @@ ldap_host_connected_to( Sockbuf *sb )
 #endif /* HAVE_KERBEROS || HAVE_TLS */
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 /* for UNIX */
 struct selectinfo {
 	fd_set	si_readfds;
@@ -339,4 +330,3 @@ do_ldap_select( LDAP *ld, struct timeval *timeout )
 	return( select( tblsize, &sip->si_use_readfds, &sip->si_use_writefds,
 	    NULL, timeout ));
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
diff --git a/libraries/libldap/references.c b/libraries/libldap/references.c
index 176a72c9ec..dfb901535f 100644
--- a/libraries/libldap/references.c
+++ b/libraries/libldap/references.c
@@ -22,6 +22,9 @@
 LDAPMessage *
 ldap_first_reference( LDAP *ld, LDAPMessage *chain )
 {
+	assert( ld != NULL );
+	assert( chain !=  NULL );
+
 	if ( ld == NULL || chain == NULLMSG ) {
 		return NULLMSG;
 	}
@@ -31,10 +34,12 @@ ldap_first_reference( LDAP *ld, LDAPMessage *chain )
 		: ldap_next_reference( ld, chain );
 }
 
-/* ARGSUSED */
 LDAPMessage *
 ldap_next_reference( LDAP *ld, LDAPMessage *ref )
 {
+	assert( ld != NULL );
+	assert( ref !=  NULL );
+
 	if ( ld == NULL || ref == NULLMSG ) {
 		return NULLMSG;
 	}
@@ -52,12 +57,14 @@ ldap_next_reference( LDAP *ld, LDAPMessage *ref )
 	return( NULLMSG );
 }
 
-/* ARGSUSED */
 int
 ldap_count_references( LDAP *ld, LDAPMessage *chain )
 {
 	int	i;
 
+	assert( ld != NULL );
+	assert( chain !=  NULL );
+
 	if ( ld == NULL ) {
 		return -1;
 	}
@@ -83,6 +90,9 @@ ldap_parse_reference(
 	char **refs = NULL;
 	int rc;
 
+	assert( ld != NULL );
+	assert( ref !=  NULL );
+
 	if( ld == NULL || ref == NULL ||
 		ref->lm_msgtype != LDAP_RES_SEARCH_REFERENCE )
 	{
diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c
index 24c9d21850..7699c01236 100644
--- a/libraries/libldap/request.c
+++ b/libraries/libldap/request.c
@@ -23,21 +23,16 @@
 #include "ldap-int.h"
 #include "lber.h"
 
-#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) || defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS )
 static LDAPConn *find_connection LDAP_P(( LDAP *ld, LDAPServer *srv, int any ));
 static void use_connection LDAP_P(( LDAP *ld, LDAPConn *lc ));
 static void free_servers LDAP_P(( LDAPServer *srvlist ));
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS || LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
-
 
 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
 static LDAPServer *dn2servers LDAP_P(( LDAP *ld, char *dn ));
 #endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 static BerElement *re_encode_request LDAP_P(( LDAP *ld, BerElement *origber,
     int msgid, char **dnp ));
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 
 BerElement *
@@ -78,16 +73,13 @@ ldap_send_initial_request(
 	const char *dn,
 	BerElement *ber )
 {
-#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) || defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS )
 	LDAPServer	*servers, *srv;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS || LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
 	Debug( LDAP_DEBUG_TRACE, "ldap_send_initial_request\n", 0, 0, 0 );
 
 	if ( ! ber_pvt_sb_in_use(&ld->ld_sb ) ) {
 		/* not connected yet */
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		if (( srv = (LDAPServer *)calloc( 1, sizeof( LDAPServer ))) ==
 		    NULL || ( ld->ld_defhost != NULL && ( srv->lsrv_host =
 		    strdup( ld->ld_defhost )) == NULL ))
@@ -111,34 +103,12 @@ ldap_send_initial_request(
 		}
 		++ld->ld_defconn->lconn_refcnt;	/* so it never gets closed/freed */
 
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-		if ( open_ldap_connection( ld, &ld->ld_sb, ld->ld_defhost,
-		    ld->ld_defport, &ld->ld_host, 0 ) < 0 )
-		{
-			ldap_ld_free( ld, 0 );
-			ber_free( ber, 1 );
-			ld->ld_errno = LDAP_SERVER_DOWN;
-			return( -1 );
-		}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-
 		Debug( LDAP_DEBUG_TRACE,
 			"ldap_delayed_open successful, ld_host is %s\n",
 			( ld->ld_host == NULL ) ? "(null)" : ld->ld_host, 0, 0 );
 	}
 
 
-#if !defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) && !defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS )
-
-	if ( ber_flush( &ld->ld_sb, ber, 1 ) != 0 ) {
-		ld->ld_errno = LDAP_SERVER_DOWN;
-		return( -1 );
-	}
-
-	ld->ld_errno = LDAP_SUCCESS;
-	return( ld->ld_msgid );
-#else /* !LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS && !LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
-
 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
 	if (( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_DNS ) == LDAP_OPT_ON )
 		&& ldap_is_dns_dn( dn ) )
@@ -162,25 +132,22 @@ ldap_send_initial_request(
 			}
 		}
 #endif /* LDAP_DEBUG */
-	} else {
+	} else
 #endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
+	{
 		/*
 		 * use of DNS is turned off or this is an X.500 DN...
 		 * use our default connection
 		 */
 		servers = NULL;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
 	}	
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
 	return( ldap_send_server_request( ld, ber, ld->ld_msgid, NULL, servers,
 	    NULL, 0 ));
-#endif /* !LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS && !LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 }
 
 
 
-#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) || defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS )
 int
 ldap_send_server_request( LDAP *ld, BerElement *ber, int msgid, LDAPRequest
 	*parentreq, LDAPServer *srvlist, LDAPConn *lc, int bind )
@@ -615,10 +582,8 @@ free_servers( LDAPServer *srvlist )
 	srvlist = nextsrv;
     }
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS || LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 /*
  * XXX merging of errors in this routine needs to be improved
  */
@@ -828,7 +793,7 @@ re_encode_request( LDAP *ld, BerElement *origber, int msgid, char **dnp )
 	 * all LDAP requests are sequences that start with a message id,
 	 * followed by a sequence that is tagged with the operation code
 	 */
-	if ( ber_scanf( &tmpber, "{i", &along ) != LDAP_TAG_MSGID ||
+	if ( ber_scanf( &tmpber, "{i", /*}*/ &along ) != LDAP_TAG_MSGID ||
 	    ( tag = ber_skip_tag( &tmpber, &along )) == LBER_DEFAULT ) {
                 ld->ld_errno = LDAP_DECODING_ERROR;
 		return( NULL );
@@ -859,9 +824,9 @@ re_encode_request( LDAP *ld, BerElement *origber, int msgid, char **dnp )
 	}
 
 	if ( tag == LDAP_REQ_BIND ) {
-		rc = ber_printf( ber, "{it{is", msgid, tag, ver, *dnp );
+		rc = ber_printf( ber, "{it{is" /*}}*/, msgid, tag, ver, *dnp );
 	} else {
-		rc = ber_printf( ber, "{it{s", msgid, tag, *dnp );
+		rc = ber_printf( ber, "{it{s" /*}}*/, msgid, tag, *dnp );
 	}
 
 	if ( rc == -1 ) {
@@ -871,7 +836,7 @@ re_encode_request( LDAP *ld, BerElement *origber, int msgid, char **dnp )
 
 	if ( ber_write( ber, tmpber.ber_ptr, ( tmpber.ber_end -
 	    tmpber.ber_ptr ), 0 ) != ( tmpber.ber_end - tmpber.ber_ptr ) ||
-	    ber_printf( ber, "}}" ) == -1 ) {
+	    ber_printf( ber, /*{{*/ "}}" ) == -1 ) {
 		ld->ld_errno = LDAP_ENCODING_ERROR;
 		ber_free( ber, 1 );
 		return( NULL );
@@ -902,7 +867,6 @@ ldap_find_request_by_msgid( LDAP *ld, int msgid )
 
 	return( lr );
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 
 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c
index 48fdcc2c22..11d5e594f3 100644
--- a/libraries/libldap/result.c
+++ b/libraries/libldap/result.c
@@ -27,18 +27,10 @@ static int ldap_abandoned LDAP_P(( LDAP *ld, int msgid ));
 static int ldap_mark_abandoned LDAP_P(( LDAP *ld, int msgid ));
 static int wait4msg LDAP_P(( LDAP *ld, int msgid, int all, struct timeval *timeout,
 	LDAPMessage **result ));
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 static int try_read1msg LDAP_P(( LDAP *ld, int msgid, int all, Sockbuf *sb, LDAPConn *lc,
 	LDAPMessage **result ));
 static unsigned long build_result_ber LDAP_P(( LDAP *ld, BerElement *ber, LDAPRequest *lr ));
 static void merge_error_info LDAP_P(( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr ));
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-static int try_read1msg LDAP_P(( LDAP *ld, int msgid, int all, Sockbuf *sb,
-	LDAPMessage **result ));
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-#if defined( LDAP_CONNECTIONLESS ) || !defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS )
-static int ldap_select1 LDAP_P(( LDAP *ld, struct timeval *timeout ));
-#endif
 
 
 /*
@@ -152,9 +144,7 @@ wait4msg( LDAP *ld, int msgid, int all, struct timeval *timeout,
 	struct timeval	tv, *tvp;
 	time_t		start_time = 0;
 	time_t		tmp_time;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPConn	*lc, *nextlc;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	assert( ld != NULL );
 	assert( result != NULL );
@@ -179,27 +169,6 @@ wait4msg( LDAP *ld, int msgid, int all, struct timeval *timeout,
 		    
 	rc = -2;
 	while ( rc == -2 ) {
-#ifndef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
-		/* hack attack */
-		if ( ! ber_pvt_sb_data_ready(&ld->ld_sb) ) {
-			rc = ldap_select1( ld, tvp );
-
-			if ( rc == 0 || ( rc == -1 && (
-				( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART)
-					== LDAP_OPT_OFF )
-			    || errno != EINTR ))) {
-				ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN :
-				    LDAP_TIMEOUT);
-				return( rc );
-			}
-
-		}
-		if ( rc == -1 ) {
-			rc = -2;	/* select interrupted: loop */
-		} else {
-			rc = try_read1msg( ld, msgid, all, &ld->ld_sb, result );
-		}
-#else /* !LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 #ifdef LDAP_DEBUG
 		if ( ldap_debug & LDAP_DEBUG_TRACE ) {
 			ldap_dump_connection( ld, ld->ld_conns, 1 );
@@ -253,7 +222,6 @@ wait4msg( LDAP *ld, int msgid, int all, struct timeval *timeout,
 				}
 			}
 		}
-#endif /* !LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 		if ( rc == -2 && tvp != NULL ) {
 			tmp_time = time( NULL );
@@ -275,17 +243,13 @@ wait4msg( LDAP *ld, int msgid, int all, struct timeval *timeout,
 
 static int
 try_read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
-    LDAPConn *lc,
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-    LDAPMessage **result )
+    LDAPConn *lc, LDAPMessage **result )
 {
 	BerElement	*ber;
 	LDAPMessage	*new, *l, *prev, *tmp;
 	long		id;
 	unsigned long	tag, len;
 	int		foundit = 0;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPRequest	*lr;
 	BerElement	tmpber;
 	int		rc, refer_cnt, hadref, simple_request;
@@ -296,18 +260,13 @@ try_read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
 	
 	ber = &lc->lconn_ber;
 
-#else
-	assert( ld != NULL );
-
-	ber = &ld->ld_ber;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-
 	Debug( LDAP_DEBUG_TRACE, "read1msg\n", 0, 0, 0 );
 
 #if 0
 	ber_init_w_nullc( &ber, 0 );
 	ldap_set_ber_options( ld, &ber );
 #endif
+
 	/* get the next message */
 	if ( (tag = ber_get_next( sb, &len, ber ))
 	    != LDAP_TAG_MESSAGE ) {
@@ -341,7 +300,6 @@ try_read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
 		return( -2 );	/* continue looking */
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	if (( lr = ldap_find_request_by_msgid( ld, id )) == NULL ) {
 		Debug( LDAP_DEBUG_ANY,
 		    "no request for response with msgid %ld (tossing)\n",
@@ -354,7 +312,6 @@ try_read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
 		( tag == LDAP_RES_SEARCH_REFERENCE ) ? "reference" : "result",
 		id, lr->lr_origid );
 	id = lr->lr_origid;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	/* the message type */
 	if ( (tag = ber_peek_tag( ber, &len )) == LBER_ERROR ) {
@@ -362,7 +319,6 @@ try_read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb,
 		return( -1 );
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	refer_cnt = 0;
 	hadref = simple_request = 0;
 	rc = -2;	/* default is to keep looking (no response found) */
@@ -459,7 +415,6 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
 		return( rc );
 	}
 
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	/* make a new ldap message */
 	if ( (new = (LDAPMessage *) calloc( 1, sizeof(LDAPMessage) ))
 	    == NULL ) {
@@ -552,7 +507,6 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
 }
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 static unsigned long
 build_result_ber( LDAP *ld, BerElement *ber, LDAPRequest *lr )
 {
@@ -617,42 +571,7 @@ merge_error_info( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr )
 	    parentr->lr_res_error : "", parentr->lr_res_matched ?
 	    parentr->lr_res_matched : "" );
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-
-
-
-#if defined( LDAP_CONNECTIONLESS ) || !defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS )
-
-static int
-ldap_select1( LDAP *ld, struct timeval *timeout )
-{
-	fd_set		readfds;
-	static int	tblsize;
-
-	assert( ld != NULL );
-
-	if ( tblsize == 0 ) {
-#ifdef HAVE_SYSCONF
-		tblsize = sysconf( _SC_OPEN_MAX );
-#elif HAVE_GETDTABLESIZE
-		tblsize = getdtablesize();
-#else
-		tblsize = FD_SETSIZE;
-#endif
-#ifdef FD_SETSIZE
-		if ( tblsize > FD_SETSIZE ) {
-			tblsize = FD_SETSIZE;
-		}
-#endif	/* FD_SETSIZE */
-	}
-
-	FD_ZERO( &readfds );
-	FD_SET( ber_pvt_sb_get_desc(&ld->ld_sb), &readfds );
-
-	return( select( tblsize, &readfds, 0, 0, timeout ) );
-}
 
-#endif /* !LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 
 int
diff --git a/libraries/libldap/test.c b/libraries/libldap/test.c
index 66a69b8643..c36bb26877 100644
--- a/libraries/libldap/test.c
+++ b/libraries/libldap/test.c
@@ -226,7 +226,6 @@ get_modlist( char *prompt1, char *prompt2, char *prompt3 )
 }
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 static int
 bind_prompt( LDAP *ld, char **dnp, char **passwdp, int *authmethodp,
 	int freeit )
@@ -261,7 +260,6 @@ bind_prompt( LDAP *ld, char **dnp, char **passwdp, int *authmethodp,
 
 	return( LDAP_SUCCESS );
 }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 
 int
@@ -545,12 +543,10 @@ main( int argc, char **argv )
 			if ( cldapflg )
 				cldap_close( ld );
 #endif /* LDAP_CONNECTIONLESS */
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
-			if ( !cldapflg )
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-			if ( !cldapflg && bound )
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
+
+			if ( !cldapflg ) {
 				ldap_unbind( ld );
+			}
 			exit( 0 );
 			break;
 
@@ -792,7 +788,6 @@ main( int argc, char **argv )
 			}
 #endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 			getline( line, sizeof(line), stdin,
 				"Recognize and chase referrals (0=no, 1=yes)?" );
 			if ( atoi( line ) != 0 ) {
@@ -803,7 +798,6 @@ main( int argc, char **argv )
 					ldap_set_rebind_proc( ld, bind_prompt );
 				}
 			}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 			break;
 
 		case 'O':	/* set cache options */
diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c
index c9f14ec34a..0d89a59200 100644
--- a/libraries/libldap/unbind.c
+++ b/libraries/libldap/unbind.c
@@ -47,12 +47,9 @@ ldap_ld_free(
 {
 	LDAPMessage	*lm, *next;
 	int		err = LDAP_SUCCESS;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPRequest	*lr, *nextlr;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	if ( ld->ld_cldapnaddr == 0 ) {
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		/* free LDAP structure and outstanding requests/responses */
 		for ( lr = ld->ld_requests; lr != NULL; lr = nextlr ) {
 			nextlr = lr->lr_next;
@@ -63,12 +60,6 @@ ldap_ld_free(
 		while ( ld->ld_conns != NULL ) {
 			ldap_free_connection( ld, ld->ld_conns, 1, close );
 		}
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-		if ( close ) {
-			err = ldap_send_unbind( ld, &ld->ld_sb, sctrls, cctrls );
-			ldap_close_connection( &ld->ld_sb );
-		}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	} else {
 		int	i;
 
@@ -120,14 +111,10 @@ ldap_ld_free(
 		ld->ld_abandoned = NULL;
 	}
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	if ( ld->ld_selectinfo != NULL ) {
 		ldap_free_select_info( ld->ld_selectinfo );
 		ld->ld_selectinfo = NULL;
 	}
-#else
-	ber_clear( &(ld->ld_ber), 1 );
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	if ( ld->ld_options.ldo_defbase != NULL ) {
 		free( ld->ld_options.ldo_defbase );
diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c
index 0b19b5adb1..ed6f8a889e 100644
--- a/libraries/libldap/url.c
+++ b/libraries/libldap/url.c
@@ -255,9 +255,7 @@ ldap_url_search( LDAP *ld, LDAP_CONST char *url, int attrsonly )
 	int		err;
 	LDAPURLDesc	*ludp;
 	BerElement	*ber;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 	LDAPServer	*srv = NULL;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 
 	if ( ldap_url_parse( url, &ludp ) != 0 ) {
 		ld->ld_errno = LDAP_PARAM_ERROR;
@@ -275,7 +273,6 @@ ldap_url_search( LDAP *ld, LDAP_CONST char *url, int attrsonly )
 	err = 0;
 
 	if ( ludp->lud_host != NULL || ludp->lud_port != 0 ) {
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		if (( srv = (LDAPServer *)calloc( 1, sizeof( LDAPServer )))
 		    == NULL || ( srv->lsrv_host = strdup( ludp->lud_host ==
 		    NULL ? ld->ld_defhost : ludp->lud_host )) == NULL ) {
@@ -291,22 +288,13 @@ ldap_url_search( LDAP *ld, LDAP_CONST char *url, int attrsonly )
 				srv->lsrv_port = ludp->lud_port;
 			}
 		}
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-		ld->ld_errno = LDAP_LOCAL_ERROR;
-		err = -1;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	}
 
 	if ( err != 0 ) {
 		ber_free( ber, 1 );
 	} else {
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
 		err = ldap_send_server_request( ld, ber, ld->ld_msgid, NULL, srv,
 		    NULL, 1 );
-#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
-		err = ldap_send_initial_request( ld, LDAP_REQ_SEARCH,
-		    ludp->lud_dn, ber );
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */
 	}
 
 	ldap_free_urldesc( ludp );
diff --git a/servers/slapd/bind.c b/servers/slapd/bind.c
index 480e11d71d..8207166e73 100644
--- a/servers/slapd/bind.c
+++ b/servers/slapd/bind.c
@@ -64,7 +64,7 @@ do_bind(
 	tber = ber_dup( op->o_ber );
 	ttag = ber_skip_tag( tber, &tlen );
 	if ( ber_peek_tag( tber, &tlen ) == LBER_SEQUENCE ) {
-		Debug( LDAP_DEBUG_ANY, "bind: version 3.0 detected\n", 0, 0, 0 );
+		Debug( LDAP_DEBUG_ANY, "bind: u-mich v3.0 detected\n", 0, 0, 0 );
 		conn->c_version = 30;
 		rc = ber_scanf(ber, "{{iato}}", &version, &cdn, &method, &cred);
 	} else {
@@ -83,6 +83,7 @@ do_bind(
 		    "decoding error" );
 		return;
 	}
+
 #ifdef LDAP_COMPAT30
 	if ( conn->c_version == 30 ) {
 		switch ( method ) {
diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c
index 2f6759d481..1ef66a06e1 100644
--- a/servers/slapd/connection.c
+++ b/servers/slapd/connection.c
@@ -328,7 +328,9 @@ connection_destroy( Connection *c )
     c->c_struct_state = SLAP_C_UNUSED;
     c->c_conn_state = SLAP_C_INVALID;
 
+#ifdef LDAP_COMPAT30
     c->c_version = 0;
+#endif
     c->c_protocol = 0;
 
     c->c_starttime = 0;
diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h
index 5b231775b1..10cd62fabc 100644
--- a/servers/slapd/slap.h
+++ b/servers/slapd/slap.h
@@ -432,7 +432,7 @@ typedef struct slap_conn {
 	int		c_protocol;	/* version of the LDAP protocol used by client */
 	int		c_authtype;	/* auth method used to bind c_dn  */
 #ifdef LDAP_COMPAT
-	int		c_version;	/* for compatibility w/2.0, 3.0	  */
+	int		c_version;	/* for compatibility w/ U-Mich 2.0 & 3.0 */
 #endif
 
 	Operation	*c_ops;			/* list of operations being processed */
-- 
GitLab