Author: nhosoi
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv10506/slapd
Modified Files: Tag: Directory71RtmBranch attrsyntax.c dn.c libslapd.def slapi-plugin.h Log Message: Resolves: #288321 Summary: ns-slapd aborts during updating attribute values which contain + characters with nothing after them Description: applied the patch to Directory71RtmBranch
Index: attrsyntax.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/attrsyntax.c,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -u -r1.4 -r1.4.2.1 --- attrsyntax.c 19 Apr 2005 22:07:36 -0000 1.4 +++ attrsyntax.c 11 Jan 2008 20:52:46 -0000 1.4.2.1 @@ -726,6 +726,22 @@ } }
+/* Returns the oid of the syntax of the Slapi_Attr that's passed in. + * The caller must dispose of oid by calling slapi_ch_free_string(). */ +int +slapi_attr_get_syntax_oid_copy( const Slapi_Attr *a, char **oidp ) +{ + void *pi = NULL; + + if (a && (slapi_attr_type2plugin(a->a_type, &pi) == 0)) { + *oidp = slapi_ch_strdup(plugin_syntax2oid(pi)); + return( 0 ); + } else { + *oidp = NULL; + return( -1 ); + } +} + #ifdef ATTR_LDAP_DEBUG
PRIntn
Index: dn.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/dn.c,v retrieving revision 1.6.2.2 retrieving revision 1.6.2.3 diff -u -r1.6.2.2 -r1.6.2.3 --- dn.c 2 Mar 2006 01:12:25 -0000 1.6.2.2 +++ dn.c 11 Jan 2008 20:52:46 -0000 1.6.2.3 @@ -337,7 +337,13 @@ /* * Track and sort attribute values within multivalued RDNs. */ - if ( rdn_av_count > 0 ) { + /* We may still be in an unexpected state, such as B4TYPE if + * we encountered something odd like a '+' at the end of the + * rdn. If this is the case, we don't want to add this bogus + * rdn to our list to sort. We should only be in the INVALUE + * or B4SEPARATOR state if we have a valid rdn component to + * be added. */ + if ((rdn_av_count > 0) && ((state == INVALUE) || (state == B4SEPARATOR))) { add_rdn_av( typestart, d, &rdn_av_count, &rdn_avs, initial_rdn_av_stack ); } @@ -347,7 +353,6 @@ if ( rdn_av_count > 0 ) { reset_rdn_avs( &rdn_avs, &rdn_av_count ); } - /* Trim trailing spaces */ while ( d != dn && *(d - 1) == ' ' ) d--; /* XXX 518524 */
Index: libslapd.def =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/libslapd.def,v retrieving revision 1.11.2.3 retrieving revision 1.11.2.4 diff -u -r1.11.2.3 -r1.11.2.4 --- libslapd.def 19 Mar 2006 21:20:45 -0000 1.11.2.3 +++ libslapd.def 11 Jan 2008 20:52:46 -0000 1.11.2.4 @@ -1180,3 +1180,4 @@ sasl_map_done @1179 slapd_SECITEM_FreeItem @1180 slapi_op_type_to_string @1181 + slapi_attr_get_syntax_oid_copy @1182
Index: slapi-plugin.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slapi-plugin.h,v retrieving revision 1.8.2.1 retrieving revision 1.8.2.2 diff -u -r1.8.2.1 -r1.8.2.2 --- slapi-plugin.h 2 Mar 2006 01:12:25 -0000 1.8.2.1 +++ slapi-plugin.h 11 Jan 2008 20:52:46 -0000 1.8.2.2 @@ -391,6 +391,7 @@ int slapi_attr_type2plugin( const char *type, void **pi ); int slapi_attr_get_type( Slapi_Attr *attr, char **type ); int slapi_attr_get_oid_copy( const Slapi_Attr *attr, char **oidp ); +int slapi_attr_get_syntax_oid_copy( const Slapi_Attr *a, char **oidp ); int slapi_attr_get_flags( const Slapi_Attr *attr, unsigned long *flags ); int slapi_attr_flag_is_set( const Slapi_Attr *attr, unsigned long flag ); int slapi_attr_value_cmp( const Slapi_Attr *attr, const struct berval *v1, const struct berval *v2 );
389-commits@lists.fedoraproject.org