X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmods.c;h=f1dbdffcb804468ef7db1ad83b7d3e8358aeeae0;hb=b2f79aa42edc03706e7898b02a9ffb4193ddfe36;hp=f6ef580d2d52faeb5132dd1694df4b94246d76ef;hpb=d34fffcaf9edc00262209fbe6e04bb15805dbd37;p=openldap diff --git a/servers/slapd/mods.c b/servers/slapd/mods.c index f6ef580d2d..f1dbdffcb8 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-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -377,11 +377,19 @@ modify_increment_values( a = attr_find( e->e_attrs, mod->sm_desc ); if( a == NULL ) { - *text = textbuf; - snprintf( textbuf, textlen, - "modify/increment: %s: no such attribute", - mod->sm_desc->ad_cname.bv_val ); - return LDAP_NO_SUCH_ATTRIBUTE; + if ( permissive ) { + Modification modReplace = *mod; + + modReplace.sm_op = LDAP_MOD_REPLACE; + + return modify_add_values(e, &modReplace, permissive, text, textbuf, textlen); + } else { + *text = textbuf; + snprintf( textbuf, textlen, + "modify/increment: %s: no such attribute", + mod->sm_desc->ad_cname.bv_val ); + return LDAP_NO_SUCH_ATTRIBUTE; + } } if ( !strcmp( a->a_desc->ad_type->sat_syntax_oid, SLAPD_INTEGER_SYNTAX )) { @@ -402,11 +410,12 @@ modify_increment_values( for( i = 0; !BER_BVISNULL( &a->a_nvals[i] ); i++ ) { char *tmp; long value; + size_t strln; if ( lutil_atol( &value, a->a_nvals[i].bv_val ) != 0 ) { *text = "modify/increment: invalid syntax of original value"; return LDAP_INVALID_SYNTAX; } - size_t strln = snprintf( str, sizeof(str), "%ld", value+incr ); + strln = snprintf( str, sizeof(str), "%ld", value+incr ); tmp = SLAP_REALLOC( a->a_nvals[i].bv_val, strln+1 ); if( tmp == NULL ) {