]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/mods.c
Initialize and destroy lc_lai.lai_mutex
[openldap] / servers / slapd / mods.c
index f6ef580d2d52faeb5132dd1694df4b94246d76ef..f1dbdffcb804468ef7db1ad83b7d3e8358aeeae0 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * 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 ) {