From 2d5b96b4f44bc2ac687fdb9718514d30add072e1 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 05 Feb 2014 23:24:27 +0000
Subject: [PATCH] OPENDJ-1235: Migrate configuration framework
---
/dev/null | 31 ---------------
opendj-config-maven-plugin/src/main/resources/config/stylesheets/property-types/aci.xsl | 5 --
opendj-config/src/main/java/org/forgerock/opendj/config/PropertyValueVisitor.java | 3 -
opendj-config/src/main/java/org/forgerock/opendj/config/ACIPropertyDefinition.java | 57 +++++++++++++++++-----------
4 files changed, 36 insertions(+), 60 deletions(-)
diff --git a/opendj-config-maven-plugin/src/main/resources/config/stylesheets/property-types/aci.xsl b/opendj-config-maven-plugin/src/main/resources/config/stylesheets/property-types/aci.xsl
index b0f5b19..be7654b 100644
--- a/opendj-config-maven-plugin/src/main/resources/config/stylesheets/property-types/aci.xsl
+++ b/opendj-config-maven-plugin/src/main/resources/config/stylesheets/property-types/aci.xsl
@@ -28,11 +28,8 @@
<!--
Templates for processing dseecompat ACI.
-->
- <xsl:template match="adm:aci" mode="java-value-imports">
- <import>org.opends.server.authorization.dseecompat.Aci</import>
- </xsl:template>
<xsl:template match="adm:aci" mode="java-value-type">
- <xsl:value-of select="'Aci'" />
+ <xsl:value-of select="'String'" />
</xsl:template>
<xsl:template match="adm:aci" mode="java-definition-type">
<xsl:value-of select="'ACIPropertyDefinition'" />
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/ACIPropertyDefinition.java b/opendj-config/src/main/java/org/forgerock/opendj/config/ACIPropertyDefinition.java
index 179a2b9..156a9cc 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/ACIPropertyDefinition.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/ACIPropertyDefinition.java
@@ -26,23 +26,20 @@
package org.forgerock.opendj.config;
-import org.forgerock.util.Reject;
-import org.opends.server.authorization.dseecompat.Aci;
-import org.forgerock.i18n.LocalizedIllegalArgumentException;
-import org.forgerock.opendj.ldap.ByteString;
-import org.forgerock.opendj.ldap.DN;
-
import java.util.EnumSet;
+import java.util.regex.Pattern;
+
+import org.forgerock.util.Reject;
/**
* ACI property definition.
*/
-public final class ACIPropertyDefinition extends PropertyDefinition<Aci> {
+public final class ACIPropertyDefinition extends PropertyDefinition<String> {
/**
* An interface for incrementally constructing ACI property definitions.
*/
- public static final class Builder extends AbstractBuilder<Aci, ACIPropertyDefinition> {
+ public static final class Builder extends AbstractBuilder<String, ACIPropertyDefinition> {
// Private constructor
private Builder(AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
@@ -53,9 +50,9 @@
* {@inheritDoc}
*/
@Override
- protected ACIPropertyDefinition buildInstance(AbstractManagedObjectDefinition<?, ?> d, String propertyName,
- EnumSet<PropertyOption> options, AdministratorAction adminAction,
- DefaultBehaviorProvider<Aci> defaultBehavior) {
+ protected ACIPropertyDefinition buildInstance(AbstractManagedObjectDefinition<?, ?> d,
+ String propertyName, EnumSet<PropertyOption> options,
+ AdministratorAction adminAction, DefaultBehaviorProvider<String> defaultBehavior) {
return new ACIPropertyDefinition(d, propertyName, options, adminAction, defaultBehavior);
}
}
@@ -74,18 +71,27 @@
return new Builder(d, propertyName);
}
+ /**
+ * Pattern used for performing basic ACI syntax validation. Taken from the
+ * Aci class in the server.
+ */
+ private static final Pattern ACI_REGEX =
+ Pattern.compile("^\\s*(\\(\\s*(\\w+)\\s*(!?=)\\s*\"([^\"]+)\"\\s*\\)\\s*)*\\s*\\"
+ + "(\\s*(?i)version(?-i)\\s*(\\d\\.\\d)\\s*;\\s*(?i)acl(?-i)\\s*\"([^\"]*)"
+ + "\"\\s*;\\s*\\s*(\\w+)\\s*\\(([^()]+)\\)\\s*(.+?\"[)]*)\\s*;\\s*\\s*\\)\\s*$");
+
// Private constructor.
private ACIPropertyDefinition(AbstractManagedObjectDefinition<?, ?> d, String propertyName,
- EnumSet<PropertyOption> options, AdministratorAction adminAction,
- DefaultBehaviorProvider<Aci> defaultBehavior) {
- super(d, Aci.class, propertyName, options, adminAction, defaultBehavior);
+ EnumSet<PropertyOption> options, AdministratorAction adminAction,
+ DefaultBehaviorProvider<String> defaultBehavior) {
+ super(d, String.class, propertyName, options, adminAction, defaultBehavior);
}
/**
* {@inheritDoc}
*/
@Override
- public void validateValue(Aci value) {
+ public void validateValue(String value) {
Reject.ifNull(value);
// No additional validation required.
@@ -95,15 +101,20 @@
* {@inheritDoc}
*/
@Override
- public Aci decodeValue(String value) {
+ public String decodeValue(String value) {
Reject.ifNull(value);
- try {
- return Aci.decode(ByteString.valueOf(value), DN.rootDN());
- } catch (LocalizedIllegalArgumentException e) {
- // TODO: it would be nice to throw the cause.
- throw PropertyException.illegalPropertyValueException(this, value);
+ /*
+ * We don't have access to the ACI class from the server so do
+ * best-effort using regular expressions. TODO: is it worth improving on
+ * this? We could use reflection to get the appropriate parser which
+ * would allow us to use full validation in OpenDJ whilst remaining
+ * decoupled in other applications.
+ */
+ if (ACI_REGEX.matcher(value).matches()) {
+ return value;
}
+ throw PropertyException.illegalPropertyValueException(this, value);
}
/**
@@ -118,7 +129,7 @@
* {@inheritDoc}
*/
@Override
- public <R, P> R accept(PropertyValueVisitor<R, P> v, Aci value, P p) {
+ public <R, P> R accept(PropertyValueVisitor<R, P> v, String value, P p) {
return v.visitACI(this, value, p);
}
@@ -126,7 +137,7 @@
* {@inheritDoc}
*/
@Override
- public int compare(Aci o1, Aci o2) {
+ public int compare(String o1, String o2) {
return o1.toString().compareTo(o2.toString());
}
}
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/PropertyValueVisitor.java b/opendj-config/src/main/java/org/forgerock/opendj/config/PropertyValueVisitor.java
index 1bb3350..c60a214 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/PropertyValueVisitor.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/PropertyValueVisitor.java
@@ -31,7 +31,6 @@
import org.forgerock.opendj.ldap.AddressMask;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
-import org.opends.server.authorization.dseecompat.Aci;
/**
* A visitor of property values, in the style of the visitor design pattern.
@@ -75,7 +74,7 @@
* A visitor specified parameter.
* @return Returns a visitor specified result.
*/
- public R visitACI(ACIPropertyDefinition pd, Aci v, P p) {
+ public R visitACI(ACIPropertyDefinition pd, String v, P p) {
return visitUnknown(pd, v, p);
}
diff --git a/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/Aci.java b/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/Aci.java
deleted file mode 100644
index 9906a7f..0000000
--- a/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/Aci.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- * Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- * Copyright 2008 Sun Microsystems, Inc.
- * Portions Copyright 2010-2013 ForgeRock AS
- */
-package org.opends.server.authorization.dseecompat;
-
-import org.forgerock.i18n.LocalizedIllegalArgumentException;
-import org.forgerock.opendj.ldap.ByteString;
-import org.forgerock.opendj.ldap.DN;
-
-/**
- * The Aci class represents ACI strings.
- */
-public class Aci implements Comparable<Aci> {
- // TODO : to complete when implementing Aci support.
-
- @Override
- public int compareTo(Aci o) {
- throw new RuntimeException("This class is not implemented");
- }
-
- /**
- * Decode an ACI byte string.
- *
- * @param byteString
- * The ByteString containing the ACI string.
- * @param dn
- * DN of the ACI entry.
- * @return Returns a decoded ACI representing the string argument.
- * @throws LocalizedIllegalArgumentException
- * If the parsing of the ACI string fails.
- */
- public static Aci decode(ByteString byteString, DN dn) {
- throw new RuntimeException("This class is not implemented");
- }
-}
diff --git a/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/package-info.java b/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/package-info.java
deleted file mode 100644
index e8181d0..0000000
--- a/opendj-config/src/main/java/org/opends/server/authorization/dseecompat/package-info.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- * Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- * Copyright 2008 Sun Microsystems, Inc.
- */
-/**
- * Contains the Directory Server Sun Java System Directory Server Enterprise
- * Edition (dseecompat) compatability access control handler implementation.
- */
-package org.opends.server.authorization.dseecompat;
-
--
Gitblit v1.10.0