]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/cyrus.c
Add LDAP_DEPRECATED macro
[openldap] / libraries / libldap / cyrus.c
index 7ad2b80e66889660b67d0c00081addf4a9d854d1..339d21dc8720d94d1e82fc8942bd7627cbd900a0 100644 (file)
@@ -1,7 +1,16 @@
 /* $OpenLDAP$ */
-/*
- * Copyright 1999-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2003 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
 
 #include "portable.h"
@@ -14,6 +23,7 @@
 #include <ac/time.h>
 #include <ac/errno.h>
 #include <ac/ctype.h>
+#include <ac/unistd.h>
 
 #include "ldap-int.h"
 
@@ -57,22 +67,29 @@ int ldap_int_sasl_init( void )
        };
 
 #ifdef HAVE_SASL_VERSION
-#define SASL_BUILD_VERSION ((SASL_VERSION_MAJOR << 24) |\
-       (SASL_VERSION_MINOR << 16) | SASL_VERSION_STEP)
-
+       /* stringify the version number, sasl.h doesn't do it for us */
+#define VSTR0(maj, min, pat)   #maj "." #min "." #pat
+#define VSTR(maj, min, pat)    VSTR0(maj, min, pat)
+#define SASL_VERSION_STRING    VSTR(SASL_VERSION_MAJOR, SASL_VERSION_MINOR, \
+                               SASL_VERSION_STEP)
        { int rc;
        sasl_version( NULL, &rc );
        if ( ((rc >> 16) != ((SASL_VERSION_MAJOR << 8)|SASL_VERSION_MINOR)) ||
                (rc & 0xffff) < SASL_VERSION_STEP) {
+               char version[sizeof("xxx.xxx.xxxxx")];
+               sprintf( version, "%u.%d.%d", (unsigned)rc >> 24, (rc >> 16) & 0xff,
+                       rc & 0xffff );
 
 #ifdef NEW_LOGGING
                LDAP_LOG( TRANSPORT, INFO,
-               "ldap_int_sasl_init: SASL version mismatch, got %x, wanted %x.\n",
-                       rc, SASL_BUILD_VERSION, 0 );
+               "ldap_int_sasl_init: SASL library version mismatch:"
+               " expected " SASL_VERSION_STRING ","
+               " got %s\n", version, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
-               "ldap_int_sasl_init: SASL version mismatch, got %x, wanted %x.\n",
-                       rc, SASL_BUILD_VERSION, 0 );
+               "ldap_int_sasl_init: SASL library version mismatch:"
+               " expected " SASL_VERSION_STRING ","
+               " got %s\n", version, 0, 0 );
 #endif
                return -1;
        }
@@ -146,7 +163,7 @@ sb_sasl_setup( Sockbuf_IO_Desc *sbiod, void *arg )
        }
        sasl_getprop( p->sasl_context, SASL_MAXOUTBUF,
                (SASL_CONST void **) &p->sasl_maxbuf );
-
+           
        sbiod->sbiod_pvt = p;
 
        return 0;
@@ -177,7 +194,7 @@ sb_sasl_remove( Sockbuf_IO_Desc *sbiod )
 }
 
 static ber_len_t
-sb_sasl_pkt_length( const unsigned char *buf, unsigned max, int debuglevel )
+sb_sasl_pkt_length( const unsigned char *buf, int debuglevel )
 {
        ber_len_t               size;
 
@@ -201,7 +218,7 @@ sb_sasl_pkt_length( const unsigned char *buf, unsigned max, int debuglevel )
 
 /* Drop a processed packet from the input buffer */
 static void
-sb_sasl_drop_packet ( Sockbuf_Buf *sec_buf_in, unsigned max, int debuglevel )
+sb_sasl_drop_packet ( Sockbuf_Buf *sec_buf_in, int debuglevel )
 {
        ber_slen_t                      len;
 
@@ -212,7 +229,7 @@ sb_sasl_drop_packet ( Sockbuf_Buf *sec_buf_in, unsigned max, int debuglevel )
    
        if ( len >= 4 ) {
                sec_buf_in->buf_end = sb_sasl_pkt_length(
-                       (unsigned char *) sec_buf_in->buf_base, max, debuglevel);
+                       (unsigned char *) sec_buf_in->buf_base, debuglevel);
        }
        else {
                sec_buf_in->buf_end = 0;
@@ -261,7 +278,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
 
        /* The new packet always starts at p->sec_buf_in.buf_base */
        ret = sb_sasl_pkt_length( (unsigned char *) p->sec_buf_in.buf_base,
-               *p->sasl_maxbuf, sbiod->sbiod_sb->sb_debug );
+               sbiod->sbiod_sb->sb_debug );
 
        /* Grow the packet buffer if neccessary */
        if ( ( p->sec_buf_in.buf_size < (ber_len_t) ret ) && 
@@ -296,8 +313,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
                (unsigned *)&p->buf_in.buf_end );
 
        /* Drop the packet from the input buffer */
-       sb_sasl_drop_packet( &p->sec_buf_in,
-                       *p->sasl_maxbuf, sbiod->sbiod_sb->sb_debug );
+       sb_sasl_drop_packet( &p->sec_buf_in, sbiod->sbiod_sb->sb_debug );
 
        if ( ret != SASL_OK ) {
                ber_log_printf( LDAP_DEBUG_ANY, sbiod->sbiod_sb->sb_debug,
@@ -483,6 +499,11 @@ ldap_int_sasl_open(
                return ld->ld_errno;
        }
 
+       if ( ldap_int_sasl_init() ) {
+               ld->ld_errno = LDAP_LOCAL_ERROR;
+               return ld->ld_errno;
+       }
+
 #if SASL_VERSION_MAJOR >= 2
        rc = sasl_client_new( "ldap", host, NULL, NULL,
                NULL, 0, &ctx );
@@ -591,9 +612,10 @@ ldap_int_sasl_bind(
                ld->ld_defconn->lconn_sasl_authctx = NULL;
        }
 
-       rc = ldap_int_sasl_open( ld, ld->ld_defconn,
-               ld->ld_defconn->lconn_server->lud_host ?
-               ld->ld_defconn->lconn_server->lud_host : "localhost" );
+       { char *saslhost = ldap_host_connected_to( ld->ld_sb, "localhost" );
+       rc = ldap_int_sasl_open( ld, ld->ld_defconn, saslhost );
+       LDAP_FREE( saslhost );
+       }
 
        if ( rc != LDAP_SUCCESS ) return rc;
 
@@ -665,7 +687,7 @@ ldap_int_sasl_bind(
        if ( (saslrc != SASL_OK) && (saslrc != SASL_CONTINUE) ) {
                rc = ld->ld_errno = sasl_err2ldap( saslrc );
 #if SASL_VERSION_MAJOR >= 2
-               ld->ld_error = (char *)sasl_errdetail( ctx );
+               ld->ld_error = LDAP_STRDUP( sasl_errdetail( ctx ) );
 #endif
                goto done;
        }
@@ -753,7 +775,7 @@ ldap_int_sasl_bind(
                if ( (saslrc != SASL_OK) && (saslrc != SASL_CONTINUE) ) {
                        ld->ld_errno = sasl_err2ldap( saslrc );
 #if SASL_VERSION_MAJOR >= 2
-                       ld->ld_error = (char *)sasl_errdetail( ctx );
+                       ld->ld_error = LDAP_STRDUP( sasl_errdetail( ctx ) );
 #endif
                        rc = ld->ld_errno;
                        goto done;
@@ -764,7 +786,7 @@ ldap_int_sasl_bind(
 
        if ( saslrc != SASL_OK ) {
 #if SASL_VERSION_MAJOR >= 2
-               ld->ld_error = (char *)sasl_errdetail( ctx );
+               ld->ld_error = LDAP_STRDUP( sasl_errdetail( ctx ) );
 #endif
                rc = ld->ld_errno = sasl_err2ldap( saslrc );
                goto done;