]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/tools/slapcat.c
allow 'all' vs. 'any' sasl-authz-policy
[openldap] / servers / slapd / tools / slapcat.c
index f2103878167937bed894a7d11c7e95dadb3ce025..c402dc40f7938d5533867cdee29acfbb86d73141 100644 (file)
@@ -1,8 +1,25 @@
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-1999 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.
+ * Portions Copyright 1998-2003 Kurt D. Zeilenga.
+ * Portions Copyright 2003 IBM Corporation.
+ * 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 file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
+/* ACKNOWLEDGEMENTS:
+ * This work was initially developed by Kurt Zeilenga for inclusion
+ * in OpenLDAP Software.  Additional signficant contributors include
+ *    Jong Hyuk Choi
+ */
+
 #include "portable.h"
 
 #include <stdio.h>
@@ -19,13 +36,14 @@ main( int argc, char **argv )
 {
        ID id;
        int rc = EXIT_SUCCESS;
+       Operation op = {0};
 
        slap_tool_init( "slapcat", SLAPCAT, argc, argv );
 
-       if( !be->be_entry_open &&
-               !be->be_entry_close &&
-               !be->be_entry_first &&
-               !be->be_entry_next &&
+       if( !be->be_entry_open ||
+               !be->be_entry_close ||
+               !be->be_entry_first ||
+               !be->be_entry_next ||
                !be->be_entry_get )
        {
                fprintf( stderr, "%s: database doesn't support necessary operations.\n",
@@ -46,10 +64,7 @@ main( int argc, char **argv )
                char *data;
                int len;
                Entry* e = be->be_entry_get( be, id );
-
-               if( verbose ) {
-                       printf( "# id=%08lx\n", (long) id );
-               }
+               op.o_bd = be;
 
                if ( e == NULL ) {
                        printf("# no data for entry id=%08lx\n\n", (long) id );
@@ -58,8 +73,31 @@ main( int argc, char **argv )
                        break;
                }
 
+               if( sub_ndn.bv_len && !dnIsSuffix( &e->e_nname, &sub_ndn ) ) {
+                       be_entry_release_r( &op, e );
+                       continue;
+               }
+
+               if ( retrieve_ctxcsn == 0 ) {
+                       if ( is_entry_syncProviderSubentry( e ) ) {
+                               be_entry_release_r( &op, e );
+                               continue;
+                       }
+               }
+
+               if ( retrieve_synccookie == 0 ) {
+                       if ( is_entry_syncConsumerSubentry( e ) ) {
+                               be_entry_release_r( &op, e );
+                               continue;
+                       }
+               }
+
+               if( verbose ) {
+                       printf( "# id=%08lx\n", (long) id );
+               }
+
                data = entry2str( e, &len );
-               entry_free( e );
+               be_entry_release_r( &op, e );
 
                if ( data == NULL ) {
                        printf("# bad data for entry id=%08lx\n\n", (long) id );