SLAPD schema bug, and a plug for X.500 to LDAP interoperability

Mark Wahl (M.Wahl@critical-angle.com)
Thu, 12 Sep 1996 15:03:53 -0500

Hello,

Attached below is a workaround for a bug in U-M slapd 3.3: it may dereference
a NULL pointer on an add or modify operation when "schemacheck" is set. (I
have also sent this to ldap-support).

On a related note, if you are experimenting with or using SLAPD or another
LDAP-based directory server, but would like to have it accessible from X.500
DSAs or connect it into an X.500 service such as NameFLOW/PARADISE, I have a
gateway which will convert all the DAP/DSP operations into the equivalent LDAP.
If you are interested in trying this out with your servers, there is a free
beta test program for the Solaris platform, and Linux and NT will follow
shortly. You can get a more detailed description on the web page
http://www.critical-angle.com/

Mark Wahl, Enterprise Directory Integration
Critical Angle Incorporated

===========================================================================
*** schema.c.original Tue Sep 10 16:35:58 1996
--- schema.c Tue Sep 10 16:36:38 1996
***************
*** 111,117 ****
/* if we know about the oc */
if ( (oc = oc_find( ocl[i]->bv_val )) != NULL ) {
/* does it require the type? */
! for ( j = 0; oc->oc_required[j] != NULL; j++ ) {
if ( strcasecmp( oc->oc_required[j], type )
== 0 ) {
return( 0 );
--- 111,118 ----
/* if we know about the oc */
if ( (oc = oc_find( ocl[i]->bv_val )) != NULL ) {
/* does it require the type? */
! for ( j = 0; oc->oc_required != NULL &&
! oc->oc_required[j] != NULL; j++ ) {
if ( strcasecmp( oc->oc_required[j], type )
== 0 ) {
return( 0 );
***************
*** 118,124 ****
}
}
/* does it allow the type? */
! for ( j = 0; oc->oc_allowed[j] != NULL; j++ ) {
if ( strcasecmp( oc->oc_allowed[j], type )
== 0 || strcmp( oc->oc_allowed[j], "*" )
== 0 )
--- 119,126 ----
}
}
/* does it allow the type? */
! for ( j = 0; oc->oc_allowed != NULL &&
! oc->oc_allowed[j] != NULL; j++ ) {
if ( strcasecmp( oc->oc_allowed[j], type )
== 0 || strcmp( oc->oc_allowed[j], "*" )
== 0 )

===========================================================================