From 81c0eef4f2ae79b193c55ec6b75137425bb3afea Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Fri, 09 Nov 2007 22:20:28 +0000
Subject: [PATCH] This set of updates fix several issues related to the JEB backend:
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java | 126 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 123 insertions(+), 3 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
index b483d58..2fbd12b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -145,8 +145,18 @@
// Determine the backend database directory.
File backendDirectory = getFileForPath(config.getDBDirectory());
+ // Create the directory if it doesn't exist.
+ if (!backendDirectory.exists())
+ {
+ if(!backendDirectory.mkdirs())
+ {
+ Message message =
+ ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
+ throw new ConfigException(message);
+ }
+ }
//Make sure the directory is valid.
- if (!backendDirectory.isDirectory())
+ else if (!backendDirectory.isDirectory())
{
Message message =
ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
@@ -714,11 +724,26 @@
boolean acceptable = true;
File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ //Make sure the directory either alreadly exists or is able to create.
+ if (!backendDirectory.exists())
+ {
+ if(!backendDirectory.mkdirs())
+ {
+ Message message =
+ ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
+ unacceptableReasons.add(message);
+ acceptable = false;
+ }
+ else
+ {
+ backendDirectory.delete();
+ }
+ }
//Make sure the directory is valid.
- if (!backendDirectory.isDirectory())
+ else if (!backendDirectory.isDirectory())
{
Message message =
- ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
+ ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
unacceptableReasons.add(message);
acceptable = false;
}
@@ -844,6 +869,101 @@
TRACER.debugInfo(env.getConfig().toString());
}
}
+
+ // Create the directory if it doesn't exist.
+ if(!cfg.getDBDirectory().equals(this.config.getDBDirectory()))
+ {
+ File backendDirectory = getFileForPath(cfg.getDBDirectory());
+
+ if (!backendDirectory.exists())
+ {
+ if(!backendDirectory.mkdirs())
+ {
+ messages.add(ERR_JEB_DIRECTORY_INVALID.get(
+ backendDirectory.getPath()));
+ ccr = new ConfigChangeResult(
+ DirectoryServer.getServerErrorResultCode(),
+ adminActionRequired,
+ messages);
+ return ccr;
+ }
+ }
+ //Make sure the directory is valid.
+ else if (!backendDirectory.isDirectory())
+ {
+ messages.add(ERR_JEB_DIRECTORY_INVALID.get(
+ backendDirectory.getPath()));
+ ccr = new ConfigChangeResult(
+ DirectoryServer.getServerErrorResultCode(),
+ adminActionRequired,
+ messages);
+ return ccr;
+ }
+
+ adminActionRequired = true;
+ messages.add(INFO_JEB_CONFIG_DB_DIR_REQUIRES_RESTART.get(
+ this.config.getDBDirectory(), cfg.getDBDirectory()));
+ }
+
+ if(!cfg.getDBDirectoryPermissions().equalsIgnoreCase(
+ config.getDBDirectoryPermissions()) ||
+ !cfg.getDBDirectory().equals(this.config.getDBDirectory()))
+ {
+ FilePermission backendPermission;
+ try
+ {
+ backendPermission =
+ FilePermission.decodeUNIXMode(cfg.getDBDirectoryPermissions());
+ }
+ catch(Exception e)
+ {
+ messages.add(ERR_CONFIG_BACKEND_MODE_INVALID.get(
+ config.dn().toString()));
+ ccr = new ConfigChangeResult(
+ DirectoryServer.getServerErrorResultCode(),
+ adminActionRequired,
+ messages);
+ return ccr;
+ }
+
+ //Make sure the mode will allow the server itself access to
+ //the database
+ if(!backendPermission.isOwnerWritable() ||
+ !backendPermission.isOwnerReadable() ||
+ !backendPermission.isOwnerExecutable())
+ {
+ messages.add(WARN_CONFIG_BACKEND_INSANE_MODE.get());
+ ccr = new ConfigChangeResult(
+ DirectoryServer.getServerErrorResultCode(),
+ adminActionRequired,
+ messages);
+ return ccr;
+ }
+
+ // Get the backend database backendDirectory permissions and apply
+ if(FilePermission.canSetPermissions())
+ {
+ File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ try
+ {
+ if(!FilePermission.setPermissions(backendDirectory,
+ backendPermission))
+ {
+ Message message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
+ backendPermission.toString(), backendDirectory.toString());
+ logError(message);
+ }
+ }
+ catch(Exception e)
+ {
+ // Log an warning that the permissions were not set.
+ Message message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
+ backendDirectory.toString(), e.toString());
+ logError(message);
+ }
+ }
+ }
+
this.config = cfg;
}
catch (Exception e)
--
Gitblit v1.10.0