From 702109706b76fea49bde29d6351b2aaa4ee0e7fa Mon Sep 17 00:00:00 2001
From: Kurt Zeilenga <kurt@openldap.org>
Date: Mon, 26 Oct 1998 01:18:41 +0000
Subject: [PATCH] update ldap/lber headers towards ldapext-ldap-c-api-01

---
 clients/tools/ldapdelete.c      |   7 +-
 clients/tools/ldapmodify.c      |   6 +-
 clients/tools/ldapmodrdn.c      |   8 +-
 clients/tools/ldapsearch.c      |   8 +-
 include/lber.h                  |  65 ++++--------
 include/ldap.h                  | 174 ++++++++++++--------------------
 include/ldap_log.h              |  66 ++++++++++++
 libraries/liblber/bprint.c      |   2 +-
 libraries/liblber/decode.c      |   2 +-
 libraries/liblber/encode.c      |   2 +-
 libraries/liblber/io.c          |   2 +-
 libraries/liblber/lber-int.h    |  72 +++++++++++++
 libraries/liblber/liblber.dsp   |   4 +
 libraries/libldap/abandon.c     |   2 -
 libraries/libldap/add.c         |   2 -
 libraries/libldap/addentry.c    |   3 +-
 libraries/libldap/bind.c        |   3 +-
 libraries/libldap/cache.c       |   2 -
 libraries/libldap/charset.c     |   2 -
 libraries/libldap/cldap.c       |   2 -
 libraries/libldap/compare.c     |   2 -
 libraries/libldap/delete.c      |   2 -
 libraries/libldap/disptmpl.c    |   3 +-
 libraries/libldap/dsparse.c     |   3 +-
 libraries/libldap/error.c       |   3 +-
 libraries/libldap/free.c        |   3 +-
 libraries/libldap/friendly.c    |   3 +-
 libraries/libldap/getattr.c     |   2 -
 libraries/libldap/getdn.c       |   3 +-
 libraries/libldap/getdxbyname.c |   2 -
 libraries/libldap/getentry.c    |   3 +-
 libraries/libldap/getfilter.c   |   3 +-
 libraries/libldap/getvalues.c   |   3 +-
 libraries/libldap/kbind.c       |   3 -
 libraries/libldap/ldap-int.h    |  76 +++++++++++++-
 libraries/libldap/libldap.dsp   |  20 ++++
 libraries/libldap/modify.c      |   2 -
 libraries/libldap/modrdn.c      |   2 -
 libraries/libldap/open.c        |   2 -
 libraries/libldap/os-ip.c       |   2 -
 libraries/libldap/request.c     |   2 -
 libraries/libldap/result.c      |   2 -
 libraries/libldap/sbind.c       |   2 -
 libraries/libldap/search.c      |   2 -
 libraries/libldap/sort.c        |   3 +-
 libraries/libldap/srchpref.c    |   3 +-
 libraries/libldap/ufn.c         |   4 +-
 libraries/libldap/unbind.c      |   2 -
 libraries/libldap/url.c         |   2 -
 libraries/libldif/libldif.dsp   |   4 +
 libraries/libldif/line64.c      |   4 +-
 51 files changed, 363 insertions(+), 243 deletions(-)
 create mode 100644 include/ldap_log.h
 create mode 100644 libraries/liblber/lber-int.h

diff --git a/clients/tools/ldapdelete.c b/clients/tools/ldapdelete.c
index 36a325c850..1cebe171d4 100644
--- a/clients/tools/ldapdelete.c
+++ b/clients/tools/ldapdelete.c
@@ -6,8 +6,8 @@
 #include <stdlib.h>
 #include <ctype.h>
 
-#include <ac/socket.h>
 #include <ac/string.h>
+#include <ac/unistd.h>
 
 #include <lber.h>
 #include <ldap.h>
@@ -107,7 +107,10 @@ main( argc, argv )
 	exit( 1 );
     }
 
-    ld->ld_deref = LDAP_DEREF_NEVER;	/* prudent, but probably unnecessary */
+#if LDAP_VERSION > LDAP_VERSION2
+	/* this seems prudent */
+	ldap_set_option( LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
+#endif
 
     if ( !kerberos ) {
 	authmethod = LDAP_AUTH_SIMPLE;
diff --git a/clients/tools/ldapmodify.c b/clients/tools/ldapmodify.c
index 9734ab674e..fcceca8461 100644
--- a/clients/tools/ldapmodify.c
+++ b/clients/tools/ldapmodify.c
@@ -7,7 +7,6 @@
 #include <ctype.h>
 
 #include <ac/string.h>
-#include <ac/socket.h>
 #include <ac/unistd.h>
 
 #include <sys/stat.h>
@@ -169,7 +168,10 @@ main( int argc, char **argv )
 	    exit( 1 );
 	}
 
-	ld->ld_deref = LDAP_DEREF_NEVER;	/* this seems prudent */
+#if LDAP_VERSION > LDAP_VERSION2
+	/* this seems prudent */
+	ldap_set_option( LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
+#endif
 
 	if ( !kerberos ) {
 	    authmethod = LDAP_AUTH_SIMPLE;
diff --git a/clients/tools/ldapmodrdn.c b/clients/tools/ldapmodrdn.c
index 8eae7ff01f..d2450103b9 100644
--- a/clients/tools/ldapmodrdn.c
+++ b/clients/tools/ldapmodrdn.c
@@ -1,6 +1,5 @@
 /* ldapmodrdn.c - generic program to modify an entry's RDN using LDAP */
 
-#define DISABLE_BRIDGE
 #include "portable.h"
 
 #include <stdio.h>
@@ -8,7 +7,7 @@
 #include <ctype.h>
 
 #include <ac/string.h>
-#include <ac/time.h>
+#include <ac/unistd.h>
 
 #include <lber.h>
 #include <ldap.h>
@@ -132,7 +131,10 @@ main( argc, argv )
 	exit( 1 );
     }
 
-    ld->ld_deref = LDAP_DEREF_NEVER;	/* this seems prudent */
+#if LDAP_VERSION > LDAP_VERSION2
+	/* this seems prudent */
+	ldap_set_option( LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
+#endif
 
     if ( !kerberos ) {
 	authmethod = LDAP_AUTH_SIMPLE;
diff --git a/clients/tools/ldapsearch.c b/clients/tools/ldapsearch.c
index 97ad7568b8..314af0e3ec 100644
--- a/clients/tools/ldapsearch.c
+++ b/clients/tools/ldapsearch.c
@@ -1,17 +1,21 @@
 #include "portable.h"
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 
-#include <ac/socket.h>
 #include <ac/string.h>
-#include <ac/time.h>
 #include <ac/unistd.h>
 
 #include <lber.h>
 #include <ldap.h>
 #include <ldif.h>
 
+#if LDAP_VERSION == LDAP_VERSION2
+/* until we implement ldap_set_options() */
+#include "../libraries/libldap/ldap-int.h"
+#endif
+
 #include "ldapconfig.h"
 
 #define DEFSEP		"="
diff --git a/include/lber.h b/include/lber.h
index 6f7c165e37..d003873135 100644
--- a/include/lber.h
+++ b/include/lber.h
@@ -40,6 +40,7 @@ LDAP_BEGIN_DECL
  */
 #define LBER_ERROR		0xffffffffL
 #define LBER_DEFAULT		0xffffffffL
+#define LBER_END_SEQORSET	0xfffffffeL
 
 /* general BER types we know about */
 #define LBER_BOOLEAN		0x01L
@@ -54,62 +55,34 @@ LDAP_BEGIN_DECL
 #define OLD_LBER_SEQUENCE	0x10L	/* w/o constructed bit - broken */
 #define OLD_LBER_SET		0x11L	/* w/o constructed bit - broken */
 
+/* get/set options for BerElement */
+#define LBER_SOCKBUF_OPT_TO_FILE				0x01
+#define LBER_SOCKBUF_OPT_TO_FILE_ONLY			0x02
+#define	LBER_SOCKBUF_OPT_TO_MAX_INCOMING_SIZE	0x04
+#define LBER_SOCKBUF_OPT_TO_NO_READ_AHEAD		0x08
+#define LBER_SOCKBUF_OPT_TO_DESC				0x10
+#define	LBER_SOCKBUF_OPT_TO_COPYDESC			0x20
+#define LBER_SOCKBUF_OPT_TO_READFN				0x40
+#define LBER_SOCKBUF_OPT_TO_WRITE_FN			0x80
+
+/* LBER on/off values */
+#define LBER_OPT_ON ((void *) 1)
+#define LBER_OPT_OFF ((void *) 0)
+
 typedef int (*BERTranslateProc) LDAP_P(( char **bufp,
 	unsigned long *buflenp,
 	int free_input ));
 
-typedef struct berelement {
-	char		*ber_buf;
-	char		*ber_ptr;
-	char		*ber_end;
-	struct seqorset	*ber_sos;
-	unsigned long	ber_tag;
-	unsigned long	ber_len;
-	int		ber_usertag;
-	char		ber_options;
 #define LBER_USE_DER		0x01
 #define LBER_USE_INDEFINITE_LEN	0x02
 #define LBER_TRANSLATE_STRINGS	0x04
-	char		*ber_rwptr;
-	BERTranslateProc ber_encode_translate_proc;
-	BERTranslateProc ber_decode_translate_proc;
-} BerElement;
+
+typedef struct berelement BerElement;
 #define NULLBER	((BerElement *) 0)
 
-typedef struct sockbuf {
-#ifndef MACOS
-	int		sb_sd;
-#else /* MACOS */
-	void		*sb_sd;
-#endif /* MACOS */
-	BerElement	sb_ber;
-
-	int		sb_naddr;	/* > 0 implies using CLDAP (UDP) */
-	void		*sb_useaddr;	/* pointer to sockaddr to use next */
-	void		*sb_fromaddr;	/* pointer to message source sockaddr */
-	void		**sb_addrs;	/* actually an array of pointers to
-						sockaddrs */
-
-	int		sb_options;	/* to support copying ber elements */
-#define LBER_TO_FILE		0x01	/* to a file referenced by sb_fd   */
-#define LBER_TO_FILE_ONLY	0x02	/* only write to file, not network */
-#define LBER_MAX_INCOMING_SIZE	0x04	/* impose limit on incoming stuff  */
-#define LBER_NO_READ_AHEAD	0x08	/* read only as much as requested  */
-	int		sb_fd;
-	long		sb_max_incoming;
-} Sockbuf;
+typedef struct sockbuf Sockbuf;
 #define READBUFSIZ	8192
 
-typedef struct seqorset {
-	BerElement	*sos_ber;
-	unsigned long	sos_clen;
-	unsigned long	sos_tag;
-	char		*sos_first;
-	char		*sos_ptr;
-	struct seqorset	*sos_next;
-} Seqorset;
-#define NULLSEQORSET	((Seqorset *) 0)
-
 /* structure for returning a sequence of octet strings + length */
 struct berval {
 	unsigned long	bv_len;
@@ -167,7 +140,7 @@ LDAP_F int ber_start_set LDAP_P(( BerElement *ber, unsigned long tag ));
 LDAP_F int ber_put_seq LDAP_P(( BerElement *ber ));
 LDAP_F int ber_put_set LDAP_P(( BerElement *ber ));
 LDAP_F int ber_printf LDAP_P(( BerElement *ber, char *fmt, ... ));
-
+LDAP_F int ber_fatten LDAP_P(( BerElement *ber, struct berval **bvPtr));
 /*
  * in io.c:
  */
diff --git a/include/ldap.h b/include/ldap.h
index 0f90b1d508..a82b7fa51d 100644
--- a/include/ldap.h
+++ b/include/ldap.h
@@ -21,7 +21,8 @@ LDAP_BEGIN_DECL
 #define LDAP_VERSION1	1
 #define LDAP_VERSION2	2
 #define LDAP_VERSION3	3
-#define LDAP_VERSION	LDAP_VERSION2
+#define LDAP_VERSION		LDAP_VERSION2
+#define LDAP_VERSION_MAX	LDAP_VERSION2
 
 #define LDAP_COMPAT20
 #define LDAP_COMPAT30
@@ -29,52 +30,54 @@ LDAP_BEGIN_DECL
 #define LDAP_COMPAT
 #endif
 
+#define LDAP_OPT_API_INFO			0x00
+#define LDAP_OPT_DESC				0x01
+#define LDAP_OPT_DEREF				0x02
+#define LDAP_OPT_SIZELIMIT			0x03
+#define LDAP_OPT_TIMELIMIT			0x04
+#define LDAP_OPT_REFERRALS			0x08
+#define LDAP_OPT_RESTART			0x09
+#define LDAP_OPT_PROTOCOL_VERSION	0x11
+#define LDAP_OPT_SERVER_CONTROLS	0x12
+#define LDAP_OPT_CLIENT_CONTROLS	0x13
+#define LDAP_OPT_HOST_NAME			0x30
+#define	LDAP_OPT_ERROR_NUMBER		0x31
+#define LDAP_OPT_ERROR_STRING		0x32
+
+/* for LDAPv2 compatibility */
+#define LDAP_OPT_DNS				0x40	/* use DN & DNS */
+
+/* on/off values */
+#define LDAP_OPT_ON		((void *) 1)
+#define LDAP_OPT_OFF	((void *)) 0)
+
+#define LDAP_OPT_SUCCESS	0
+#define	LDAP_OPT_ERROR		(-1)
+
+LDAP_F int ldap_get_option LDAP_P((LDAP *ld, int option, void *outvalue));
+LDAP_F int ldap_set_option LDAP_P((LDAP *ld, int option, void *invalue));
+
+typedef struct ldapapiinfo {
+	int		ldapai_info_version;		/* version of LDAPAPIInfo (1) */
+	int		ldapai_api_version;			/* revision of API supported */
+	int		ldapai_protocol_version;	/* highest LDAP version supported */
+	char	**ldapai_extensions;		/* names of API extensions */
+	char	*ldapi_vendor_name;			/* name of supplier */
+	int		ldapai_vendor_version;		/* supplier-specific version times 100 */
+} LDAPAPIInfo;
+
+typedef struct ldapcontrol {
+	char			*ldctl_oid;
+	struct berval	ldctl_value;
+	char			ldctl_iscritical;
+} LDAPControl, *PLDAPControl;
+
+LDAP_F void ldap_control_free LDAP_P(( LDAPControl *ctrl ));
+LDAP_F void ldap_controls_free LDAP_P(( LDAPControl **ctrls ));
+
+  
 #define LDAP_MAX_ATTR_LEN	100
 
-/* debugging stuff */
-#ifdef LDAP_DEBUG
-extern int	ldap_debug;
-#ifdef LDAP_SYSLOG
-extern int	ldap_syslog;
-extern int	ldap_syslog_level;
-#endif /* LDAP_SYSLOG */
-
-#define LDAP_DEBUG_TRACE	0x001
-#define LDAP_DEBUG_PACKETS	0x002
-#define LDAP_DEBUG_ARGS		0x004
-#define LDAP_DEBUG_CONNS	0x008
-#define LDAP_DEBUG_BER		0x010
-#define LDAP_DEBUG_FILTER	0x020
-#define LDAP_DEBUG_CONFIG	0x040
-#define LDAP_DEBUG_ACL		0x080
-#define LDAP_DEBUG_STATS	0x100
-#define LDAP_DEBUG_STATS2	0x200
-#define LDAP_DEBUG_SHELL	0x400
-#define LDAP_DEBUG_PARSE	0x800
-#define LDAP_DEBUG_ANY		0xffff
-
-/* this doesn't below as part of ldap.h */
-#ifdef LDAP_SYSLOG
-#define Debug( level, fmt, arg1, arg2, arg3 )	\
-	{ \
-		if ( ldap_debug & (level) ) \
-			fprintf( stderr, (fmt), (arg1), (arg2), (arg3) ); \
-		if ( ldap_syslog & level ) \
-			syslog( ldap_syslog_level, (fmt), (arg1), (arg2), (arg3) ); \
-	}
-#else /* LDAP_SYSLOG */
-#ifndef WINSOCK
-#define Debug( level, fmt, arg1, arg2, arg3 ) \
-		if ( ldap_debug & (level) ) \
-			fprintf( stderr, (fmt), (arg1), (arg2), (arg3) );
-#else /* !WINSOCK */
-extern void Debug( int level, char* fmt, ... );
-#endif /* !WINSOCK */
-#endif /* LDAP_SYSLOG */
-#else /* LDAP_DEBUG */
-#define Debug( level, fmt, arg1, arg2, arg3 )
-#endif /* LDAP_DEBUG */
-
 /* 
  * specific LDAP instantiations of BER types we know about
  */
@@ -228,6 +231,11 @@ typedef struct ldapmod {
 #define LDAP_STRONG_AUTH_NOT_SUPPORTED	0x07
 #define LDAP_STRONG_AUTH_REQUIRED	0x08
 #define LDAP_PARTIAL_RESULTS		0x09
+#define	LDAP_REFERRAL		0x0a /* LDAPv3 */
+#define LDAP_ADMINLIMIT_EXCEEDED	0x0b /* LDAPv3 */
+#define	LDAP_UNAVAILABLE_CRITICIAL_EXTENSION	0x0c /* LDAPv3 */
+#define LDAP_CONFIDENTIALITY_REQUIRED	0x0d /* LDAPv3 */
+#define	LDAP_SASL_BIND_IN_PROGRESS	0x0e /* LDAPv3 */	
 
 #define LDAP_NO_SUCH_ATTRIBUTE		0x10
 #define LDAP_UNDEFINED_TYPE		0x11
@@ -239,7 +247,7 @@ typedef struct ldapmod {
 #define LDAP_NO_SUCH_OBJECT		0x20
 #define LDAP_ALIAS_PROBLEM		0x21
 #define LDAP_INVALID_DN_SYNTAX		0x22
-#define LDAP_IS_LEAF			0x23
+#define LDAP_IS_LEAF			0x23 /* not LDAPv3 */
 #define LDAP_ALIAS_DEREF_PROBLEM	0x24
 
 #define NAME_ERROR(n)	((n & 0xf0) == 0x20)
@@ -258,7 +266,8 @@ typedef struct ldapmod {
 #define LDAP_NOT_ALLOWED_ON_RDN		0x43
 #define LDAP_ALREADY_EXISTS		0x44
 #define LDAP_NO_OBJECT_CLASS_MODS	0x45
-#define LDAP_RESULTS_TOO_LARGE		0x46
+#define LDAP_RESULTS_TOO_LARGE		0x46 /* CLDAP */
+#define LDAP_AFFECTS_MULTIPLE_DSAS	0x47 /* LDAPv3 */
 
 #define LDAP_OTHER			0x50
 #define LDAP_SERVER_DOWN		0x51
@@ -282,14 +291,7 @@ typedef struct ldapmod {
  * where a response has multiple messages.
  */
 
-typedef struct ldapmsg {
-	int		lm_msgid;	/* the message id */
-	int		lm_msgtype;	/* the message type */
-	BerElement	*lm_ber;	/* the ber encoded message contents */
-	struct ldapmsg	*lm_chain;	/* for search - next msg in the resp */
-	struct ldapmsg	*lm_next;	/* next response */
-	unsigned int	lm_time;	/* used to maintain cache */
-} LDAPMessage;
+typedef struct ldapmsg LDAPMessage;
 #define NULLMSG	((LDAPMessage *) NULL)
 
 
@@ -406,64 +408,14 @@ typedef struct ldap_filt_desc {
  * structure representing an ldap connection
  */
 
-typedef struct ldap {
-	Sockbuf		ld_sb;		/* socket descriptor & buffer */
-	char		*ld_host;
-	int		ld_version;
-	char		ld_lberoptions;
-	int		ld_deref;
-#define LDAP_DEREF_NEVER	0
-#define LDAP_DEREF_SEARCHING	1
-#define LDAP_DEREF_FINDING	2
-#define LDAP_DEREF_ALWAYS	3
-
-	int		ld_timelimit;
-	int		ld_sizelimit;
-#define LDAP_NO_LIMIT		0
+typedef struct ldap LDAP;
 
-	LDAPFiltDesc	*ld_filtd;	/* from getfilter for ufn searches */
-	char		*ld_ufnprefix;	/* for incomplete ufn's */
+#define LDAP_DEREF_NEVER	0x00
+#define LDAP_DEREF_SEARCHING	0x01
+#define LDAP_DEREF_FINDING	0x02
+#define LDAP_DEREF_ALWAYS	0x03
 
-	int		ld_errno;
-	char		*ld_error;
-	char		*ld_matched;
-	int		ld_msgid;
-
-	/* do not mess with these */
-#ifdef LDAP_REFERRALS
-	LDAPRequest	*ld_requests;	/* list of outstanding requests */
-#else /* LDAP_REFERRALS */
-	LDAPMessage	*ld_requests;	/* list of outstanding requests */
-#endif /* LDAP_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 */
-	char		*ld_cldapdn;	/* DN used in connectionless search */
-
-	/* it is OK to change these next four values directly */
-	int		ld_cldaptries;	/* connectionless search retry count */
-	int		ld_cldaptimeout;/* time between retries */
-	int		ld_refhoplimit;	/* limit on referral nesting */
-	unsigned long	ld_options;	/* boolean options */
-#define LDAP_OPT_DNS		0x00000001	/* use DN & DNS */
-#define LDAP_OPT_REFERRALS	0x00000002	/* chase referrals */
-#define LDAP_OPT_RESTART	0x00000004	/* restart if EINTR occurs */
-
-	/* do not mess with the rest though */
-	char		*ld_defhost;	/* full name of default server */
-	int		ld_defport;	/* port of default server */
-	BERTranslateProc ld_lber_encode_translate_proc;
-	BERTranslateProc ld_lber_decode_translate_proc;
-#ifdef LDAP_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_REFERRALS */
-} LDAP;
+#define LDAP_NO_LIMIT		0
 
 
 /*
diff --git a/include/ldap_log.h b/include/ldap_log.h
new file mode 100644
index 0000000000..7efc5872c7
--- /dev/null
+++ b/include/ldap_log.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1990 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#ifndef _LDAP_LOG_H
+#define _LDAP_LOG_H
+
+#include <ldap_cdefs.h>
+
+LDAP_BEGIN_DECL
+
+/* debugging stuff */
+#ifdef LDAP_DEBUG
+extern int	ldap_debug;
+#ifdef LDAP_SYSLOG
+extern int	ldap_syslog;
+extern int	ldap_syslog_level;
+#endif /* LDAP_SYSLOG */
+
+#define LDAP_DEBUG_TRACE	0x001
+#define LDAP_DEBUG_PACKETS	0x002
+#define LDAP_DEBUG_ARGS		0x004
+#define LDAP_DEBUG_CONNS	0x008
+#define LDAP_DEBUG_BER		0x010
+#define LDAP_DEBUG_FILTER	0x020
+#define LDAP_DEBUG_CONFIG	0x040
+#define LDAP_DEBUG_ACL		0x080
+#define LDAP_DEBUG_STATS	0x100
+#define LDAP_DEBUG_STATS2	0x200
+#define LDAP_DEBUG_SHELL	0x400
+#define LDAP_DEBUG_PARSE	0x800
+#define LDAP_DEBUG_ANY		0xffff
+
+/* this doesn't below as part of ldap.h */
+#ifdef LDAP_SYSLOG
+#define Debug( level, fmt, arg1, arg2, arg3 )	\
+	{ \
+		if ( ldap_debug & (level) ) \
+			fprintf( stderr, (fmt), (arg1), (arg2), (arg3) ); \
+		if ( ldap_syslog & level ) \
+			syslog( ldap_syslog_level, (fmt), (arg1), (arg2), (arg3) ); \
+	}
+#else /* LDAP_SYSLOG */
+#ifndef WINSOCK
+#define Debug( level, fmt, arg1, arg2, arg3 ) \
+		if ( ldap_debug & (level) ) \
+			fprintf( stderr, (fmt), (arg1), (arg2), (arg3) );
+#else /* !WINSOCK */
+extern void Debug( int level, char* fmt, ... );
+#endif /* !WINSOCK */
+#endif /* LDAP_SYSLOG */
+#else /* LDAP_DEBUG */
+#define Debug( level, fmt, arg1, arg2, arg3 )
+#endif /* LDAP_DEBUG */
+
+LDAP_END_DECL
+
+#endif /* _LDAP_H */
diff --git a/libraries/liblber/bprint.c b/libraries/liblber/bprint.c
index 882facd70d..93f759fbdf 100644
--- a/libraries/liblber/bprint.c
+++ b/libraries/liblber/bprint.c
@@ -8,7 +8,7 @@
 #include <ac/string.h>
 #endif /* LDAP_DEBUG && LDAP_LIBUI  */
 
-#include "lber.h"
+#include "lber-int.h"
 
 /*
  * Print arbitrary stuff, for debugging.
diff --git a/libraries/liblber/decode.c b/libraries/liblber/decode.c
index 9162339cc7..48effc5b7e 100644
--- a/libraries/liblber/decode.c
+++ b/libraries/liblber/decode.c
@@ -25,7 +25,7 @@
 #include <ac/string.h>
 #include <ac/socket.h>
 
-#include "lber.h"
+#include "lber-int.h"
 
 #ifdef LDAP_DEBUG
 int	lber_debug;
diff --git a/libraries/liblber/encode.c b/libraries/liblber/encode.c
index c31bd3ce21..f036dfeef4 100644
--- a/libraries/liblber/encode.c
+++ b/libraries/liblber/encode.c
@@ -25,7 +25,7 @@
 #include <ac/socket.h>
 #include <ac/string.h>
 
-#include "lber.h"
+#include "lber-int.h"
 
 static int ber_put_len LDAP_P(( BerElement *ber,
 	unsigned long len, int nosos ));
diff --git a/libraries/liblber/io.c b/libraries/liblber/io.c
index 798448f421..582a883d64 100644
--- a/libraries/liblber/io.c
+++ b/libraries/liblber/io.c
@@ -26,7 +26,7 @@
 #include <io.h>
 #endif
 
-#include "lber.h"
+#include "lber-int.h"
 
 static int ber_realloc LDAP_P(( BerElement *ber, unsigned long len ));
 static int ber_filbuf LDAP_P(( Sockbuf *sb, long len ));
diff --git a/libraries/liblber/lber-int.h b/libraries/liblber/lber-int.h
new file mode 100644
index 0000000000..eef5e18b39
--- /dev/null
+++ b/libraries/liblber/lber-int.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1990 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#ifndef _LBER_INT_H
+#define _LBER_INT_H
+
+#include "lber.h"
+
+LDAP_BEGIN_DECL
+
+typedef struct berelement {
+	char		*ber_buf;
+	char		*ber_ptr;
+	char		*ber_end;
+	struct seqorset	*ber_sos;
+	unsigned long	ber_tag;
+	unsigned long	ber_len;
+	int		ber_usertag;
+	char		ber_options;
+#define LBER_USE_DER		0x01
+#define LBER_USE_INDEFINITE_LEN	0x02
+#define LBER_TRANSLATE_STRINGS	0x04
+	char		*ber_rwptr;
+	BERTranslateProc ber_encode_translate_proc;
+	BERTranslateProc ber_decode_translate_proc;
+} BerElement;
+#define NULLBER	((BerElement *) 0)
+
+typedef struct sockbuf {
+#ifndef MACOS
+	int		sb_sd;
+#else /* MACOS */
+	void		*sb_sd;
+#endif /* MACOS */
+	BerElement	sb_ber;
+
+	int		sb_naddr;	/* > 0 implies using CLDAP (UDP) */
+	void		*sb_useaddr;	/* pointer to sockaddr to use next */
+	void		*sb_fromaddr;	/* pointer to message source sockaddr */
+	void		**sb_addrs;	/* actually an array of pointers to
+						sockaddrs */
+
+	int		sb_options;	/* to support copying ber elements */
+#define LBER_TO_FILE		0x01	/* to a file referenced by sb_fd   */
+#define LBER_TO_FILE_ONLY	0x02	/* only write to file, not network */
+#define LBER_MAX_INCOMING_SIZE	0x04	/* impose limit on incoming stuff  */
+#define LBER_NO_READ_AHEAD	0x08	/* read only as much as requested  */
+	int		sb_fd;
+	long		sb_max_incoming;
+} Sockbuf;
+#define READBUFSIZ	8192
+
+typedef struct seqorset {
+	BerElement	*sos_ber;
+	unsigned long	sos_clen;
+	unsigned long	sos_tag;
+	char		*sos_first;
+	char		*sos_ptr;
+	struct seqorset	*sos_next;
+} Seqorset;
+#define NULLSEQORSET	((Seqorset *) 0)
+
+#endif /* _LBER_INT_H */
diff --git a/libraries/liblber/liblber.dsp b/libraries/liblber/liblber.dsp
index e0457f90f6..a64a040276 100644
--- a/libraries/liblber/liblber.dsp
+++ b/libraries/liblber/liblber.dsp
@@ -92,6 +92,10 @@ SOURCE=.\io.c
 # End Source File
 # Begin Source File
 
+SOURCE=".\lber-int.h"
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\lber.h
 # End Source File
 # End Target
diff --git a/libraries/libldap/abandon.c b/libraries/libldap/abandon.c
index 533695f3b5..21639d3305 100644
--- a/libraries/libldap/abandon.c
+++ b/libraries/libldap/abandon.c
@@ -18,8 +18,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 static int do_abandon LDAP_P(( LDAP *ld, int origid, int msgid ));
diff --git a/libraries/libldap/add.c b/libraries/libldap/add.c
index 73e84964c1..df7396c053 100644
--- a/libraries/libldap/add.c
+++ b/libraries/libldap/add.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 /*
diff --git a/libraries/libldap/addentry.c b/libraries/libldap/addentry.c
index ce85e8cb35..8388c4adfa 100644
--- a/libraries/libldap/addentry.c
+++ b/libraries/libldap/addentry.c
@@ -19,8 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 LDAPMessage *
 ldap_delete_result_entry( LDAPMessage **list, LDAPMessage *e )
diff --git a/libraries/libldap/bind.c b/libraries/libldap/bind.c
index aec1a3b568..1668a3e73a 100644
--- a/libraries/libldap/bind.c
+++ b/libraries/libldap/bind.c
@@ -18,8 +18,7 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 
 /*
diff --git a/libraries/libldap/cache.c b/libraries/libldap/cache.c
index 8216461c1e..de09a7ae78 100644
--- a/libraries/libldap/cache.c
+++ b/libraries/libldap/cache.c
@@ -19,8 +19,6 @@ static char copyright[] = "@(#) Copyright (c) 1993 The Regents of the University
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 #ifndef LDAP_NOCACHE
diff --git a/libraries/libldap/charset.c b/libraries/libldap/charset.c
index 8371c62e3b..3f5c93c98d 100644
--- a/libraries/libldap/charset.c
+++ b/libraries/libldap/charset.c
@@ -24,8 +24,6 @@ static char copyright[] = "@(#) Copyright (c) 1995 Regents of the University of
 #include <sys/param.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
diff --git a/libraries/libldap/cldap.c b/libraries/libldap/cldap.c
index 3f2fe861a0..5b9e806984 100644
--- a/libraries/libldap/cldap.c
+++ b/libraries/libldap/cldap.c
@@ -21,8 +21,6 @@ static char copyright[] = "@(#) Copyright (c) 1990, 1994 Regents of the Universi
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 #define DEF_CLDAP_TIMEOUT	3
diff --git a/libraries/libldap/compare.c b/libraries/libldap/compare.c
index 4d89f59e7a..bc55055d9a 100644
--- a/libraries/libldap/compare.c
+++ b/libraries/libldap/compare.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 /*
diff --git a/libraries/libldap/delete.c b/libraries/libldap/delete.c
index eb8f589198..5e8ea76056 100644
--- a/libraries/libldap/delete.c
+++ b/libraries/libldap/delete.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 /*
diff --git a/libraries/libldap/disptmpl.c b/libraries/libldap/disptmpl.c
index f4aa230313..a15640846d 100644
--- a/libraries/libldap/disptmpl.c
+++ b/libraries/libldap/disptmpl.c
@@ -27,8 +27,7 @@
 #include <sys/file.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 #include "disptmpl.h"
 
 static void free_disptmpl LDAP_P(( struct ldap_disptmpl *tmpl ));
diff --git a/libraries/libldap/dsparse.c b/libraries/libldap/dsparse.c
index 86ccf71360..3fdd7b9c44 100644
--- a/libraries/libldap/dsparse.c
+++ b/libraries/libldap/dsparse.c
@@ -28,8 +28,7 @@
 #include <sys/file.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 int next_line_tokens LDAP_P(( char **bufp, long *blenp, char ***toksp ));
 void free_strarray LDAP_P(( char **sap ));
diff --git a/libraries/libldap/error.c b/libraries/libldap/error.c
index 26c8778047..d7b96c7ebe 100644
--- a/libraries/libldap/error.c
+++ b/libraries/libldap/error.c
@@ -7,8 +7,7 @@
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 struct ldaperror {
 	int	e_code;
diff --git a/libraries/libldap/free.c b/libraries/libldap/free.c
index d0e47686e5..ebf2d623c5 100644
--- a/libraries/libldap/free.c
+++ b/libraries/libldap/free.c
@@ -19,8 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1994 The Regents of the University
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 void
 ldap_getfilter_free( LDAPFiltDesc *lfdp )
diff --git a/libraries/libldap/friendly.c b/libraries/libldap/friendly.c
index 0f5aa6acad..12896aad83 100644
--- a/libraries/libldap/friendly.c
+++ b/libraries/libldap/friendly.c
@@ -20,8 +20,7 @@ static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 char *
 ldap_friendly_name( char *filename, char *uname, FriendlyMap **map )
diff --git a/libraries/libldap/getattr.c b/libraries/libldap/getattr.c
index 2975e674e0..9e69e934ae 100644
--- a/libraries/libldap/getattr.c
+++ b/libraries/libldap/getattr.c
@@ -19,8 +19,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 char *
diff --git a/libraries/libldap/getdn.c b/libraries/libldap/getdn.c
index fc2b326477..8144bb037c 100644
--- a/libraries/libldap/getdn.c
+++ b/libraries/libldap/getdn.c
@@ -19,8 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 char *
 ldap_get_dn( LDAP *ld, LDAPMessage *entry )
diff --git a/libraries/libldap/getdxbyname.c b/libraries/libldap/getdxbyname.c
index 0290cf4037..645b104818 100644
--- a/libraries/libldap/getdxbyname.c
+++ b/libraries/libldap/getdxbyname.c
@@ -17,8 +17,6 @@
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 static char ** decode_answer LDAP_P(( unsigned char *answer, int len ));
diff --git a/libraries/libldap/getentry.c b/libraries/libldap/getentry.c
index 5d7776dea1..01d8f2c125 100644
--- a/libraries/libldap/getentry.c
+++ b/libraries/libldap/getentry.c
@@ -19,8 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 /* ARGSUSED */
 LDAPMessage *
diff --git a/libraries/libldap/getfilter.c b/libraries/libldap/getfilter.c
index 3e5ea7b511..dc053ed56a 100644
--- a/libraries/libldap/getfilter.c
+++ b/libraries/libldap/getfilter.c
@@ -25,8 +25,7 @@ static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of
 #include <sys/file.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 static int break_into_words LDAP_P(( char *str, char *delims, char ***wordsp ));
 int next_line_tokens LDAP_P(( char **bufp, long *blenp, char ***toksp ));
diff --git a/libraries/libldap/getvalues.c b/libraries/libldap/getvalues.c
index c3131ade09..cd2921856c 100644
--- a/libraries/libldap/getvalues.c
+++ b/libraries/libldap/getvalues.c
@@ -19,8 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 char **
 ldap_get_values( LDAP *ld, LDAPMessage *entry, char *target )
diff --git a/libraries/libldap/kbind.c b/libraries/libldap/kbind.c
index 2831226ed8..90367171a9 100644
--- a/libraries/libldap/kbind.c
+++ b/libraries/libldap/kbind.c
@@ -21,12 +21,9 @@ static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
-
 /*
  * ldap_kerberos_bind1 - initiate a bind to the ldap server using
  * kerberos authentication.  The dn is supplied.  It is assumed the user
diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h
index 5a3fe703a2..f211429984 100644
--- a/libraries/libldap/ldap-int.h
+++ b/libraries/libldap/ldap-int.h
@@ -6,6 +6,12 @@
  */
 
 
+#include "../liblber/lber-int.h"
+#include "ldap_log.h"
+#include "ldap.h"
+
+LDAP_BEGIN_DECL
+
 #define LDAP_URL_PREFIX         "ldap://"
 #define LDAP_URL_PREFIX_LEN     7
 #define LDAP_URL_URLCOLON	"URL:"
@@ -22,7 +28,75 @@
 #endif /* LDAP_DNS */
 #endif /* LDAP_REFERRALS */
 
-LDAP_BEGIN_DECL
+/*
+ * This structure represents both ldap messages and ldap responses.
+ * These are really the same, except in the case of search responses,
+ * where a response has multiple messages.
+ */
+
+typedef struct ldapmsg {
+	int		lm_msgid;	/* the message id */
+	int		lm_msgtype;	/* the message type */
+	BerElement	*lm_ber;	/* the ber encoded message contents */
+	struct ldapmsg	*lm_chain;	/* for search - next msg in the resp */
+	struct ldapmsg	*lm_next;	/* next response */
+	unsigned int	lm_time;	/* used to maintain cache */
+} LDAPMessage;
+
+/*
+ * structure representing an ldap connection
+ */
+
+typedef struct ldap {
+	Sockbuf		ld_sb;		/* socket descriptor & buffer */
+	char		*ld_host;
+	int		ld_version;
+	char		ld_lberoptions;
+	int		ld_deref;
+	int		ld_timelimit;
+	int		ld_sizelimit;
+
+	LDAPFiltDesc	*ld_filtd;	/* from getfilter for ufn searches */
+	char		*ld_ufnprefix;	/* for incomplete ufn's */
+
+	int		ld_errno;
+	char		*ld_error;
+	char		*ld_matched;
+	int		ld_msgid;
+
+	/* do not mess with these */
+#ifdef LDAP_REFERRALS
+	LDAPRequest	*ld_requests;	/* list of outstanding requests */
+#else /* LDAP_REFERRALS */
+	LDAPMessage	*ld_requests;	/* list of outstanding requests */
+#endif /* LDAP_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 */
+	char		*ld_cldapdn;	/* DN used in connectionless search */
+
+	/* it is OK to change these next four values directly */
+	int		ld_cldaptries;	/* connectionless search retry count */
+	int		ld_cldaptimeout;/* time between retries */
+	int		ld_refhoplimit;	/* limit on referral nesting */
+	unsigned long	ld_options;	/* boolean options */
+
+	/* do not mess with the rest though */
+	char		*ld_defhost;	/* full name of default server */
+	int		ld_defport;	/* port of default server */
+	BERTranslateProc ld_lber_encode_translate_proc;
+	BERTranslateProc ld_lber_decode_translate_proc;
+#ifdef LDAP_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_REFERRALS */
+} LDAP;
+
 /*
  * in cache.c
  */
diff --git a/libraries/libldap/libldap.dsp b/libraries/libldap/libldap.dsp
index 2d90c6392b..0565123b15 100644
--- a/libraries/libldap/libldap.dsp
+++ b/libraries/libldap/libldap.dsp
@@ -116,6 +116,10 @@ SOURCE=.\disptmpl.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\disptmpl.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\dsparse.c
 # End Source File
 # Begin Source File
@@ -160,10 +164,22 @@ SOURCE=.\kbind.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\lber.h
+# End Source File
+# Begin Source File
+
 SOURCE=".\ldap-int.h"
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\ldap.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\ldap_log.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\modify.c
 # End Source File
 # Begin Source File
@@ -204,6 +220,10 @@ SOURCE=.\srchpref.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\srchpref.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\ufn.c
 # End Source File
 # Begin Source File
diff --git a/libraries/libldap/modify.c b/libraries/libldap/modify.c
index 42ffde0f2f..450d7e923c 100644
--- a/libraries/libldap/modify.c
+++ b/libraries/libldap/modify.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 /*
diff --git a/libraries/libldap/modrdn.c b/libraries/libldap/modrdn.c
index 434ecb5d0b..8cee157a8b 100644
--- a/libraries/libldap/modrdn.c
+++ b/libraries/libldap/modrdn.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 /*
diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c
index ef3ceccde4..ad2ba4d1b0 100644
--- a/libraries/libldap/open.c
+++ b/libraries/libldap/open.c
@@ -22,8 +22,6 @@ static char copyright[] = "@(#) Copyright (c) 1995 Regents of the University of
 #include <sys/param.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 #ifdef LDAP_DEBUG
diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c
index d5bd6715bf..03912ae2fa 100644
--- a/libraries/libldap/os-ip.c
+++ b/libraries/libldap/os-ip.c
@@ -26,8 +26,6 @@
 #include <sys/ioctl.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 int
diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c
index a3dfc559bf..4732c639f3 100644
--- a/libraries/libldap/request.c
+++ b/libraries/libldap/request.c
@@ -20,8 +20,6 @@ static char copyright[] = "@(#) Copyright (c) 1995 Regents of the University of
 #include <ac/time.h>
 #include <ac/unistd.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 #if defined( LDAP_REFERRALS ) || defined( LDAP_DNS )
diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c
index dd6f5dbd44..1fc61004a2 100644
--- a/libraries/libldap/result.c
+++ b/libraries/libldap/result.c
@@ -20,8 +20,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/time.h>
 #include <ac/unistd.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
diff --git a/libraries/libldap/sbind.c b/libraries/libldap/sbind.c
index 17347d7cb2..1049756101 100644
--- a/libraries/libldap/sbind.c
+++ b/libraries/libldap/sbind.c
@@ -17,8 +17,6 @@ static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
diff --git a/libraries/libldap/search.c b/libraries/libldap/search.c
index 191d346710..2a45f1ce6d 100644
--- a/libraries/libldap/search.c
+++ b/libraries/libldap/search.c
@@ -19,8 +19,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 static char *find_right_paren LDAP_P(( char *s ));
diff --git a/libraries/libldap/sort.c b/libraries/libldap/sort.c
index 2ac3c31a81..a0137b0605 100644
--- a/libraries/libldap/sort.c
+++ b/libraries/libldap/sort.c
@@ -21,8 +21,7 @@
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 
 
 struct entrything {
diff --git a/libraries/libldap/srchpref.c b/libraries/libldap/srchpref.c
index a603e6edb3..8920097c93 100644
--- a/libraries/libldap/srchpref.c
+++ b/libraries/libldap/srchpref.c
@@ -27,8 +27,7 @@
 #include <sys/file.h>
 #endif
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap-int.h"
 #include "srchpref.h"
 
 int next_line_tokens LDAP_P(( char **bufp, long *blenp, char ***toksp ));
diff --git a/libraries/libldap/ufn.c b/libraries/libldap/ufn.c
index f623c28525..d8cfa25f7c 100644
--- a/libraries/libldap/ufn.c
+++ b/libraries/libldap/ufn.c
@@ -19,9 +19,7 @@ static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of
 #include <ac/socket.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
-
+#include "ldap-int.h"
 #include "ldapconfig.h"
 
 typedef int (*cancelptype) LDAP_P(( void *cancelparm ));
diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c
index 2fc2727c3d..7de336d504 100644
--- a/libraries/libldap/unbind.c
+++ b/libraries/libldap/unbind.c
@@ -18,8 +18,6 @@ static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c
index 83ccbdc546..2f2cf942bc 100644
--- a/libraries/libldap/url.c
+++ b/libraries/libldap/url.c
@@ -31,8 +31,6 @@ static char copyright[] = "@(#) Copyright (c) 1996 Regents of the University of
 #include <ac/string.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
 #include "ldap-int.h"
 
 
diff --git a/libraries/libldif/libldif.dsp b/libraries/libldif/libldif.dsp
index e9fb0c2b97..a39e0fa065 100644
--- a/libraries/libldif/libldif.dsp
+++ b/libraries/libldif/libldif.dsp
@@ -76,6 +76,10 @@ LIB32=link.exe -lib
 # Name "libldif - Win32 Debug"
 # Begin Source File
 
+SOURCE=..\..\include\ldif.h
+# End Source File
+# Begin Source File
+
 SOURCE=.\line64.c
 # End Source File
 # End Target
diff --git a/libraries/libldif/line64.c b/libraries/libldif/line64.c
index 429e1d6ab1..ba72e01532 100644
--- a/libraries/libldif/line64.c
+++ b/libraries/libldif/line64.c
@@ -9,10 +9,10 @@
 #include <ac/socket.h>
 #include <ac/time.h>
 
-#include "lber.h"
-#include "ldap.h"
+#include "ldap_log.h"
 #include "ldif.h"
 
+
 #define RIGHT2			0x03
 #define RIGHT4			0x0f
 #define CONTINUED_LINE_MARKER	'\001'
-- 
GitLab