Closed Bug 141754 Opened 22 years ago Closed 20 years ago

Enhancement: Should support startTls

Categories

(Directory :: LDAP C SDK, enhancement)

enhancement
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: mhein, Assigned: mcs)

References

Details

Attachments

(4 files, 6 obsolete files)

The C SDK should support startTls
Attached patch First cut (obsolete) — Splinter Review
This is a first cut at starttls.  It has not been tested and only compiled on
Solaris for now.  I had to make a change to build.mk as well......the line 
PERL = ?perl is causing problems for the generation of *def/*exp files.
Attached file Test case (obsolete) —
Small test program
Thanks for submitting this. I have not tried the code yet, but I have a few of
initial comments:

- I do not think the application should pass the NSS cert db and key db paths to
ldapssl_tls_start_s(). Instead, we should require that the application call one
of the existing ldapssl_..._init() functions first.

- We need to check and see what start TLS APIs are provided in other LDAP API
implementations (to see if it makes sense to align with what they have done). I
will check Microsoft, IBM and OpenLDAP soon. For example, we should probably
have an ldapssl_tls_start() function and another one that parses the response
and switches the connection to secure mode.

- We need to think about how to factor this code so that it could be used by the
Mozilla 1.x client team. That might be difficult, because they do not use
libssldap at all.
Comment on attachment 82029 [details] [diff] [review]
First cut

I need to try this code and do a more detailed review, but here are a few
comments:

1) We will want to support an asynchronous API in addition to
ldapssl_starttls_s(). Someone should look at the OpenLDAP (or IBM) API for
start TLS to see if it makes sense to implement the same API.

2) I'd rather not expose the LDAP_X_OPT_SOCKBUF functionality to other LDAP
applications. There might be a different way for the prldap layer to get at the
socket info.

3) Rather than providing the two new prldap_get_default_socket_info() and
prldap_set_default_socket_info() functions, why not just add an option or two
to   oprldap_get_session_option() to allow callers to retrieve the fd and
socketarg for the default connection, e.g.,

#define PRLDAP_OPT_DEFAULT_FD	      2
#define PRLDAP_OPT_DEFAULT_SOCKETARG  3
?

Then the existing prldap_set_socket_info() and prldap_get_socket_info()
functions can be used after calling prldap_get_session_option() to retrieve the
above.

4) I think we should keep the basic SSL initialization separate from
ldapssl_tls_start_s() and just require that initialization be done before
ldapssl_tls_start_s() is called. Applications that want to handle SSL
initialization themselves should be able to use our startTLS APIs. Basically,
just remove the ldapssl_clientauth_init() call inside
ldapssl_enableSSL_on_open_connection().

5) We need to think about how much effort we should put into helping
applications that can't use the libssldap layer use startTLS (e.g., the Mozilla
1.x client).
Attachment #82029 - Flags: needs-work+
New preferences request to auto-detect server capabilities filed as bug 185631.
Spam for bug 129472
QA Contact: nobody → nobody
Mass reassign of 4 older LDAP C SDK bugs to mcs@pearlcrescent.com.
Assignee: mhein → mcs
Attached patch Proposed patch for Start TLS (obsolete) — Splinter Review
This code was written by Alok Gondhalekar <alok@bozemanpass.com>, I'm uploading
it because I wanted to attach some commentary about the design
decisions. I will add that text to the bug report next...
Some comments on the patch I just uploaded:

1. It implements an -L option in the client tools. This tells ldapsearch etc 
to use Start TLS. Also implemented is a -LL option. This is similar to options 
supported in the OpenLDAP clients tools: -L says to try Start TLS but carry on
using plaintext if it fails. -LL says to fail hard if Start TLS fails.

2. The central problem with Start TLS is to convert an existing connection
to an SSL connection, mid-flight. There are two different cases to be handled:
a) Where the existing connection is using the prldap layer (NSPR I/O) and
b) Where the existing connection is not using prldap.
In both cases, the eventual goal is to have prldap enabled, and then SSL
(because NSS SSL relies on NSPR I/O).
For the already-prladp case, things are a bit easier: we only need to 
import the NSPR socket into SSL. For the non-prldap case, things are
more complex: we need to first import the connection into the prldap layer.
Subsequent to that step, the two cases are the same. To facilitate the 
connection import to prldap, two new functions were added to that layer:
prldap_check_nspr(), which tells the caller if the connection is already
using prldap/NSPR (the caller otherwise has no way to tell due to layering
issues). The second call is prldap_import_connection() which is patterned
after other 'import' functions: it takes the OS socket as its second argument,
and does whatever is necessary to enable prldap on the LD passed as the first 
argument.

3. SSL configuration is something of a problem. This is because it is
not possible to perform some of the SSL config until SSL-related structures are
created. These stuctures are not created until _after_ the decision to enable
SSL on the connection. However, once SSL has been enabled, it's logically
too late to perform the SSL config. This situation is also present in
'classic' SSL in the SDK. It seems that the API, and applications that use it
actually take advantage of the fact that no real SSL negotiation is done 
until the next PDU following SSL enable is sent. This might not be totally
clear to an application writer, but it's how the code has always worked, AFAIK.
Anyway, the result is that you _can_ call the ssl configuration functions
after enabling SSL, and the right thing happens. This is because those
functions change state in the SSL structures, and within NSS, and that 
state is not used until SSL negotation takes place. We have retained this
behavior with Start TLS: so an application can (and indeed must) call 
ldap_start_tls_s() first, then call ldaps_enable_clientauth() (or similar),
and _then_ perform an LDAP operation such as ldap_search(). SSL negotiation
on-the-wire only happens at the point the ldap_search() sends the search
request PDU. 

4. The API implemented (ldap_start_tls_s() ) is identical to the OpenLDAP
API, and very similar to Microsoft's and Novell's. 

5. Layering and modularity issues were a challenge in this implementation.
It seems hard to do Start TLS without introducing some accessors to 
break layering. We tried several different approches and this one has
the least added accessors. We added LDAP_X_OPT_EXTIO_SOCKET_FN_PTRS to allow
code outside of libldap (libsldap specifically) to retrieve the 
native connection socket from the BER layer.

This code has been tested against both the Netscape Directory Server
and the OpenLDAP server, on the following (client) platforms: Win32,
HP-UX 11.11 (both 32-bit and 64-bit), Solaris9 (both 32-bit and 64-bit),
Linux (Redhat AS3, Mandrake 9.2 and Mandrake 10.0).

  

Comment on attachment 155600 [details] [diff] [review]
Proposed patch for Start TLS

Overall, the patch looks very good.  Here are my comments on the changes in
mozilla/directory/c-sdk/ldap/clients/tools/common.c:

1) We can't use -L because that option is already used by ldapsearch to request
that LDIF be output (which is the default, but given that many people include
-L because OpenLDAP's ldapsearch requires it, I'd hate to change the meaning of
-L).  All single letter options are used by one of the tools or another; see
the "not used by any of the tools" line in Options.txt for details.  My best
suggestion is to use -ZZ and -ZZZ in place of -L and -LL.  I am open to a
better suggestion (bug 199130 is already open saying we need to support GNU
style long options, e.g., --tls).

2) Please add a space after the word request in the -LL usage line.

3) Should we call perror() when the prldap_init() call fails?  That is what is
done below the startTLS code you added; I am not 100% sure the system errno is
interesting in that case though.

4) I think the ldapssl_client_init() call you added is redundant (it or
ldapssl_pkcs_init() is called above).

5) Please exit with the value returned by ldap_start_tls_s() instead of
LDAP_LOCAL_ERROR.
Attachment #155600 - Flags: review-
Status: NEW → ASSIGNED
Comment on attachment 155600 [details] [diff] [review]
Proposed patch for Start TLS

Here are my comments on the core libldap changes
(.../ldap/include/ldap-extension.h, .../ldap/libraries/libldap/extendop.c, 
getoption.c, ldap-int.h, and setoption.c):

1) LDAP_OPT_START_TLS should be replaced by LDAP_X_OPT_START_TLS.  New LDAP API
extensions should begin with LDAP_X_OPT and should be assigned numbers based
off LDAP_OPT_PRIVATE_EXTENSION_BASE.  This is required by the LDAP C API
Internet Draft (currently suspended, but I hope to bring it back to life again
soon).

2) The older LDAP_X_OPT_EXTIO_FN_PTRS and the new
LDAP_X_OPT_EXTIO_SOCKET_FN_PTRS option you added are very similar (the
difference is that the new one retrieves the I/O functions for the default/main
LDAP TCP connection).  I would prefer to add an option that is very similar to
LDAP_OPT_DESC (perhaps LDAP_X_OPT_SOCKETARG) that is used to get and set the
socketarg.

3) The fix to extendop.c is also the subject of bug 242143.  Please take a look
at the patch proposed there (nearly the same).

4) Another thought on LDAP_OPT_START_TLS: it seems like it is not something
applications should manipulate themselves but rather something needed
internally by the libssldap layer.  Is that true?  If so, why not just add it
to LDAPSSLSessionInfo?
Comment on attachment 155600 [details] [diff] [review]
Proposed patch for Start TLS

Here are my comments on the libssldap related changes (files
.../include/ldap_ssl.h, .../libraries/libldap_ssl.ex,
.../libraries/libssldap/ldapsinit.c, .../libraries/msdos/winsock/ldapssl.def,
.../libraries/msdos/winsock/nsldapssl32.def, and
.../libraries/msdos/winsock/nssldap32.def); most of the comments are related to
ldapsinit.c:

1) Let's use the same name for the startTLS OID macro as OpenLDAP does.  They
have:

#define LDAP_EXOP_START_TLS   "1.3.6.1.4.1.1466.20037"	/* RFC 2830 */


2) It would be nice to factor some of the common code in ldaptls_complete() and
ldapssl_connect() and place it in a common function that both call.  At a
glance, it doesn't look too difficult to me but maybe you already tried and
decided it wasn't worth the trouble?

3) If ldaptls_complete() fails it closes the connection.  Is that what we
really want to happen?	Doesn't that make it so the -L option won't always fail
softly?

4) Inside ldaptls_setup(), I would return LDAP_LOCAL_ERROR in the cases you
return LDAP_OTHER.

5) Let's create a small internal helper function called
ldapssl_alloc_sessioninfo() and call it from ldapssl_install_routines() and
ldaptls_setup().  That way if we ever improve that code it will be in one
place.

6) Inside ldap_start_tls_s() there are a lot of places where the return value
from ldap_set_option() is checked against LDAP_SUCCESS.  Technically,
ldap_set_option() returns 0 or -1, not an LDAP result code.  So it would be
clearer to check for == 0 or < 0.  Same for ldap_get_option().

7) In this code snippet from ldap_start_tls_s():

+   if ( ( rc = ldap_extended_operation_s( ld, START_TLS_OID, NULL,
serverctrls,
+	clientctrls, &oidptr, &dataptr ) ) != LDAP_SUCCESS )
+   {
+	ber_bvfree( dataptr );
+	ldap_memfree( oidptr );
+	ldap_set_lderrno( ld, LDAP_UNWILLING_TO_PERFORM, NULL, NULL );
+	return( LDAP_UNWILLING_TO_PERFORM );
+   }


Shouldn't LDAP_UNWILLING_TO_PERFORM be replaced with rc?  If possible, I would
change ldaptls_setup(), ldaptls_complete() to return an LDAP result code and
return that instead of unwilling to perform in this section also:

+   /* Initialize TLS and enable SSL on the LDAP session */
+   if ( ( rc = ldaptls_setup( ld ) ) != LDAP_SUCCESS	||
+	 ( rc = ldaptls_complete( ld ) ) != LDAP_SUCCESS   ||
+	 ( rc = ldap_set_option( ld, LDAP_OPT_SSL, LDAP_OPT_ON ) )!=
LDAP_SUCCESS )
+   {
+
+	/* Allow to proceed in clear text if secure session fails */
+	ldap_set_option( ld, LDAP_OPT_SSL, LDAP_OPT_OFF );
+	ldap_set_option( ld, LDAP_OPT_START_TLS, LDAP_OPT_OFF );
+	ldap_set_lderrno( ld, LDAP_UNWILLING_TO_PERFORM, NULL, NULL );
+	return( LDAP_UNWILLING_TO_PERFORM );
+   }
Comment on attachment 155600 [details] [diff] [review]
Proposed patch for Start TLS

This is the final batch... my comments on the proposed libprldap changes (files
.../include/ldappr.h, .../libraries/libprldap/ldappr-int.h,
.../libraries/libprldap/ldappr-io.c, .../libraries/libprldap/ldappr-public.c,
.../libraries/libprldap/libprldap.ex,
.../libraries/msdos/winsock/nsldappr-incl.def,
.../libraries/msdos/winsock/nsldappr32.def):

1) Can we rename the prldap_check_nspr() function to prldap_is_installed()?

2) Insider prldap_check_nspr(), please check the result of ldap_get_option()
against 0 instead of LDAP_SUCCESS.  Otherwise someone will think
ldap_get_option() could return values like LDAP_NO_MEMORY.

3) prldap_import_connection() assumes the file desc it is importing is the one
associated with the default/main LDAP TCP connection.  I think it would be
better to acknowledge that fact very clearly by removing the orig_socket
parameter (retrieve it via a call like ldap_get_option( ld, LDAP_OPT_DESC, ...)

4) My original thought use of the prldap layer would be a prerequisite to using
startTLS in the LDAP C SDK.  But now that you have written the code to import
into prldap, we might as well keep it.	The only thing that worries me is that
PR_ImportTCPSocket() does not appear in a public NSPR header file.  Any idea
why it is not a public NSPR function?
I just noticed 2 new warnings when I built the revised code:

setoption.c:234: warning: passing arg 3 of `ber_sockbuf_set_option' discards
qualifiers from pointer target type

common.c:1003: warning: suggest parentheses around assignment used as truth value

I guess a cast should be added to fix the first one.  In common.c it looks like
a left paren. is misplaced:

+       /* Initialize TLS over the clear-text LDAP session */
+       if (rc = (ldapssl_client_init(ssl_certdbpath, NULL))< 0) {
...


Added dependency on bug 242143 (ldap_extended_operation(3) sends requestValue
when not requested).
Depends on: 242143
Comment on mcs's comment:

>4) Another thought on LDAP_OPT_START_TLS: it seems like it is not something
>applications should manipulate themselves but rather something needed
>internally by the libssldap layer.  Is that true?  If so, why not just add it
>to LDAPSSLSessionInfo?

I think the idea was that applications might want to know after the fact if
the connection is used start tls. If this seems unlikely then I agree that
it isn't necessary to expose this state to the application.


More comments on comments:

>2) It would be nice to factor some of the common code in ldaptls_complete() 
and
>ldapssl_connect() and place it in a common function that both call.  At a
>glance, it doesn't look too difficult to me but maybe you already tried and
>decided it wasn't worth the trouble?

I agree. We decided not to do this at this point on the basis that it
would further confuse the diffs. But in principle we think this is a very good 
idea.


Answer to mcs comment:

>4) My original thought use of the prldap layer would be a prerequisite to 
using
>startTLS in the LDAP C SDK.  But now that you have written the code to import
>into prldap, we might as well keep it.	The only thing that worries me is that
>PR_ImportTCPSocket() does not appear in a public NSPR header file.  Any idea
>why it is not a public NSPR function?

I'm not sure, but it was wan-teh that suggested its use, so I believe it is
kosher. I will ask him what the status of this function is (I believe he
might be on vacation right now).


Excepting the specific cases above where I've made a comment,
I agree with all mcs's review comments.
My responses to David's responses:

On the LDAP_OPT_START_TLS question, I do not think it is worth exposing this to
applications.  I'd rather minimize the additional interfaces and options in
libldap; there are already many.  So I'd like to see it change to a libssldap
internal bit.

On refactoring the code in ldaptls_complete() and ldapssl_connect() so less code
is duplicated, I think we can defer doing that for now.  Maybe I will make a
pass at that after we land the startTLS feature.

On PR_ImportTCPSocket(), please check with Wan-Teh.  But for now it sounds like
it is OK to use.

Let me know if you want help with some of the other changes.  I do not currently
have a DS set up where I can test startTLS, but I could do that with only a
moderate amount of pain ;-)
Wan-Teh says that PR_ImportTCPSocket is ok to use if there is no alternative
(which there isn't in this case).
New proposed patch for Start TLS; includes changes as per Comments #10 through
#15 and #17 by Mark Smith.

I would like to add some notes about the new patch and client tools -

1. Case of Hard failure : Missing CA cert in certificate db. 

2. Case of soft failure : Server is unwilling to perform Start TLS.( disabled
SSL/TLS on server or  no extended operation support by server).

The clause from section 2.3 from RFC 2830 holds true in this case; if the Start
TLS operation fails then, "The client MAY proceed with any LDAP operation, or
it MAY close the connection."
Thanks for the revised patch.  Can you recreate it as a unified diff?  I always
use a command like this to create diffs for posting in bug reports:

cvs -nq diff -u8 -N

(-u8 for unified diffs with 8 lines of context and -N to include the contents of
new files).

Let me know if you need the unified diffs with some blank line cleanup.


Thanks.
A note about testing: this patch has been incorporated into private builds
of the SDK that are in turn used in the Netscape Server and the client tools.
The resulting builds have been subjected to the server regression tests and 
passed. In addition new start TLS tests have been run that exercise the 
code quite well on : Win32, Linux, 64-bit Solaris, 32-bit Solaris, 64-bit HP-
UX and 32-bit HP-UX.

Comment on attachment 156631 [details] [diff] [review]
unified diffs of patch (id=156540)

The new patch looks good.  Just a few small comments:


>Index: mozilla/directory/c-sdk/ldap/clients/tools/common.c
> ...
>+    
>+    /* If '-Z' is specified, ignore -ZZ or -ZZZ */
>+    if ( isZ && isZZ ) {
>+	fprintf( stderr, "%s: with -Z option, do not specify -ZZ or -ZZZ option\n\n", ldaptool_progname ); 
>+	return (-1);
>+     }

I do not think the above code is needed now that -ZZ effectively "turns off"
-Z.  Right?


>Index: mozilla/directory/c-sdk/ldap/libraries/libldap/getoption.c
> ...
>+	  
>+	/* extended socket i/o function pointers (to get socketargp)*/
>+	case LDAP_X_OPT_SOCKETARG:
>+		if ( ber_sockbuf_get_option( ld->ld_sbp,
>+		    LBER_SOCKBUF_OPT_EXT_IO_FNS, optdata ) != 0 ) {
>+			LDAP_SET_LDERRNO( ld, LDAP_LOCAL_ERROR, NULL, NULL );
>+			rc = -1;
>+		}
>+		break;

LDAP_X_OPT_SOCKETARG should not return all of the I/O function pointers; it
should just return the socketarg.  It looks like you renamed the option but did
not revise the implementation.


>Index: mozilla/directory/c-sdk/ldap/libraries/libldap/setoption.c
> ...
>+	 /* extended socket i/o function pointers (set Socket Arg)*/
>+	case LDAP_X_OPT_SOCKETARG:
>+		if ( ber_sockbuf_set_option( ld->ld_sbp,
>+		    LBER_SOCKBUF_OPT_EXT_IO_FNS, (void *)optdata ) != 0 ) {
>+			LDAP_SET_LDERRNO( ld, LDAP_LOCAL_ERROR, NULL, NULL );
>+			rc = -1;
>+		}
>+	  break;
>+	  

Same comment here.


>Index: mozilla/directory/c-sdk/ldap/libraries/libssldap/ldapsinit.c
> ...
>+    /*
>+     * Retrieve session info. so we can store a pointer to our session info.
>+     * in our socket info. later.
>+     */
>+    memset( &sei, 0, sizeof(sei));
>+    sei.seinfo_size = PRLDAP_SESSIONINFO_SIZE;
>+    if ( prldap_get_session_info( ld, NULL, &sei ) < 0 ) {
>+	return( -1 );
>+    }

Unlike ldap_get_option(), prldap_get_session_info() DOES return an LDAP result
code so it would be better to check for != LDAP_SUCCESS above. If we could
change ldap_get_option() we would but it is much too late for that ;-)

>+    /*
>+     * Let the standard NSPR to LDAP layer know about the new socket and
>+     * our own socket-specific data.
>+     */
>+    soi.soinfo_prfd = sslfd;
>+    soi.soinfo_appdata = (void *)ssoip;
>+
>+    if ( prldap_set_socket_info( intfd, socketargp, &soi ) < 
>+			0 ) {
>+		goto close_socket_and_exit_with_error;
>+    }

Same comment as above applies to prldap_set_socket_info() too.


>+    /* Check if NSPR Layer is Installed */
>+    if ( !prldap_is_installed(ld) )
>+    {  /* No NSPR Layer installed, 
>+        * Call prldap_import_connection() that installs the NSPR I/O layer
>+	* and imports connection details from Clear-text connection
>+	*/
>+    	if ( prldap_import_connection(ld, fd) <  0 )
>+    	{
>+		ldap_set_lderrno( ld, LDAP_OTHER, NULL, NULL );
>+		return( -1 );
>+    	}

prldap_import_connection() also returns an LDAP result code... at least it
should.  Please fix the calls to prldap_import_connection() as well as the
implementation of prldap_import_connection().

Also, these comments I made on attachment 155600 [details] [diff] [review] were not addressed.  I still
believe in them; please let me know if you disagree with them:

a) In tools/common.c, I think the ldapssl_client_init() call you added is
redundant (it or
ldapssl_pkcs_init() is called above).

b) prldap_import_connection() assumes the file desc it is importing is the one
associated with the default/main LDAP TCP connection.  I think it would be
better to acknowledge that fact very clearly by removing the orig_socket
parameter (retrieve it via a call like ldap_get_option( ld, LDAP_OPT_DESC, ...)

c) Let's create a small internal helper function called
ldapssl_alloc_sessioninfo() and call it from ldapssl_install_routines() and
ldaptls_setup().  That way if we ever improve that code it will be in one
place.
Attachment #155600 - Attachment is obsolete: true
In reviewing attachment 158112 [details] [diff] [review] I noticed a few remaining error handling issues.
 I fixed them, and this is the revised patch.  I will also attach the changes
compared to the previous proposal (attachment 158112 [details] [diff] [review]) and the revised files
where I made the biggest changes.
Attachment #82029 - Attachment is obsolete: true
Attachment #82030 - Attachment is obsolete: true
Attachment #156540 - Attachment is obsolete: true
Attachment #156631 - Attachment is obsolete: true
Attachment #158112 - Attachment is obsolete: true
Thanks! We will re-test the revised code and report back.
These last changes test out ok for us.
Much thanks to Sun, Netscape/AOL, especially Alok and David for their
contributed fixes.

This fix has now been committed to the trunk.  It is good to close this aging bug!

mozilla/directory/c-sdk/ldap/clients/tools/common.c
  new revision: 5.14; previous revision: 5.13
mozilla/directory/c-sdk/ldap/include/lber.h
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/include/ldap-extension.h
  new revision: 5.4; previous revision: 5.3
mozilla/directory/c-sdk/ldap/include/ldap_ssl.h
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/include/ldappr.h
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/libraries/libldap_ssl.ex
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/libraries/liblber/io.c
  new revision: 5.8; previous revision: 5.7
mozilla/directory/c-sdk/ldap/libraries/libldap/getoption.c
  new revision: 5.4; previous revision: 5.3
mozilla/directory/c-sdk/ldap/libraries/libldap/setoption.c
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/libraries/libprldap/ldappr-int.h
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/libraries/libprldap/ldappr-io.c
  new revision: 5.4; previous revision: 5.3
mozilla/directory/c-sdk/ldap/libraries/libprldap/ldappr-public.c
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/libraries/libprldap/libprldap.ex
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/libraries/libssldap/ldapsinit.c
  new revision: 5.10; previous revision: 5.9
mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/ldapssl.def
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nsldappr-incl.def
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nsldappr32.def
  new revision: 5.3; previous revision: 5.2
mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nsldapssl32.def
  new revision: 5.5; previous revision: 5.4
mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nssldap32.def
  new revision: 5.5; previous revision: 5.4
    Fix bug # 141754 - Enhancement: Should support startTLS.
     LDAP command line tools now accept 2 new options:
        -ZZ  (issue a startTLS request)
        -ZZZ (like -ZZ but require a successful response).
     API extensions:
      ldap_ssl.h: LDAP_EXOP_START_TLS macro (OID of start TLS extended op.).
      libssldap:  Added ldap_start_tls_s() function.
      libprldap:  Added prldap_is_installed() and prldap_import_connection().
      libldap:    Added new LDAP_X_OPT_SOCKETARG option for ldap_get_option()
                    and ldap_set_option() (get/set the socketarg associated
                    with the main LDAP TCP connection).
      liblber:    Added new LBER_SOCKBUF_OPT_SOCK_ARG option for
                     ber_sockbuf_set_option() and ber_sockbuf_get_option()
                     (get/set the socketarg associated with a Sockbuf).
    Also, some refactoring was done in libssldap to simplify the code.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
An additional semi-colon is causing build failures on some non-gcc compilers.
The diff is attached to show the location of the extra character.
Oops.  Fix committed:

mozilla/directory/c-sdk/ldap/libraries/libssldap/ldapsinit.c
  new revision: 5.11; previous revision: 5.10
    Additional fix for 141754 - Enhancement: Should support startTls:
      Remove extra semicolon which causes an error on some non-gcc compilers.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: