From 2e7abed1360c602f72e1772f99f9870b8aa3a91b Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 24 Mar 2011 17:14:25 +0000
Subject: [PATCH] Fix for OPENDJ-58 : cn=schema attribute store twice in 99-user.ldif schema file. Prevent replication from adding cn and other schema attributes to the extra-attribute that are added to the schema entry written to the LDIF file. Fix also some messages (and translations) 

---
 opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java |    3 +
 opendj-sdk/opends/src/messages/messages/backend.properties                   |    6 ++-
 opendj-sdk/opends/src/messages/messages/backend_fr.properties                |   24 ++++++++----
 opendj-sdk/opends/src/messages/messages/backend_es.properties                |   10 ++++
 opendj-sdk/opends/src/messages/messages/backend_de.properties                |   10 ++++
 opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java   |   25 +++++++++++-
 6 files changed, 62 insertions(+), 16 deletions(-)

diff --git a/opendj-sdk/opends/src/messages/messages/backend.properties b/opendj-sdk/opends/src/messages/messages/backend.properties
index b20b339..6ab978d 100644
--- a/opendj-sdk/opends/src/messages/messages/backend.properties
+++ b/opendj-sdk/opends/src/messages/messages/backend.properties
@@ -21,7 +21,7 @@
 # CDDL HEADER END
 #
 #      Copyright 2006-2010 Sun Microsystems, Inc.
-
+#      Portions Copyright 2011 ForgeRock AS
 
 
 #
@@ -617,7 +617,7 @@
  support the %s modification type
 MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=The schema backend does \
  not support the modification of the %s attribute type.  Only attribute types, \
- object classes, name forms, DIT content rules, DIT structure rules, and \
+ object classes, ldap syntaxes, name forms, DIT content rules, DIT structure rules, and \
  matching rule uses may be modified
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE_214=An error occurred while \
  attempting to decode the attribute type "%s":  %s
@@ -1164,3 +1164,5 @@
  recurring task schedule value has an invalid month of the year token
 SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_SIMPLE_424=The provided \
  recurring task schedule value has an invalid day of the week token
+MILD_ERR_SCHEMA_INVALID_REPLACE_MODIFICATION_425=The schema backend does \
+ not support the Replace modification type for the %s attribute type
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/messages/messages/backend_de.properties b/opendj-sdk/opends/src/messages/messages/backend_de.properties
index 6b0aad6..bcee4bd 100644
--- a/opendj-sdk/opends/src/messages/messages/backend_de.properties
+++ b/opendj-sdk/opends/src/messages/messages/backend_de.properties
@@ -21,6 +21,7 @@
 # CDDL HEADER END
 #
 #      Copyright 2006-2009 Sun Microsystems, Inc.
+#      Portions Copyright 2011 ForgeRock AS
 
 
 
@@ -257,7 +258,7 @@
 FATAL_ERR_BACKEND_CANNOT_REGISTER_BASEDN_210=Fehler beim Versuch, Basis-DN %s im Directory-Server zu registrieren:  %s
 MILD_ERR_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED_211=Das Schema-Backend unterst\u00fctzt noch nicht das Entfernen von bestehenden Schemaelementen
 MILD_ERR_SCHEMA_INVALID_MODIFICATION_TYPE_212=Das Schema-Backend unterst\u00fctzt nicht den Bearbeitungstyp %s
-MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=Das Schema-Backend unterst\u00fctzt nicht die Bearbeitung des Attributtyps %s.  Es k\u00f6nnen nur Attributtypen, Objektklassen, Namensformen, DIT-Inhaltsregeln, DIT-Strukturregeln und die Verwendung von \u00dcbereinstimmungsregeln bearbeitet werden
+MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=Das Schema-Backend unterst\u00fctzt nicht die Bearbeitung des Attributtyps %s.  Es k\u00f6nnen nur Attributtypen, Objektklassen, ldap-Syntaxbeschreibungen, Namensformen, DIT-Inhaltsregeln, DIT-Strukturregeln und die Verwendung von \u00dcbereinstimmungsregeln bearbeitet werden
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE_214=Fehler beim Versuch, den Attributtyp "%s" zu dekodieren: %s
 MILD_ERR_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS_215=Attributtyp %s kann nicht zum Serverschema hinzugef\u00fcgt werden, da es Namens- oder OID-Konflikte mit einem bestehenden Attributtyp gibt: %s
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS_216=Fehler beim Versuch, die Objektklasse "%s" zu dekodieren: %s
@@ -463,3 +464,10 @@
 MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD_416=Ldap-Syntaxbeschreibung %s kann nicht aus dem Serverschema entfernt werden, da eine solche ldap-Syntaxbeschreibung nicht definiert ist
 MILD_ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX_417=Der angegebene Wert "%s" konnte nicht als ldap-Syntax analysiert werden, da seine OID %s einer bereits implementierten Attributsyntax entspricht
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX_418=Beim Versuch, die ldap-Syntaxbeschreibung "%s" zu decodieren, ist ein Fehler aufgetreten:  %s
+SEVERE_ERR_RECURRINGTASK_INVALID_N_TOKENS_SIMPLE_419=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt eine ung\u00fcltige Token-Anzahl
+SEVERE_ERR_RECURRINGTASK_INVALID_MINUTE_TOKEN_SIMPLE_420=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt einen ung\u00fcltigen Minuten-Token
+SEVERE_ERR_RECURRINGTASK_INVALID_HOUR_TOKEN_SIMPLE_421=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt einen ung\u00fcltigen Stunden-Token
+SEVERE_ERR_RECURRINGTASK_INVALID_DAY_TOKEN_SIMPLE_422=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt einen ung\u00fcltigen Monatstag-Token
+SEVERE_ERR_RECURRINGTASK_INVALID_MONTH_TOKEN_SIMPLE_423=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt einen ung\u00fcltigen Jahresmonat-Token
+SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_SIMPLE_424=Die angegebene der wiederkehrende Aufgabenzeitplan Wert besitzt einen ung\u00fcltigen Wochentag-Token
+MILD_ERR_SCHEMA_INVALID_REPLACE_MODIFICATION_425=Das Schema-Backend unterst\u00fctzt nicht den Bearbeitungstyp Replace des Attributtyps %s
diff --git a/opendj-sdk/opends/src/messages/messages/backend_es.properties b/opendj-sdk/opends/src/messages/messages/backend_es.properties
index 075765b..43f9f19 100644
--- a/opendj-sdk/opends/src/messages/messages/backend_es.properties
+++ b/opendj-sdk/opends/src/messages/messages/backend_es.properties
@@ -21,6 +21,7 @@
 # CDDL HEADER END
 #
 #      Copyright 2006-2009 Sun Microsystems, Inc.
+#      Portions Copyright 2011 ForgeRock AS
 
 
 
@@ -257,7 +258,7 @@
 FATAL_ERR_BACKEND_CANNOT_REGISTER_BASEDN_210=Se ha producido un error al tratar de registrar el ND de base %s en el Servidor de directorios:  %s
 MILD_ERR_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED_211=El servidor de fondo del esquema no admite actualmente la eliminaci\u00f3n de elementos de esquema existentes
 MILD_ERR_SCHEMA_INVALID_MODIFICATION_TYPE_212=El servidor de fondo del esquema no admite el tipo de modificaci\u00f3n %s
-MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=El servidor de fondo del esquema no admite la modificaci\u00f3n del tipo de atributo %s.  S\u00f3lo se pueden modificar los tipos de atributos, las clases de objetos, los formatos de nombre, las reglas de contenido de DIT, las reglas de estructura de DIT y el uso de las reglas de coincidencia
+MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=El servidor de fondo del esquema no admite la modificaci\u00f3n del tipo de atributo %s.  S\u00f3lo se pueden modificar los tipos de atributos, las clases de objetos, las descripci\u00f3nes de sintaxis LDAP, los formatos de nombre, las reglas de contenido de DIT, las reglas de estructura de DIT y el uso de las reglas de coincidencia
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE_214=Se ha producido un error al intentar descodificar el tipo de atributo "%s":  %s
 MILD_ERR_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS_215=No se puede agregar el tipo de atributo %s al esquema del servidor porque hay un tipo de atributo existente con un nombre u OID conflictivo:  %s
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS_216=Se ha producido un error al intentar descodificar el clase de objeto "%s":  %s
@@ -463,3 +464,10 @@
 MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD_416=No se puede suprimir la descripci\u00f3n de sintaxis LDAP %s del esquema de servidor porque no se ha definido dicha descripci\u00f3n de sintaxis LDAP
 MILD_ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX_417=No se pudo analizar el valor proporcionado "%s" como sintaxis LDAP porque su OID %s corresponde a una sintaxis de atributo que ya se ha implementado
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX_418=Se ha producido un error al intentar descodificar la descripci\u00f3n de sintaxis LDAP "%s":  %s
+SEVERE_ERR_RECURRINGTASK_INVALID_N_TOKENS_SIMPLE_419=El valor de  programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un n\u00famero no v\u00e1lido de tokens
+SEVERE_ERR_RECURRINGTASK_INVALID_MINUTE_TOKEN_SIMPLE_420=El valor de programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un token de minuto no v\u00e1lido
+SEVERE_ERR_RECURRINGTASK_INVALID_HOUR_TOKEN_SIMPLE_421=El valor de programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un token de hora no v\u00e1lido
+SEVERE_ERR_RECURRINGTASK_INVALID_DAY_TOKEN_SIMPLE_422=El valor de programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un token de d\u00eda del mes no v\u00e1lido
+SEVERE_ERR_RECURRINGTASK_INVALID_MONTH_TOKEN_SIMPLE_423=El valor de programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un token de mes del a\u00f1o no v\u00e1lido
+SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_SIMPLE_424=El valor de programaci\u00f3n de la tarea peri\u00f3dica proporcionado tiene un token de d\u00eda de la semana no v\u00e1lido
+MILD_ERR_SCHEMA_INVALID_REPLACE_MODIFICATION_425=El servidor de fondo del esquema no admite el tipo de modificaci\u00f3n Replace por el tipo de atributo %s
diff --git a/opendj-sdk/opends/src/messages/messages/backend_fr.properties b/opendj-sdk/opends/src/messages/messages/backend_fr.properties
index 1ee1e97..b9b3ca6 100644
--- a/opendj-sdk/opends/src/messages/messages/backend_fr.properties
+++ b/opendj-sdk/opends/src/messages/messages/backend_fr.properties
@@ -21,6 +21,7 @@
 # CDDL HEADER END
 #
 #      Copyright 2006-2009 Sun Microsystems, Inc.
+#      Portions Copyright 2011 ForgeRock AS
 
 
 
@@ -257,7 +258,7 @@
 FATAL_ERR_BACKEND_CANNOT_REGISTER_BASEDN_210=Une erreur s'est produite lors de la tentative d'enregistrement de DN de base %s dans Directory Server\u00a0: %s
 MILD_ERR_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED_211=Le backend de sch\u00e9ma ne prend actuellement pas en charge la suppression des \u00e9l\u00e9ments de sch\u00e9ma existants
 MILD_ERR_SCHEMA_INVALID_MODIFICATION_TYPE_212=Le backend de sch\u00e9ma ne prend actuellement pas en charge le type de modification %s
-MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=Le backend de sch\u00e9ma ne prend actuellement pas en charge la modification de ce type d'attribut %s.  Seules les utilisations des types d'attributs, des classes d'objet, des formulaires de noms, des r\u00e8gles de contenu DIT, des r\u00e8gles de structure DIT et des r\u00e8gles de correspondance peuvent \u00eatre modifi\u00e9es
+MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=Le backend de sch\u00e9ma ne prend actuellement pas en charge la modification de ce type d'attribut %s.  Seules les utilisations des types d'attributs, des classes d'objet, les descriptions de syntaxe LDAP, des formulaires de noms, des r\u00e8gles de contenu DIT, des r\u00e8gles de structure DIT et des r\u00e8gles de correspondance peuvent \u00eatre modifi\u00e9es
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE_214=Une erreur s'est produite lors de la tentative de d\u00e9codage du type d'attribut "%s"\u00a0: %s
 MILD_ERR_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS_215=Impossible d'ajouter un type d'attribut %s au sch\u00e9ma de serveur car il existe un type d'attribut avec un nom ou un OID\u00a0incompatible\u00a0:  %s
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS_216=Une erreur s'est produite lors de la tentative de d\u00e9codage de la classe d'objet "%s"\u00a0: %s
@@ -415,13 +416,13 @@
 MILD_ERR_HAS_SUBORDINATES_NOT_SUPPORTED_368=Ce backend ne prend pas en charge l'attribut op\u00e9rationnel hasSubordinates
 MILD_ERR_NUM_SUBORDINATES_NOT_SUPPORTED_369=Ce backend ne prend pas en charge l'attribut op\u00e9rationnel numSubordinates
 NOTICE_BACKEND_OFFLINE_370=Le backend %s est maintenant hors ligne 
-SEVERE_ERR_RECURRINGTASK_INVALID_N_TOKENS_371=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un nombre de jetons non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_MINUTE_TOKEN_372=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un jeton de minute non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_HOUR_TOKEN_373=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un jeton d'heure non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_DAY_TOKEN_374=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un jeton de jour du mois non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_MONTH_TOKEN_375=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un jeton de mois de l'ann\u00e9e non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_376=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un jeton de jour de semaine non valide
-SEVERE_ERR_RECURRINGTASK_INVALID_TOKENS_COMBO_377=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte une combinaison de jetons non valide qui cr\u00e9e une date inexistante
+SEVERE_ERR_RECURRINGTASK_INVALID_N_TOKENS_371=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un nombre de tokens non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_MINUTE_TOKEN_372=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un token de minute non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_HOUR_TOKEN_373=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un token d'heure non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_DAY_TOKEN_374=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un token de jour du mois non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_MONTH_TOKEN_375=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un token de mois de l'ann\u00e9e non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_376=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte un token de jour de semaine non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_TOKENS_COMBO_377=L'attribut d'entr\u00e9e de t\u00e2che r\u00e9currente fourni (%s), qui stocke la planification de la t\u00e2che r\u00e9currente, comporte une combinaison de tokens non valide qui cr\u00e9e une date inexistante
 SEVERE_ERR_TASKS_CANNOT_EXPORT_TO_FILE_378=Une erreur s'est produite lors de la tentative d'exportation des donn\u00e9es de backend de t\u00e2che\u00a0: %s
 SEVERE_ERR_TASKS_BACKUP_CANNOT_GET_MAC_379=Une erreur s'est produite lors de la tentative d'obtention du fournisseur MAC %s afin de cr\u00e9er le hachage sign\u00e9 pour la sauvegarde\u00a0: %s
 SEVERE_ERR_TASKS_BACKUP_CANNOT_GET_DIGEST_380=Une erreur s'est produite lors de la tentative d'obtention de la synth\u00e8se de message %s afin de cr\u00e9er le hachage pour la sauvegarde\u00a0: %s
@@ -463,3 +464,10 @@
 MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD_416=Impossible de supprimer la description de syntaxe ldap %s du sch\u00e9ma du serveur car elle n'est pas d\u00e9finie
 MILD_ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX_417=Impossible d'analyser la valeur indiqu\u00e9e "%s" en tant que syntaxe ldap car son OID %s correspond \u00e0 une syntaxe d'attribut d\u00e9j\u00e0 impl\u00e9ment\u00e9e
 MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX_418=Une erreur s'est produite lors de la tentative de d\u00e9codage de la description de syntaxe ldap "%s"\u00a0: %s
+SEVERE_ERR_RECURRINGTASK_INVALID_N_TOKENS_SIMPLE_419=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un nombre de tokens non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_MINUTE_TOKEN_SIMPLE_420=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un token de minute non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_HOUR_TOKEN_SIMPLE_421=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un token d'heure non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_DAY_TOKEN_SIMPLE_422=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un token de jour du mois non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_MONTH_TOKEN_SIMPLE_423=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un token de mois de l'ann\u00e9e non valide
+SEVERE_ERR_RECURRINGTASK_INVALID_WEEKDAY_TOKEN_SIMPLE_424=La valeur propos\u00e9e pour la planification de la t\u00e2che r\u00e9currente, comporte un token de jour de semaine non valide
+MILD_ERR_SCHEMA_INVALID_REPLACE_MODIFICATION_425=Le backend de sch\u00e9ma ne prend actuellement pas en charge la modification de type Replace pour le type d'attribut %s
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
index 7d813e1..f140ac6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -1528,7 +1529,7 @@
           break;
 
 
-        default:
+        case REPLACE:
           if ((!m.isInternal()) &&
               (!modifyOperation.isSynchronizationOperation()))
           {
@@ -1539,9 +1540,27 @@
           }
           else
           {
-            newSchema.addExtraAttribute(at.getNameOrOID(), a);
-            modifiedSchemaFiles.add(FILE_USER_SCHEMA_ELEMENTS);
+            // If this is not a Schema attribute, we put it
+            // in the extraAttribute map. This in fact acts as a replace.
+            if (SchemaConfigManager.isSchemaAttribute(a))
+            {
+              Message message = ERR_SCHEMA_INVALID_REPLACE_MODIFICATION.get(
+                                  a.getNameWithOptions());
+              ErrorLogger.logError(message);
+            }
+            else
+            {
+              newSchema.addExtraAttribute(at.getNameOrOID(), a);
+              modifiedSchemaFiles.add(FILE_USER_SCHEMA_ELEMENTS);
+            }
           }
+          break;
+
+        default:
+          Message message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
+                String.valueOf(m.getModificationType()));
+          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+                                       message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
index 82dac13..866fd8d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 package org.opends.server.core;
 import org.opends.messages.Message;
@@ -1522,7 +1523,7 @@
    *                    false if the attribute is not part of the schema
    *                    definition.
    */
-  private static boolean isSchemaAttribute(Attribute attribute)
+  public static boolean isSchemaAttribute(Attribute attribute)
   {
     String attributeOid = attribute.getAttributeType().getOID();
     if (attributeOid.equals("2.5.21.1") ||

--
Gitblit v1.10.0