version 1.9.2.2, 2005/08/29 18:26:11
|
version 1.9.2.8, 2008/02/11 23:24:25
|
Line 1
|
Line 1
|
/* valsort.c - sort attribute values */ |
/* valsort.c - sort attribute values */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.11 2005/08/26 23:21:51 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/valsort.c,v 1.9.2.7 2007/06/08 08:13:18 hyc Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 2005 The OpenLDAP Foundation. |
* Copyright 2005-2008 The OpenLDAP Foundation. |
* Portions copyright 2005 Symas Corporation. |
* Portions copyright 2005 Symas Corporation. |
* All rights reserved. |
* All rights reserved. |
* |
* |
Line 212 static void
|
Line 212 static void
|
do_sort( Operation *op, Attribute *a, int beg, int num, slap_mask_t sort ) |
do_sort( Operation *op, Attribute *a, int beg, int num, slap_mask_t sort ) |
{ |
{ |
int i, j, gotnvals; |
int i, j, gotnvals; |
struct berval tmp, ntmp, *vals, *nvals; |
struct berval tmp, ntmp, *vals = NULL, *nvals; |
|
|
gotnvals = (a->a_vals != a->a_nvals ); |
gotnvals = (a->a_vals != a->a_nvals ); |
|
|
Line 314 valsort_response( Operation *op, SlapRep
|
Line 314 valsort_response( Operation *op, SlapRep
|
gotnvals = (a->a_vals != a->a_nvals ); |
gotnvals = (a->a_vals != a->a_nvals ); |
|
|
for (i=0; i<n; i++) { |
for (i=0; i<n; i++) { |
char *ptr = strchr( a->a_nvals[i].bv_val, '{' ); |
char *ptr = ber_bvchr( &a->a_nvals[i], '{' ); |
char *end = NULL; |
char *end = NULL; |
if ( !ptr ) { |
if ( !ptr ) { |
Debug(LDAP_DEBUG_TRACE, "weights missing from attr %s " |
Debug(LDAP_DEBUG_TRACE, "weights missing from attr %s " |
Line 339 valsort_response( Operation *op, SlapRep
|
Line 339 valsort_response( Operation *op, SlapRep
|
|
|
if ( a->a_vals != a->a_nvals ) { |
if ( a->a_vals != a->a_nvals ) { |
ptr = a->a_vals[i].bv_val; |
ptr = a->a_vals[i].bv_val; |
end = strchr( ptr, '}' ) + 1; |
end = ber_bvchr( &a->a_vals[i], '}' ); |
|
assert( end != NULL ); |
|
end++; |
for (;*end;) |
for (;*end;) |
*ptr++ = *end++; |
*ptr++ = *end++; |
*ptr = '\0'; |
*ptr = '\0'; |
Line 407 valsort_add( Operation *op, SlapReply *r
|
Line 409 valsort_add( Operation *op, SlapReply *r
|
if ( !a ) |
if ( !a ) |
continue; |
continue; |
for (i=0; !BER_BVISNULL( &a->a_vals[i] ); i++) { |
for (i=0; !BER_BVISNULL( &a->a_vals[i] ); i++) { |
ptr = strchr(a->a_vals[i].bv_val, '{' ); |
ptr = ber_bvchr(&a->a_vals[i], '{' ); |
if ( !ptr ) { |
if ( !ptr ) { |
Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", |
Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", |
vi->vi_ad->ad_cname.bv_val, 0, 0); |
vi->vi_ad->ad_cname.bv_val, 0, 0); |
Line 445 valsort_modify( Operation *op, SlapReply
|
Line 447 valsort_modify( Operation *op, SlapReply
|
if ( !(vi->vi_sort & VALSORT_WEIGHTED )) |
if ( !(vi->vi_sort & VALSORT_WEIGHTED )) |
continue; |
continue; |
for (ml = op->orm_modlist; ml; ml=ml->sml_next ) { |
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 ) |
if ( ml->sml_desc == vi->vi_ad ) |
break; |
break; |
} |
} |
if ( !ml ) |
if ( !ml ) |
continue; |
continue; |
for (i=0; !BER_BVISNULL( &ml->sml_values[i] ); i++) { |
for (i=0; !BER_BVISNULL( &ml->sml_values[i] ); i++) { |
ptr = strchr(ml->sml_values[i].bv_val, '{' ); |
ptr = ber_bvchr(&ml->sml_values[i], '{' ); |
if ( !ptr ) { |
if ( !ptr ) { |
Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", |
Debug(LDAP_DEBUG_TRACE, "weight missing from attribute %s\n", |
vi->vi_ad->ad_cname.bv_val, 0, 0); |
vi->vi_ad->ad_cname.bv_val, 0, 0); |
Line 529 valsort_parseCtrl(
|
Line 534 valsort_parseCtrl(
|
|
|
static slap_overinst valsort; |
static slap_overinst valsort; |
|
|
int valsort_init() |
int valsort_initialize( void ) |
{ |
{ |
int rc; |
int rc; |
|
|
Line 562 int valsort_init()
|
Line 567 int valsort_init()
|
|
|
#if SLAPD_OVER_VALSORT == SLAPD_MOD_DYNAMIC |
#if SLAPD_OVER_VALSORT == SLAPD_MOD_DYNAMIC |
int init_module( int argc, char *argv[]) { |
int init_module( int argc, char *argv[]) { |
return valsort_init(); |
return valsort_initialize(); |
} |
} |
#endif |
#endif |
|
|