[Fedora-directory-commits] ldapserver/ldap/servers/slapd slapi-plugin.h, 1.23, 1.24 entrywsi.c, 1.5, 1.6 valueset.c, 1.7, 1.8

Noriko Hosoi (nhosoi) fedora-directory-commits at redhat.com
Wed Jul 2 18:15:25 UTC 2008


Author: nhosoi

Update of /cvs/dirsec/ldapserver/ldap/servers/slapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25444/ldap/servers/slapd

Modified Files:
	slapi-plugin.h entrywsi.c valueset.c 
Log Message:
Resoves: #428929
Summary: Directory server is caching string case for attributes with Directorystring syntax even after deletion
Description: 
Introduced a new flag SLAPI_VALUE_FLAG_USENEWVALUE for valueset_remove_valuearr
to exchange the value in the deleted value set and the to be added value.  With
this change, the newly added value is resurrected instead of the original
value.



Index: slapi-plugin.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slapi-plugin.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- slapi-plugin.h	27 Jun 2008 19:28:21 -0000	1.23
+++ slapi-plugin.h	2 Jul 2008 18:15:22 -0000	1.24
@@ -470,6 +470,8 @@
 #define SLAPI_VALUE_FLAG_PASSIN			0x1
 #define SLAPI_VALUE_FLAG_IGNOREERROR	0x2
 #define SLAPI_VALUE_FLAG_PRESERVECSNSET	0x4
+#define SLAPI_VALUE_FLAG_USENEWVALUE	0x8	/* see valueset_remove_valuearray */
+
 Slapi_ValueSet *slapi_valueset_new( void );
 void slapi_valueset_free(Slapi_ValueSet *vs);
 void slapi_valueset_init(Slapi_ValueSet *vs);


Index: entrywsi.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/entrywsi.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- entrywsi.c	10 Nov 2006 23:45:40 -0000	1.5
+++ entrywsi.c	2 Jul 2008 18:15:22 -0000	1.6
@@ -497,7 +497,10 @@
 				break;
 			}
 			/* Check if any of the values to be added are on the deleted list */
-			valueset_remove_valuearray(&a->a_deleted_values, a, valuestoadd, SLAPI_VALUE_FLAG_IGNOREERROR,&deletedvalues); /* JCM Check return code */
+			valueset_remove_valuearray(&a->a_deleted_values,
+					a, valuestoadd,
+					SLAPI_VALUE_FLAG_IGNOREERROR|SLAPI_VALUE_FLAG_USENEWVALUE,
+					&deletedvalues); /* JCM Check return code */
 			if(deletedvalues!=NULL && deletedvalues[0]!=NULL)
 			{
 				/* Some of the values to be added were on the deleted list */


Index: valueset.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/valueset.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- valueset.c	10 Nov 2006 23:45:40 -0000	1.7
+++ valueset.c	2 Jul 2008 18:15:22 -0000	1.8
@@ -1053,6 +1053,16 @@
  * Remove an array of values from a value set.
  * The removed values are passed back in an array.
  *
+ * Flags
+ *  SLAPI_VALUE_FLAG_PRESERVECSNSET - csnset in the value set is duplicated and
+ *                                    preserved in the matched element of the
+ *                                    array of values.
+ *  SLAPI_VALUE_FLAG_IGNOREERROR - ignore an error: Couldn't find the value to
+ *                                 be deleted.
+ *  SLAPI_VALUE_FLAG_USENEWVALUE - replace the value between the value set and
+ *                                 the matched element of the array of values
+ *                                 (used by entry_add_present_values_wsi).
+ *
  * Returns
  *  LDAP_SUCCESS - OK.
  *  LDAP_NO_SUCH_ATTRIBUTE - A value to be deleted was not in the value set.
@@ -1110,12 +1120,23 @@
 							/* Move the value to be removed to the out array */
 							if ( va_out )
 							{
-								if (vs->va[index]->v_csnset && (flags & SLAPI_VALUE_FLAG_PRESERVECSNSET))
+								if (vs->va[index]->v_csnset &&
+									(flags & SLAPI_VALUE_FLAG_PRESERVECSNSET|
+											 SLAPI_VALUE_FLAG_USENEWVALUE))
 								{
 									valuestodelete[i]->v_csnset = csnset_dup (vs->va[index]->v_csnset);
 								}
-								valuearrayfast_add_value_passin(&vaf_out,vs->va[index]);
-								vs->va[index] = NULL;
+								if (flags & SLAPI_VALUE_FLAG_USENEWVALUE)
+								{
+									valuearrayfast_add_value_passin(&vaf_out,valuestodelete[i]);
+									valuestodelete[i] = vs->va[index];
+									vs->va[index] = NULL;
+								}
+								else
+								{
+									valuearrayfast_add_value_passin(&vaf_out,vs->va[index]);
+									vs->va[index] = NULL;
+								}
 							}
 							else
 							{
@@ -1170,11 +1191,21 @@
 				{
 					if ( va_out )
 					{
-						if (found->v_csnset && (flags & SLAPI_VALUE_FLAG_PRESERVECSNSET))
+						if (found->v_csnset &&
+							(flags & SLAPI_VALUE_FLAG_PRESERVECSNSET|
+							 		 SLAPI_VALUE_FLAG_USENEWVALUE))
 						{
 							valuestodelete[i]->v_csnset = csnset_dup (found->v_csnset);
 						}
-						valuearrayfast_add_value_passin(&vaf_out,found);
+						if (flags & SLAPI_VALUE_FLAG_USENEWVALUE)
+						{
+							valuearrayfast_add_value_passin(&vaf_out,valuestodelete[i]);
+							valuestodelete[i] = found;
+						}
+						else
+						{
+							valuearrayfast_add_value_passin(&vaf_out,found);
+						}
 					}
 					else
 					{




More information about the Fedora-directory-commits mailing list