[389-commits] Branch '389-ds-base-1.3.2' - ldap/servers

Ludwig Krispenz lkrispen at fedoraproject.org
Thu Sep 11 07:54:16 UTC 2014


 ldap/servers/plugins/deref/deref.c |   30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

New commits:
commit 0056b612a509b7689e4384f3f2e52f3c6e74994f
Author: Ludwig Krispenz <lkrispen at redhat.com>
Date:   Wed Sep 10 13:22:06 2014 +0200

    fix for 47885 did not always return a response control
    
    reviewd by rich, thanks

diff --git a/ldap/servers/plugins/deref/deref.c b/ldap/servers/plugins/deref/deref.c
index 20b56cc..06540f5 100644
--- a/ldap/servers/plugins/deref/deref.c
+++ b/ldap/servers/plugins/deref/deref.c
@@ -598,14 +598,13 @@ deref_values_free(Slapi_ValueSet** results, char** actual_type_name, int buffer_
     slapi_vattr_values_free(results, actual_type_name, buffer_flags);
 }
 
-static int
+static void
 deref_do_deref_attr(Slapi_PBlock *pb, BerElement *ctrlber, const char *derefdn, const char *derefattr, const char **attrs)
 {
     char **retattrs = NULL;
     Slapi_PBlock *derefpb = NULL;
     Slapi_Entry **entries = NULL;
     int rc;
-    int needcontrol = 0;
 
 /*  If the access check on the attributes is done without retrieveing the entry
  *  it cannot handle acis which need teh entry, eg to apply a targetfilter rule
@@ -635,7 +634,6 @@ deref_do_deref_attr(Slapi_PBlock *pb, BerElement *ctrlber, const char *derefdn,
                              "The client does not have permission to read the requested "
                              "attributes in entry %s\n", derefdn);
                 } else {
-		    needcontrol = 1;
                     ber_printf(ctrlber, "{ss", derefattr, derefdn); /* begin DerefRes + derefAttr + derefVal */
                     for (ii = 0; retattrs[ii]; ++ii) {
                         Slapi_Value *sv;
@@ -711,7 +709,6 @@ deref_do_deref_attr(Slapi_PBlock *pb, BerElement *ctrlber, const char *derefdn,
     slapi_pblock_destroy(derefpb);
     slapi_ch_free((void **)&retattrs); /* retattrs does not own the strings */
 
-    return needcontrol;
 }
 
 static int
@@ -725,7 +722,6 @@ deref_pre_entry(Slapi_PBlock *pb)
     LDAPControl *ctrl = NULL;
     const LDAPControl **searchctrls = NULL;
     LDAPControl **newsearchctrls = NULL;
-    int needcontrol = 0;
 
     if (!speclist) {
         return 0; /* nothing to do */
@@ -769,25 +765,23 @@ deref_pre_entry(Slapi_PBlock *pb)
         for (; results && sv; idx = slapi_valueset_next_value(results, idx, &sv)) {
             const char *derefdn = slapi_value_get_string(sv);
 
-            needcontrol += deref_do_deref_attr(pb, ctrlber, derefdn, spec->derefattr,  (const char **)spec->attrs);
+            deref_do_deref_attr(pb, ctrlber, derefdn, spec->derefattr,  (const char **)spec->attrs);
         }
         deref_values_free(&results, &actual_type_name, buffer_flags);
     }
 
     ber_printf(ctrlber, "}"); /* end control val */
  
-    if (needcontrol) {
-        slapi_build_control(LDAP_CONTROL_X_DEREF, ctrlber, 0, &ctrl);
-        /* get the list of controls */
-	slapi_pblock_get(pb, SLAPI_SEARCH_CTRLS, &searchctrls);
-        /* dup them */
-        slapi_add_controls(&newsearchctrls, (LDAPControl **)searchctrls, 1);
-        /* add our control */
-        slapi_add_control_ext(&newsearchctrls, ctrl, 0);
-        ctrl = NULL; /* newsearchctrls owns it now */
-        /* set the controls in the pblock */
-        slapi_pblock_set(pb, SLAPI_SEARCH_CTRLS, newsearchctrls);
-    }
+    slapi_build_control(LDAP_CONTROL_X_DEREF, ctrlber, 0, &ctrl);
+    /* get the list of controls */
+    slapi_pblock_get(pb, SLAPI_SEARCH_CTRLS, &searchctrls);
+    /* dup them */
+    slapi_add_controls(&newsearchctrls, (LDAPControl **)searchctrls, 1);
+    /* add our control */
+    slapi_add_control_ext(&newsearchctrls, ctrl, 0);
+    ctrl = NULL; /* newsearchctrls owns it now */
+    /* set the controls in the pblock */
+    slapi_pblock_set(pb, SLAPI_SEARCH_CTRLS, newsearchctrls);
     ber_free(ctrlber, 1);
 
     return 0;




More information about the 389-commits mailing list