Diff for /servers/slapd/schema_check.c between versions 1.103.2.1 and 1.103.2.2

version 1.103.2.1, 2007/02/13 20:22:21 version 1.103.2.2, 2007/08/31 23:14:00
Line 1 Line 1
 /* schema_check.c - routines to enforce schema definitions */  /* schema_check.c - routines to enforce schema definitions */
 /* $OpenLDAP: pkg/ldap/servers/slapd/schema_check.c,v 1.107 2007/02/11 13:37:21 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/schema_check.c,v 1.109 2007/06/09 21:45:23 hallvard Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2007 The OpenLDAP Foundation.   * Copyright 1998-2007 The OpenLDAP Foundation.
Line 172  entry_schema_check( Line 172  entry_schema_check(
                         e->e_dn, textbuf, 0 );                          e->e_dn, textbuf, 0 );
   
                 rc = LDAP_OBJECT_CLASS_VIOLATION;                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                 goto leave;                  goto done;
         }          }
   
         if( sc->soc_kind != LDAP_SCHEMA_STRUCTURAL ) {          if( sc->soc_kind != LDAP_SCHEMA_STRUCTURAL ) {
Line 185  entry_schema_check( Line 185  entry_schema_check(
                         e->e_dn, textbuf, 0 );                          e->e_dn, textbuf, 0 );
   
                 rc = LDAP_OTHER;                  rc = LDAP_OTHER;
                 goto leave;                  goto done;
         }          }
   
 got_soc:  got_soc:
Line 199  got_soc: Line 199  got_soc:
                         e->e_dn, textbuf, 0 );                          e->e_dn, textbuf, 0 );
   
                 rc = LDAP_OBJECT_CLASS_VIOLATION;                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                 goto leave;                  goto done;
         }          }
   
         *text = textbuf;          *text = textbuf;
Line 209  got_soc: Line 209  got_soc:
                         "unrecognized objectClass '%s'",                          "unrecognized objectClass '%s'",
                         aoc->a_vals[0].bv_val );                          aoc->a_vals[0].bv_val );
                 rc = LDAP_OBJECT_CLASS_VIOLATION;                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                 goto leave;                  goto done;
   
         } else if ( sc != slap_schema.si_oc_glue && sc != oc ) {          } else if ( sc != slap_schema.si_oc_glue && sc != oc ) {
                 snprintf( textbuf, textlen,                   snprintf( textbuf, textlen, 
Line 217  got_soc: Line 217  got_soc:
                         "from '%s' to '%s' not allowed",                          "from '%s' to '%s' not allowed",
                         asc->a_vals[0].bv_val, oc->soc_cname.bv_val );                          asc->a_vals[0].bv_val, oc->soc_cname.bv_val );
                 rc = LDAP_NO_OBJECT_CLASS_MODS;                  rc = LDAP_NO_OBJECT_CLASS_MODS;
                 goto leave;                  goto done;
         } else if ( sc == slap_schema.si_oc_glue ) {          } else if ( sc == slap_schema.si_oc_glue ) {
                 sc = oc;                  sc = oc;
         }          }
Line 226  got_soc: Line 226  got_soc:
         if ( !is_entry_glue ( e ) ) {          if ( !is_entry_glue ( e ) ) {
                 rc = entry_naming_check( e, manage, text, textbuf, textlen );                  rc = entry_naming_check( e, manage, text, textbuf, textlen );
                 if( rc != LDAP_SUCCESS ) {                  if( rc != LDAP_SUCCESS ) {
                         goto leave;                          goto done;
                 }                  }
         } else {          } else {
                 /* Glue Entry */                  /* Glue Entry */
Line 250  got_soc: Line 250  got_soc:
                                 e->e_dn, textbuf, 0 );                                  e->e_dn, textbuf, 0 );
   
                         rc = LDAP_OBJECT_CLASS_VIOLATION;                          rc = LDAP_OBJECT_CLASS_VIOLATION;
                         goto leave;                          goto done;
                 }                  }
   
                 if( cr->scr_required ) for( i=0; cr->scr_required[i]; i++ ) {                  if( cr->scr_required ) for( i=0; cr->scr_required[i]; i++ ) {
Line 274  got_soc: Line 274  got_soc:
                                         e->e_dn, textbuf, 0 );                                          e->e_dn, textbuf, 0 );
   
                                 rc = LDAP_OBJECT_CLASS_VIOLATION;                                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                                 goto leave;                                  goto done;
                         }                          }
                 }                  }
   
Line 299  got_soc: Line 299  got_soc:
                                         e->e_dn, textbuf, 0 );                                          e->e_dn, textbuf, 0 );
   
                                 rc = LDAP_OBJECT_CLASS_VIOLATION;                                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                                 goto leave;                                  goto done;
                         }                          }
                 }                  }
         }          }
Line 318  got_soc: Line 318  got_soc:
                                 e->e_dn, textbuf, 0 );                                  e->e_dn, textbuf, 0 );
   
                         rc = LDAP_OBJECT_CLASS_VIOLATION;                          rc = LDAP_OBJECT_CLASS_VIOLATION;
                         goto leave;                          goto done;
                 }                  }
   
                 if ( oc->soc_check ) {                  if ( oc->soc_check ) {
                         rc = (oc->soc_check)( op->o_bd, e, oc,                          rc = (oc->soc_check)( op->o_bd, e, oc,
                                 text, textbuf, textlen );                                  text, textbuf, textlen );
                         if( rc != LDAP_SUCCESS ) {                          if( rc != LDAP_SUCCESS ) {
                                 goto leave;                                  goto done;
                         }                          }
                 }                  }
   
Line 365  got_soc: Line 365  got_soc:
                                                 e->e_dn, textbuf, 0 );                                                  e->e_dn, textbuf, 0 );
   
                                         rc = LDAP_OBJECT_CLASS_VIOLATION;                                          rc = LDAP_OBJECT_CLASS_VIOLATION;
                                         goto leave;                                          goto done;
                                 }                                  }
                         }                          }
   
Line 408  got_soc: Line 408  got_soc:
                                                 e->e_dn, textbuf, 0 );                                                  e->e_dn, textbuf, 0 );
   
                                         rc = LDAP_OBJECT_CLASS_VIOLATION;                                          rc = LDAP_OBJECT_CLASS_VIOLATION;
                                         goto leave;                                          goto done;
                                 }                                  }
                         }                          }
   
Line 423  got_soc: Line 423  got_soc:
                                         e->e_dn, textbuf, 0 );                                          e->e_dn, textbuf, 0 );
   
                                 rc = LDAP_OBJECT_CLASS_VIOLATION;                                  rc = LDAP_OBJECT_CLASS_VIOLATION;
                                 goto leave;                                  goto done;
                         }                          }
   
                         if( oc == slap_schema.si_oc_extensibleObject ) {                          if( oc == slap_schema.si_oc_extensibleObject ) {
Line 435  got_soc: Line 435  got_soc:
         if( extensible ) {          if( extensible ) {
                 *text = NULL;                  *text = NULL;
                 rc = LDAP_SUCCESS;                  rc = LDAP_SUCCESS;
                 goto leave;                  goto done;
         }          }
   
         /* check that each attr in the entry is allowed by some oc */          /* check that each attr in the entry is allowed by some oc */
Line 476  got_soc: Line 476  got_soc:
                             "Entry (%s), %s\n",                              "Entry (%s), %s\n",
                             e->e_dn, textbuf, 0 );                              e->e_dn, textbuf, 0 );
   
                         goto leave;                          goto done;
                 }                  }
         }          }
   
         *text = NULL;          *text = NULL;
 leave:  done:
         slap_sl_free( socs, op->o_tmpmemctx );          slap_sl_free( socs, op->o_tmpmemctx );
         return rc;          return rc;
 }  }
Line 572  int oc_check_allowed( Line 572  int oc_check_allowed(
         for ( i = 0; socs[i]; i++ ) {          for ( i = 0; socs[i]; i++ ) {
                 /* if we know about the oc */                  /* if we know about the oc */
                 ObjectClass     *oc = socs[i];                  ObjectClass     *oc = socs[i];
                   /* extensibleObject allows all */
                   if ( oc == slap_schema.si_oc_extensibleObject ) {
                           return LDAP_SUCCESS;
                   }
                 if ( oc != NULL && oc->soc_kind != LDAP_SCHEMA_ABSTRACT &&                  if ( oc != NULL && oc->soc_kind != LDAP_SCHEMA_ABSTRACT &&
                         ( sc == NULL || oc->soc_kind == LDAP_SCHEMA_AUXILIARY ))                          ( sc == NULL || oc->soc_kind == LDAP_SCHEMA_AUXILIARY ))
                 {                  {

Removed from v.1.103.2.1  
changed lines
  Added in v.1.103.2.2


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org