]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapauth.c
Merge remote branch 'origin/mdb.master'
[openldap] / servers / slapd / slapauth.c
index 06dd27709d50529250e30993ec36cf8d866e26b0..f722429ad41dbd684db277aaef81757f85aea4cb 100644 (file)
@@ -1,6 +1,7 @@
+/* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2004 The OpenLDAP Foundation.
+ * Copyright 2004-2011 The OpenLDAP Foundation.
  * Portions Copyright 2004 Pierangelo Masarati.
  * All rights reserved.
  *
@@ -40,7 +41,7 @@ do_check( Connection *c, Operation *op, struct berval *id )
        struct berval   authcdn;
        int             rc;
 
-       rc = slap_sasl_getdn( c, op, id, NULL, &authcdn, SLAP_GETDN_AUTHCID );
+       rc = slap_sasl_getdn( c, op, id, realm, &authcdn, SLAP_GETDN_AUTHCID );
        if ( rc != LDAP_SUCCESS ) {
                fprintf( stderr, "ID: <%s> check failed %d (%s)\n",
                                id->bv_val, rc,
@@ -80,20 +81,25 @@ slapauth( int argc, char **argv )
        int                     rc = EXIT_SUCCESS;
        const char              *progname = "slapauth";
        Connection              conn = {0};
-       Operation               op = {0};
-       Opheader                ohdr = {0};
+       OperationBuffer opbuf;
+       Operation               *op;
+       void                    *thrctx;
 
        slap_tool_init( progname, SLAPAUTH, argc, argv );
 
        argv = &argv[ optind ];
        argc -= optind;
 
-       connection_fake_init( &conn, &op, &ohdr, &conn );
+       thrctx = ldap_pvt_thread_pool_context();
+       connection_fake_init( &conn, &opbuf, thrctx );
+       op = &opbuf.ob_op;
+
+       conn.c_sasl_bind_mech = mech;
 
        if ( !BER_BVISNULL( &authzID ) ) {
                struct berval   authzdn;
                
-               rc = slap_sasl_getdn( &conn, &op, &authzID, NULL, &authzdn,
+               rc = slap_sasl_getdn( &conn, op, &authzID, NULL, &authzdn,
                                SLAP_GETDN_AUTHZID );
                if ( rc != LDAP_SUCCESS ) {
                        fprintf( stderr, "authzID: <%s> check failed %d (%s)\n",
@@ -110,7 +116,7 @@ slapauth( int argc, char **argv )
 
        if ( !BER_BVISNULL( &authcID ) ) {
                if ( !BER_BVISNULL( &authzID ) || argc == 0 ) {
-                       rc = do_check( &conn, &op, &authcID );
+                       rc = do_check( &conn, op, &authcID );
                        goto destroy;
                }
 
@@ -119,7 +125,7 @@ slapauth( int argc, char **argv )
                
                        ber_str2bv( argv[ 0 ], 0, 0, &authzID );
 
-                       rc = slap_sasl_getdn( &conn, &op, &authzID, NULL, &authzdn,
+                       rc = slap_sasl_getdn( &conn, op, &authzID, NULL, &authzdn,
                                        SLAP_GETDN_AUTHZID );
                        if ( rc != LDAP_SUCCESS ) {
                                fprintf( stderr, "authzID: <%s> check failed %d (%s)\n",
@@ -134,9 +140,9 @@ slapauth( int argc, char **argv )
 
                        authzID = authzdn;
 
-                       rc = do_check( &conn, &op, &authcID );
+                       rc = do_check( &conn, op, &authcID );
 
-                       op.o_tmpfree( authzID.bv_val, op.o_tmpmemctx );
+                       op->o_tmpfree( authzID.bv_val, op->o_tmpmemctx );
                        BER_BVZERO( &authzID );
 
                        if ( rc && !continuemode ) {
@@ -152,7 +158,7 @@ slapauth( int argc, char **argv )
 
                ber_str2bv( argv[ 0 ], 0, 0, &id );
 
-               rc = do_check( &conn, &op, &id );
+               rc = do_check( &conn, op, &id );
 
                if ( rc && !continuemode ) {
                        goto destroy;
@@ -161,9 +167,10 @@ slapauth( int argc, char **argv )
 
 destroy:;
        if ( !BER_BVISNULL( &authzID ) ) {
-               op.o_tmpfree( authzID.bv_val, op.o_tmpmemctx );
+               op->o_tmpfree( authzID.bv_val, op->o_tmpmemctx );
        }
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }