From e5783d9d5e678cb4b8d69d98162c26d2858bbe33 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 25 Jan 2007 01:59:52 +0000
Subject: [PATCH] Make a number of updates to schema processing, all of which fall under the umbrella of issue #1163.  The individual issues addressed include:

---
 opends/src/server/org/opends/server/core/AddOperation.java |   45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/AddOperation.java b/opends/src/server/org/opends/server/core/AddOperation.java
index d1958f3..2adae2b 100644
--- a/opends/src/server/org/opends/server/core/AddOperation.java
+++ b/opends/src/server/org/opends/server/core/AddOperation.java
@@ -1470,7 +1470,8 @@
         if (DirectoryServer.checkSchema())
         {
           StringBuilder invalidReason = new StringBuilder();
-          if (! entry.conformsToSchema(parentEntry, true, invalidReason))
+          if (! entry.conformsToSchema(parentEntry, true, true, true,
+                                       invalidReason))
           {
             setResultCode(ResultCode.OBJECTCLASS_VIOLATION);
             setErrorMessage(invalidReason);
@@ -1599,6 +1600,48 @@
                 break;
             }
           }
+
+
+          // See if the entry contains any attributes or object classes marked
+          // OBSOLETE.  If so, then reject the entry.
+          for (AttributeType at : userAttributes.keySet())
+          {
+            if (at.isObsolete())
+            {
+              int    msgID   = MSGID_ADD_ATTR_IS_OBSOLETE;
+              String message = getMessage(msgID, String.valueOf(entryDN),
+                                          at.getNameOrOID());
+              appendErrorMessage(message);
+              setResultCode(ResultCode.CONSTRAINT_VIOLATION);
+              break addProcessing;
+            }
+          }
+
+          for (AttributeType at : operationalAttributes.keySet())
+          {
+            if (at.isObsolete())
+            {
+              int    msgID   = MSGID_ADD_ATTR_IS_OBSOLETE;
+              String message = getMessage(msgID, String.valueOf(entryDN),
+                                          at.getNameOrOID());
+              appendErrorMessage(message);
+              setResultCode(ResultCode.CONSTRAINT_VIOLATION);
+              break addProcessing;
+            }
+          }
+
+          for (ObjectClass oc : objectClasses.keySet())
+          {
+            if (oc.isObsolete())
+            {
+              int    msgID   = MSGID_ADD_OC_IS_OBSOLETE;
+              String message = getMessage(msgID, String.valueOf(entryDN),
+                                          oc.getNameOrOID());
+              appendErrorMessage(message);
+              setResultCode(ResultCode.CONSTRAINT_VIOLATION);
+              break addProcessing;
+            }
+          }
         }
 
         // Check to see if the client has permission to perform the add.

--
Gitblit v1.10.0