X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fdynlist.c;h=4150659d24ee8370edafcb931efc71b70dea67ef;hb=5a6cd2403f70be749037464a1ffd4ca1b8e1b4ea;hp=da0528ec1aad2c98056ca1f008918888505a9697;hpb=aa4a1acfc28ebdb3bb7ce70ee3d901ea86f1b0f2;p=openldap diff --git a/servers/slapd/overlays/dynlist.c b/servers/slapd/overlays/dynlist.c index da0528ec1a..4150659d24 100644 --- a/servers/slapd/overlays/dynlist.c +++ b/servers/slapd/overlays/dynlist.c @@ -92,10 +92,10 @@ dynlist_is_dynlist_next( Operation *op, SlapReply *rs, dynlist_info_t *old_dli ) } for ( ; dli; dli = dli->dli_next ) { - if ( value_find_ex( slap_schema.si_ad_objectClass, + if ( attr_valfind( a, SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH | SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH, - a->a_nvals, &dli->dli_oc->soc_cname, + &dli->dli_oc->soc_cname, NULL, op->o_tmpmemctx ) == 0 ) { return dli; @@ -189,6 +189,7 @@ dynlist_sc_update( Operation *op, SlapReply *rs ) mod.sm_type = dlc->dlc_dli->dli_member_ad->ad_cname; mod.sm_values = vals; mod.sm_nvalues = nvals; + mod.sm_numvals = 1; (void)modify_add_values( e, &mod, /* permissive */ 1, &text, textbuf, sizeof( textbuf ) ); @@ -248,8 +249,7 @@ dynlist_sc_update( Operation *op, SlapReply *rs ) } /* test access to attribute */ - for ( i = 0; !BER_BVISNULL( &a->a_vals[i] ); i++ ) - /* just count */ ; + i = a->a_numvals; vals = op->o_tmpalloc( ( i + 1 ) * sizeof( struct berval ), op->o_tmpmemctx ); if ( a->a_nvals != a->a_vals ) { @@ -293,6 +293,7 @@ dynlist_sc_update( Operation *op, SlapReply *rs ) mod.sm_type = a->a_desc->ad_cname; mod.sm_values = vals; mod.sm_nvalues = nvals; + mod.sm_numvals = j; (void)modify_add_values( e, &mod, /* permissive */ 1, &text, textbuf, sizeof( textbuf ) ); @@ -334,6 +335,19 @@ dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli ) return SLAP_CB_CONTINUE; } +#ifndef SLAP_OPATTRS + opattrs = ( rs->sr_attrs == NULL ) ? 0 : an_find( rs->sr_attrs, &AllOper ); + userattrs = ( rs->sr_attrs == NULL ) ? 1 : an_find( rs->sr_attrs, &AllUser ); +#else /* SLAP_OPATTRS */ + opattrs = SLAP_OPATTRS( rs->sr_attr_flags ); + userattrs = SLAP_USERATTRS( rs->sr_attr_flags ); +#endif /* SLAP_OPATTRS */ + + /* Don't generate member list if it wasn't requested */ + if ( dli->dli_member_ad && !userattrs && !ad_inlist( dli->dli_member_ad, rs->sr_attrs ) ) { + return SLAP_CB_CONTINUE; + } + if ( !( rs->sr_flags & REP_ENTRY_MODIFIABLE ) ) { e = entry_dup( rs->sr_entry ); } else { @@ -360,14 +374,6 @@ dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli ) o.ors_tlimit = SLAP_NO_LIMIT; o.ors_slimit = SLAP_NO_LIMIT; -#ifndef SLAP_OPATTRS - opattrs = ( rs->sr_attrs == NULL ) ? 0 : an_find( rs->sr_attrs, &AllOper ); - userattrs = ( rs->sr_attrs == NULL ) ? 1 : an_find( rs->sr_attrs, &AllUser ); -#else /* SLAP_OPATTRS */ - opattrs = SLAP_OPATTRS( rs->sr_attr_flags ); - userattrs = SLAP_USERATTRS( rs->sr_attr_flags ); -#endif /* SLAP_OPATTRS */ - for ( url = a->a_nvals; !BER_BVISNULL( url ); url++ ) { LDAPURLDesc *lud = NULL; int i, j; @@ -629,12 +635,8 @@ dynlist_compare( Operation *op, SlapReply *rs ) goto release; } - BER_BVSTR( &o.ors_filterstr, "(objectClass=*)" ); - o.ors_filter = str2filter_x( op, o.ors_filterstr.bv_val ); - if ( o.ors_filter == NULL ) { - /* FIXME: error? */ - goto release; - } + o.ors_filterstr = *slap_filterstr_objectClass_pres; + o.ors_filter = (Filter *) slap_filter_objectClass_pres; o.ors_scope = LDAP_SCOPE_BASE; o.ors_deref = LDAP_DEREF_NEVER; @@ -647,7 +649,6 @@ dynlist_compare( Operation *op, SlapReply *rs ) o.o_acl_priv = ACL_COMPARE; rc = o.o_bd->be_search( &o, &r ); - filter_free_x( &o, o.ors_filter ); if ( o.o_dn.bv_val != op->o_dn.bv_val ) { slap_op_groups_free( &o ); @@ -673,10 +674,10 @@ dynlist_compare( Operation *op, SlapReply *rs ) /* if we're here, we got a match... */ rs->sr_err = LDAP_COMPARE_FALSE; - if ( value_find_ex( op->orc_ava->aa_desc, + if ( attr_valfind( a, SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH | SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH, - a->a_nvals, &op->orc_ava->aa_value, op->o_tmpmemctx ) == 0 ) + &op->orc_ava->aa_value, NULL, op->o_tmpmemctx ) == 0 ) { rs->sr_err = LDAP_COMPARE_TRUE; break; @@ -1310,7 +1311,8 @@ dynlist_db_open( if ( oc == NULL ) { oc = oc_find( "groupOfURLs" ); if ( oc == NULL ) { - sprintf( cr->msg, "unable to fetch objectClass \"groupOfURLs\"" ); + snprintf( cr->msg, sizeof( cr->msg), + "unable to fetch objectClass \"groupOfURLs\"" ); Debug( LDAP_DEBUG_ANY, "dynlist_db_open: %s.\n", cr->msg, 0, 0 ); return 1; } @@ -1323,7 +1325,8 @@ dynlist_db_open( if ( ad == NULL ) { rc = slap_str2ad( "memberURL", &ad, &text ); if ( rc != LDAP_SUCCESS ) { - sprintf( cr->msg, "unable to fetch attributeDescription \"memberURL\": %d (%s)", + snprintf( cr->msg, sizeof( cr->msg), + "unable to fetch attributeDescription \"memberURL\": %d (%s)", rc, text ); Debug( LDAP_DEBUG_ANY, "dynlist_db_open: %s.\n", cr->msg, 0, 0 ); return 1;