]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backglue.c
ITS#1716 is_entry_subentr/ies/y/
[openldap] / servers / slapd / backglue.c
index e25275e2ddf2ef268bbea48abbbeb164913f60c2..9b1a445325d9307872e74e085987e287c7f77cf1 100644 (file)
@@ -97,7 +97,7 @@ glue_back_close (
 )
 {
        static int glueClosed = 0;
-       int rc;
+       int rc = 0;
 
        if (glueClosed) return 0;
 
@@ -292,12 +292,16 @@ glue_back_search (
 {
        glueinfo *gi = (glueinfo *)b0->be_private;
        BackendDB *be;
-       int i, rc, t2limit = 0, s2limit = 0;
+       int i, rc = 0, t2limit = 0, s2limit = 0;
        long stoptime = 0;
        struct berval bv;
        glue_state gs = {0};
-       slap_callback cb = {glue_back_response, glue_back_sresult, 
-               glue_back_sendentry, &gs};
+       slap_callback cb;
+
+       cb.sc_response = glue_back_response;
+       cb.sc_sresult = glue_back_sresult;
+       cb.sc_sendentry = glue_back_sendentry;
+       cb.sc_private = &gs;
 
        gs.prevcb = op->o_callback;
 
@@ -323,6 +327,7 @@ glue_back_search (
        case LDAP_SCOPE_ONELEVEL:
        case LDAP_SCOPE_SUBTREE:
                op->o_callback = &cb;
+               rc = gs.err = LDAP_UNWILLING_TO_PERFORM;
 
                /*
                 * Execute in reverse order, most general first 
@@ -332,13 +337,17 @@ glue_back_search (
                                continue;
                        if (tlimit) {
                                t2limit = stoptime - slap_get_time ();
-                               if (t2limit <= 0)
+                               if (t2limit <= 0) {
+                                       rc = gs.err = LDAP_TIMELIMIT_EXCEEDED;
                                        break;
+                               }
                        }
                        if (slimit) {
                                s2limit = slimit - gs.nentries;
-                               if (s2limit <= 0)
+                               if (s2limit <= 0) {
+                                       rc = gs.err = LDAP_SIZELIMIT_EXCEEDED;
                                        break;
+                               }
                        }
                        /*
                         * check for abandon 
@@ -804,7 +813,7 @@ glue_sub_init( )
        int i, j;
        int cont = num_subordinates;
        BackendDB *b1, *be;
-       BackendInfo *bi;
+       BackendInfo *bi = NULL;
        glueinfo *gi;
 
        /* While there are subordinate backends, search backwards through the
@@ -884,10 +893,7 @@ glue_sub_init( )
                                        gi->nodes * sizeof(gluenode));
                        }
                        gi->n[gi->nodes].be = be;
-                       if ( dnParent( be->be_nsuffix[0], &gi->n[gi->nodes].pdn ) 
-                                       != LDAP_SUCCESS ) {
-                               return -1;
-                       }
+                       dnParent( be->be_nsuffix[0], &gi->n[gi->nodes].pdn ); 
                        gi->nodes++;
                }
                if (gi) {
@@ -895,10 +901,7 @@ glue_sub_init( )
                        gi = (glueinfo *)ch_realloc(gi,
                                sizeof(glueinfo) + gi->nodes * sizeof(gluenode));
                        gi->n[gi->nodes].be = gi->be;
-                       if ( dnParent( b1->be_nsuffix[0], &gi->n[gi->nodes].pdn )
-                                       != LDAP_SUCCESS ) {
-                               return -1;
-                       }
+                       dnParent( b1->be_nsuffix[0], &gi->n[gi->nodes].pdn );
                        gi->nodes++;
                        b1->be_private = gi;
                        b1->bd_info = bi;