]> git.sur5r.net Git - openldap/commitdiff
ITS#6254
authorQuanah Gibson-Mount <quanah@openldap.org>
Fri, 14 Aug 2009 23:03:11 +0000 (23:03 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 14 Aug 2009 23:03:11 +0000 (23:03 +0000)
CHANGES
servers/slapd/overlays/translucent.c

diff --git a/CHANGES b/CHANGES
index e001f5ce84da79287225db79e450fba8629a562a..0a2ce4144fc9d7daa6e1ba99442dde76f94e3542 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -23,8 +23,9 @@ OpenLDAP 2.4.18 Engineering
        Fixed slapd-sql with baseObject query (ITS#6172)
        Fixed slapd-sql with empty attribute (ITS#6163)
        Added slapo-pcache olcProxyCacheOffline (ITS#6152)
-       Fixed slapo-translucent to honor sizelimit (ITS#6253)
+       Fixed slapo-translucent attribute return (ITS#6254)
        Fixed slapo-translucent filter matching (ITS#6255)
+       Fixed slapo-translucent to honor sizelimit (ITS#6253)
        Fixed slapo-unique filter matching (ITS#6077)
        Fixed tools off by one error (ITS#6233)
        Fixed tools resource leaks (ITS#6145)
index dd9328591658dac24cbe4b8f3f79c69a3cf94cdf..f7c443631ff5608c12e28aa6fd52462724050437 100644 (file)
@@ -770,6 +770,7 @@ typedef struct trans_ctx {
        Avlnode *list;
        int step;
        int slimit;
+       AttributeName *attrs;
 } trans_ctx;
 
 static int translucent_search_cb(Operation *op, SlapReply *rs) {
@@ -795,6 +796,11 @@ static int translucent_search_cb(Operation *op, SlapReply *rs) {
                rs->sr_entry->e_name.bv_val, 0, 0);
 
        op->ors_slimit = tc->slimit + ( tc->slimit > 0 ? 1 : 0 );
+       if ( op->ors_attrs == slap_anlist_all_attributes ) {
+               op->ors_attrs = tc->attrs;
+               rs->sr_attrs = tc->attrs;
+               rs->sr_attr_flags = slap_attr_flags( rs->sr_attrs );
+       }
 
        on = tc->on;
        ov = on->on_bi.bi_private;
@@ -1106,16 +1112,16 @@ static int translucent_search(Operation *op, SlapReply *rs) {
        tc.orig = op->ors_filter;
        tc.list = NULL;
        tc.step = 0;
+       tc.slimit = op->ors_slimit;
+       tc.attrs = NULL;
        fbv = op->ors_filterstr;
 
        op->o_callback = &cb;
 
-       tc.slimit = op->ors_slimit;
-
        if ( fr || !fl ) {
-               AttributeName *attrs = op->ors_attrs;
+               tc.attrs = op->ors_attrs;
                op->ors_slimit = SLAP_NO_LIMIT;
-               op->ors_attrs = NULL;
+               op->ors_attrs = slap_anlist_all_attributes;
                op->o_bd = &ov->db;
                tc.step |= RMT_SIDE;
                if ( fl ) {
@@ -1124,7 +1130,7 @@ static int translucent_search(Operation *op, SlapReply *rs) {
                        filter2bv_x( op, fr, &op->ors_filterstr );
                }
                rc = ov->db.bd_info->bi_op_search(op, rs);
-               op->ors_attrs = attrs;
+               op->ors_attrs = tc.attrs;
                op->o_bd = tc.db;
                if ( fl ) {
                        op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
@@ -1141,6 +1147,7 @@ static int translucent_search(Operation *op, SlapReply *rs) {
        op->ors_filter = tc.orig;
        op->o_callback = cb.sc_next;
        rs->sr_attrs = op->ors_attrs;
+       rs->sr_attr_flags = slap_attr_flags( rs->sr_attrs );
 
        /* Send out anything remaining on the list and finish */
        if ( tc.step & USE_LIST ) {