mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-09 02:52:04 +08:00
229 lines
9.7 KiB
Plaintext
229 lines
9.7 KiB
Plaintext
LDAP MSWindows with WinSock API README
|
|
|
|
The lber and ldap client libraries have been ported to Microsoft Windows
|
|
in the form of a Windows Dynamic Link library called LIBLDAP.DLL and
|
|
Ldap32.dll (16 and 32 bit versions respectively).
|
|
|
|
A Windows Socket API version 1.1 conformant TCP/IP WINSOCK.DLL is
|
|
required for the LIBLDAP.DLL to run. Some patches have been
|
|
incorporated that should make it possible to build the LIBLDAP.DLL under
|
|
Borland C++ 3.1. Brief instructions are included later in this file.
|
|
(There are no changes to the Borland support in this release.)
|
|
|
|
This release also include 16 and 32 bit versions of the ltest (&
|
|
ltest32) API test programs. Instructions for building it are in the
|
|
second half of this document. None of the other clients included in the
|
|
distribution have been tested under Windows. The synchronous LDAP
|
|
interface is also untested, although it does build okay.
|
|
|
|
At the very end of this document are some hints for writing applications
|
|
that use the LIBLDAP.DLL.
|
|
|
|
We have also made a windows "kit" available at:
|
|
|
|
ftp://terminator.rs.itd.umich.edu/ldap/windows/winldap.zip
|
|
|
|
Our hope is that with this kit, you won't have to compile all this
|
|
yourself (unless you want to). The kit includes:
|
|
16 and 32bit dlls
|
|
debug and release builds
|
|
the LTest utility program
|
|
man pages in the form of HLP files (new and old formats)
|
|
include files
|
|
sample config files
|
|
|
|
MAKING THE DISTRIBUTION
|
|
|
|
Build testing was done on Windows NT workstation 3.51 (service patch 2)
|
|
(on NTFS which supports long filenames) using Microsoft Visual C++ 1.52c
|
|
(16 bit) and Visual C++ 4.0 (32 bit).
|
|
|
|
To build the LIBLDAP.DLL library under Microsoft Visual C++ 1.52c
|
|
(16bit) or Visual C++ 4.0 (32bit): (search forward in this file for
|
|
"Borland" if you are using Borland C++)
|
|
|
|
1) Untar the ldap distribution somewhere on MSDOS. You will
|
|
need at least the include and libraries subdirectories.
|
|
A version of tar that works under MSDOS is a big help for
|
|
this step
|
|
|
|
tar xf ldap.tar
|
|
|
|
This will create a directory called ldap or similar that
|
|
contains the ldap source distribution. We will refer to
|
|
that directory simply as "\ldap" from now on, but it could
|
|
be anywhere and have any name on your system
|
|
|
|
Note that a lot of empty include files are on this distribution.
|
|
This is because some compilers are not smart enough to properly
|
|
generate dependencies (i.e. they ignore #ifdefs) so the file needs
|
|
to be present, even if not used.
|
|
|
|
2) cd to the LDAP directory (root of your LDAP area on MSDOS) and
|
|
execute the setupwsa batch file. This will copy a bunch of
|
|
files from the ldap\libraries\msdos and
|
|
ldap\libraries\msdos\winsock directories to the ldap\include
|
|
and ldap\libraries\libldap directories:
|
|
cd \ldap
|
|
libraries\msdos\winsock\setupwsa.bat
|
|
Note that a lot of empty include files are copied over... this
|
|
is because some compilers are not smart enough to properly
|
|
generate dependencies.
|
|
|
|
3) Create a WINSOCK.LIB import library from the WINSOCK.DEF file.
|
|
You can also obtain a pre-built .LIB from ftp.microdyne.com in
|
|
/pub/winsock/winsock-1.1/winsock.lib. To build an import
|
|
library using Microsoft's IMPLIB utility:
|
|
cd \ldap\libraries\libldap
|
|
implib winsock.lib winsock.def
|
|
|
|
4) Now fire up MS Windows and start the Visual C++ Workbench. Open
|
|
the project \ldap\libraries\libldap\libldap.mak or
|
|
\ldap\libraries\libldap\ldap32.mak with the appropriate compiler.
|
|
|
|
Change the project "Include" directory to list the ldap
|
|
include directory as well as the standard include directories
|
|
(change by using the command found under the
|
|
Options...Directories menu in the 16 bit compiler and
|
|
Build/Settings in the 32bit compiler).
|
|
|
|
The preprocessor symbols I have defined are:
|
|
WINSOCK, DOS, NEEDPROTOS, NO_USERINTERFACE, KERBEROS I ran
|
|
into buffer length limitations when I tried to define more
|
|
preprocessor symbols this way. So all the rest are defined
|
|
in msdos.h. This makes the order of inclusion critical for
|
|
msdos.h.
|
|
|
|
|
|
Note: If you are using something other than Visual C++ you will
|
|
need to create a makefile or other project file. It should
|
|
include all of the .c files in the liblber and libldap
|
|
directories, plus the libraries\libldap\libldap.def (or
|
|
libraries\libldap\ldap32.def) module definition file. It
|
|
will need to link in winsock.lib. You should use the large
|
|
memory model.
|
|
|
|
5) Select Build LIBLDAP.DLL (or Rebuild All) from the Project
|
|
menu to build the DLL. You will see many warnings,
|
|
especially from the liblber code. Our experience is that it
|
|
is safe to ignore them.
|
|
|
|
6) If you want to change what symbols are defined (for example
|
|
WSHELPER, or LDAP_DEBUG), change them in msdos.h and
|
|
recompile. LDAP_DEBUG now works in the windows environment.
|
|
The comments in msdos.h explain what the various options are.
|
|
|
|
You should now have a functional LIBLDAP (or ldap32) dynamic link
|
|
library. If you wish to build a version of ltest for MSWindows to test
|
|
it, follow these next steps.
|
|
|
|
1) Copy the libldap test.c and LIBLDAP.DLL import library files
|
|
to the Windows ltest directory. Under DOS:
|
|
cd \ldap
|
|
copy libraries\libldap\test.c libraries\msdos\winsock\ltest
|
|
copy libraries\libldap\libldap.lib libraries\msdos\winsock\ltest
|
|
|
|
2) Open the project \ldap\libraries\msdos\winsock\ltest\ltest.mak
|
|
(or ltest32.mdp) under the Microsoft Visual C++ Workbench.
|
|
Change the project include directory to list the
|
|
\ldap\include directory as well as the standard include
|
|
directories.
|
|
|
|
3) Edit the string resource IDS_LDAP_HOST_NAME in ltest.rc (or
|
|
ltest32.rc) and change the string "truelies" to the name of
|
|
the LDAP server host you would like to test against.
|
|
|
|
Since this is a string resource, it may also be edited in the
|
|
DLL with AppStudio. So you can change it without having to
|
|
recompile.
|
|
|
|
4) Build the project. If you are not using Visual C++, you will
|
|
need to create a makefile or other project file, and then
|
|
build. The project should include all of the .c files in
|
|
the ldap\libraries\msdos\winsock\ltest directory and the
|
|
ltest.def module definition file. You will need to link in
|
|
libldap.lib and winsock.lib (import libraries).
|
|
|
|
You should now have a functional ltest application. It is ugly, but it
|
|
is useful for testing purposes. It doesn't try very hard to be a pretty
|
|
MS Windows application.
|
|
|
|
|
|
To build the LIBLDAP.DLL library under Borland C++ 3.1:
|
|
|
|
Note: No changes have been made wrt Borland compiler in this release.
|
|
|
|
1) Untar the ldap distribution somewhere on MSDOS. You will
|
|
need at least the include and libaries subdirectories.
|
|
A version of tar that works under MSDOS is a big help for
|
|
this step:
|
|
tar xf ldap.tar
|
|
|
|
This will create a directory called ldap or similar that
|
|
contains the ldap source distribution. We will refer to
|
|
that directory simply as "\ldap" from now on, but it could
|
|
be anywhere and have any name on your system
|
|
|
|
2) cd to the LDAP directory (root of your LDAP area on MSDOS) and
|
|
execute the setupwsa batch file. This will copy a bunch of
|
|
files from the ldap\libraries\msdos and ldap\libraries\msdos\winsock
|
|
directories to the ldap\include and ldap\libraries\libldap
|
|
directories:
|
|
cd \ldap
|
|
libraries\msdos\winsock\setupwsa.bat
|
|
|
|
3) Start Borland C++ and create a new project here named
|
|
libraries\libldap\libldap.prj and add all .c files in
|
|
the libraries\liblber and libraries/libldap directories
|
|
except open.c and test.c. Also add libldap.def and
|
|
the winsock.lib.
|
|
|
|
4) Configure the project:
|
|
Set include directories to have ..\..\include in them
|
|
Set these #defines: NO_USERINTERFACE;DOS;NEEDPROTOS;WIN31;BC31
|
|
Switch case-sensitive link/exports off
|
|
Include the runtime library statically, and 'none' of the others
|
|
|
|
5) Do Build All
|
|
|
|
|
|
WRITING APPLICATIONS THAT USE LIBLDAP.DLL
|
|
|
|
All of the normal LDAP and LBER calls documented in the man pages
|
|
(contained in the ldap\doc\man directory) 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 LIBLDAP.DEF file has a complete list of available routines.
|
|
|
|
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.
|
|
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. The 32bit 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 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.
|
|
|
|
|
|
BUG REPORTING
|
|
|
|
Bug reports should be sent to bug-ldap@umich.edu.
|
|
|
|
README Last updated 13 January 1996 by Steve Rothwell
|