]> git.sur5r.net Git - openldap/commitdiff
don't run useless (and likely to fail) checks, if possible
authorPierangelo Masarati <ando@openldap.org>
Wed, 30 Aug 2006 21:05:05 +0000 (21:05 +0000)
committerPierangelo Masarati <ando@openldap.org>
Wed, 30 Aug 2006 21:05:05 +0000 (21:05 +0000)
servers/slapd/back-bdb/add.c

index 83a809e57416b6e079407a3cff2168172c39e28d..918ee89a74ce51a620ca2d57da2e07b9bd81afd9 100644 (file)
@@ -237,44 +237,47 @@ retry:    /* transaction retry */
                goto return_results;;
        }
 
-       if ( is_entry_subentry( p ) ) {
-               /* parent is a subentry, don't allow add */
-               Debug( LDAP_DEBUG_TRACE,
-                       LDAP_XSTRING(bdb_add) ": parent is subentry\n",
-                       0, 0, 0 );
-               rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
-               rs->sr_text = "parent is a subentry";
-               goto return_results;;
-       }
-       if ( is_entry_alias( p ) ) {
-               /* parent is an alias, don't allow add */
-               Debug( LDAP_DEBUG_TRACE,
-                       LDAP_XSTRING(bdb_add) ": parent is alias\n",
-                       0, 0, 0 );
-               rs->sr_err = LDAP_ALIAS_PROBLEM;
-               rs->sr_text = "parent is an alias";
-               goto return_results;;
-       }
+       if ( p != (Entry *)&slap_entry_root ) {
+               if ( is_entry_subentry( p ) ) {
+                       /* parent is a subentry, don't allow add */
+                       Debug( LDAP_DEBUG_TRACE,
+                               LDAP_XSTRING(bdb_add) ": parent is subentry\n",
+                               0, 0, 0 );
+                       rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
+                       rs->sr_text = "parent is a subentry";
+                       goto return_results;;
+               }
 
-       if ( is_entry_referral( p ) ) {
-               /* parent is a referral, don't allow add */
-               rs->sr_matched = ber_strdup_x( p->e_name.bv_val,
-                       op->o_tmpmemctx );
-               rs->sr_ref = get_entry_referrals( op, p );
-               bdb_unlocked_cache_return_entry_r( &bdb->bi_cache, p );
-               p = NULL;
-               Debug( LDAP_DEBUG_TRACE,
-                       LDAP_XSTRING(bdb_add) ": parent is referral\n",
-                       0, 0, 0 );
+               if ( is_entry_alias( p ) ) {
+                       /* parent is an alias, don't allow add */
+                       Debug( LDAP_DEBUG_TRACE,
+                               LDAP_XSTRING(bdb_add) ": parent is alias\n",
+                               0, 0, 0 );
+                       rs->sr_err = LDAP_ALIAS_PROBLEM;
+                       rs->sr_text = "parent is an alias";
+                       goto return_results;;
+               }
 
-               rs->sr_err = LDAP_REFERRAL;
-               rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED;
-               goto return_results;
-       }
+               if ( is_entry_referral( p ) ) {
+                       /* parent is a referral, don't allow add */
+                       rs->sr_matched = ber_strdup_x( p->e_name.bv_val,
+                               op->o_tmpmemctx );
+                       rs->sr_ref = get_entry_referrals( op, p );
+                       bdb_unlocked_cache_return_entry_r( &bdb->bi_cache, p );
+                       p = NULL;
+                       Debug( LDAP_DEBUG_TRACE,
+                               LDAP_XSTRING(bdb_add) ": parent is referral\n",
+                               0, 0, 0 );
 
-       if ( subentry ) {
-               /* FIXME: */
-               /* parent must be an administrative point of the required kind */
+                       rs->sr_err = LDAP_REFERRAL;
+                       rs->sr_flags = REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED;
+                       goto return_results;
+               }
+
+               if ( subentry ) {
+                       /* FIXME: */
+                       /* parent must be an administrative point of the required kind */
+               }
        }
 
        /* free parent and reader lock */