X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fvalue.c;h=9ccdf5c0533558386f4f8eb8fe944a673bd15717;hb=7ce9e7b7c637a69fa1fdd78cfdfbf2581bb8217e;hp=cf2d73075e8b16c4cc4039f46a1252502d938d67;hpb=dbb2ceac90c3ab45efcc6aa198fb906e15a7ab9a;p=openldap diff --git a/servers/slapd/value.c b/servers/slapd/value.c index cf2d73075e..9ccdf5c053 100644 --- a/servers/slapd/value.c +++ b/servers/slapd/value.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -409,12 +409,13 @@ ordered_value_sort( Attribute *a, int do_renumber ) /* * wrapper for validate function * uses the validate function of the syntax after removing - * the index, if allowed an present + * the index, if allowed and present */ int ordered_value_validate( AttributeDescription *ad, - struct berval *in ) + struct berval *in, + int mop ) { struct berval bv = *in; @@ -435,6 +436,9 @@ ordered_value_validate( bv.bv_len -= ptr - bv.bv_val; bv.bv_val = ptr; in = &bv; + /* If deleting by index, just succeed */ + if ( mop == LDAP_MOD_DELETE && BER_BVISEMPTY( &bv )) + return LDAP_SUCCESS; } } @@ -544,6 +548,11 @@ ordered_value_normalize( bv.bv_len -= idx.bv_len; bv.bv_val = ptr; + /* validator will already prevent this for Adds */ + if ( BER_BVISEMPTY( &bv )) { + ber_dupbv_x( normalized, &idx, ctx ); + return LDAP_SUCCESS; + } val = &bv; } } @@ -700,7 +709,7 @@ ordered_value_add( k = -1; if ( vals[i].bv_val[0] == '{' ) { - k = strtol( vals[i].bv_val+1, &next, 0 ); + k = strtol( vals[i].bv_val + 1, &next, 0 ); if ( next == vals[i].bv_val + 1 || next[ 0 ] != '}' || next - vals[i].bv_val > vals[i].bv_len )