windows.html   [plain text]


<html><head>
<title>Building Cyrus SASL on Windows</title>

</head>

<body>
<h1>Building Cyrus SASL on Windows</h1>

Note, that Cyrus SASL on Windows is still laregely a "work in progress".
So far only the main library, plugins (SASLDB using SleepyCat, no MySQL)
and two applications (saslpasswd2.exe and sasldblistusers2.exe) can be built.

<h2>Prerequisites</h2>

<ul>
<li>Visual Studio. We have tested Visual Studio 6 and Visual Studio 7 (.NET).
By default we are using Visual Studio 7 (both 2002 and 2003 versions were tested). If you want to use Visual Studio 6,
you need to remove the leading # character from the line containing "<tt>#VCVER=6</tt>" in win32/common.mak.

<li>The latest Platform SDK. We've tested November 2001.

<li>SleepyCat include files and libraries are required to buil SASLDB plugin,
saslpasswd2.exe and sasldblistusers2.exe. We have tested SleepyCat 4.1.X.

<li>If you are building directly from CVS, you'll need the <a
href="http://www.cygwin.com/">Cygwin</a> Unix-compatibility
environment to create the <tt>_init.c</tt> files needed for dynamic
loading. Cygwin is <em>not</em> required for building from our tar
distribution.  

</ul>

<h2>Step by step</h2>

These directions assume that you've untarred the library or used CVS
and the sources are in <tt>C:\SASL</tt>.

<h3>preparing to build (cvs only!)</h3>

Start a cygwin shell and create the dynamic loading stubs:

<pre>
% cd /cygdrive/c/sasl/plugins
% sh makeinit.sh
</pre>

<h3>building using NMake</h3>

Open a "Windows 2000 build environment" from the SDK's Start Menu and
use "<tt>nmake /f NTMakefile</tt>" to build.

<p>To build a debug verison, use "<tt>nmake /f NTMakefile
CFG=Debug</tt>". For a production version, "<tt>nmake /f NTMakefile
CFG=Release</tt>". If you don't specify CFG parameter, production
version will be built by default.

<p>As Windows build requires SleepyCat, there are additional options
that has to be provided to NMake on the command line.
If SleepyCat sources are located in <tt>c:\packages\db\4.1.24</tt>
and built library in <tt>c:\packages\db\4.1.24\build_win32\Release_static</tt>,
you should add something like
<tt>DB_INCLUDE=c:\packages\db\4.1.24\build_win32</tt>
and <tt>DB_LIBPATH=c:\packages\db\4.1.24\build_win32\Release_static</tt>.
<br>Also note, that the <tt>DB_LIB</tt> defines the name of the SleepyCat library
to link against. It defaults to libdb41s.lib.
<br>If you don't pass the parameters described above, NMake will pick the
defaults, which is probably not what you want. 

<p>Another option of interest is <tt>STATIC</tt>.
It specifies which version of the standard C library
to use. The default is "no", meaning that the standard C library
from the MSVCRT.DLL will be used.

<p>Example:
<pre>
Targeting Windows 2000 and IE 5.0 RETAIL

C:\Program Files\Microsoft SDK> cd \sasl

C:\sasl> nmake /f NTMakefile DB_INCLUDE=c:\packages\db\4.1.24\build_win32
DB_LIBPATH=c:\packages\db\4.1.24\build_win32\Release_static

No configuration specified. Defaulting to Release.
Using MSVCRT.dll as C library by default.
Defaulting SleepyCat library name to libdb41s.lib.
Codegeneration defaulting to /MD.
...

</pre>

<p>SASL NTMakefile also understands "clean" target that you can use to clean all files generated by the compiler.

<pre>
C:\sasl> nmake /f NTMakefile clean

Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

        cd lib && nmake /f NTMakefile                    clean

Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

No configuration specified. Defaulting to Release.
Using MSVCRT.dll as C library by default.
Defaulting SleepyCat library name to libdb41s.lib.
Defaulting SleepyCat include path to c:\work\isode\db\build_win32.
Defaulting SleepyCat library path to c:\work\isode\db\build_win32\Release_static.
...

</pre>

<h3>building additional plugins</h3>

<p>Specify "GSSAPI=&lt;type&gt;" parameter if you want to enable GSSAPI plugin.
Currently only &lt;type&gt;=CyberSafe is supported and this will build the plugin
that links against CyberSafe Kerberos.

GSSAPI depends on <tt>GSSAPI_INCLUDE</tt> and <tt>GSSAPI_LIBPATH</tt> parameters.
You can either specify them on the command line or edit the defaults in win32\common.mak

<p>Specify "SQL=&lt;type&gt;" parameter if you want to enable SQL plugin.
Currently only &lt;type&gt;=SQLITE is supported and this will build the plugin
that links against SQLITE (www.sqlite.org).

SQL=&lt;SQLITE&gt; depends on <tt>SQLITE_INCLUDES</tt> and <tt>SQLITE_LIBPATH</tt> parameters.
You can either specify them on the command line or edit the defaults in win32\common.mak

<p>Specify "NTLM=1" parameter if you want to enable NTLM plugin.
I.e. "<tt>nmake /f NTMakefile NTLM=1</tt>"

<p>Specify "SRP=1" parameter if you want to enable SRP plugin.
You can also specify "DO_SRP_SETPASS=1" if you want to enable SRP setpass functionality.

<p>Specify "OTP=1" parameter if you want to enable OTP plugin.

<p>NTLM, SRP and OTP plugins depend on OpenSSL. You can either specify
<tt>OPENSSL_INCLUDE</tt> and <tt>OPENSSL_LIBPATH</tt> parameters on the command
line or edit the defaults in win32\common.mak
Note, that unless you are building one of those plugins, OpenSSL is not required!

<p>If you want to build multiple additional plugins at once, you can specify
multiple parameters described above, for example "<tt>nmake /f NTMakefile NTLM=1 SRP=1 OPT=1</tt>"

<h3>limitations</h3>

Currently all plugins but KerberosV4 (kerberos4.c) and PASSDSS (passdss.c) can be built on Windows.
However limited testings was done for some plugins as listed below:

<ul>
<li>GSSAPI - tested using CyberSafe,
<li>SASLDB - only SleepyCat version can be built,
<li>SQL - using SQLITE, not tested
</ul>

The following executables were built and tested (to some extend):
In sample:
<ul>
<li>sample-client
<li>sample-server
</ul>
In utils:
<ul>
<li>sasldblistusers2
<li>saslpasswd2
<li>testsuite
</ul>

Note that saslauthd is <em>NOT</em> in this list.

<h3>testing</h3>


<h3>creating an MSI</h3>

</body>

</html>