openldap/libraries/msdos/README.WSA
1998-08-09 00:43:13 +00:00

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