From 0d97a7da226d93b8b87467efde523aa2120ceabc Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Fri, 07 Jun 2013 14:08:13 +0000
Subject: [PATCH] Fix for OPENDJ-925, OPENDJ-926, and overall schema management. Review CR-1806. Back a few years ago, when we did the SVR4 package, we split the schema into read-only (Install) and writable (Instance). With the template model in 2.6, the whole schema is under config, and we should never edit/change the one in the template. So, I've removed all code related to the 2 locations for schema, reverted some I10N messages to their previous versions, and tidy up code and tests. All unit-tests are passing. And it's also possible to change the instance.loc and run setup and have a fully functioning server :-)
---
opends/src/server/org/opends/server/core/SchemaConfigManager.java | 129 +++++++++---------------------------------
1 files changed, 28 insertions(+), 101 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/SchemaConfigManager.java b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
index 8e296f8..64af9ba 100644
--- a/opends/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2006-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.core;
import org.opends.messages.Message;
@@ -68,6 +68,8 @@
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.schema.LDAPSyntaxDescriptionSyntax;
import org.opends.server.types.LDAPSyntaxDescription;
+import org.opends.server.util.StaticUtils;
+
import static org.opends.messages.ConfigMessages.*;
import static org.opends.server.schema.SchemaConstants.*;
import static org.opends.server.util.ServerConstants.*;
@@ -109,16 +111,13 @@
/**
* Retrieves the path to the directory containing the server schema files.
*
- * @param userSchema indicates if we need to retrieve user schema or
- * "unmodified" schema.
- *
* @return The path to the directory containing the server schema files.
*/
- public static String getSchemaDirectoryPath(boolean userSchema)
+ public static String getSchemaDirectoryPath()
{
File schemaDir =
DirectoryServer.getEnvironmentConfig().
- getSchemaDirectory(userSchema);
+ getSchemaDirectory();
if (schemaDir != null) {
return schemaDir.getAbsolutePath();
} else {
@@ -199,11 +198,7 @@
@Override
public boolean accept(File directory, String filename)
{
- if (filename.endsWith(".ldif"))
- {
- return true;
- }
- return false;
+ return filename.endsWith(".ldif");
}
}
@@ -231,9 +226,7 @@
// Construct the path to the directory that should contain the schema files
// and make sure that it exists and is a directory. Get a list of the files
// in that directory sorted in alphabetic order.
- String schemaInstallDirPath = getSchemaDirectoryPath(false);
- String schemaInstanceDirPath = getSchemaDirectoryPath(true);
- File schemaInstallDir = new File(schemaInstallDirPath);
+ String schemaInstanceDirPath = getSchemaDirectoryPath();
File schemaInstanceDir = null;
try
@@ -241,11 +234,6 @@
if (schemaInstanceDirPath != null)
{
schemaInstanceDir = new File(schemaInstanceDirPath);
- if (schemaInstallDir.getCanonicalPath().equals(
- schemaInstanceDir.getCanonicalPath()))
- {
- schemaInstanceDir = null;
- }
}
} catch (Exception e)
{
@@ -257,39 +245,27 @@
try
{
- if (schemaInstallDir == null || ! schemaInstallDir.exists())
+ if (schemaInstanceDir == null || ! schemaInstanceDir.exists())
{
Message message =
- ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaInstallDirPath);
+ ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaInstanceDirPath);
throw new InitializationException(message);
}
- if (! schemaInstallDir.isDirectory())
+ if (! schemaInstanceDir.isDirectory())
{
Message message =
- ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaInstallDirPath);
+ ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaInstanceDirPath);
throw new InitializationException(message);
}
- if ((schemaInstanceDir == null) || (!schemaInstanceDir.exists())
- || (! schemaInstanceDir.isDirectory()))
- {
- schemaInstanceDir = null;
- }
FilenameFilter filter = new SchemaFileFilter();
- File[] schemaInstallDirFiles =
- schemaInstallDir.listFiles(filter);
- int fileNumber = schemaInstallDirFiles.length;
- File[] schemaInstanceDirFiles = null ;
- if (schemaInstanceDir != null)
- {
- schemaInstanceDirFiles =
+ File[] schemaInstanceDirFiles =
schemaInstanceDir.listFiles(filter);
- fileNumber =+ schemaInstanceDirFiles.length ;
- }
-
+ int fileNumber = schemaInstanceDirFiles.length ;
ArrayList<String> fileList = new ArrayList<String>(fileNumber);
- for (File f : schemaInstallDirFiles)
+
+ for (File f : schemaInstanceDirFiles)
{
if (f.isFile())
{
@@ -309,29 +285,6 @@
youngestModificationTime = modificationTime;
}
}
- if (schemaInstanceDirFiles != null)
- {
- for (File f : schemaInstanceDirFiles)
- {
- if (f.isFile())
- {
- fileList.add(f.getName());
- }
-
- long modificationTime = f.lastModified();
- if ((oldestModificationTime <= 0L)
- || (modificationTime < oldestModificationTime))
- {
- oldestModificationTime = modificationTime;
- }
-
- if ((youngestModificationTime <= 0)
- || (modificationTime > youngestModificationTime))
- {
- youngestModificationTime = modificationTime;
- }
- }
- }
fileNames = new String[fileList.size()];
fileList.toArray(fileNames);
@@ -354,7 +307,7 @@
}
Message message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(
- schemaInstallDirPath, schemaInstanceDirPath, getExceptionMessage(e));
+ schemaInstanceDirPath, getExceptionMessage(e));
throw new InitializationException(message, e);
}
@@ -444,15 +397,8 @@
throws ConfigException, InitializationException
{
// Create an LDIF reader to use when reading the files.
- String schemaDirPath = null;
-
- schemaDirPath = getSchemaDirectoryPath(true);
+ String schemaDirPath = getSchemaDirectoryPath();
File f = new File(schemaDirPath, schemaFile);
- if (!f.exists())
- {
- schemaDirPath = getSchemaDirectoryPath(false);
- f = new File(schemaDirPath, schemaFile);
- }
LDIFReader reader;
try
{
@@ -510,6 +456,7 @@
else
{
logError(message);
+ StaticUtils.close(reader);
return null;
}
}
@@ -537,18 +484,7 @@
logError(message);
}
- try
- {
- reader.close();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
- }
-
+ StaticUtils.close(reader);
// Get the attributeTypes attribute from the entry.
LinkedList<Modification> mods = new LinkedList<Modification>();
@@ -859,7 +795,7 @@
{
for (AttributeValue v : a)
{
- LDAPSyntaxDescription syntaxDescription = null;
+ LDAPSyntaxDescription syntaxDescription;
try
{
syntaxDescription = LDAPSyntaxDescriptionSyntax.decodeLDAPSyntax(
@@ -1527,33 +1463,24 @@
public static boolean isSchemaAttribute(Attribute attribute)
{
String attributeOid = attribute.getAttributeType().getOID();
- if (attributeOid.equals("2.5.21.1") ||
+ return attributeOid.equals("2.5.21.1") ||
attributeOid.equals("2.5.21.2") ||
attributeOid.equals("2.5.21.4") ||
attributeOid.equals("2.5.21.5") ||
attributeOid.equals("2.5.21.6") ||
attributeOid.equals("2.5.21.7") ||
attributeOid.equals("2.5.21.8") ||
- attributeOid.equals("2.5.4.3") ||
+ attributeOid.equals("2.5.4.3") ||
attributeOid.equals("1.3.6.1.4.1.1466.101.120.16") ||
attributeOid.equals("cn-oid") ||
- attributeOid.equals("attributetypes-oid") ||
- attributeOid.equals("objectclasses-oid") ||
- attributeOid.equals("matchingrules-oid") ||
- attributeOid.equals("matchingruleuse-oid") ||
+ attributeOid.equals("attributetypes-oid") ||
+ attributeOid.equals("objectclasses-oid") ||
+ attributeOid.equals("matchingrules-oid") ||
+ attributeOid.equals("matchingruleuse-oid") ||
attributeOid.equals("nameformdescription-oid") ||
- attributeOid.equals("ditcontentrules-oid") ||
+ attributeOid.equals("ditcontentrules-oid") ||
attributeOid.equals("ditstructurerules-oid") ||
- attributeOid.equals("ldapsyntaxes-oid")
-
- )
- {
- return true;
- }
- else
- {
- return false;
- }
+ attributeOid.equals("ldapsyntaxes-oid");
}
}
--
Gitblit v1.10.0