--- servers/slapd/overlays/valsort.c 2008/02/11 23:24:25 1.9.2.8 +++ servers/slapd/overlays/valsort.c 2005/08/26 19:42:48 1.10 @@ -1,8 +1,8 @@ /* valsort.c - sort attribute values */ -/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.9.2.7 2007/06/08 08:13:18 hyc Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.9 2005/08/25 04:56:09 hyc Exp $ */ /* This work is part of OpenLDAP Software . * - * Copyright 2005-2008 The OpenLDAP Foundation. + * Copyright 2005 The OpenLDAP Foundation. * Portions copyright 2005 Symas Corporation. * All rights reserved. * @@ -212,7 +212,7 @@ static void do_sort( Operation *op, Attribute *a, int beg, int num, slap_mask_t sort ) { int i, j, gotnvals; - struct berval tmp, ntmp, *vals = NULL, *nvals; + struct berval tmp, ntmp, *vals, *nvals; gotnvals = (a->a_vals != a->a_nvals ); @@ -272,13 +272,11 @@ valsort_response( Operation *op, SlapRep valsort_info *vi; Attribute *a; - /* If this is not a search response, or it is a syncrepl response, - * or the valsort control wants raw results, pass thru unmodified. - */ - if ( rs->sr_type != REP_SEARCH || - ( _SCM(op->o_sync) > SLAP_CONTROL_IGNORED ) || - ( op->o_ctrlflag[valsort_cid] & SLAP_CONTROL_DATA0)) - return SLAP_CB_CONTINUE; + /* We only want search responses */ + if ( rs->sr_type != REP_SEARCH ) return SLAP_CB_CONTINUE; + + /* If this is a syncrepl response, pass thru unmodified */ + if ( op->o_sync > SLAP_CONTROL_IGNORED ) return SLAP_CB_CONTINUE; on = (slap_overinst *) op->o_bd->bd_info; vi = on->on_bi.bi_private; @@ -314,7 +312,7 @@ valsort_response( Operation *op, SlapRep gotnvals = (a->a_vals != a->a_nvals ); for (i=0; ia_nvals[i], '{' ); + char *ptr = strchr( a->a_nvals[i].bv_val, '{' ); char *end = NULL; if ( !ptr ) { Debug(LDAP_DEBUG_TRACE, "weights missing from attr %s " @@ -339,9 +337,7 @@ valsort_response( Operation *op, SlapRep if ( a->a_vals != a->a_nvals ) { ptr = a->a_vals[i].bv_val; - end = ber_bvchr( &a->a_vals[i], '}' ); - assert( end != NULL ); - end++; + end = strchr( ptr, '}' ) + 1; for (;*end;) *ptr++ = *end++; *ptr = '\0'; @@ -409,7 +405,7 @@ valsort_add( Operation *op, SlapReply *r if ( !a ) continue; for (i=0; !BER_BVISNULL( &a->a_vals[i] ); i++) { - ptr = ber_bvchr(&a->a_vals[i], '{' ); + ptr = strchr(a->a_vals[i].bv_val, '{' ); if ( !ptr ) { Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", vi->vi_ad->ad_cname.bv_val, 0, 0); @@ -447,16 +443,13 @@ valsort_modify( Operation *op, SlapReply if ( !(vi->vi_sort & VALSORT_WEIGHTED )) continue; for (ml = op->orm_modlist; ml; ml=ml->sml_next ) { - /* Must be a Delete Attr op, so no values to consider */ - if ( !ml->sml_values ) - continue; if ( ml->sml_desc == vi->vi_ad ) break; } if ( !ml ) continue; for (i=0; !BER_BVISNULL( &ml->sml_values[i] ); i++) { - ptr = ber_bvchr(&ml->sml_values[i], '{' ); + ptr = strchr(ml->sml_values[i].bv_val, '{' ); if ( !ptr ) { Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", vi->vi_ad->ad_cname.bv_val, 0, 0); @@ -478,14 +471,6 @@ valsort_modify( Operation *op, SlapReply } static int -valsort_db_open( - BackendDB *be -) -{ - return overlay_register_control( be, LDAP_CONTROL_VALSORT ); -} - -static int valsort_destroy( BackendDB *be ) @@ -508,39 +493,24 @@ valsort_parseCtrl( SlapReply *rs, LDAPControl *ctrl ) { - ber_tag_t tag; - BerElementBuffer berbuf; - BerElement *ber = (BerElement *)&berbuf; - ber_int_t flag = 0; - - if ( ctrl->ldctl_value.bv_len == 0 ) { - rs->sr_text = "valSort control value is empty (or absent)"; - return LDAP_PROTOCOL_ERROR; - } - - ber_init2( ber, &ctrl->ldctl_value, 0 ); - if (( tag = ber_scanf( ber, "{b}", &flag )) == LBER_ERROR ) { - rs->sr_text = "valSort control: flag decoding error"; + if ( ctrl->ldctl_value.bv_len ) { + rs->sr_text = "valSort control value not empty"; return LDAP_PROTOCOL_ERROR; } - op->o_ctrlflag[valsort_cid] = ctrl->ldctl_iscritical ? SLAP_CONTROL_CRITICAL : SLAP_CONTROL_NONCRITICAL; - if ( flag ) - op->o_ctrlflag[valsort_cid] |= SLAP_CONTROL_DATA0; return LDAP_SUCCESS; } static slap_overinst valsort; -int valsort_initialize( void ) +int valsort_init() { int rc; valsort.on_bi.bi_type = "valsort"; valsort.on_bi.bi_db_destroy = valsort_destroy; - valsort.on_bi.bi_db_open = valsort_db_open; valsort.on_bi.bi_op_add = valsort_add; valsort.on_bi.bi_op_modify = valsort_modify; @@ -567,7 +537,7 @@ int valsort_initialize( void ) #if SLAPD_OVER_VALSORT == SLAPD_MOD_DYNAMIC int init_module( int argc, char *argv[]) { - return valsort_initialize(); + return valsort_init(); } #endif