summaryrefslogtreecommitdiff
path: root/ldap
diff options
context:
space:
mode:
Diffstat (limited to 'ldap')
-rwxr-xr-xldap/binaries/debug/ldap32.dllbin0 -> 204800 bytes
-rwxr-xr-xldap/binaries/debug/ldap32.libbin0 -> 81202 bytes
-rwxr-xr-xldap/binaries/debug/libldap.dllbin0 -> 279236 bytes
-rwxr-xr-xldap/binaries/debug/libldap.libbin0 -> 14336 bytes
-rwxr-xr-xldap/binaries/debug/ltest.exebin0 -> 64892 bytes
-rwxr-xr-xldap/binaries/debug/ltest32.exebin0 -> 92160 bytes
-rwxr-xr-xldap/binaries/release/ldap32.dllbin0 -> 138752 bytes
-rwxr-xr-xldap/binaries/release/ldap32.libbin0 -> 79332 bytes
-rwxr-xr-xldap/binaries/release/libldap.dllbin0 -> 106496 bytes
-rwxr-xr-xldap/binaries/release/libldap.libbin0 -> 14336 bytes
-rwxr-xr-xldap/disptmpl.cfg677
-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
-rwxr-xr-xldap/kbind.c368
-rw-r--r--ldap/ldap32.gidbin0 -> 8628 bytes
-rwxr-xr-xldap/ldap32.hlpbin0 -> 72697 bytes
-rwxr-xr-xldap/ldfilter.cfg105
-rwxr-xr-xldap/ldfriend.cfg242
l---------ldap/lib1
-rwxr-xr-xldap/libldap.hlpbin0 -> 76104 bytes
-rwxr-xr-xldap/libldap.mak667
-rwxr-xr-xldap/readme.txt218
-rwxr-xr-xldap/srchpref.cfg153
28 files changed, 4154 insertions, 0 deletions
diff --git a/ldap/binaries/debug/ldap32.dll b/ldap/binaries/debug/ldap32.dll
new file mode 100755
index 00000000..e9a734b2
--- /dev/null
+++ b/ldap/binaries/debug/ldap32.dll
Binary files differ
diff --git a/ldap/binaries/debug/ldap32.lib b/ldap/binaries/debug/ldap32.lib
new file mode 100755
index 00000000..e5e1231e
--- /dev/null
+++ b/ldap/binaries/debug/ldap32.lib
Binary files differ
diff --git a/ldap/binaries/debug/libldap.dll b/ldap/binaries/debug/libldap.dll
new file mode 100755
index 00000000..52688f37
--- /dev/null
+++ b/ldap/binaries/debug/libldap.dll
Binary files differ
diff --git a/ldap/binaries/debug/libldap.lib b/ldap/binaries/debug/libldap.lib
new file mode 100755
index 00000000..8ae6890a
--- /dev/null
+++ b/ldap/binaries/debug/libldap.lib
Binary files differ
diff --git a/ldap/binaries/debug/ltest.exe b/ldap/binaries/debug/ltest.exe
new file mode 100755
index 00000000..1d7cd6ca
--- /dev/null
+++ b/ldap/binaries/debug/ltest.exe
Binary files differ
diff --git a/ldap/binaries/debug/ltest32.exe b/ldap/binaries/debug/ltest32.exe
new file mode 100755
index 00000000..09a1ac72
--- /dev/null
+++ b/ldap/binaries/debug/ltest32.exe
Binary files differ
diff --git a/ldap/binaries/release/ldap32.dll b/ldap/binaries/release/ldap32.dll
new file mode 100755
index 00000000..2284f9f8
--- /dev/null
+++ b/ldap/binaries/release/ldap32.dll
Binary files differ
diff --git a/ldap/binaries/release/ldap32.lib b/ldap/binaries/release/ldap32.lib
new file mode 100755
index 00000000..506dedd3
--- /dev/null
+++ b/ldap/binaries/release/ldap32.lib
Binary files differ
diff --git a/ldap/binaries/release/libldap.dll b/ldap/binaries/release/libldap.dll
new file mode 100755
index 00000000..16cb6ade
--- /dev/null
+++ b/ldap/binaries/release/libldap.dll
Binary files differ
diff --git a/ldap/binaries/release/libldap.lib b/ldap/binaries/release/libldap.lib
new file mode 100755
index 00000000..8ae6890a
--- /dev/null
+++ b/ldap/binaries/release/libldap.lib
Binary files differ
diff --git a/ldap/disptmpl.cfg b/ldap/disptmpl.cfg
new file mode 100755
index 00000000..f08e3b27
--- /dev/null
+++ b/ldap/disptmpl.cfg
@@ -0,0 +1,677 @@
+##########################################################################
+# LDAP display templates
+##########################################################################
+
+#
+# Version must be 1
+#
+Version 1
+
+##########################################################################
+# U-M Person template
+##########################################################################
+#
+# template name and plural name come first
+"U-M Person"
+"U-M People"
+
+# name of the icon that is associated with this template
+"person icon"
+
+# blank-separated list of template options ("" for none)
+# addable - end-user should be allowed to add these types of entries
+# modrdn - end-user can change the name of these entries
+# altview - this template is referred to in another template's
+# "linkact" item
+"addable"
+
+#
+# objectclass list
+umichPerson person
+END
+
+#
+# name of attribute to authenticate as ("" means auth as this entry)
+""
+
+#
+# default attribute name to use when forming RDN of a new entry
+#
+cn
+
+#
+# default location when adding new entries (DN; "" means no default)
+"o=University of Michigan, c=US"
+
+#
+# rules used to define default values for new entries
+END
+
+#
+#
+# list of items for display
+# each line is either:
+# item (type) (attribute) (attr name) (extra args...)
+# to define an item or
+# samerow
+# to keep the next item on the same row as the previous
+#
+# valid types are:
+# cis - case ignore string
+# mls - multiline string
+# dn -
+# mail - case ignore string that contains an RFC822 mail address
+# bool - boolean value
+# jpeg - inlined JPEG image
+# jpegbtn - JPEG image button
+# fax - inlined Fax image
+# faxbtn - Fax image button
+# audiobtn - audio button
+# time - time value
+# date - time value displayed as a date only
+# url - labeled URL for links to items in WWW
+# searchact - search action
+# linkact - link to another template
+#
+# valid options (comma separated list appended to the type) are:
+# ro - attribute is read only; don't let user edit it
+# sort - order the values of this attribute
+# 1val - disallow entry of multiple values
+# required - this attribute should have at least one value
+# hide - don't show this item if attribute has no values
+# hideiffalse - hide item if value is FALSE (for type 'bool' only)
+#
+item jpegbtn "View Photo" jpegPhoto "Next Photo"
+item audiobtn "Play Sound" audio
+item cis,ro,sort "Also Known As" cn
+item mail "E-Mail Address" mail
+item cis "Work Phone" telephoneNumber
+item cis "Fax Number" facsimileTelephoneNumber
+item cis "Pager Number" pager
+item mls "Work Address" postalAddress
+item cis,sort "Title" title
+item cis,ro "Uniqname" uid
+item mls "Description" multiLineDescription
+item cis "Home Phone" homePhone
+item mls "Home Address" homePostalAddress
+item url "More Info (URL)" labeledURL
+item dn,sort "See Also" seeAlso
+item cis "Favorite Beverage" drink
+item cis "Notice" notice
+item bool,hideiffalse "On Vacation" onVacation
+item mls,1val "Vacation Message" vacationMessage
+item bool,hideiffalse "Do Not Allow Updates" noBatchUpdates
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item searchact "Find Groups Added To" "" "-dnt" "(&(objectclass=rfc822mailgroup)(member=%v))" "multiLineDescription" "Description" ""
+item searchact "List Owned Groups" "" "-dnt" "(&(objectclass=rfc822mailgroup)(owner=%v))" "title" "Title" ""
+item linkact "Other Addresses" "" "other addresses"
+END
+
+
+##########################################################################
+# Person template
+##########################################################################
+"Person"
+"People"
+"person icon"
+
+# template options
+addable
+#
+# objectclass list
+person
+END
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+#
+cn
+
+# default location when adding new entries
+""
+
+#
+# rules used to define default values for new entries
+END
+
+#
+# list of items for display
+item jpegbtn "View Photo" jpegPhoto "Next Photo"
+item audiobtn "Play Sound" audio
+item cis,sort "Also Known As" cn
+item cis,sort "Title" title
+item mls "Work Address" postalAddress
+item cis "Work Phone" telephoneNumber
+item cis "Fax Number" facsimileTelephoneNumber
+item cis "Pager Number" pager
+item mls "Home Address" homePostalAddress
+item cis "Home Phone" homePhone
+item cis "User ID" uid
+item mail "E-Mail Address" mail
+item cis "Description" description
+item cis "Favorite Beverage" drink
+item dn,sort "See Also" seeAlso
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+
+##########################################################################
+# Group template
+##########################################################################
+"Group"
+"Groups"
+"group icon"
+
+# template options
+addable modrdn
+
+# objectclass list
+rfc822MailGroup
+END
+
+# name of attribute to authenticate as
+"owner"
+
+# default attribute name to use when forming RDN of a new entry
+#
+cn
+
+# default location when adding new entries
+"ou=User Groups, ou=Groups, o=University of Michigan, c=US"
+
+#
+# rules used to define default values for new entries
+constant "associatedDomain" "umich.edu"
+constant "joinable" "FALSE"
+addersdn "owner"
+addersdn "member"
+addersdn "errorsTo"
+addersdn "requestsTo"
+END
+
+#
+#
+# list of items for display
+# each line is either:
+# item (type) (attribute) (attr name) (extra args...)
+# to define an item or
+# samerow
+#
+# list of items for display
+item cis,sort "Also Known As" cn
+item mls "Description" multiLineDescription
+item cis "Phone Number" telephoneNumber
+item cis "Fax Number" facsimileTelephoneNumber
+item mls "Address" postalAddress
+item dn,required,sort "Owner" owner
+item url "More Info (URL)" labeledURL
+item dn,sort "See Also" seeAlso
+item dn,sort "Errors To" errorsTo
+item dn,sort "Requests To" requestsTo
+item cis "Associated Domain" associatedDomain
+item cis "Moderator" moderator
+item bool "Suppress 'No E-Mail Address' Errors" suppressNoEmailError
+item bool "Others May Join" joinable
+item dn,sort "X.500 Members" member
+item mail,sort "E-Mail Errors To" rfc822ErrorsTo
+item mail,sort "E-Mail Requests To" rfc822RequestsTo
+item mail,sort "E-Mail Members" mail
+item cis "Notice" notice
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item searchact "Subscribers" "" "-dnt" "memberOfGroup=%v" "title" "Title" "joinable"
+item verifyact "Verify Members" "member" "mail" "E-Mail Address"
+END
+
+##########################################################################
+# Organization template
+##########################################################################
+"Organization"
+"Organizations"
+"organization icon"
+
+# template options
+""
+
+# objectclass list
+organization
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+o
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+constant "o" "foo"
+END
+
+#
+#
+# list of items for display
+# each line is either:
+# item (type) (attribute) (attr name) (extra args...)
+# to define an item or
+# samerow
+#
+# list of items for display
+item cis,sort "Name" o
+item cis "Location" l
+item mls "Address" postalAddress
+item cis "Phone Number" telephoneNumber
+item cis "Fax Number" facsimileTelephoneNumber
+item cis "Description" description
+item dn,sort "See Also" seeAlso
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+
+##########################################################################
+# Service template
+##########################################################################
+"Service"
+"Services"
+"service icon"
+
+# template options
+"addable"
+
+# objectclass list
+service
+END
+
+# name of attribute to authenticate as
+"owner"
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+"ou=Services, o=University of Michigan, c=US"
+
+# rules used to define default values for new entries
+addersdn "owner"
+END
+
+#
+#
+# list of items for display
+# each line is either:
+# item (type) (attribute) (attr name) (extra args...)
+# to define an item or
+# samerow
+#
+# list of items for display
+item jpegbtn "View Photo" jpegPhoto
+item cis,sort "Name" cn
+item mls "Description" multilineDescription
+item cis "Provider" provider
+item cis,sort "Service Area" serviceArea
+item mail "E-mail Address" mail
+item cis "Phone" telephoneNumber
+item cis "Fax Number" facsimileTelephoneNumber
+item mls "Postal Address" postalAddress
+item cis "Hours" hoursOfOperation
+item url "More Info (URL)" labeledURL
+item dn,sort "Depends On" dependentUpon
+item dn,sort "See Also" seeAlso
+item cis,sort "Platform" platform
+item cis,sort "Product" product
+item cis,sort "Keywords" keywords
+item cis "FCE Rating" serviceRating
+item date "Date Rated" ratingTime
+item mls "Rating Description" ratingDescription
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item dn,required,sort "Owner" owner
+END
+
+
+##########################################################################
+# Organizational Role template
+##########################################################################
+"Organizational Role"
+"Organizational Roles"
+"person icon"
+
+# template options
+""
+
+# objectclass list
+organizationalRole
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+#
+#
+# list of items for display
+# each line is either:
+# item (type) (attribute) (attr name) (extra args...)
+# to define an item or
+# samerow
+#
+# list of items for display
+item cis,sort "Name" cn
+item cis "Description" description
+item dn "Role Occupant" roleOccupant
+item dn,sort "See Also" seeAlso
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+
+##########################################################################
+# Organizational Unit template
+##########################################################################
+"Organizational Unit"
+"Organizational Units"
+"organization icon"
+
+# template options
+""
+
+# objectclass list
+organizationalUnit
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+# Item list
+item cis "Organization Unit Name" ou
+item cis "Title" title
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+
+
+##########################################################################
+# Application Entity template
+##########################################################################
+"Application Entity"
+"Application Entities"
+"application icon"
+
+# template options
+""
+
+# objectclass list
+applicationEntity
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+# Item list
+item cis,sort "Name" cn
+item cis "Location" l
+item cis "Description" description
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+##########################################################################
+# Document template
+##########################################################################
+"Document"
+"Documents"
+"document icon"
+
+# template options
+""
+
+# objectclass list
+document
+umichDocument
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+#
+# Item list
+item cis "Document ID" documentIdentifier
+item cis "Title" documentTitle
+item cis "Series Title" documentSeriesTitle
+item cis "Version" documentVersion
+item cis,sort "Service Area" serviceArea
+item mls "Abstract" multiLineAbstract
+item url "More Info (URL)" labeledURL
+item dn,sort "Availability" documentAvailable
+item dn,sort "See Also" seeAlso
+item cis,sort "Platform" platform
+item cis,sort "Product" product
+item cis,sort "Keyword" keywords
+item dn,sort "Author" documentAuthor
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item dn,required "Owner" owner
+END
+
+##########################################################################
+# Document description template
+##########################################################################
+"DocumentDescription"
+"DocumentDescriptions"
+"document description icon"
+
+# template options
+""
+
+# objectclass list
+documentDescription
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+#
+# Item list
+item mls "Description" multilineDescription
+item url "More Info (URL)" labeledURL
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item dn,required "Owner" owner
+END
+
+##########################################################################
+# Image template
+##########################################################################
+"Image"
+"Images"
+"image icon"
+
+# template options
+""
+
+# objectclass list
+image
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+cn
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+#
+# Item list
+item cis "Name" cn
+item mls "Description" multilineDescription
+item jpegbtn "View Photo(s)" jpegPhoto
+item cis "Citation" citation
+item cis "Copyright" copyright
+item cis "Keywords" keywords
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+item dn,required "Owner" owner
+END
+
+
+
+##########################################################################
+# Country template
+##########################################################################
+"Country"
+"Countries"
+"country icon"
+
+# template options
+""
+
+# objectclass list
+friendlyCountry
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+c
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+# Item list
+item cis "Country Name" co
+item cis "Country Code" c
+item cis "Description" description
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+##########################################################################
+# Locality template
+##########################################################################
+"Locality"
+"Localities"
+"locality icon"
+
+# template options
+""
+
+# objectclass list
+locality
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+l
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+#
+# Item list
+item cis "Name" l
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
+
+
+##########################################################################
+# "Other Addresses" template
+##########################################################################
+"Others Addresses"
+"Other Addresses"
+"other addr icon"
+
+# template options
+"altview"
+
+# objectclass list
+END
+
+# name of attribute to authenticate as
+""
+
+# default attribute name to use when forming RDN of a new entry
+""
+
+# default location when adding new entries
+""
+
+# rules used to define default values for new entries
+END
+
+# Item list
+item cis "Street Address" streetAddress
+item cis "Locality" l
+item cis "State or Province" st
+item cis "Postal Code" postalCode
+item cis,hide "X.400 Address" mhsORAddresses
+item cis,hide "X.400 Address" textEncodedORAddress
+Item cis "Other Mailbox" otherMailbox
+item time,ro "Last Modified" lastModifiedTime
+item dn,ro "Modified By" lastModifiedBy
+END
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 */
diff --git a/ldap/kbind.c b/ldap/kbind.c
new file mode 100755
index 00000000..ff6279c9
--- /dev/null
+++ b/ldap/kbind.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 1993 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * kbind.c
+ */
+
+#ifndef lint
+static char copyright[] = "@(#) Copyright (c) 1993 Regents of the University of Michigan.\nAll rights reserved.\n";
+#endif
+
+#ifdef KERBEROS
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef MACOS
+#include <stdlib.h>
+#include "macos.h"
+#else /* MACOS */
+#ifdef DOS
+#include "msdos.h"
+#endif /* DOS */
+#include <krb.h>
+#include <stdlib.h>
+#if !defined(DOS) && !defined( _WIN32 )
+#include <sys/types.h>
+#endif /* !DOS && !_WIN32 */
+#include <sys/time.h>
+#include <sys/socket.h>
+#endif /* MACOS */
+
+#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
+ * already has a valid ticket granting ticket. The msgid of the
+ * request is returned on success (suitable for passing to ldap_result()),
+ * -1 is returned if there's trouble.
+ *
+ * Example:
+ * ldap_kerberos_bind1( ld, "cn=manager, o=university of michigan, c=us" )
+ */
+int
+ldap_kerberos_bind1( LDAP *ld, char *dn )
+{
+ BerElement *ber;
+ char *cred;
+ int rc, credlen;
+ char *get_kerberosv4_credentials();
+#ifdef STR_TRANSLATION
+ int str_translation_on;
+#endif /* STR_TRANSLATION */
+
+ /*
+ * The bind request looks like this:
+ * BindRequest ::= SEQUENCE {
+ * version INTEGER,
+ * name DistinguishedName,
+ * authentication CHOICE {
+ * krbv42ldap [1] OCTET STRING
+ * krbv42dsa [2] OCTET STRING
+ * }
+ * }
+ * all wrapped up in an LDAPMessage sequence.
+ */
+
+ Debug( LDAP_DEBUG_TRACE, "ldap_kerberos_bind1\n", 0, 0, 0 );
+
+ if ( dn == NULL )
+ dn = "";
+
+ if ( (cred = get_kerberosv4_credentials( ld, dn, "ldapserver",
+ &credlen )) == NULL ) {
+ return( -1 ); /* ld_errno should already be set */
+ }
+
+ /* create a message to send */
+ if ( (ber = alloc_ber_with_options( ld )) == NULLBER ) {
+ free( cred );
+ return( -1 );
+ }
+
+#ifdef STR_TRANSLATION
+ if (( str_translation_on = (( ber->ber_options &
+ LBER_TRANSLATE_STRINGS ) != 0 ))) { /* turn translation off */
+ ber->ber_options &= ~LBER_TRANSLATE_STRINGS;
+ }
+#endif /* STR_TRANSLATION */
+
+ /* fill it in */
+ rc = ber_printf( ber, "{it{isto}}", ++ld->ld_msgid, LDAP_REQ_BIND,
+ ld->ld_version, dn, LDAP_AUTH_KRBV41, cred, credlen );
+
+#ifdef STR_TRANSLATION
+ if ( str_translation_on ) { /* restore translation */
+ ber->ber_options |= LBER_TRANSLATE_STRINGS;
+ }
+#endif /* STR_TRANSLATION */
+
+ if ( rc == -1 ) {
+ free( cred );
+ ber_free( ber, 1 );
+ ld->ld_errno = LDAP_ENCODING_ERROR;
+ return( -1 );
+ }
+
+ free( cred );
+
+#ifndef NO_CACHE
+ if ( ld->ld_cache != NULL ) {
+ ldap_flush_cache( ld );
+ }
+#endif /* !NO_CACHE */
+
+ /* send the message */
+ return ( send_initial_request( ld, LDAP_REQ_BIND, dn, ber ));
+}
+
+int
+ldap_kerberos_bind1_s( LDAP *ld, char *dn )
+{
+ int msgid;
+ LDAPMessage *res;
+
+ Debug( LDAP_DEBUG_TRACE, "ldap_kerberos_bind1_s\n", 0, 0, 0 );
+
+ /* initiate the bind */
+ if ( (msgid = ldap_kerberos_bind1( ld, dn )) == -1 )
+ return( ld->ld_errno );
+
+ /* wait for a result */
+ if ( ldap_result( ld, ld->ld_msgid, 1, (struct timeval *) 0, &res )
+ == -1 ) {
+ return( ld->ld_errno ); /* ldap_result sets ld_errno */
+ }
+
+ return( ldap_result2error( ld, res, 1 ) );
+}
+
+/*
+ * ldap_kerberos_bind2 - initiate a bind to the X.500 server using
+ * kerberos authentication. The dn is supplied. It is assumed the user
+ * already has a valid ticket granting ticket. The msgid of the
+ * request is returned on success (suitable for passing to ldap_result()),
+ * -1 is returned if there's trouble.
+ *
+ * Example:
+ * ldap_kerberos_bind2( ld, "cn=manager, o=university of michigan, c=us" )
+ */
+int
+ldap_kerberos_bind2( LDAP *ld, char *dn )
+{
+ BerElement *ber;
+ char *cred;
+ int rc, credlen;
+ char *get_kerberosv4_credentials();
+#ifdef STR_TRANSLATION
+ int str_translation_on;
+#endif /* STR_TRANSLATION */
+
+ Debug( LDAP_DEBUG_TRACE, "ldap_kerberos_bind2\n", 0, 0, 0 );
+
+ if ( dn == NULL )
+ dn = "";
+
+ if ( (cred = get_kerberosv4_credentials( ld, dn, "x500dsa", &credlen ))
+ == NULL ) {
+ return( -1 ); /* ld_errno should already be set */
+ }
+
+ /* create a message to send */
+ if ( (ber = alloc_ber_with_options( ld )) == NULLBER ) {
+ free( cred );
+ return( -1 );
+ }
+
+#ifdef STR_TRANSLATION
+ if (( str_translation_on = (( ber->ber_options &
+ LBER_TRANSLATE_STRINGS ) != 0 ))) { /* turn translation off */
+ ber->ber_options &= ~LBER_TRANSLATE_STRINGS;
+ }
+#endif /* STR_TRANSLATION */
+
+ /* fill it in */
+ rc = ber_printf( ber, "{it{isto}}", ++ld->ld_msgid, LDAP_REQ_BIND,
+ ld->ld_version, dn, LDAP_AUTH_KRBV42, cred, credlen );
+
+
+#ifdef STR_TRANSLATION
+ if ( str_translation_on ) { /* restore translation */
+ ber->ber_options |= LBER_TRANSLATE_STRINGS;
+ }
+#endif /* STR_TRANSLATION */
+
+ free( cred );
+
+ if ( rc == -1 ) {
+ ber_free( ber, 1 );
+ ld->ld_errno = LDAP_ENCODING_ERROR;
+ return( -1 );
+ }
+
+ /* send the message */
+ return ( send_initial_request( ld, LDAP_REQ_BIND, dn, ber ));
+}
+
+/* synchronous bind to DSA using kerberos */
+int
+ldap_kerberos_bind2_s( LDAP *ld, char *dn )
+{
+ int msgid;
+ LDAPMessage *res;
+
+ Debug( LDAP_DEBUG_TRACE, "ldap_kerberos_bind2_s\n", 0, 0, 0 );
+
+ /* initiate the bind */
+ if ( (msgid = ldap_kerberos_bind2( ld, dn )) == -1 )
+ return( ld->ld_errno );
+
+ /* wait for a result */
+ if ( ldap_result( ld, ld->ld_msgid, 1, (struct timeval *) 0, &res )
+ == -1 ) {
+ return( ld->ld_errno ); /* ldap_result sets ld_errno */
+ }
+
+ return( ldap_result2error( ld, res, 1 ) );
+}
+
+/* synchronous bind to ldap and DSA using kerberos */
+int
+ldap_kerberos_bind_s( LDAP *ld, char *dn )
+{
+ int err;
+
+ Debug( LDAP_DEBUG_TRACE, "ldap_kerberos_bind_s\n", 0, 0, 0 );
+
+ if ( (err = ldap_kerberos_bind1_s( ld, dn )) != LDAP_SUCCESS )
+ return( err );
+
+ return( ldap_kerberos_bind2_s( ld, dn ) );
+}
+
+
+#ifndef AUTHMAN
+#ifdef WINDOWS
+#define FreeWindowsLibrary() FreeLibrary(instKrbv4DLL);instKrbv4DLL = (HINSTANCE)NULL;
+#else /* WINDOWS */
+#define FreeWindowsLibrary() /* do nothing */
+#endif /* WINDOWS */
+/*
+ * get_kerberosv4_credentials - obtain kerberos v4 credentials for ldap.
+ * The dn of the entry to which to bind is supplied. It's assumed the
+ * user already has a tgt.
+ */
+
+char *
+get_kerberosv4_credentials( LDAP *ld, char *who, char *service, int *len )
+{
+ KTEXT_ST ktxt;
+ int err;
+ char realm[REALM_SZ], *cred, *krbinstance;
+#ifdef WINDOWS
+ typedef int (_cdecl* pfn_krb_get_tf_realm) (char FAR *,char FAR *);
+ typedef int (PASCAL* pfn_krb_mk_req) (KTEXT,LPSTR,LPSTR,LPSTR,long);
+ typedef char * (_cdecl* pfn_tkt_string) ();
+
+ static HINSTANCE instKrbv4DLL = (HINSTANCE)NULL;
+ pfn_krb_get_tf_realm fptr_krb_get_tf_realm = NULL;
+ pfn_krb_mk_req fptr_krb_mk_req = NULL;
+ pfn_tkt_string fptr_tkt_string = NULL;
+ char* p_tkt_string = NULL;
+ KTEXT pKt = &ktxt;
+#endif
+
+ Debug( LDAP_DEBUG_TRACE, "get_kerberosv4_credentials\n", 0, 0, 0 );
+
+#ifdef WINDOWS
+ /*
+ * The goal is to gracefully survive the absence of krbv4win.dll
+ * and thus wshelper.dll. User's won't be able to use kerberos,
+ * but they shouldn't see a message box everytime libldap.dll loads.
+ */
+ if ( !instKrbv4DLL ) {
+ unsigned int prevMode = SetErrorMode( SEM_NOOPENFILEERRORBOX ); // don't whine at user if you can't find it
+ instKrbv4DLL = LoadLibrary("Krbv4win.DLL");
+ SetErrorMode( prevMode );
+
+ if ( instKrbv4DLL < HINSTANCE_ERROR ) { // can't find authlib
+ ld->ld_errno = LDAP_AUTH_UNKNOWN;
+ return( NULL );
+ }
+
+ fptr_krb_get_tf_realm = (pfn_krb_get_tf_realm)GetProcAddress( instKrbv4DLL, "_krb_get_tf_realm" );
+ fptr_krb_mk_req = (pfn_krb_mk_req)GetProcAddress( instKrbv4DLL, "krb_mk_req" );
+ fptr_tkt_string = (pfn_tkt_string)GetProcAddress( instKrbv4DLL, "_tkt_string" );
+
+ // verify that we found all the routines we need
+ if (!(fptr_krb_mk_req && fptr_krb_get_tf_realm && fptr_tkt_string)) {
+ FreeWindowsLibrary();
+ ld->ld_errno = LDAP_AUTH_UNKNOWN;
+ return( NULL );
+ }
+
+ }
+ p_tkt_string = (fptr_tkt_string)( );
+ if ( (err = (fptr_krb_get_tf_realm)( p_tkt_string, realm )) != KSUCCESS ) {
+#else /* WINDOWS */
+ if ( (err = krb_get_tf_realm( tkt_string(), realm )) != KSUCCESS ) {
+#endif /* WINDOWS */
+#ifndef NO_USERINTERFACE
+ fprintf( stderr, "krb_get_tf_realm failed (%s)\n",
+ krb_err_txt[err] );
+#endif /* NO_USERINTERFACE */
+ ld->ld_errno = LDAP_INVALID_CREDENTIALS;
+ FreeWindowsLibrary();
+ return( NULL );
+ }
+
+#ifdef LDAP_REFERRALS
+ krbinstance = ld->ld_defconn->lconn_krbinstance;
+#else /* LDAP_REFERRALS */
+ krbinstance = ld->ld_host;
+#endif /* LDAP_REFERRALS */
+
+#ifdef WINDOWS
+ if ( !krbinstance ) { // if we don't know name of service host, no chance for service tickets
+ FreeWindowsLibrary();
+ ld->ld_errno = LDAP_LOCAL_ERROR;
+ WSASetLastError(WSANO_ADDRESS);
+ return( NULL );
+ }
+#endif /* WINDOWS */
+
+#ifdef WINDOWS
+ if ( (err = (fptr_krb_mk_req)( pKt, service, krbinstance, realm, 0 ))
+#else /* WINDOWS */
+ if ( (err = krb_mk_req( &ktxt, service, krbinstance, realm, 0 ))
+#endif /* WINDOWS */
+ != KSUCCESS ) {
+#ifndef NO_USERINTERFACE
+ fprintf( stderr, "krb_mk_req failed (%s)\n", krb_err_txt[err] );
+#endif /* NO_USERINTERFACE */
+ ld->ld_errno = LDAP_INVALID_CREDENTIALS;
+ FreeWindowsLibrary();
+ return( NULL );
+ }
+
+ if ( ( cred = malloc( ktxt.length )) == NULL ) {
+ ld->ld_errno = LDAP_NO_MEMORY;
+ FreeWindowsLibrary();
+ return( NULL );
+ }
+
+ *len = ktxt.length;
+ memcpy( cred, ktxt.dat, ktxt.length );
+
+ FreeWindowsLibrary();
+ return( cred );
+}
+
+#endif /* !AUTHMAN */
+#endif /* KERBEROS */
diff --git a/ldap/ldap32.gid b/ldap/ldap32.gid
new file mode 100644
index 00000000..8f35a869
--- /dev/null
+++ b/ldap/ldap32.gid
Binary files differ
diff --git a/ldap/ldap32.hlp b/ldap/ldap32.hlp
new file mode 100755
index 00000000..f9de5446
--- /dev/null
+++ b/ldap/ldap32.hlp
Binary files differ
diff --git a/ldap/ldfilter.cfg b/ldap/ldfilter.cfg
new file mode 100755
index 00000000..c602f7d2
--- /dev/null
+++ b/ldap/ldfilter.cfg
@@ -0,0 +1,105 @@
+# ldap filter file
+#
+# lines like this that start with # or empty lines are ignored
+#
+# syntax:
+#
+# <tag>
+# <pattern1> <delimiters> <filter1-1> <desc1-1> [<scope>]
+# <filter1-2> <desc1-2> [<scope>]
+#
+# <pattern2> <delimiters> <filter2-1> <desc2-1> [<scope>] ...
+#
+# The "desc" should describe the filter and it should correctly complete
+# both of the following phrases:
+#
+# One <desc> match was found for...
+# Three <desc> matches were found for...
+#
+# The scope is optional, and should be one of:
+# "base"
+# "onelevel"
+# "subtree"
+# if it is included.
+#
+
+"finger and ud and go500 and go500gw subtree and web500gw subtree and rp500 and rcpt500 and ufn last"
+ "=" " " "%v" "arbitrary filter"
+
+ "^[0-9][0-9-]*$" " " "(telephoneNumber=*%v)" "phone number"
+
+ "@" " " "(mail=%v)" "email address"
+ "(mail=%v*)" "start of email address"
+
+ "^.[. _].*" ". _" "(cn=%v1* %v2-)" "first initial"
+
+ ".*[. _].$" ". _" "(cn=%v1-*)" "last initial"
+
+ "[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
+ "(|(sn~=%v1-)(cn~=%v1-))" "approximate"
+
+ ".*" ". " "(|(cn=%v1)(sn=%v1)(uid=%v1))" "exact"
+ "(|(cn~=%v1)(sn~=%v1))" "approximate"
+
+"go500gw onelevel and web500gw onelevel and ufn first and ufn intermediate"
+ "=" " " "%v" "arbitrary filter"
+
+ "^..$" " " "(|(o=%v)(c=%v)(l=%v)(co=%v))" "exact"
+ "(|(o~=%v)(c~=%v)(l~=%v)(co~=%v))" "approximate"
+
+ " " " " "(|(o=%v)(l=%v)(co=%v)(ou=%v))" "exact"
+ "(|(o~=%v)(l~=%v)(co~=%v)(ou~=%v))" "approximate"
+
+ "\." " " "(associatedDomain=%v)" "exact"
+
+ ".*" " " "(|(o=%v)(l=%v)(co=%v)(ou=%v))" "exact"
+ "(|(o~=%v)(l~=%v)(co~=%v)(ou~=%v))" "approximate"
+
+
+#
+# xax500
+#
+
+"xax500"
+ "=" " " "(%v)" "arbitrary filter"
+
+ "^[0-9][0-9-]*$" " " "(telephoneNumber=*%v)" "phone number"
+
+ "@" " " "(mail=%v)" "email address"
+ "(mail=%v*)" "start of email address"
+
+ "^.[. _].*" ". _" "(cn=%v1* %v2-)" "first initial"
+
+ ".*[. _].$" ". _" "(cn=%v1-*)" "last initial"
+
+ "[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
+ "(|(sn~=%v1-)(cn~=%v1-))" "approximate"
+
+ ".*" ". " "(|(cn=%v1)(sn=%v1)(uid=%v1))" "exact"
+ "(|(cn=%v1)(sn~=%v1))" "approximate"
+
+
+"xax500-auth"
+ "=" " " "(%v)" "arbitrary filter"
+
+ "^[0-9][0-9-]*$" " " "(telephoneNumber=*%v)" "phone number"
+
+ "@" " " "(mail=%v)" "email address"
+ "(mail=%v*)" "start of email address"
+
+ "^.[. _].*" ". _" "(cn=%v1* %v2-)" "first initial"
+
+ ".*[. _].$" ". _" "(cn=%v1-*)" "last initial"
+
+ "[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
+ "(|(sn~=%v1-)(cn~=%v1-))" "approximate"
+
+ ".*" ". " "(|(cn=%v1)(sn=%v1)(uid=%v1))" "exact"
+ "(|(cn=%v1)(sn~=%v1))" "approximate"
+
+"list500"
+ "[. _]" ". _" "(|(sn=%v1-)(cn=%v1-))" "exact"
+ "(|(sn~=%v1-)(cn~=%v1-))" "approximate"
+
+ ".*" ". " "(|(cn=%v1)(sn=%v1)(uid=%v1))" "exact"
+ "(|(cn~=%v1)(sn~=%v1))" "approximate"
diff --git a/ldap/ldfriend.cfg b/ldap/ldfriend.cfg
new file mode 100755
index 00000000..3605090c
--- /dev/null
+++ b/ldap/ldfriend.cfg
@@ -0,0 +1,242 @@
+AD Andorra
+AE United Arab Emirates
+AF Afghanistan
+AG Antigua and Barbuda
+AI Anguilla
+AL Albania
+AM Armenia
+AN Netherlands Antilles
+AO Angola
+AQ Antarctica
+AR Argentina
+AS American Samoa
+AT Austria
+AU Australia
+AW Aruba
+AZ Azerbaijan
+BA Bosnia and Herzegowina
+BB Barbados
+BD Bangladesh
+BE Belgium
+BF Burkina Faso
+BG Bulgaria
+BH Bahrain
+BI Burundi
+BJ Benin
+BM Bermuda
+BN Brunei Darussalam
+BO Bolivia
+BR Brazil
+BS Bahamas
+BT Bhutan
+BV Bouvet Island
+BW Botswana
+BY Belarus
+BZ Belize
+CA Canada
+CC Cocos (Keeling) Islands
+CF Central African Republic
+CG Congo
+CH Switzerland
+CI Cote d'Ivoire
+CK Cook Islands
+CL Chile
+CM Cameroon
+CN China
+CO Colombia
+CR Costa Rica
+CS Former Czechoslovakia
+CU Cuba
+CV Cape Verde
+CX Christmas Island
+CY Cyprus
+CZ Czech Republic
+DE Germany
+DJ Djibouti
+DK Denmark
+DM Dominica
+DO Dominican Republic
+DZ Algeria
+EC Ecuador
+EE Estonia
+EG Egypt
+EH Western Sahara
+ER Eritrea
+ES Spain
+ET Ethiopia
+FI Finland
+FJ Fiji
+FK Falkland Islands (Malvinas)
+FM Micronesia
+FO Faroe Islands
+FR France
+FX France, Metropolitan
+GA Gabon
+GB United Kingdom
+GD Grenada
+GE Georgia
+GF French Guiana
+GH Ghana
+GI Gibraltar
+GL Greenland
+GM Gambia
+GN Guinea
+GP Guadeloupe
+GQ Equatorial Guinea
+GR Greece
+GS South Georgia and the South Sandwich Islands
+GT Guatemala
+GU Guam
+GW Guinea-Bissau
+GY Guyana
+HK Hong Kong
+HM Heard and McDonald Islands
+HN Honduras
+HR Croatia
+HT Haiti
+HU Hungary
+ID Indonesia
+IE Ireland
+IL Israel
+IN India
+IO British Indian Ocean Territory
+IQ Iraq
+IR Iran
+IS Iceland
+IT Italy
+JM Jamaica
+JO Jordan
+JP Japan
+KE Kenya
+KG Kyrgyzstan
+KH Cambodia
+KI Kiribati
+KM Comoros
+KN Saint Kitts and Nevis
+KP Korea, Democratic People's Republic of
+KR Korea, Republic of
+KW Kuwait
+KY Cayman Islands
+KZ Kazakhstan
+LA Laos
+LB Lebanon
+LC Saint Lucia
+LI Liechtenstein
+LK Sri Lanka
+LR Liberia
+LS Lesotho
+LT Lithuania
+LU Luxembourg
+LV Latvia
+LY Libya
+MA Morocco
+MC Monaco
+MD Moldova
+MG Madagascar
+MH Marshall Islands
+MK Macedonia
+ML Mali
+MM Myanmar
+MN Mongolia
+MO Macau
+MP Northern Mariana Islands
+MQ Martinique
+MR Mauritania
+MS Montserrat
+MT Malta
+MU Mauritius
+MV Maldives
+MW Malawi
+MX Mexico
+MY Malaysia
+MZ Mozambique
+NA Namibia
+NC New Caledonia
+NE Niger
+NF Norfolk Island
+NG Nigeria
+NI Nicaragua
+NL Netherlands
+NO Norway
+NP Nepal
+NR Nauru
+NU Niue
+NZ New Zealand
+OM Oman
+PA Panama
+PE Peru
+PF French Polynesia
+PG Papua New Guinea
+PH Philippines
+PK Pakistan
+PL Poland
+PM St. Pierre and Miquelon
+PN Pitcairn
+PR Puerto Rico
+PT Portugal
+PW Palau
+PY Paraguay
+QA Qatar
+RE Reunion
+RO Romania
+RU Russian Federation
+RW Rwanda
+SA Saudi Arabia
+SB Solomon Islands
+SC Seychelles
+SD Sudan
+SE Sweden
+SG Singapore
+SH St. Helena
+SI Slovenia
+SJ Svalbard and Jan Mayen Islands
+SK Slovakia (Slovak Republic)
+SL Sierra Leone
+SM San Marino
+SN Senegal
+SO Somalia
+SR Suriname
+ST Sao Tome and Principe
+SU Former Soviet Union
+SV El Salvador
+SY Syria
+SZ Swaziland
+TC Turks and Caicos Islands
+TD Chad
+TF French Southern Territories
+TG Togo
+TH Thailand
+TJ Tajikistan
+TK Tokelau
+TM Turkmenistan
+TN Tunisia
+TO Tonga
+TP East Timor
+TR Turkey
+TT Trinidad and Tobago
+TV Tuvalu
+TW Taiwan
+TZ Tanzania
+UA Ukraine
+UG Uganda
+UK United Kingdom
+UM United States Minor Outlying Islands
+US United States of America
+UY Uruguay
+UZ Uzbekistan
+VA Vatican City State (Holy See)
+VC Saint Vincent and the Grenadines
+VE Venezuela
+VG Virgin Islands (British)
+VI Virgin Islands (U.S.)
+VN Viet Nam
+VU Vanuatu
+WF Wallis and Futuna Islands
+WS Samoa
+YE Yemen
+YT Mayotte
+YU Yugoslavia
+ZA South Africa
+ZM Zambia
+ZR Zaire
+ZW Zimbabwe
diff --git a/ldap/lib b/ldap/lib
new file mode 120000
index 00000000..b545aebb
--- /dev/null
+++ b/ldap/lib
@@ -0,0 +1 @@
+binaries/release \ No newline at end of file
diff --git a/ldap/libldap.hlp b/ldap/libldap.hlp
new file mode 100755
index 00000000..981ef717
--- /dev/null
+++ b/ldap/libldap.hlp
Binary files differ
diff --git a/ldap/libldap.mak b/ldap/libldap.mak
new file mode 100755
index 00000000..6e9a2b98
--- /dev/null
+++ b/ldap/libldap.mak
@@ -0,0 +1,667 @@
+# Microsoft Visual C++ generated build script - Do not modify
+
+PROJ = LIBLDAP
+DEBUG = 0
+PROGTYPE = 1
+CALLER = c:\tmp\ltest.exe
+ARGS =
+DLLS =
+D_RCDEFINES = /d_DEBUG
+R_RCDEFINES = /dNDEBUG
+ORIGIN = MSVC
+ORIGIN_VER = 1.00
+PROJPATH = C:\SRC\LDAP\LIBRAR~1\LIBLDAP\
+USEMFC = 0
+CC = cl
+CPP = cl
+CXX = cl
+CCREATEPCHFLAG =
+CPPCREATEPCHFLAG =
+CUSEPCHFLAG =
+CPPUSEPCHFLAG =
+FIRSTC = ABANDON.C
+FIRSTCPP =
+RC = rc
+CFLAGS_D_WDLL = /nologo /G2 /W3 /Gf /Zi /ALu /Od /D "_DEBUG" /D "WINSOCK" /D "DOS" /D "NEEDPROTOS" /D "NO_USERINTERFACE" /D "KERBEROS" /FR /Fd"LIBLDAP.PDB"
+CFLAGS_R_WDLL = /nologo /f- /G3 /W3 /Gf /ALu /Od /D "NDEBUG" /D "WINSOCK" /D "DOS" /D "NEEDPROTOS" /D "NO_USERINTERFACE" /D "KERBEROS"
+LFLAGS_D_WDLL = /NOLOGO /NOD /NOE /PACKC:61440 /ALIGN:16 /ONERROR:NOEXE /CO /MAP:FULL
+LFLAGS_R_WDLL = /NOLOGO /NOD /NOE /PACKC:61440 /ALIGN:16 /ONERROR:NOEXE /MAP:FULL
+LIBS_D_WDLL = oldnames libw ldllcew commdlg.lib olecli.lib olesvr.lib shell.lib
+LIBS_R_WDLL = oldnames libw ldllcew commdlg.lib olecli.lib olesvr.lib shell.lib
+RCFLAGS = /nologo
+RESFLAGS = /nologo
+RUNFLAGS =
+DEFFILE = LIBLDAP.DEF
+OBJS_EXT =
+LIBS_EXT = WINSOCK.LIB
+!if "$(DEBUG)" == "1"
+CFLAGS = $(CFLAGS_D_WDLL)
+LFLAGS = $(LFLAGS_D_WDLL)
+LIBS = $(LIBS_D_WDLL)
+MAPFILE = nul
+RCDEFINES = $(D_RCDEFINES)
+!else
+CFLAGS = $(CFLAGS_R_WDLL)
+LFLAGS = $(LFLAGS_R_WDLL)
+LIBS = $(LIBS_R_WDLL)
+MAPFILE = nul
+RCDEFINES = $(R_RCDEFINES)
+!endif
+!if [if exist MSVC.BND del MSVC.BND]
+!endif
+SBRS = ABANDON.SBR \
+ ADD.SBR \
+ BIND.SBR \
+ CACHE.SBR \
+ COMPARE.SBR \
+ DELETE.SBR \
+ ERROR.SBR \
+ GETFILTE.SBR \
+ REGEX.SBR \
+ MODIFY.SBR \
+ MODRDN.SBR \
+ GETDN.SBR \
+ GETENTRY.SBR \
+ GETATTR.SBR \
+ GETVALUE.SBR \
+ ADDENTRY.SBR \
+ RESULT.SBR \
+ SEARCH.SBR \
+ UFN.SBR \
+ DECODE.SBR \
+ ENCODE.SBR \
+ IO.SBR \
+ MSDOS.SBR \
+ SBIND.SBR \
+ UNBIND.SBR \
+ KBIND.SBR \
+ FRIENDLY.SBR \
+ DISPTMPL.SBR \
+ DSPARSE.SBR \
+ FREE.SBR \
+ SORT.SBR \
+ SRCHPREF.SBR \
+ TMPLOUT.SBR \
+ REQUEST.SBR \
+ WSOCKIP.SBR \
+ OPEN.SBR \
+ CHARSET.SBR \
+ URL.SBR
+
+
+WINSOCK_DEP =
+
+ABANDON_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+ADD_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+BIND_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+CACHE_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+COMPARE_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+DELETE_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+ERROR_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+GETFILTE_DEP = c:\src\ldap\include\regex.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/file.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+REGEX_DEP = c:\src\ldap\include\portable.h \
+ c:\src\ldap\include\regex.h
+
+
+MODIFY_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+MODRDN_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+GETDN_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+GETENTRY_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+GETATTR_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+GETVALUE_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+ADDENTRY_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+RESULT_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\sys/select.h \
+ c:\src\ldap\include\portable.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+SEARCH_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+UFN_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+DECODE_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\netinet/in.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h
+
+
+ENCODE_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\netinet/in.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h
+
+
+IO_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\netinet/in.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h
+
+
+MSDOS_DEP = c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+SBIND_DEP = c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+UNBIND_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+KBIND_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\krb.h \
+ c:\src\ldap\include\mit_copy.h \
+ c:\src\ldap\include\conf.h \
+ c:\src\ldap\include\osconf.h \
+ c:\src\ldap\include\conf-pc.h \
+ c:\src\ldap\include\des.h \
+ c:\src\ldap\include\lsh_pwd.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+FRIENDLY_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+DISPTMPL_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/file.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\include\disptmpl.h
+
+
+DSPARSE_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/file.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+FREE_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+SORT_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h
+
+
+SRCHPREF_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/file.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\include\srchpref.h
+
+
+TMPLOUT_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/file.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\include\disptmpl.h
+
+
+LIBLDAP_RCDEP =
+
+REQUEST_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\sys/select.h \
+ c:\src\ldap\include\portable.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+WSOCKIP_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\wshelper.h \
+ c:\src\ldap\include\resolv.h \
+ c:\src\ldap\include\arpa/nameser.h \
+ c:\src\ldap\include\hesiod.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\netinet/in.h \
+ c:\src\ldap\include\netdb.h \
+ c:\src\ldap\include\sys\socket.h \
+ c:\src\ldap\include\sys/select.h \
+ c:\src\ldap\include\portable.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\include\_sys/filio.h \
+ c:\src\ldap\include\sys/filio.h \
+ c:\src\ldap\include\_sys/ioctl.h \
+ c:\src\ldap\include\sys/ioctl.h
+
+
+OPEN_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\sys/param.h \
+ c:\src\ldap\include\netinet/in.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+CHARSET_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\sys/param.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+URL_DEP = c:\src\ldap\include\msdos.h \
+ c:\msvc\include\winsock.h \
+ c:\src\ldap\include\sys/socket.h \
+ c:\src\ldap\include\lber.h \
+ c:\src\ldap\include\proto-lb.h \
+ c:\src\ldap\include\ldap.h \
+ c:\src\ldap\include\proto-ld.h \
+ c:\src\ldap\librar~1\libldap\ldap-int.h
+
+
+all: $(PROJ).DLL
+
+ABANDON.OBJ: ABANDON.C $(ABANDON_DEP)
+ $(CC) $(CFLAGS) $(CCREATEPCHFLAG) /c ABANDON.C
+
+ADD.OBJ: ADD.C $(ADD_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ADD.C
+
+BIND.OBJ: BIND.C $(BIND_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c BIND.C
+
+CACHE.OBJ: CACHE.C $(CACHE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c CACHE.C
+
+COMPARE.OBJ: COMPARE.C $(COMPARE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c COMPARE.C
+
+DELETE.OBJ: DELETE.C $(DELETE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c DELETE.C
+
+ERROR.OBJ: ERROR.C $(ERROR_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ERROR.C
+
+GETFILTE.OBJ: GETFILTE.C $(GETFILTE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GETFILTE.C
+
+REGEX.OBJ: REGEX.C $(REGEX_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c REGEX.C
+
+MODIFY.OBJ: MODIFY.C $(MODIFY_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c MODIFY.C
+
+MODRDN.OBJ: MODRDN.C $(MODRDN_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c MODRDN.C
+
+GETDN.OBJ: GETDN.C $(GETDN_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GETDN.C
+
+GETENTRY.OBJ: GETENTRY.C $(GETENTRY_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GETENTRY.C
+
+GETATTR.OBJ: GETATTR.C $(GETATTR_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GETATTR.C
+
+GETVALUE.OBJ: GETVALUE.C $(GETVALUE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c GETVALUE.C
+
+ADDENTRY.OBJ: ADDENTRY.C $(ADDENTRY_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ADDENTRY.C
+
+RESULT.OBJ: RESULT.C $(RESULT_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c RESULT.C
+
+SEARCH.OBJ: SEARCH.C $(SEARCH_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c SEARCH.C
+
+UFN.OBJ: UFN.C $(UFN_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c UFN.C
+
+DECODE.OBJ: ..\LIBLBER\DECODE.C $(DECODE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ..\LIBLBER\DECODE.C
+
+ENCODE.OBJ: ..\LIBLBER\ENCODE.C $(ENCODE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ..\LIBLBER\ENCODE.C
+
+IO.OBJ: ..\LIBLBER\IO.C $(IO_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c ..\LIBLBER\IO.C
+
+MSDOS.OBJ: MSDOS.C $(MSDOS_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c MSDOS.C
+
+SBIND.OBJ: SBIND.C $(SBIND_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c SBIND.C
+
+UNBIND.OBJ: UNBIND.C $(UNBIND_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c UNBIND.C
+
+KBIND.OBJ: KBIND.C $(KBIND_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c KBIND.C
+
+FRIENDLY.OBJ: FRIENDLY.C $(FRIENDLY_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c FRIENDLY.C
+
+DISPTMPL.OBJ: DISPTMPL.C $(DISPTMPL_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c DISPTMPL.C
+
+DSPARSE.OBJ: DSPARSE.C $(DSPARSE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c DSPARSE.C
+
+FREE.OBJ: FREE.C $(FREE_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c FREE.C
+
+SORT.OBJ: SORT.C $(SORT_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c SORT.C
+
+SRCHPREF.OBJ: SRCHPREF.C $(SRCHPREF_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c SRCHPREF.C
+
+TMPLOUT.OBJ: TMPLOUT.C $(TMPLOUT_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c TMPLOUT.C
+
+LIBLDAP.RES: LIBLDAP.RC $(LIBLDAP_RCDEP)
+ $(RC) $(RCFLAGS) $(RCDEFINES) -r LIBLDAP.RC
+
+REQUEST.OBJ: REQUEST.C $(REQUEST_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c REQUEST.C
+
+WSOCKIP.OBJ: WSOCKIP.C $(WSOCKIP_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c WSOCKIP.C
+
+OPEN.OBJ: OPEN.C $(OPEN_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c OPEN.C
+
+CHARSET.OBJ: CHARSET.C $(CHARSET_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c CHARSET.C
+
+URL.OBJ: URL.C $(URL_DEP)
+ $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c URL.C
+
+
+$(PROJ).DLL:: LIBLDAP.RES
+
+$(PROJ).DLL:: ABANDON.OBJ ADD.OBJ BIND.OBJ CACHE.OBJ COMPARE.OBJ DELETE.OBJ ERROR.OBJ \
+ GETFILTE.OBJ REGEX.OBJ MODIFY.OBJ MODRDN.OBJ GETDN.OBJ GETENTRY.OBJ GETATTR.OBJ GETVALUE.OBJ \
+ ADDENTRY.OBJ RESULT.OBJ SEARCH.OBJ UFN.OBJ DECODE.OBJ ENCODE.OBJ IO.OBJ MSDOS.OBJ \
+ SBIND.OBJ UNBIND.OBJ KBIND.OBJ FRIENDLY.OBJ DISPTMPL.OBJ DSPARSE.OBJ FREE.OBJ SORT.OBJ \
+ SRCHPREF.OBJ TMPLOUT.OBJ REQUEST.OBJ WSOCKIP.OBJ OPEN.OBJ CHARSET.OBJ URL.OBJ $(OBJS_EXT) $(DEFFILE)
+ echo >NUL @<<$(PROJ).CRF
+ABANDON.OBJ +
+ADD.OBJ +
+BIND.OBJ +
+CACHE.OBJ +
+COMPARE.OBJ +
+DELETE.OBJ +
+ERROR.OBJ +
+GETFILTE.OBJ +
+REGEX.OBJ +
+MODIFY.OBJ +
+MODRDN.OBJ +
+GETDN.OBJ +
+GETENTRY.OBJ +
+GETATTR.OBJ +
+GETVALUE.OBJ +
+ADDENTRY.OBJ +
+RESULT.OBJ +
+SEARCH.OBJ +
+UFN.OBJ +
+DECODE.OBJ +
+ENCODE.OBJ +
+IO.OBJ +
+MSDOS.OBJ +
+SBIND.OBJ +
+UNBIND.OBJ +
+KBIND.OBJ +
+FRIENDLY.OBJ +
+DISPTMPL.OBJ +
+DSPARSE.OBJ +
+FREE.OBJ +
+SORT.OBJ +
+SRCHPREF.OBJ +
+TMPLOUT.OBJ +
+REQUEST.OBJ +
+WSOCKIP.OBJ +
+OPEN.OBJ +
+CHARSET.OBJ +
+URL.OBJ +
+$(OBJS_EXT)
+$(PROJ).DLL
+$(MAPFILE)
+c:\msvc\lib\+
+c:\msvc\mfc\lib\+
+c:\src\lib\+
+WINSOCK.LIB+
+$(LIBS)
+$(DEFFILE);
+<<
+ link $(LFLAGS) @$(PROJ).CRF
+ $(RC) $(RESFLAGS) LIBLDAP.RES $@
+ @copy $(PROJ).CRF MSVC.BND
+ implib /nowep $(PROJ).LIB $(PROJ).DLL
+
+$(PROJ).DLL:: LIBLDAP.RES
+ if not exist MSVC.BND $(RC) $(RESFLAGS) LIBLDAP.RES $@
+
+run: $(PROJ).DLL
+ $(PROJ) $(RUNFLAGS)
+
+
+$(PROJ).BSC: $(SBRS)
+ bscmake @<<
+/o$@ $(SBRS)
+<<
diff --git a/ldap/readme.txt b/ldap/readme.txt
new file mode 100755
index 00000000..c504f4f0
--- /dev/null
+++ b/ldap/readme.txt
@@ -0,0 +1,218 @@
+
+LDAP (Lightweight Directory Access Protocol) API for Windows/Winsock
+
+(Change history is at the bottom of this file.)
+
+The lber and ldap client libraries have been ported to Microsoft Windows
+in the form of Windows Dynamic Link libraries called LIBLDAP.DLL (16Bit)
+and Ldap32.dll (32Bit). The LTest program is also provided in both
+formats.
+
+A Windows Sockets API (version 1.1 conformant) TCP/IP WINSOCK.DLL or
+WSOCK32.DLL is required for the DLL to run.
+
+Our intent is that this "kit" include everything you'll need to make use
+of the ldap client API from your 16Bit or 32Bit application. If you
+find something missing or have a suggestion for improvement, send email
+to the "bug reporting" address at the bottom of this file.
+
+To use this "kit"
+
+ 1) Get to a DOS prompt
+
+ 2) Create the directory you want this to live in (e.g. \ldap)
+ and cd into it. We will refer to that directory simply as
+ "\ldap" from now on, but it could be anywhere and have any name
+ you desire.
+
+ 3) Use "pkunzip -d" to extract the files. The "-d" is NECESSARY to
+ preserve the subdirectories and avoid file name collisions.
+
+ 4) We have included only the files you need to use and test
+ libldap.dll and ldap32.dll. If you want the entire distribution,
+ with source, you can get it from:
+
+ ftp://terminator.rs.itd.umich.edu/ldap/ldap-3.3.tar.Z
+
+The following files are included in this distribution:
+
+ 16Bit binaries and libs
+ BINARIES/DEBUG/LIBLDAP.DLL
+ BINARIES/DEBUG/LIBLDAP.LIB
+ BINARIES/RELEASE/LIBLDAP.DLL
+ BINARIES/RELEASE/LIBLDAP.LIB
+
+ BINARIES/DEBUG/LTEST.EXE
+
+ 32Bit binaries and libs
+ BINARIES/DEBUG/LDAP32.DLL
+ BINARIES/DEBUG/LDAP32.LIB
+ BINARIES/RELEASE/LDAP32.DLL
+ BINARIES/RELEASE/LDAP32.LIB
+
+ BINARIES/DEBUG/LTEST32.EXE
+
+ Include files
+ INCKIT/MSDOS.H
+ INCKIT/LBER.H
+ INCKIT/LDAP.H
+ INCKIT/PROTO-LD.H
+ INCKIT/PROTO-LB.H
+ INCKIT/SRCHPREF.H
+ INCKIT/DISPTMPL.H
+
+ Sample Configuration files
+ SRCHPREF.CFG
+ DISPTMPL.CFG
+ LDFRIEND.CFG
+ LDFILTER.CFG
+
+ Man pages in the form of Windows HLP files
+ LIBLDAP.HLP - old format hlp file
+ LDAP32.HLP - new format hlp file, both have same content
+
+16Bit versions
+
+ Libldap.dll was compiled with KERBEROS, AUTHMAN, WSHELPER, WIN32,
+ _WINDOWS,& LDAP_REFERRALS defined. Even if you do not need kerberos
+ authentication, (see below for more information on kerberos) this
+ dll should work correctly for you.
+
+ LDAP_REFERRALS makes libldap.dll capable of handling referrals
+ returned by a slapd server.
+
+32Bit versions
+
+ The 32Bit version is NOT SAFE for MULTIPLE THREADS at this time.
+ Not more than one thread per application may make use of the
+ ldap routines.
+
+ Ldap32.dll was compiled with LDAP_REFERRALS defined and is capable
+ of handling referrals returned by a slapd server.
+
+
+WRITING APPLICATIONS THAT USE LIBLDAP.DLL or LDAP32.DLL
+
+ All of the normal LDAP and LBER calls documented in the help file
+ should work, except for ldap_perror (this is not supported under
+ Windows since you will want to use an application-defined dialog;
+ you can use ldap_err2string to obtain an error string to display in
+ a message box or dialog).
+
+ The man pages are included in this kit in the form of windows HLP files.
+ The official source man pages are available via the web at:
+
+ http://www.umich.edu/ldap/doc/man/
+
+ Any memory that you obtain as the result of a call to an LIBLDAP.DLL
+ routine should NOT be freed by calling the free() routine in your C
+ library. Instead, use the the new utility routine ldap_memfree or
+ the appropriate ldap ...free routine. This is so the malloc/calloc
+ and free routines all come from the same library (the one in
+ libldap) rather than using libldap's malloc/calloc and the calling
+ program's free. Microsoft's VC++ 4.0 compiler (in debug mode)
+ FORCED me to be compulsive about this for the application I used to
+ test.
+
+ To be friendly under Windows, you should use the asynchronous LDAP
+ calls whenever possible.
+
+ One limitation of the current LIBLDAP.DLL is that each X.500 LDAP
+ result message has to be smaller than 64K bytes. Ldap32.dll does
+ NOT have this limitation.
+
+ To compile the ldap dlls we define the following preprocessor variables.
+
+ WINSOCK, DOS, NEEDPROTOS, NO_USERINTERFACE, KERBEROS
+
+ Presumably you don't need KERBEROS. You may need some/all the others
+ to take the right path through the include files. Also note that a
+ few more preprocessor variables are defined in msdos.h. This means that
+ msdos.h must be included before ldap.h or lber.h.
+
+
+LTest and LTtest32
+
+ The LTest.exe and LTest32.exe programs are test interfaces to libldap
+ and ldap32 respectively. By default they connect to the host
+ "truelies". This host name is contained in a string resource in the
+ exe file. You may easily "customize" this to be the name of whatever
+ server you're using with AppStudio or any Windows resource editor.
+
+Kerberos Information
+
+ Libldap.dll was compiled with KERBEROS, AUTHMAN, WSHELPER, &
+ LDAP_REFERRALS defined. If you do not need kerberos authentication,
+ this dll should still work correctly for you. Libldap.dll
+ dynamically loads and uses the dlls needed for kerberos
+ authentication (Authlib.dll, Krbv4win.dll, & WSHelper.dll). If
+ Libldap.dll is unable to load the needed dlls, execution continues
+ without error, but without kerberos authentication capability.
+
+ AUTHMAN allows libldap.dll to make use of Authlib.dll (which
+ requires KrbV4Win.dll & WSHelper.dll) if they are ALL in the "PATH".
+ If these are not available, kerberos authentication can not succede,
+ but libldap.dll will execute without error.
+
+ WSHELPER means that if WSHelper.dll is in the "PATH", it will be
+ dynamically loaded and used to do the gethostbyaddr() call required
+ for kerberos authentication to work. (This is used because so many
+ vendor implementations of gethostbyaddr return WRONG results. We
+ are working with all vendors we can get to listen to get these
+ implementations fixed.) If WSHelper.dll is not in the "PATH"
+ libldap.dll does not fail to execute correctly.
+
+ Ldap32.dll does NOT have the ability to do kerberos authentication
+ because none of Authlib.dll, krbv4win.dll or wshelper.dll have been
+ ported to 32Bits at this time.
+
+ For further information on using kerberos with the ldap DLLs send
+ email to ldap-support@umich.edu.
+
+BUG REPORTING
+
+ Bug reports should be sent to bug-ldap@umich.edu.
+
+
+Miscellaneous
+
+ Build testing was done on Windows NT workstation 3.51 (build 1057
+ service pack 2) on an NTFS file system (which supports long
+ filenames) using Microsoft Visual C++ 1.52c (16 bit) and Visual C++
+ 4.0 (32 bit).
+
+Change History:
+
+ 2 May 1996
+ o based on LDAP 3.3 source
+ o correct bug that caused error message box about problems
+ wshelper.dll. Made use of krbv4win and thus wshelper
+ dynamic. They will be used if present, if not
+ get_kerberosv4_credentials will set ld->ld_errno =
+ LDAP_AUTH_UNKNOWN and return a NULL pointer.
+ o this required changes to libldap.mak and kbind.c.
+ Since these changed files did not make it into the
+ official tar file, I've included them here.
+
+ 2 Aug 1996
+ o WSAStartup() was not being called before htons was used.
+ WSAStartup() call was moved to correct this problem. This may
+ change the number of calls to WSAStartup() and the pairing of
+ these with WSACleanup();
+ o 32 bit Release binaries of ldap were not built using the DEF file.
+ This caused the ordinals (and the LIB files) to be different.
+ Both 32 bit binaries now use same DEF, same ordinals, LIBs compare.
+
+ 23 Sep 1996 : sgr
+ o libldap.dll uses OutputDebugString to emit debug messages. This
+ was not getting disabled in the Release version. Simple change to
+ msdos.h made LDAP_DEBUG depend on _DEBUG which fixed this problem.
+
+ 17 Oct 1996 : sgr
+ o 4 of the .h files were missing the ^M at EOL that DOS/WIN requires
+ These have been fixed and replaced in the zip file. They were
+ disptmpl.h, ldap.h, proto-ld.h, & proto-lb.h
+
+------------------------------------------------------------------------
+
+README Last updated 17 Oct 1996 by Steve Rothwell
diff --git a/ldap/srchpref.cfg b/ldap/srchpref.cfg
new file mode 100755
index 00000000..74be091d
--- /dev/null
+++ b/ldap/srchpref.cfg
@@ -0,0 +1,153 @@
+# Version should be 1 now
+Version 1
+#
+#
+# Name for this search object
+People
+# options (the only one supported right now is "internal" which means that
+# this search object should not be presented directly to the user)
+# use "" for none
+""
+# Label to place before text box user types in
+"Search For:"
+# Filter prefix to append to all "More Choices" searches
+"(&(objectClass=person)"
+# Tag to use for "Fewer Choices" searches - from ldapfilter.conf file
+"xax500"
+# If a search results in > 1 match, retrieve this attribute to help
+# user disambiguate the entries...
+title
+# ...and label it with this string:
+"Title"
+# Search scope to use when searching
+subtree
+# Follows a list of "More Choices" search options. Format is:
+# Label, attribute, select-bitmap, extra attr display name, extra attr ldap name
+# If last two are null, "Fewer Choices" name/attributes used
+"Common Name" cn 11111 "" ""
+"Surname" sn 11111 "" ""
+"Business Phone" "telephoneNumber" 11101 "" ""
+"E-Mail Address" "mail" 11111 "" ""
+"Uniqname" "uid" 11111 "" ""
+"Title" title 11111 "" ""
+END
+# Match types
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END
+#
+#
+#
+Groups
+""
+"Search For:"
+"(&(objectClass=rfc822MailGroup)"
+"xax500"
+multilineDescription
+"Description"
+subtree
+"Common Name" cn 11111 "" ""
+"Description" multilineDescription 11101 "" ""
+"Owner" "owner" 00001 "owner" "Owner"
+"X.500 Member" "member" 00001 "" ""
+"E-Mail Member" "mail" 00101 "" ""
+END
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END
+#
+#
+#
+"Joinable Groups"
+""
+"Search For:"
+"(&(&(objectClass=rfc822MailGroup)(joinable=TRUE))"
+"xax500"
+multilineDescription
+"Description"
+subtree
+"Common Name" cn 11111 "" ""
+"Description" multilineDescription 11101 "" ""
+"Owner" "owner" 00001 "owner" "Owner"
+"X.500 Member" "member" 00001 "" ""
+"E-Mail Member" "mail" 00101 "" ""
+END
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END
+#
+#
+#
+Services
+""
+"Search For:"
+"(&(objectClass=service)"
+"xax500"
+multilineDescription
+"Description"
+subtree
+"Common Name" cn 11111 "" ""
+"Description" multilineDescription 11101 "" ""
+"Owner" "owner" 00001 "owner" "Owner"
+"Keywords" "keywords" 11111 "" ""
+"Hours" "hoursOfOperation" 11111 "" ""
+END
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END
+#
+#
+#
+Organizations
+""
+"Search For:"
+"(&(objectClass=organization)"
+"xax500"
+multilineDescription
+"Description"
+subtree
+"Name" organizationName 01111 "" ""
+"Location" localityName 11111 "" ""
+"Phone Number" "telephoneNumber" 10111 "" ""
+"Description" description 10111 "" ""
+END
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END
+#
+#
+#
+Documents
+""
+"Search For:"
+"(&(objectClass=document)"
+"xax500"
+multilineDescription
+"Description"
+subtree
+"Document Title" cn 11111 "" ""
+"Keyword" "keywords" 11111 "" ""
+"Category" "category" 11111 "" ""
+"Document Number" "documentIdentifier" 11111 "" ""
+END
+"exactly matches" "(%a=%v))"
+"approximately matches" "(%a~=%v))"
+"starts with" "(%a=%v*))"
+"ends with" "(%a=*%v))"
+"contains" "(%a=*%v*))"
+END