summaryrefslogtreecommitdiff
path: root/ldap/inckit
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/inckit')
-rwxr-xr-xldap/inckit/disptmpl.h330
-rwxr-xr-xldap/inckit/lber.h184
-rwxr-xr-xldap/inckit/ldap.h592
-rwxr-xr-xldap/inckit/msdos.h133
-rwxr-xr-xldap/inckit/proto-lb.h102
-rwxr-xr-xldap/inckit/proto-ld.h276
-rwxr-xr-xldap/inckit/srchpref.h106
7 files changed, 1723 insertions, 0 deletions
diff --git a/ldap/inckit/disptmpl.h b/ldap/inckit/disptmpl.h
new file mode 100755
index 00000000..d6e0a359
--- /dev/null
+++ b/ldap/inckit/disptmpl.h
@@ -0,0 +1,330 @@
+/*
+ * Copyright (c) 1993, 1994 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.
+ *
+ * disptmpl.h: display template library defines
+ * 7 March 1994 by Mark C Smith
+ */
+
+#ifndef _DISPTMPL_H
+#define _DISPTMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define LDAP_TEMPLATE_VERSION 1
+
+/*
+ * general types of items (confined to most significant byte)
+ */
+#define LDAP_SYN_TYPE_TEXT 0x01000000L
+#define LDAP_SYN_TYPE_IMAGE 0x02000000L
+#define LDAP_SYN_TYPE_BOOLEAN 0x04000000L
+#define LDAP_SYN_TYPE_BUTTON 0x08000000L
+#define LDAP_SYN_TYPE_ACTION 0x10000000L
+
+
+/*
+ * syntax options (confined to second most significant byte)
+ */
+#define LDAP_SYN_OPT_DEFER 0x00010000L
+
+
+/*
+ * display template item syntax ids (defined by common agreement)
+ * these are the valid values for the ti_syntaxid of the tmplitem
+ * struct (defined below). A general type is encoded in the
+ * most-significant 8 bits, and some options are encoded in the next
+ * 8 bits. The lower 16 bits are reserved for the distinct types.
+ */
+#define LDAP_SYN_CASEIGNORESTR ( 1 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_MULTILINESTR ( 2 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_DN ( 3 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_BOOLEAN ( 4 | LDAP_SYN_TYPE_BOOLEAN )
+#define LDAP_SYN_JPEGIMAGE ( 5 | LDAP_SYN_TYPE_IMAGE )
+#define LDAP_SYN_JPEGBUTTON ( 6 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
+#define LDAP_SYN_FAXIMAGE ( 7 | LDAP_SYN_TYPE_IMAGE )
+#define LDAP_SYN_FAXBUTTON ( 8 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
+#define LDAP_SYN_AUDIOBUTTON ( 9 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
+#define LDAP_SYN_TIME ( 10 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_DATE ( 11 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_LABELEDURL ( 12 | LDAP_SYN_TYPE_TEXT )
+#define LDAP_SYN_SEARCHACTION ( 13 | LDAP_SYN_TYPE_ACTION )
+#define LDAP_SYN_LINKACTION ( 14 | LDAP_SYN_TYPE_ACTION )
+#define LDAP_SYN_ADDDNACTION ( 15 | LDAP_SYN_TYPE_ACTION )
+#define LDAP_SYN_VERIFYDNACTION ( 16 | LDAP_SYN_TYPE_ACTION )
+#define LDAP_SYN_RFC822ADDR ( 17 | LDAP_SYN_TYPE_TEXT )
+
+
+/*
+ * handy macros
+ */
+#define LDAP_GET_SYN_TYPE( syid ) ((syid) & 0xFF000000L )
+#define LDAP_GET_SYN_OPTIONS( syid ) ((syid) & 0x00FF0000L )
+
+
+/*
+ * display options for output routines (used by entry2text and friends)
+ */
+/*
+ * use calculated label width (based on length of longest label in
+ * template) instead of contant width
+ */
+#define LDAP_DISP_OPT_AUTOLABELWIDTH 0x00000001L
+#define LDAP_DISP_OPT_HTMLBODYONLY 0x00000002L
+
+/*
+ * perform search actions (applies to ldap_entry2text_search only)
+ */
+#define LDAP_DISP_OPT_DOSEARCHACTIONS 0x00000002L
+
+/*
+ * include additional info. relevant to "non leaf" entries only
+ * used by ldap_entry2html and ldap_entry2html_search to include "Browse"
+ * and "Move Up" HREFs
+ */
+#define LDAP_DISP_OPT_NONLEAF 0x00000004L
+
+
+/*
+ * display template item options (may not apply to all types)
+ * if this bit is set in ti_options, it applies.
+ */
+#define LDAP_DITEM_OPT_READONLY 0x00000001L
+#define LDAP_DITEM_OPT_SORTVALUES 0x00000002L
+#define LDAP_DITEM_OPT_SINGLEVALUED 0x00000004L
+#define LDAP_DITEM_OPT_HIDEIFEMPTY 0x00000008L
+#define LDAP_DITEM_OPT_VALUEREQUIRED 0x00000010L
+#define LDAP_DITEM_OPT_HIDEIFFALSE 0x00000020L /* booleans only */
+
+
+
+/*
+ * display template item structure
+ */
+struct ldap_tmplitem {
+ unsigned long ti_syntaxid;
+ unsigned long ti_options;
+ char *ti_attrname;
+ char *ti_label;
+ char **ti_args;
+ struct ldap_tmplitem *ti_next_in_row;
+ struct ldap_tmplitem *ti_next_in_col;
+ void *ti_appdata;
+};
+
+
+#define NULLTMPLITEM ((struct ldap_tmplitem *)0)
+
+#define LDAP_SET_TMPLITEM_APPDATA( ti, datap ) \
+ (ti)->ti_appdata = (void *)(datap)
+
+#define LDAP_GET_TMPLITEM_APPDATA( ti, type ) \
+ (type)((ti)->ti_appdata)
+
+#define LDAP_IS_TMPLITEM_OPTION_SET( ti, option ) \
+ (((ti)->ti_options & option ) != 0 )
+
+
+/*
+ * object class array structure
+ */
+struct ldap_oclist {
+ char **oc_objclasses;
+ struct ldap_oclist *oc_next;
+};
+
+#define NULLOCLIST ((struct ldap_oclist *)0)
+
+
+/*
+ * add defaults list
+ */
+struct ldap_adddeflist {
+ int ad_source;
+#define LDAP_ADSRC_CONSTANTVALUE 1
+#define LDAP_ADSRC_ADDERSDN 2
+ char *ad_attrname;
+ char *ad_value;
+ struct ldap_adddeflist *ad_next;
+};
+
+#define NULLADLIST ((struct ldap_adddeflist *)0)
+
+
+/*
+ * display template global options
+ * if this bit is set in dt_options, it applies.
+ */
+/*
+ * users should be allowed to try to add objects of these entries
+ */
+#define LDAP_DTMPL_OPT_ADDABLE 0x00000001L
+
+/*
+ * users should be allowed to do "modify RDN" operation of these entries
+ */
+#define LDAP_DTMPL_OPT_ALLOWMODRDN 0x00000002L
+
+/*
+ * this template is an alternate view, not a primary view
+ */
+#define LDAP_DTMPL_OPT_ALTVIEW 0x00000004L
+
+
+/*
+ * display template structure
+ */
+struct ldap_disptmpl {
+ char *dt_name;
+ char *dt_pluralname;
+ char *dt_iconname;
+ unsigned long dt_options;
+ char *dt_authattrname;
+ char *dt_defrdnattrname;
+ char *dt_defaddlocation;
+ struct ldap_oclist *dt_oclist;
+ struct ldap_adddeflist *dt_adddeflist;
+ struct ldap_tmplitem *dt_items;
+ void *dt_appdata;
+ struct ldap_disptmpl *dt_next;
+};
+
+#define NULLDISPTMPL ((struct ldap_disptmpl *)0)
+
+#define LDAP_SET_DISPTMPL_APPDATA( dt, datap ) \
+ (dt)->dt_appdata = (void *)(datap)
+
+#define LDAP_GET_DISPTMPL_APPDATA( dt, type ) \
+ (type)((dt)->dt_appdata)
+
+#define LDAP_IS_DISPTMPL_OPTION_SET( dt, option ) \
+ (((dt)->dt_options & option ) != 0 )
+
+#define LDAP_TMPL_ERR_VERSION 1
+#define LDAP_TMPL_ERR_MEM 2
+#define LDAP_TMPL_ERR_SYNTAX 3
+#define LDAP_TMPL_ERR_FILE 4
+
+/*
+ * buffer size needed for entry2text and vals2text
+ */
+#define LDAP_DTMPL_BUFSIZ 8192
+
+
+#ifndef NEEDPROTOS
+
+typedef int (*writeptype)();
+
+int ldap_init_templates();
+int ldap_init_templates_buf();
+void ldap_free_templates();
+struct ldap_disptmpl *ldap_first_disptmpl();
+struct ldap_disptmpl *ldap_next_disptmpl();
+struct ldap_disptmpl *ldap_name2template();
+struct ldap_disptmpl *ldap_oc2template();
+char **ldap_tmplattrs();
+struct ldap_tmplitem *ldap_first_tmplrow();
+struct ldap_tmplitem *ldap_next_tmplrow();
+struct ldap_tmplitem *ldap_first_tmplcol();
+struct ldap_tmplitem *ldap_next_tmplcol();
+int ldap_entry2text_search();
+int ldap_entry2text();
+int ldap_vals2text();
+int ldap_entry2html_search();
+int ldap_entry2html();
+int ldap_vals2html();
+
+#else /* !NEEDPROTOS */
+
+typedef int (*writeptype)( void *writeparm, char *p, int len );
+
+LDAPFUNCDECL int
+ldap_init_templates( char *file, struct ldap_disptmpl **tmpllistp );
+
+LDAPFUNCDECL int
+ldap_init_templates_buf( char *buf, long buflen,
+ struct ldap_disptmpl **tmpllistp );
+
+LDAPFUNCDECL void
+ldap_free_templates( struct ldap_disptmpl *tmpllist );
+
+LDAPFUNCDECL struct ldap_disptmpl *
+ldap_first_disptmpl( struct ldap_disptmpl *tmpllist );
+
+LDAPFUNCDECL struct ldap_disptmpl *
+ldap_next_disptmpl( struct ldap_disptmpl *tmpllist,
+ struct ldap_disptmpl *tmpl );
+
+LDAPFUNCDECL struct ldap_disptmpl *
+ldap_name2template( char *name, struct ldap_disptmpl *tmpllist );
+
+LDAPFUNCDECL struct ldap_disptmpl *
+ldap_oc2template( char **oclist, struct ldap_disptmpl *tmpllist );
+
+LDAPFUNCDECL char **
+ldap_tmplattrs( struct ldap_disptmpl *tmpl, char **includeattrs, int exclude,
+ unsigned long syntaxmask );
+
+LDAPFUNCDECL struct ldap_tmplitem *
+ldap_first_tmplrow( struct ldap_disptmpl *tmpl );
+
+LDAPFUNCDECL struct ldap_tmplitem *
+ldap_next_tmplrow( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row );
+
+LDAPFUNCDECL struct ldap_tmplitem *
+ldap_first_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row );
+
+LDAPFUNCDECL struct ldap_tmplitem *
+ldap_next_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row,
+ struct ldap_tmplitem *col );
+
+LDAPFUNCDECL int
+ldap_entry2text( LDAP *ld, char *buf, LDAPMessage *entry,
+ struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
+ writeptype writeproc, void *writeparm, char *eol, int rdncount,
+ unsigned long opts );
+
+LDAPFUNCDECL int
+ldap_vals2text( LDAP *ld, char *buf, char **vals, char *label, int labelwidth,
+ unsigned long syntaxid, writeptype writeproc, void *writeparm,
+ char *eol, int rdncount );
+
+LDAPFUNCDECL int
+ldap_entry2text_search( LDAP *ld, char *dn, char *base, LDAPMessage *entry,
+ struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
+ writeptype writeproc, void *writeparm, char *eol, int rdncount,
+ unsigned long opts );
+
+LDAPFUNCDECL int
+ldap_entry2html( LDAP *ld, char *buf, LDAPMessage *entry,
+ struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
+ writeptype writeproc, void *writeparm, char *eol, int rdncount,
+ unsigned long opts, char *urlprefix, char *base );
+
+LDAPFUNCDECL int
+ldap_vals2html( LDAP *ld, char *buf, char **vals, char *label, int labelwidth,
+ unsigned long syntaxid, writeptype writeproc, void *writeparm,
+ char *eol, int rdncount, char *urlprefix );
+
+LDAPFUNCDECL int
+ldap_entry2html_search( LDAP *ld, char *dn, char *base, LDAPMessage *entry,
+ struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
+ writeptype writeproc, void *writeparm, char *eol, int rdncount,
+ unsigned long opts, char *urlprefix );
+#endif /* !NEEDPROTOS */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _DISPTMPL_H */
diff --git a/ldap/inckit/lber.h b/ldap/inckit/lber.h
new file mode 100755
index 00000000..9c5289f1
--- /dev/null
+++ b/ldap/inckit/lber.h
@@ -0,0 +1,184 @@
+/*
+ * 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_H
+#define _LBER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined( NEEDPROTOS ) && defined(__STDC__)
+#define NEEDPROTOS 1
+#endif
+
+/* BER classes and mask */
+#define LBER_CLASS_UNIVERSAL 0x00
+#define LBER_CLASS_APPLICATION 0x40
+#define LBER_CLASS_CONTEXT 0x80
+#define LBER_CLASS_PRIVATE 0xc0
+#define LBER_CLASS_MASK 0xc0
+
+/* BER encoding type and mask */
+#define LBER_PRIMITIVE 0x00
+#define LBER_CONSTRUCTED 0x20
+#define LBER_ENCODING_MASK 0x20
+
+#define LBER_BIG_TAG_MASK 0x1f
+#define LBER_MORE_TAG_MASK 0x80
+
+/*
+ * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
+ * as valid BER tags, and so it is safe to use them to report errors. In
+ * fact, any tag for which the following is true is invalid:
+ * (( tag & 0x00000080 ) != 0 ) && (( tag & 0xFFFFFF00 ) != 0 )
+ */
+#define LBER_ERROR 0xffffffffL
+#define LBER_DEFAULT 0xffffffffL
+
+/* general BER types we know about */
+#define LBER_BOOLEAN 0x01L
+#define LBER_INTEGER 0x02L
+#define LBER_BITSTRING 0x03L
+#define LBER_OCTETSTRING 0x04L
+#define LBER_NULL 0x05L
+#define LBER_ENUMERATED 0x0aL
+#define LBER_SEQUENCE 0x30L /* constructed */
+#define LBER_SET 0x31L /* constructed */
+
+#define OLD_LBER_SEQUENCE 0x10L /* w/o constructed bit - broken */
+#define OLD_LBER_SET 0x11L /* w/o constructed bit - broken */
+
+#ifdef NEEDPROTOS
+typedef int (*BERTranslateProc)( char **bufp, unsigned long *buflenp,
+ int free_input );
+#else /* NEEDPROTOS */
+typedef int (*BERTranslateProc)();
+#endif /* NEEDPROTOS */
+
+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)
+
+/* structure for returning a sequence of octet strings + length */
+struct berval {
+ unsigned long bv_len;
+ char *bv_val;
+};
+
+#ifndef NEEDPROTOS
+extern BerElement *ber_alloc();
+extern BerElement *der_alloc();
+extern BerElement *ber_alloc_t();
+extern BerElement *ber_dup();
+extern int lber_debug;
+extern void ber_bvfree();
+extern void ber_bvecfree();
+extern struct berval *ber_bvdup();
+extern void ber_dump();
+extern void ber_sos_dump();
+extern void lber_bprint();
+extern void ber_reset();
+extern void ber_init();
+#else /* NEEDPROTOS */
+#if defined(WINSOCK)
+#include "proto-lb.h"
+#else
+#include "proto-lber.h"
+#endif
+#endif /* NEEDPROTOS */
+
+#if !defined(__alpha) || defined(VMS)
+
+#define LBER_HTONL( l ) htonl( l )
+#define LBER_NTOHL( l ) ntohl( l )
+
+#else /* __alpha */
+/*
+ * htonl and ntohl on the DEC Alpha under OSF 1 seem to only swap the
+ * lower-order 32-bits of a (64-bit) long, so we define correct versions
+ * here.
+ */
+#define LBER_HTONL( l ) (((long)htonl( (l) & 0x00000000FFFFFFFF )) << 32 \
+ | htonl( ( (l) & 0xFFFFFFFF00000000 ) >> 32 ))
+
+#define LBER_NTOHL( l ) (((long)ntohl( (l) & 0x00000000FFFFFFFF )) << 32 \
+ | ntohl( ( (l) & 0xFFFFFFFF00000000 ) >> 32 ))
+#endif /* __alpha */
+
+
+/*
+ * SAFEMEMCPY is an overlap-safe copy from s to d of n bytes
+ */
+#ifdef MACOS
+#define SAFEMEMCPY( d, s, n ) BlockMoveData( (Ptr)s, (Ptr)d, n )
+#else /* MACOS */
+#ifdef sunos4
+#define SAFEMEMCPY( d, s, n ) bcopy( s, d, n )
+#else /* sunos4 */
+#define SAFEMEMCPY( d, s, n ) memmove( d, s, n )
+#endif /* sunos4 */
+#endif /* MACOS */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _LBER_H */
diff --git a/ldap/inckit/ldap.h b/ldap/inckit/ldap.h
new file mode 100755
index 00000000..de3e217c
--- /dev/null
+++ b/ldap/inckit/ldap.h
@@ -0,0 +1,592 @@
+/*
+ * 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_H
+#define _LDAP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef WINSOCK
+#include "msdos.h"
+#include <winsock.h>
+#endif
+
+#if !defined( NEEDPROTOS ) && defined(__STDC__)
+#define NEEDPROTOS 1
+#endif
+
+#define LDAP_PORT 389
+#define LDAP_VERSION1 1
+#define LDAP_VERSION2 2
+#define LDAP_VERSION LDAP_VERSION2
+
+#define COMPAT20
+#define COMPAT30
+#if defined(COMPAT20) || defined(COMPAT30)
+#define COMPAT
+#endif
+
+#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
+#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
+
+#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
+ */
+
+/* general stuff */
+#define LDAP_TAG_MESSAGE 0x30L /* tag is 16 + constructed bit */
+#define OLD_LDAP_TAG_MESSAGE 0x10L /* forgot the constructed bit */
+#define LDAP_TAG_MSGID 0x02L
+
+/* possible operations a client can invoke */
+#define LDAP_REQ_BIND 0x60L /* application + constructed */
+#define LDAP_REQ_UNBIND 0x42L /* application + primitive */
+#define LDAP_REQ_SEARCH 0x63L /* application + constructed */
+#define LDAP_REQ_MODIFY 0x66L /* application + constructed */
+#define LDAP_REQ_ADD 0x68L /* application + constructed */
+#define LDAP_REQ_DELETE 0x4aL /* application + primitive */
+#define LDAP_REQ_MODRDN 0x6cL /* application + constructed */
+#define LDAP_REQ_COMPARE 0x6eL /* application + constructed */
+#define LDAP_REQ_ABANDON 0x50L /* application + primitive */
+
+/* version 3.0 compatibility stuff */
+#define LDAP_REQ_UNBIND_30 0x62L
+#define LDAP_REQ_DELETE_30 0x6aL
+#define LDAP_REQ_ABANDON_30 0x70L
+
+/*
+ * old broken stuff for backwards compatibility - forgot application tag
+ * and constructed/primitive bit
+ */
+#define OLD_LDAP_REQ_BIND 0x00L
+#define OLD_LDAP_REQ_UNBIND 0x02L
+#define OLD_LDAP_REQ_SEARCH 0x03L
+#define OLD_LDAP_REQ_MODIFY 0x06L
+#define OLD_LDAP_REQ_ADD 0x08L
+#define OLD_LDAP_REQ_DELETE 0x0aL
+#define OLD_LDAP_REQ_MODRDN 0x0cL
+#define OLD_LDAP_REQ_COMPARE 0x0eL
+#define OLD_LDAP_REQ_ABANDON 0x10L
+
+/* possible result types a server can return */
+#define LDAP_RES_BIND 0x61L /* application + constructed */
+#define LDAP_RES_SEARCH_ENTRY 0x64L /* application + constructed */
+#define LDAP_RES_SEARCH_RESULT 0x65L /* application + constructed */
+#define LDAP_RES_MODIFY 0x67L /* application + constructed */
+#define LDAP_RES_ADD 0x69L /* application + constructed */
+#define LDAP_RES_DELETE 0x6bL /* application + constructed */
+#define LDAP_RES_MODRDN 0x6dL /* application + constructed */
+#define LDAP_RES_COMPARE 0x6fL /* application + constructed */
+#define LDAP_RES_ANY (-1L)
+
+/* old broken stuff for backwards compatibility */
+#define OLD_LDAP_RES_BIND 0x01L
+#define OLD_LDAP_RES_SEARCH_ENTRY 0x04L
+#define OLD_LDAP_RES_SEARCH_RESULT 0x05L
+#define OLD_LDAP_RES_MODIFY 0x07L
+#define OLD_LDAP_RES_ADD 0x09L
+#define OLD_LDAP_RES_DELETE 0x0bL
+#define OLD_LDAP_RES_MODRDN 0x0dL
+#define OLD_LDAP_RES_COMPARE 0x0fL
+
+/* authentication methods available */
+#define LDAP_AUTH_NONE 0x00L /* no authentication */
+#define LDAP_AUTH_SIMPLE 0x80L /* context specific + primitive */
+#define LDAP_AUTH_KRBV4 0xffL /* means do both of the following */
+#define LDAP_AUTH_KRBV41 0x81L /* context specific + primitive */
+#define LDAP_AUTH_KRBV42 0x82L /* context specific + primitive */
+
+/* 3.0 compatibility auth methods */
+#define LDAP_AUTH_SIMPLE_30 0xa0L /* context specific + constructed */
+#define LDAP_AUTH_KRBV41_30 0xa1L /* context specific + constructed */
+#define LDAP_AUTH_KRBV42_30 0xa2L /* context specific + constructed */
+
+/* old broken stuff */
+#define OLD_LDAP_AUTH_SIMPLE 0x00L
+#define OLD_LDAP_AUTH_KRBV4 0x01L
+#define OLD_LDAP_AUTH_KRBV42 0x02L
+
+/* filter types */
+#define LDAP_FILTER_AND 0xa0L /* context specific + constructed */
+#define LDAP_FILTER_OR 0xa1L /* context specific + constructed */
+#define LDAP_FILTER_NOT 0xa2L /* context specific + constructed */
+#define LDAP_FILTER_EQUALITY 0xa3L /* context specific + constructed */
+#define LDAP_FILTER_SUBSTRINGS 0xa4L /* context specific + constructed */
+#define LDAP_FILTER_GE 0xa5L /* context specific + constructed */
+#define LDAP_FILTER_LE 0xa6L /* context specific + constructed */
+#define LDAP_FILTER_PRESENT 0x87L /* context specific + primitive */
+#define LDAP_FILTER_APPROX 0xa8L /* context specific + constructed */
+
+/* 3.0 compatibility filter types */
+#define LDAP_FILTER_PRESENT_30 0xa7L /* context specific + constructed */
+
+/* old broken stuff */
+#define OLD_LDAP_FILTER_AND 0x00L
+#define OLD_LDAP_FILTER_OR 0x01L
+#define OLD_LDAP_FILTER_NOT 0x02L
+#define OLD_LDAP_FILTER_EQUALITY 0x03L
+#define OLD_LDAP_FILTER_SUBSTRINGS 0x04L
+#define OLD_LDAP_FILTER_GE 0x05L
+#define OLD_LDAP_FILTER_LE 0x06L
+#define OLD_LDAP_FILTER_PRESENT 0x07L
+#define OLD_LDAP_FILTER_APPROX 0x08L
+
+/* substring filter component types */
+#define LDAP_SUBSTRING_INITIAL 0x80L /* context specific */
+#define LDAP_SUBSTRING_ANY 0x81L /* context specific */
+#define LDAP_SUBSTRING_FINAL 0x82L /* context specific */
+
+/* 3.0 compatibility substring filter component types */
+#define LDAP_SUBSTRING_INITIAL_30 0xa0L /* context specific */
+#define LDAP_SUBSTRING_ANY_30 0xa1L /* context specific */
+#define LDAP_SUBSTRING_FINAL_30 0xa2L /* context specific */
+
+/* old broken stuff */
+#define OLD_LDAP_SUBSTRING_INITIAL 0x00L
+#define OLD_LDAP_SUBSTRING_ANY 0x01L
+#define OLD_LDAP_SUBSTRING_FINAL 0x02L
+
+/* search scopes */
+#define LDAP_SCOPE_BASE 0x00
+#define LDAP_SCOPE_ONELEVEL 0x01
+#define LDAP_SCOPE_SUBTREE 0x02
+
+/* for modifications */
+typedef struct ldapmod {
+ int mod_op;
+#define LDAP_MOD_ADD 0x00
+#define LDAP_MOD_DELETE 0x01
+#define LDAP_MOD_REPLACE 0x02
+#define LDAP_MOD_BVALUES 0x80
+ char *mod_type;
+ union {
+ char **modv_strvals;
+ struct berval **modv_bvals;
+ } mod_vals;
+#define mod_values mod_vals.modv_strvals
+#define mod_bvalues mod_vals.modv_bvals
+ struct ldapmod *mod_next;
+} LDAPMod;
+
+/*
+ * possible error codes we can return
+ */
+
+#define LDAP_SUCCESS 0x00
+#define LDAP_OPERATIONS_ERROR 0x01
+#define LDAP_PROTOCOL_ERROR 0x02
+#define LDAP_TIMELIMIT_EXCEEDED 0x03
+#define LDAP_SIZELIMIT_EXCEEDED 0x04
+#define LDAP_COMPARE_FALSE 0x05
+#define LDAP_COMPARE_TRUE 0x06
+#define LDAP_STRONG_AUTH_NOT_SUPPORTED 0x07
+#define LDAP_STRONG_AUTH_REQUIRED 0x08
+#define LDAP_PARTIAL_RESULTS 0x09
+
+#define LDAP_NO_SUCH_ATTRIBUTE 0x10
+#define LDAP_UNDEFINED_TYPE 0x11
+#define LDAP_INAPPROPRIATE_MATCHING 0x12
+#define LDAP_CONSTRAINT_VIOLATION 0x13
+#define LDAP_TYPE_OR_VALUE_EXISTS 0x14
+#define LDAP_INVALID_SYNTAX 0x15
+
+#define LDAP_NO_SUCH_OBJECT 0x20
+#define LDAP_ALIAS_PROBLEM 0x21
+#define LDAP_INVALID_DN_SYNTAX 0x22
+#define LDAP_IS_LEAF 0x23
+#define LDAP_ALIAS_DEREF_PROBLEM 0x24
+
+#define NAME_ERROR(n) ((n & 0xf0) == 0x20)
+
+#define LDAP_INAPPROPRIATE_AUTH 0x30
+#define LDAP_INVALID_CREDENTIALS 0x31
+#define LDAP_INSUFFICIENT_ACCESS 0x32
+#define LDAP_BUSY 0x33
+#define LDAP_UNAVAILABLE 0x34
+#define LDAP_UNWILLING_TO_PERFORM 0x35
+#define LDAP_LOOP_DETECT 0x36
+
+#define LDAP_NAMING_VIOLATION 0x40
+#define LDAP_OBJECT_CLASS_VIOLATION 0x41
+#define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
+#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_OTHER 0x50
+#define LDAP_SERVER_DOWN 0x51
+#define LDAP_LOCAL_ERROR 0x52
+#define LDAP_ENCODING_ERROR 0x53
+#define LDAP_DECODING_ERROR 0x54
+#define LDAP_TIMEOUT 0x55
+#define LDAP_AUTH_UNKNOWN 0x56
+#define LDAP_FILTER_ERROR 0x57
+#define LDAP_USER_CANCELLED 0x58
+#define LDAP_PARAM_ERROR 0x59
+#define LDAP_NO_MEMORY 0x5a
+
+
+/* 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,
+ * 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 long lm_time; /* used to maintain cache */
+} LDAPMessage;
+#define NULLMSG ((LDAPMessage *) NULL)
+
+
+#ifdef LDAP_REFERRALS
+/*
+ * structure for tracking LDAP server host, ports, DNs, etc.
+ */
+typedef struct ldap_server {
+ char *lsrv_host;
+ char *lsrv_dn; /* if NULL, use default */
+ int lsrv_port;
+ struct ldap_server *lsrv_next;
+} LDAPServer;
+
+
+/*
+ * structure for representing an LDAP server connection
+ */
+typedef struct ldap_conn {
+ Sockbuf *lconn_sb;
+ int lconn_refcnt;
+ unsigned long lconn_lastused; /* time */
+ int lconn_status;
+#define LDAP_CONNST_NEEDSOCKET 1
+#define LDAP_CONNST_CONNECTING 2
+#define LDAP_CONNST_CONNECTED 3
+ LDAPServer *lconn_server;
+ char *lconn_krbinstance;
+ struct ldap_conn *lconn_next;
+} LDAPConn;
+
+
+/*
+ * structure used to track outstanding requests
+ */
+typedef struct ldapreq {
+ int lr_msgid; /* the message id */
+ int lr_status; /* status of request */
+#define LDAP_REQST_INPROGRESS 1
+#define LDAP_REQST_CHASINGREFS 2
+#define LDAP_REQST_NOTCONNECTED 3
+#define LDAP_REQST_WRITING 4
+ int lr_outrefcnt; /* count of outstanding referrals */
+ int lr_origid; /* original request's message id */
+ int lr_parentcnt; /* count of parent requests */
+ int lr_res_msgtype; /* result message type */
+ int lr_res_errno; /* result LDAP errno */
+ char *lr_res_error; /* result error string */
+ char *lr_res_matched;/* result matched DN string */
+ BerElement *lr_ber; /* ber encoded request contents */
+ LDAPConn *lr_conn; /* connection used to send request */
+ struct ldapreq *lr_parent; /* request that spawned this referral */
+ struct ldapreq *lr_refnext; /* next referral spawned */
+ struct ldapreq *lr_prev; /* previous request */
+ struct ldapreq *lr_next; /* next request */
+} LDAPRequest;
+#endif /* LDAP_REFERRALS */
+
+
+/*
+ * structure for client cache
+ */
+#define LDAP_CACHE_BUCKETS 31 /* cache hash table size */
+typedef struct ldapcache {
+ LDAPMessage *lc_buckets[LDAP_CACHE_BUCKETS];/* hash table */
+ LDAPMessage *lc_requests; /* unfulfilled reqs */
+ long lc_timeout; /* request timeout */
+ long lc_maxmem; /* memory to use */
+ long lc_memused; /* memory in use */
+ int lc_enabled; /* enabled? */
+ unsigned long lc_options; /* options */
+#define LDAP_CACHE_OPT_CACHENOERRS 0x00000001
+#define LDAP_CACHE_OPT_CACHEALLERRS 0x00000002
+} LDAPCache;
+#define NULLLDCACHE ((LDAPCache *)NULL)
+
+/*
+ * structures for ldap getfilter routines
+ */
+
+typedef struct ldap_filt_info {
+ char *lfi_filter;
+ char *lfi_desc;
+ int lfi_scope; /* LDAP_SCOPE_BASE, etc */
+ int lfi_isexact; /* exact match filter? */
+ struct ldap_filt_info *lfi_next;
+} LDAPFiltInfo;
+
+typedef struct ldap_filt_list {
+ char *lfl_tag;
+ char *lfl_pattern;
+ char *lfl_delims;
+ LDAPFiltInfo *lfl_ilist;
+ struct ldap_filt_list *lfl_next;
+} LDAPFiltList;
+
+
+#define LDAP_FILT_MAXSIZ 1024
+
+typedef struct ldap_filt_desc {
+ LDAPFiltList *lfd_filtlist;
+ LDAPFiltInfo *lfd_curfip;
+ LDAPFiltInfo lfd_retfi;
+ char lfd_filter[ LDAP_FILT_MAXSIZ ];
+ char *lfd_curval;
+ char *lfd_curvalcopy;
+ char **lfd_curvalwords;
+ char *lfd_filtprefix;
+ char *lfd_filtsuffix;
+} LDAPFiltDesc;
+
+
+/*
+ * 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
+
+ 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 */
+#ifdef LDAP_DNS
+#define LDAP_OPT_DNS 0x00000001 /* use DN & DNS */
+#endif /* LDAP_DNS */
+#ifdef LDAP_REFERRALS
+#define LDAP_OPT_REFERRALS 0x00000002 /* chase referrals */
+#endif /* LDAP_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;
+
+
+/*
+ * structure for ldap friendly mapping routines
+ */
+
+typedef struct friendly {
+ char *f_unfriendly;
+ char *f_friendly;
+} FriendlyMap;
+
+
+/*
+ * handy macro to check whether LDAP struct is set up for CLDAP or not
+ */
+#define LDAP_IS_CLDAP( ld ) ( ld->ld_sb.sb_naddr > 0 )
+
+
+/*
+ * types for ldap URL handling
+ */
+typedef struct ldap_url_desc {
+ char *lud_host;
+ int lud_port;
+ char *lud_dn;
+ char **lud_attrs;
+ int lud_scope;
+ char *lud_filter;
+ char *lud_string; /* for internal use only */
+} LDAPURLDesc;
+#define NULLLDAPURLDESC ((LDAPURLDesc *)NULL)
+
+#define LDAP_URL_ERR_NOTLDAP 1 /* URL doesn't begin with "ldap://" */
+#define LDAP_URL_ERR_NODN 2 /* URL has no DN (required) */
+#define LDAP_URL_ERR_BADSCOPE 3 /* URL scope string is invalid */
+#define LDAP_URL_ERR_MEM 4 /* can't allocate memory space */
+
+
+#ifndef NEEDPROTOS
+extern LDAP *ldap_open();
+extern LDAP *ldap_init();
+#ifdef STR_TRANSLATION
+extern void ldap_set_string_translators();
+#ifdef LDAP_CHARSET_8859
+extern int ldap_t61_to_8859();
+extern int ldap_8859_to_t61();
+#endif /* LDAP_CHARSET_8859 */
+#endif /* STR_TRANSLATION */
+extern LDAPMessage *ldap_first_entry();
+extern LDAPMessage *ldap_next_entry();
+extern char *ldap_get_dn();
+extern char *ldap_dn2ufn();
+extern char **ldap_explode_dn();
+extern char *ldap_first_attribute();
+extern char *ldap_next_attribute();
+extern char **ldap_get_values();
+extern struct berval **ldap_get_values_len();
+extern void ldap_value_free();
+extern void ldap_value_free_len();
+extern int ldap_count_values();
+extern int ldap_count_values_len();
+extern char *ldap_err2string();
+extern void ldap_getfilter_free();
+extern LDAPFiltDesc *ldap_init_getfilter();
+extern LDAPFiltDesc *ldap_init_getfilter_buf();
+extern LDAPFiltInfo *ldap_getfirstfilter();
+extern LDAPFiltInfo *ldap_getnextfilter();
+extern void ldap_setfilteraffixes();
+extern void ldap_build_filter();
+extern void ldap_flush_cache();
+extern void ldap_set_cache_options();
+extern void ldap_uncache_entry();
+extern void ldap_uncache_request();
+extern char *ldap_friendly_name();
+extern void ldap_free_friendlymap();
+extern LDAP *cldap_open();
+extern void cldap_setretryinfo();
+extern void cldap_close();
+extern LDAPFiltDesc *ldap_ufn_setfilter();
+extern int ldap_ufn_timeout();
+extern int ldap_sort_entries();
+extern int ldap_sort_values();
+extern int ldap_sort_strcasecmp();
+void ldap_free_urldesc();
+void ldap_set_rebind_proc();
+void ldap_enable_translation();
+
+
+#if defined(ultrix) || defined(VMS) || defined( nextstep )
+extern char *strdup();
+#endif
+
+#else /* NEEDPROTOS */
+#if !defined(MACOS) && !defined(DOS) && !defined(_WIN32) && !defined(WINSOCK)
+#include <sys/time.h>
+#endif
+#if defined(WINSOCK)
+#include "proto-ld.h"
+#else
+#include "proto-ldap.h"
+#endif
+
+#ifdef VMS
+extern char *strdup( const char *s );
+#endif
+#if defined(ultrix) || defined( nextstep )
+extern char *strdup();
+#endif
+
+#endif /* NEEDPROTOS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _LDAP_H */
diff --git a/ldap/inckit/msdos.h b/ldap/inckit/msdos.h
new file mode 100755
index 00000000..81a0de4d
--- /dev/null
+++ b/ldap/inckit/msdos.h
@@ -0,0 +1,133 @@
+/* wsa.h */
+/*
+ * Copyright (c) 1993 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 _MSDOS_H
+#define _MSDOS_H
+
+/*
+ * NOTE: This file should be included via ldap.h. Many symbols are
+ * defined here that are needed BEFORE anything else is included.
+ * Be careful !!!
+ */
+/*
+ * The following are defined within the Integrated Development Environment
+ * of Microsoft's Visual C++ Compiler (v1.52c)
+ * (Options/Project/Compiler/Preprocessor/Symbols and Macros to Define)
+ * But there's a (buffer length) limit to how long this list can be, so
+ * I'm doing the rest here in msdos.h
+ * WINSOCK, DOS, NEEDPROTOS, NO_USERINTERFACE
+ */
+/*
+ * MIT's krb.h doesn't use the symbols provided by Microsoft.
+ * It needs __MSDOS__ and WINDOWS. Normally _WINDOWS is provided by MS
+ * but it's based on having the prolog/epilog optimization switches set
+ * in a way that we don't set them. So define it manually.
+ *
+ * kbind.c needs __MSDOS__ for krb.h to include osconf.h
+ * which includes conf-pc.h which defines byte order and such
+ */
+#define __MSDOS__
+/*
+ * conf-pc.h wants WINDOWS rather than _WINDOWS which Microsoft provides
+ */
+#define WINDOWS
+
+/*
+ * Where two of the config files live in the windows environment
+ * There are two others also; ldfriend.cfg, & srchpref.cfg
+ * These names are different that the unix names due to 8.3 rule
+ */
+#define FILTERFILE "ldfilter.cfg"
+#define TEMPLATEFILE "disptmpl.cfg"
+/*
+ * These are not automatically defined for us even though we're a DLL. They
+ * are triggered by prolog/epilog configuration options that we don't use.
+ * But be careful not to redefine them for other apps that include this file.
+ */
+#ifndef _WINDLL
+/*
+ * Needed by wshelper.h
+ */
+#define _WINDLL
+#endif
+
+#ifndef _WINDOWS
+/*
+ * Needed by authlib.h via kerberos.c via AUTHMAN
+ */
+#define _WINDOWS 1
+#endif
+
+/*
+ * KERBEROS must be defined as a preprocessor symbol in the compiler.
+ * It's too late to define it in this file.
+ */
+
+/*
+ * AUTHMAN - Use Authlib.dll as a higher level interface to krbv4win.dll
+ * (kerberos). If defined, get_kerberosv4_credentials in kerberos.c is
+ * used and authlib.dll (and krbv4win.dll) are dynamically loaded and used.
+ * If AUTHMAN is not defined, the get_kerberosv4_credentials in
+ * kbind.c works just fine, but requires the presence of krbv4win.dll at
+ * load time.
+ */
+/* don't want to be dependent on authman
+ * #define AUTHMAN
+ */
+
+/*
+ * define WSHELPER if you want wsockip.c to use rgethostbyaddr() (in
+ * WSHELPER.DLL) rather than gethostbyaddr(). You might want this if your
+ * gethostbyaddr() returns the WRONG host name and you want to use
+ * kerberos authentication (need host name to form service ticket
+ * request). Most won't want kerberos, and of those, there might actually
+ * be some vendors who really do the lookup rather than use cached info
+ * from gethostbyname() calls.
+ */
+#define WSHELPER
+/*
+ * The new slapd stuff
+ */
+#define LDAP_REFERRALS
+/*
+ * LDAP character string translation routines
+ * I compiled and tested these and they seemed to work.
+ * The thing to test with is:
+ * cn=Charset Test Entry, ou=SWITCHdirectory, o=SWITCH, c=CH
+ *
+ * I'm disabling it for release.
+#define STR_TRANSLATION
+#define LDAP_CHARSET_8859 88591
+#define LDAP_DEFAULT_CHARSET LDAP_CHARSET_8859
+ */
+
+
+#ifdef _DEBUG
+#define LDAP_DEBUG
+#endif
+#include <winsock.h>
+
+
+#include <string.h>
+#include <malloc.h>
+#ifndef _WIN32
+#define memcpy( a, b, n ) _fmemcpy( a, b, n )
+#define strcpy( a, b ) _fstrcpy( a, b )
+#define strchr( a, c ) _fstrchr( a, c )
+#endif /* !_WIN32 */
+#define strcasecmp(a,b) stricmp(a,b)
+#define strncasecmp(a,b,len) strnicmp(a,b,len)
+
+#endif /* _MSDOS_H */
+
+
diff --git a/ldap/inckit/proto-lb.h b/ldap/inckit/proto-lb.h
new file mode 100755
index 00000000..600328d5
--- /dev/null
+++ b/ldap/inckit/proto-lb.h
@@ -0,0 +1,102 @@
+/*
+ * lber-proto.h
+ * function prototypes for lber library
+ */
+
+#ifdef LDAP_DEBUG
+extern int lber_debug;
+#endif
+
+#ifndef LDAPFUNCDECL
+#ifdef _WIN32
+#define LDAPFUNCDECL __declspec( dllexport )
+#else /* _WIN32 */
+#define LDAPFUNCDECL
+#endif /* _WIN32 */
+#endif /* LDAPFUNCDECL */
+
+/*
+ * in bprint.c:
+ */
+LDAPFUNCDECL void lber_bprint( char *data, int len );
+
+/*
+ * in decode.c:
+ */
+LDAPFUNCDECL unsigned long ber_get_tag( BerElement *ber );
+LDAPFUNCDECL unsigned long ber_skip_tag( BerElement *ber, unsigned long *len );
+LDAPFUNCDECL unsigned long ber_peek_tag( BerElement *ber, unsigned long *len );
+LDAPFUNCDECL unsigned long ber_get_int( BerElement *ber, long *num );
+LDAPFUNCDECL unsigned long ber_get_stringb( BerElement *ber, char *buf,
+ unsigned long *len );
+LDAPFUNCDECL unsigned long ber_get_stringa( BerElement *ber, char **buf );
+LDAPFUNCDECL unsigned long ber_get_stringal( BerElement *ber, struct berval **bv );
+LDAPFUNCDECL unsigned long ber_get_bitstringa( BerElement *ber, char **buf,
+ unsigned long *len );
+LDAPFUNCDECL unsigned long ber_get_null( BerElement *ber );
+LDAPFUNCDECL unsigned long ber_get_boolean( BerElement *ber, int *boolval );
+LDAPFUNCDECL unsigned long ber_first_element( BerElement *ber, unsigned long *len,
+ char **last );
+LDAPFUNCDECL unsigned long ber_next_element( BerElement *ber, unsigned long *len,
+ char *last );
+#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 )
+LDAPFUNCDECL unsigned long ber_scanf( BerElement *ber, char *fmt, ... );
+#else
+LDAPFUNCDECL unsigned long ber_scanf();
+#endif
+LDAPFUNCDECL void ber_bvfree( struct berval *bv );
+LDAPFUNCDECL void ber_bvecfree( struct berval **bv );
+LDAPFUNCDECL struct berval *ber_bvdup( struct berval *bv );
+#ifdef STR_TRANSLATION
+LDAPFUNCDECL void ber_set_string_translators( BerElement *ber,
+ BERTranslateProc encode_proc, BERTranslateProc decode_proc );
+#endif /* STR_TRANSLATION */
+
+/*
+ * in encode.c
+ */
+LDAPFUNCDECL int ber_put_enum( BerElement *ber, long num, unsigned long tag );
+LDAPFUNCDECL int ber_put_int( BerElement *ber, long num, unsigned long tag );
+LDAPFUNCDECL int ber_put_ostring( BerElement *ber, char *str, unsigned long len,
+ unsigned long tag );
+LDAPFUNCDECL int ber_put_string( BerElement *ber, char *str, unsigned long tag );
+LDAPFUNCDECL int ber_put_bitstring( BerElement *ber, char *str,
+ unsigned long bitlen, unsigned long tag );
+LDAPFUNCDECL int ber_put_null( BerElement *ber, unsigned long tag );
+LDAPFUNCDECL int ber_put_boolean( BerElement *ber, int boolval,
+ unsigned long tag );
+LDAPFUNCDECL int ber_start_seq( BerElement *ber, unsigned long tag );
+LDAPFUNCDECL int ber_start_set( BerElement *ber, unsigned long tag );
+LDAPFUNCDECL int ber_put_seq( BerElement *ber );
+LDAPFUNCDECL int ber_put_set( BerElement *ber );
+#if defined( MACOS ) || defined( BC31 ) || defined( _WIN32 )
+LDAPFUNCDECL int ber_printf( BerElement *ber, char *fmt, ... );
+#else
+LDAPFUNCDECL int ber_printf();
+#endif
+
+/*
+ * in io.c:
+ */
+LDAPFUNCDECL long ber_read( BerElement *ber, char *buf, unsigned long len );
+LDAPFUNCDECL long ber_write( BerElement *ber, char *buf, unsigned long len,
+ int nosos );
+LDAPFUNCDECL void ber_free( BerElement *ber, int freebuf );
+LDAPFUNCDECL int ber_flush( Sockbuf *sb, BerElement *ber, int freeit );
+LDAPFUNCDECL BerElement *ber_alloc( void );
+LDAPFUNCDECL BerElement *der_alloc( void );
+LDAPFUNCDECL BerElement *ber_alloc_t( int options );
+LDAPFUNCDECL BerElement *ber_dup( BerElement *ber );
+LDAPFUNCDECL void ber_dump( BerElement *ber, int inout );
+LDAPFUNCDECL void ber_sos_dump( Seqorset *sos );
+LDAPFUNCDECL unsigned long ber_get_next( Sockbuf *sb, unsigned long *len,
+ BerElement *ber );
+LDAPFUNCDECL void ber_init( BerElement *ber, int options );
+LDAPFUNCDECL void ber_reset( BerElement *ber, int was_writing );
+
+#ifdef NEEDGETOPT
+/*
+ * in getopt.c
+ */
+int getopt( int nargc, char **nargv, char *ostr );
+#endif /* NEEDGETOPT */
diff --git a/ldap/inckit/proto-ld.h b/ldap/inckit/proto-ld.h
new file mode 100755
index 00000000..1ccb8317
--- /dev/null
+++ b/ldap/inckit/proto-ld.h
@@ -0,0 +1,276 @@
+/*
+ * proto-ldap.h
+ * function prototypes for ldap library
+ */
+
+
+#ifndef LDAPFUNCDECL
+#ifdef _WIN32
+#define LDAPFUNCDECL __declspec( dllexport )
+#else /* _WIN32 */
+#define LDAPFUNCDECL
+#endif /* _WIN32 */
+#endif /* LDAPFUNCDECL */
+
+
+/*
+ * in abandon.c:
+ */
+LDAPFUNCDECL int ldap_abandon( LDAP *ld, int msgid );
+
+/*
+ * in add.c:
+ */
+LDAPFUNCDECL int ldap_add( LDAP *ld, char *dn, LDAPMod **attrs );
+LDAPFUNCDECL int ldap_add_s( LDAP *ld, char *dn, LDAPMod **attrs );
+
+/*
+ * in bind.c:
+ */
+LDAPFUNCDECL int ldap_bind( LDAP *ld, char *who, char *passwd, int authmethod );
+LDAPFUNCDECL int ldap_bind_s( LDAP *ld, char *who, char *cred, int method );
+#ifdef LDAP_REFERRALS
+LDAPFUNCDECL void ldap_set_rebind_proc( LDAP *ld, int (*rebindproc)( LDAP *ld,
+ char **dnp, char **passwdp, int *authmethodp, int freeit ));
+#endif /* LDAP_REFERRALS */
+
+/*
+ * in sbind.c:
+ */
+LDAPFUNCDECL int ldap_simple_bind( LDAP *ld, char *who, char *passwd );
+LDAPFUNCDECL int ldap_simple_bind_s( LDAP *ld, char *who, char *passwd );
+
+/*
+ * in kbind.c:
+ */
+LDAPFUNCDECL int ldap_kerberos_bind_s( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind1( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind1_s( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind2( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind2_s( LDAP *ld, char *who );
+
+
+#ifndef NO_CACHE
+/*
+ * in cache.c
+ */
+LDAPFUNCDECL int ldap_enable_cache( LDAP *ld, long timeout, long maxmem );
+LDAPFUNCDECL void ldap_disable_cache( LDAP *ld );
+LDAPFUNCDECL void ldap_set_cache_options( LDAP *ld, unsigned long opts );
+LDAPFUNCDECL void ldap_destroy_cache( LDAP *ld );
+LDAPFUNCDECL void ldap_flush_cache( LDAP *ld );
+LDAPFUNCDECL void ldap_uncache_entry( LDAP *ld, char *dn );
+LDAPFUNCDECL void ldap_uncache_request( LDAP *ld, int msgid );
+#endif /* !NO_CACHE */
+
+/*
+ * in compare.c:
+ */
+LDAPFUNCDECL int ldap_compare( LDAP *ld, char *dn, char *attr, char *value );
+LDAPFUNCDECL int ldap_compare_s( LDAP *ld, char *dn, char *attr, char *value );
+
+/*
+ * in delete.c:
+ */
+LDAPFUNCDECL int ldap_delete( LDAP *ld, char *dn );
+LDAPFUNCDECL int ldap_delete_s( LDAP *ld, char *dn );
+
+/*
+ * in error.c:
+ */
+LDAPFUNCDECL int ldap_result2error( LDAP *ld, LDAPMessage *r, int freeit );
+LDAPFUNCDECL char *ldap_err2string( int err );
+LDAPFUNCDECL void ldap_perror( LDAP *ld, char *s );
+
+/*
+ * in modify.c:
+ */
+LDAPFUNCDECL int ldap_modify( LDAP *ld, char *dn, LDAPMod **mods );
+LDAPFUNCDECL int ldap_modify_s( LDAP *ld, char *dn, LDAPMod **mods );
+
+/*
+ * in modrdn.c:
+ */
+LDAPFUNCDECL int ldap_modrdn( LDAP *ld, char *dn, char *newrdn );
+LDAPFUNCDECL int ldap_modrdn_s( LDAP *ld, char *dn, char *newrdn );
+LDAPFUNCDECL int ldap_modrdn2( LDAP *ld, char *dn, char *newrdn,
+ int deleteoldrdn );
+LDAPFUNCDECL int ldap_modrdn2_s( LDAP *ld, char *dn, char *newrdn,
+ int deleteoldrdn);
+
+/*
+ * in open.c:
+ */
+LDAPFUNCDECL LDAP *ldap_open( char *host, int port );
+LDAPFUNCDECL LDAP *ldap_init( char *defhost, int defport );
+
+/*
+ * in getentry.c:
+ */
+LDAPFUNCDECL LDAPMessage *ldap_first_entry( LDAP *ld, LDAPMessage *chain );
+LDAPFUNCDECL LDAPMessage *ldap_next_entry( LDAP *ld, LDAPMessage *entry );
+LDAPFUNCDECL int ldap_count_entries( LDAP *ld, LDAPMessage *chain );
+
+/*
+ * in addentry.c
+ */
+LDAPFUNCDECL LDAPMessage *ldap_delete_result_entry( LDAPMessage **list,
+ LDAPMessage *e );
+LDAPFUNCDECL void ldap_add_result_entry( LDAPMessage **list, LDAPMessage *e );
+
+/*
+ * in getdn.c
+ */
+LDAPFUNCDECL char *ldap_get_dn( LDAP *ld, LDAPMessage *entry );
+LDAPFUNCDECL char *ldap_dn2ufn( char *dn );
+LDAPFUNCDECL char **ldap_explode_dn( char *dn, int notypes );
+LDAPFUNCDECL char **ldap_explode_dns( char *dn );
+LDAPFUNCDECL int ldap_is_dns_dn( char *dn );
+
+/*
+ * in getattr.c
+ */
+LDAPFUNCDECL char *ldap_first_attribute( LDAP *ld, LDAPMessage *entry,
+ BerElement **ber );
+LDAPFUNCDECL char *ldap_next_attribute( LDAP *ld, LDAPMessage *entry,
+ BerElement *ber );
+
+/*
+ * in getvalues.c
+ */
+LDAPFUNCDECL char **ldap_get_values( LDAP *ld, LDAPMessage *entry, char *target );
+LDAPFUNCDECL struct berval **ldap_get_values_len( LDAP *ld, LDAPMessage *entry,
+ char *target );
+LDAPFUNCDECL int ldap_count_values( char **vals );
+LDAPFUNCDECL int ldap_count_values_len( struct berval **vals );
+LDAPFUNCDECL void ldap_value_free( char **vals );
+LDAPFUNCDECL void ldap_value_free_len( struct berval **vals );
+
+/*
+ * in result.c:
+ */
+LDAPFUNCDECL int ldap_result( LDAP *ld, int msgid, int all,
+ struct timeval *timeout, LDAPMessage **result );
+LDAPFUNCDECL int ldap_msgfree( LDAPMessage *lm );
+LDAPFUNCDECL int ldap_msgdelete( LDAP *ld, int msgid );
+
+/*
+ * in search.c:
+ */
+LDAPFUNCDECL int ldap_search( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly );
+LDAPFUNCDECL int ldap_search_s( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly, LDAPMessage **res );
+LDAPFUNCDECL int ldap_search_st( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly, struct timeval *timeout, LDAPMessage **res );
+
+/*
+ * in ufn.c
+ */
+LDAPFUNCDECL int ldap_ufn_search_c( LDAP *ld, char *ufn, char **attrs,
+ int attrsonly, LDAPMessage **res, int (*cancelproc)( void *cl ),
+ void *cancelparm );
+LDAPFUNCDECL int ldap_ufn_search_ct( LDAP *ld, char *ufn, char **attrs,
+ int attrsonly, LDAPMessage **res, int (*cancelproc)( void *cl ),
+ void *cancelparm, char *tag1, char *tag2, char *tag3 );
+LDAPFUNCDECL int ldap_ufn_search_s( LDAP *ld, char *ufn, char **attrs,
+ int attrsonly, LDAPMessage **res );
+LDAPFUNCDECL LDAPFiltDesc *ldap_ufn_setfilter( LDAP *ld, char *fname );
+LDAPFUNCDECL void ldap_ufn_setprefix( LDAP *ld, char *prefix );
+LDAPFUNCDECL int ldap_ufn_timeout( void *tvparam );
+
+
+/*
+ * in unbind.c
+ */
+LDAPFUNCDECL int ldap_unbind( LDAP *ld );
+LDAPFUNCDECL int ldap_unbind_s( LDAP *ld );
+
+
+/*
+ * in getfilter.c
+ */
+LDAPFUNCDECL LDAPFiltDesc *ldap_init_getfilter( char *fname );
+LDAPFUNCDECL LDAPFiltDesc *ldap_init_getfilter_buf( char *buf, long buflen );
+LDAPFUNCDECL LDAPFiltInfo *ldap_getfirstfilter( LDAPFiltDesc *lfdp, char *tagpat,
+ char *value );
+LDAPFUNCDECL LDAPFiltInfo *ldap_getnextfilter( LDAPFiltDesc *lfdp );
+LDAPFUNCDECL void ldap_setfilteraffixes( LDAPFiltDesc *lfdp, char *prefix, char *suffix );
+LDAPFUNCDECL void ldap_build_filter( char *buf, unsigned long buflen,
+ char *pattern, char *prefix, char *suffix, char *attr,
+ char *value, char **valwords );
+
+/*
+ * in free.c
+ */
+LDAPFUNCDECL void ldap_getfilter_free( LDAPFiltDesc *lfdp );
+LDAPFUNCDECL void ldap_mods_free( LDAPMod **mods, int freemods );
+
+/*
+ * in friendly.c
+ */
+LDAPFUNCDECL char *ldap_friendly_name( char *filename, char *uname,
+ FriendlyMap **map );
+LDAPFUNCDECL void ldap_free_friendlymap( FriendlyMap **map );
+
+
+/*
+ * in cldap.c
+ */
+LDAPFUNCDECL LDAP *cldap_open( char *host, int port );
+LDAPFUNCDECL void cldap_close( LDAP *ld );
+LDAPFUNCDECL int cldap_search_s( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly, LDAPMessage **res, char *logdn );
+LDAPFUNCDECL void cldap_setretryinfo( LDAP *ld, int tries, int timeout );
+
+
+/*
+ * in sort.c
+ */
+LDAPFUNCDECL int ldap_sort_entries( LDAP *ld, LDAPMessage **chain, char *attr,
+ int (*cmp)() );
+LDAPFUNCDECL int ldap_sort_values( LDAP *ld, char **vals, int (*cmp)() );
+LDAPFUNCDECL int ldap_sort_strcasecmp( char **a, char **b );
+
+
+/*
+ * in url.c
+ */
+LDAPFUNCDECL int ldap_is_ldap_url( char *url );
+LDAPFUNCDECL int ldap_url_parse( char *url, LDAPURLDesc **ludpp );
+LDAPFUNCDECL void ldap_free_urldesc( LDAPURLDesc *ludp );
+LDAPFUNCDECL int ldap_url_search( LDAP *ld, char *url, int attrsonly );
+LDAPFUNCDECL int ldap_url_search_s( LDAP *ld, char *url, int attrsonly,
+ LDAPMessage **res );
+LDAPFUNCDECL int ldap_url_search_st( LDAP *ld, char *url, int attrsonly,
+ struct timeval *timeout, LDAPMessage **res );
+
+
+/*
+ * in charset.c
+ */
+#ifdef STR_TRANSLATION
+LDAPFUNCDECL void ldap_set_string_translators( LDAP *ld,
+ BERTranslateProc encode_proc, BERTranslateProc decode_proc );
+LDAPFUNCDECL int ldap_translate_from_t61( LDAP *ld, char **bufp,
+ unsigned long *lenp, int free_input );
+LDAPFUNCDECL int ldap_translate_to_t61( LDAP *ld, char **bufp,
+ unsigned long *lenp, int free_input );
+LDAPFUNCDECL void ldap_enable_translation( LDAP *ld, LDAPMessage *entry,
+ int enable );
+
+#ifdef LDAP_CHARSET_8859
+LDAPFUNCDECL int ldap_t61_to_8859( char **bufp, unsigned long *buflenp,
+ int free_input );
+LDAPFUNCDECL int ldap_8859_to_t61( char **bufp, unsigned long *buflenp,
+ int free_input );
+#endif /* LDAP_CHARSET_8859 */
+#endif /* STR_TRANSLATION */
+
+
+#ifdef WINSOCK
+/*
+ * in msdos/winsock/wsa.c
+ */
+LDAPFUNCDECL void ldap_memfree( void *p );
+#endif /* WINSOCK */
diff --git a/ldap/inckit/srchpref.h b/ldap/inckit/srchpref.h
new file mode 100755
index 00000000..fe8a422c
--- /dev/null
+++ b/ldap/inckit/srchpref.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1993, 1994 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.
+ *
+ * searchpref.h: display template library defines
+ * 16 May 1994 by Gordon Good
+ */
+
+
+#ifndef _SRCHPREF_H
+#define _SRCHPREF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct ldap_searchattr {
+ char *sa_attrlabel;
+ char *sa_attr;
+ /* max 32 matchtypes for now */
+ unsigned long sa_matchtypebitmap;
+ char *sa_selectattr;
+ char *sa_selecttext;
+ struct ldap_searchattr *sa_next;
+};
+
+struct ldap_searchmatch {
+ char *sm_matchprompt;
+ char *sm_filter;
+ struct ldap_searchmatch *sm_next;
+};
+
+struct ldap_searchobj {
+ char *so_objtypeprompt;
+ unsigned long so_options;
+ char *so_prompt;
+ short so_defaultscope;
+ char *so_filterprefix;
+ char *so_filtertag;
+ char *so_defaultselectattr;
+ char *so_defaultselecttext;
+ struct ldap_searchattr *so_salist;
+ struct ldap_searchmatch *so_smlist;
+ struct ldap_searchobj *so_next;
+};
+
+#define NULLSEARCHOBJ ((struct ldap_searchobj *)0)
+
+/*
+ * global search object options
+ */
+#define LDAP_SEARCHOBJ_OPT_INTERNAL 0x00000001
+
+#define LDAP_IS_SEARCHOBJ_OPTION_SET( so, option ) \
+ (((so)->so_options & option ) != 0 )
+
+#define LDAP_SEARCHPREF_VERSION_ZERO 0
+#define LDAP_SEARCHPREF_VERSION 1
+
+#define LDAP_SEARCHPREF_ERR_VERSION 1
+#define LDAP_SEARCHPREF_ERR_MEM 2
+#define LDAP_SEARCHPREF_ERR_SYNTAX 3
+#define LDAP_SEARCHPREF_ERR_FILE 4
+
+
+#ifndef NEEDPROTOS
+int ldap_init_searchprefs();
+int ldap_init_searchprefs_buf();
+void ldap_free_searchprefs();
+struct ldap_searchobj *ldap_first_searchobj();
+struct ldap_searchobj *ldap_next_searchobj();
+
+#else /* !NEEDPROTOS */
+
+LDAPFUNCDECL int
+ldap_init_searchprefs( char *file, struct ldap_searchobj **solistp );
+
+LDAPFUNCDECL int
+ldap_init_searchprefs_buf( char *buf, long buflen,
+ struct ldap_searchobj **solistp );
+
+LDAPFUNCDECL void
+ldap_free_searchprefs( struct ldap_searchobj *solist );
+
+LDAPFUNCDECL struct ldap_searchobj *
+ldap_first_searchobj( struct ldap_searchobj *solist );
+
+LDAPFUNCDECL struct ldap_searchobj *
+ldap_next_searchobj( struct ldap_searchobj *sollist,
+ struct ldap_searchobj *so );
+
+#endif /* !NEEDPROTOS */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _SRCHPREF_H */