]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
silence warning
[openldap] / servers / slapd / result.c
index b139d217a0818c0fd9f9decf32d2b85cc6399f96..5079bd11a34397db00845f3f281f62676a713e68 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2010 The OpenLDAP Foundation.
+ * Copyright 1998-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -134,6 +134,38 @@ slap_req2res( ber_tag_t tag )
 
 /* SlapReply debugging, prodo-slap.h overrides it in OpenLDAP releases */
 #if defined(LDAP_TEST) || (defined(USE_RS_ASSERT) && (USE_RS_ASSERT))
+
+int rs_suppress_assert = 0;
+
+/* RS_ASSERT() helper function */
+void rs_assert_(const char*file, unsigned line, const char*fn, const char*cond)
+{
+       int no_assert = rs_suppress_assert, save_errno = errno;
+       const char *s;
+
+       if ( no_assert >= 0 ) {
+               if ( no_assert == 0 && (s = getenv( "NO_RS_ASSERT" )) && *s ) {
+                       no_assert = rs_suppress_assert = atoi( s );
+               }
+               if ( no_assert > 0 ) {
+                       errno = save_errno;
+                       return;
+               }
+       }
+
+#ifdef rs_assert_      /* proto-slap.h #defined away the fn parameter */
+       fprintf( stderr,"%s:%u: "  "RS_ASSERT(%s) failed.\n", file,line,cond );
+#else
+       fprintf( stderr,"%s:%u: %s: RS_ASSERT(%s) failed.\n", file,line,fn,cond );
+#endif
+       fflush( stderr );
+
+       errno = save_errno;
+       /* $NO_RS_ASSERT > 0: ignore rs_asserts, 0: abort, < 0: just warn */
+       if ( !no_assert /* from $NO_RS_ASSERT */ ) abort();
+}
+
+/* SlapReply is consistent */
 void
 (rs_assert_ok)( const SlapReply *rs )
 {
@@ -161,6 +193,8 @@ void
 #endif
 #endif
 }
+
+/* Ready for calling a new backend operation */
 void
 (rs_assert_ready)( const SlapReply *rs )
 {
@@ -178,6 +212,8 @@ void
        RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MASK) );
 #endif
 }
+
+/* Backend operation done */
 void
 (rs_assert_done)( const SlapReply *rs )
 {
@@ -188,6 +224,7 @@ void
        RS_ASSERT( !(rs->sr_flags & REP_ENTRY_MUSTFLUSH) );
 #endif
 }
+
 #endif /* LDAP_TEST || USE_RS_ASSERT */
 
 /* Reset a used SlapReply whose contents has been flushed (freed/released) */
@@ -231,7 +268,7 @@ rs_replace_entry( Operation *op, SlapReply *rs, slap_overinst *on, Entry *e )
  * Return nonzero if rs->sr_entry was replaced.
  */
 int
-rs_ensure_entry_modifiable( Operation *op, SlapReply *rs, slap_overinst *on )
+rs_entry2modifiable( Operation *op, SlapReply *rs, slap_overinst *on )
 {
        if ( rs->sr_flags & REP_ENTRY_MODIFIABLE ) {
                rs_assert_ok( rs );
@@ -1005,7 +1042,8 @@ slap_send_search_entry( Operation *op, SlapReply *rs )
 #endif
        if ( op->o_res_ber ) {
                /* read back control */
-           rc = ber_printf( ber, "{O{" /*}}*/, &rs->sr_entry->e_name );
+           rc = ber_printf( ber, "t{O{" /*}}*/,
+                       LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
        } else {
            rc = ber_printf( ber, "{it{O{" /*}}}*/, op->o_msgid,
                        LDAP_RES_SEARCH_ENTRY, &rs->sr_entry->e_name );
@@ -1411,16 +1449,6 @@ error_return:;
        }
        rs->sr_attr_flags = SLAP_ATTRS_UNDEFINED;
 
-       /* FIXME: I think rs->sr_type should be explicitly set to
-        * REP_SEARCH here. That's what it was when we entered this
-        * function. send_ldap_error may have changed it, but we
-        * should set it back so that the cleanup functions know
-        * what they're doing.
-        *
-        * ...No, that's what we set it to on entering this function.
-        * And we may have to clear out rs->sr_un.sru_search first,
-        * if it can contain data from sr_un.sru_extended.
-        */
        if ( op->o_tag == LDAP_REQ_SEARCH && rs->sr_type == REP_SEARCH ) {
                rs_flush_entry( op, rs, NULL );
        } else {
@@ -1717,6 +1745,7 @@ int slap_read_controls(
        myop.o_res_ber = ber;
        myop.o_callback = NULL;
        myop.ors_slimit = 1;
+       myop.ors_attrsonly = 0;
 
        rc = slap_send_search_entry( &myop, rs );
        if( rc ) return rc;