]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/sets.c
ITS#5379 HAVE_TLS dependency
[openldap] / servers / slapd / sets.c
index 1d9c38d477b85c6c6e47c8d9a422fda2e67ac917..7f3f8ceba89eb216a6cc3909fde204d2ad0fb8a8 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2000-2007 The OpenLDAP Foundation.
+ * Copyright 2000-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -151,16 +151,19 @@ slap_set_join(
                                                        sizeof( struct berval ),
                                                        cp->set_op->o_tmpmemctx );
                                        BER_BVZERO( &set[ 0 ] );
-                                       return set;
+                                       goto done2;
                                }
-                               return set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
+                               set = set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
+                               goto done2;
                        }
                        slap_set_dispose( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
-                       return set_dup( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
+                       set = set_dup( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
+                       goto done2;
                }
                if ( rset == NULL || BER_BVISNULL( &rset[ 0 ] ) ) {
                        slap_set_dispose( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
-                       return set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
+                       set = set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
+                       goto done2;
                }
 
                /* worst scenario: no duplicates */
@@ -277,25 +280,13 @@ slap_set_join(
                j = slap_set_size( lset );
 
                /* handle empty set cases */
-               if ( i == 0 ) {
-                       if ( j == 0 ) {
-                               set = cp->set_op->o_tmpcalloc( i * j + 1, sizeof( struct berval ),
-                                               cp->set_op->o_tmpmemctx );
-                               if ( set == NULL ) {
-                                       break;
-                               }
-                               BER_BVZERO( &set[ 0 ] );
-                               break;
-
-                       } else {
-                               set = set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
-                               lset = NULL;
+               if ( i == 0 || j == 0 ) {
+                       set = cp->set_op->o_tmpcalloc( 1, sizeof( struct berval ),
+                                       cp->set_op->o_tmpmemctx );
+                       if ( set == NULL ) {
                                break;
                        }
-
-               } else if ( j == 0 ) {
-                       set = set_dup( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
-                       rset = NULL;
+                       BER_BVZERO( &set[ 0 ] );
                        break;
                }
 
@@ -364,6 +355,18 @@ done:;
        if ( lset ) slap_set_dispose( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
        if ( rset ) slap_set_dispose( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
 
+done2:;
+       if ( LogTest( LDAP_DEBUG_ACL ) ) {
+               if ( BER_BVISNULL( set ) ) {
+                       Debug( LDAP_DEBUG_ACL, "  ACL set: empty\n", 0, 0, 0 );
+
+               } else {
+                       for ( i = 0; !BER_BVISNULL( &set[ i ] ); i++ ) {
+                               Debug( LDAP_DEBUG_ACL, "  ACL set[%ld]=%s\n", i, set[i].bv_val, 0 );
+                       }
+               }
+       }
+
        return set;
 }