X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmods.c;h=c8d8b9c9e29a27b0116a7768466c84d75b167b58;hb=6d1aa51604a7ae9c44287af5201afc9f43b5e91e;hp=2d0d01fc8bda05b56838857e97b57d6065483bd2;hpb=2f3bf07285f832b1e442b0440300aaa93ad364bc;p=openldap diff --git a/servers/slapd/mods.c b/servers/slapd/mods.c index 2d0d01fc8b..c8d8b9c9e2 100644 --- a/servers/slapd/mods.c +++ b/servers/slapd/mods.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2007 The OpenLDAP Foundation. + * Copyright 1998-2009 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,7 +59,7 @@ modify_add_values( /* FIXME: Catch old code that doesn't set sm_numvals. */ if ( !BER_BVISNULL( &mod->sm_values[mod->sm_numvals] )) { - int i; + unsigned i; for ( i = 0; !BER_BVISNULL( &mod->sm_values[i] ); i++ ); assert( mod->sm_numvals == i ); } @@ -69,8 +69,8 @@ modify_add_values( if ( a != NULL ) { MatchingRule *mr; struct berval *cvals; - int rc, i, j, p; - unsigned flags; + int rc; + unsigned i, p, flags; mr = mod->sm_desc->ad_type->sat_equality; if( mr == NULL || !mr->smr_match ) { @@ -99,7 +99,13 @@ modify_add_values( * server (whether from LDAP or from the underlying * database). */ - flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX; + if ( a->a_desc == slap_schema.si_ad_objectClass ) { + /* Needed by ITS#5517 */ + flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX; + + } else { + flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX; + } if ( mod->sm_nvalues ) { flags |= SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH | SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH; @@ -116,7 +122,7 @@ modify_add_values( /* value already exists */ *text = textbuf; snprintf( textbuf, textlen, - "modify/%s: %s: value #%d already exists", + "modify/%s: %s: value #%u already exists", op, mod->sm_desc->ad_cname.bv_val, i ); return LDAP_TYPE_OR_VALUE_EXISTS; } @@ -196,8 +202,8 @@ modify_delete_vindex( MatchingRule *mr = mod->sm_desc->ad_type->sat_equality; struct berval *cvals; int *id2 = NULL; - int i, j, rc = 0; - unsigned flags; + int rc = 0; + unsigned i, j, flags; char dummy = '\0'; /* @@ -257,13 +263,18 @@ modify_delete_vindex( goto return_result; } + if ( a->a_desc == slap_schema.si_ad_objectClass ) { + /* Needed by ITS#5517,ITS#5963 */ + flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX; + + } else { + flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX; + } if ( mod->sm_nvalues ) { - flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX - | SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH + flags |= SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH | SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH; cvals = mod->sm_nvalues; } else { - flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX; cvals = mod->sm_values; }