--- 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