Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/directory-fortress-core

# Conflicts:
#	src/docker/apacheds-for-apache-fortress-tests/Dockerfile
#	src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
diff --git a/.gitignore b/.gitignore
index b146c45..453831c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,6 @@
 *.properties
 b.sh
 b.bat
-*.conf
+ldap/slapd.conf
 *.zip
 *.sav
\ No newline at end of file
diff --git a/README-CONFIG.md b/README-CONFIG.md
index 90ea6a5..3fec824 100644
--- a/README-CONFIG.md
+++ b/README-CONFIG.md
@@ -110,34 +110,38 @@
 ### Optional - Used to override fortress properties at runtime.
 
  These fortress properties may be overridden at runtime by setting as Java System Properties:
- * fortress.host
- * fortress.port
- * fortress.admin.user
- * fortress.admin.pw
- * fortress.min.admin.conn
- * fortress.max.admin.conn
- * fortress.enable.ldap.ssl
- * fortress.enable.ldap.ssl.debug
- * fortress.trust.store
- * fortress.trust.store.password
- * fortress.trust.store.onclasspath
- * fortress.config.realm
- * fortress.config.root
- * fortress.ldap.server.type
- * fortress.is.arbac02
-
+ 
+ | system property name              | description                                                             | default  values                                                       |
+ | --------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
+ | fortress.host                     | Hostname or ip address of ldap server                                   | localhost                                                             |
+ | fortress.port                     | Port for the ldap server                                                | openldap:389, apacheds: 1389                                          |
+ | fortress.admin.user               | Service account for access to ldap server                               | openldap: cn=manager,dc=example,dc=com, apacheds: uid=admin,ou=system |
+ | fortress.admin.pw                 | service account password                                                | secret                                                                |
+ | fortress.min.admin.conn           | minimum ldap a|min pool connections                                     | 1                                                                     |
+ | fortress.max.admin.conn           | maximum ldap admin pool connections                                     | 10                                                                    |
+ | fortress.enable.ldap.ssl          | true indicates LDAPS connectivity                                       | false                                                                 |
+ | fortress.enable.ldap.ssl.debug    | true will output additional info to log                                 | false                                                                 |
+ | fortress.trust.store              | Name of truststore (if on classpath) otherwise fully qualified name.    |                                                                       |
+ | fortress.trust.store.password     | The password for Java truststore containing server certificate.         | none                                                                  |    
+ | fortress.trust.store.onclasspath  | true indicates truststore is in Java classpath.                         | true                                                                  |
+ | fortress.suffix                   | The suffix is the toplevel LDAP node of the Directory Information Tree. | dc=example,dc=com                                                     |
+ | fortress.config.realm             | The name of the configuration node in LDAP.                             | Default                                                               |                                          
+ | fortress.config.root              | The DN that points to the base of the LDAP config node.                 | ou=Config,dc=example,dc=com                                           |
+ | fortress.is.arbac02               | Used in Apache Fortress Rest and Web to enforce administrative RBAC.    | false                                                                 |
+ | fortress.ldap.server.type         | Used for non-standard processing like password policies and audits.     | Valid values: apacheds, openldap or other                             |
+ 
  The minimum system.properties to enable fortress apis to work (without a config file):
   * fortress.admin.user
   * fortress.admin.pw=secret
   * fortress.config.root=ou=Config,dc=example,dc=com
 
- If the ldap host and port are not the default (localhost:389) set these two:
+ If the ldap host and/or port are not the default (openldap localhost:389) or (apacheds localhost:1389) set these:
  * fortress.host
  * fortress.port
 ___________________________________________________________________________________
 ## SECTION 5.  Order Artifacts found in the Fortress Configuration Subsystem
 
-This subsystem has been hard wired to the following order:
+This subsystem has been hard-wired to the following order:
  1. fortress.properties file - found on the classpath of that name.
  2. Java system properties - to override any of the 14 properties listed above.
  3. LDAP configuration node - found by config coordinates set in the fortress.properties file itself.
@@ -173,8 +177,8 @@
  mvn install -Dload.file=./ldap/setup/ConfigNodeUpdate.xml
  ```
 
-A refreshes the entire LDAP server DIT, deletes of all entries under the suffix, recreating the DIT node structure, and re-adding of the config node.
-B just updates the config node with the new values, preserving the other data.
+A. refreshes the entire LDAP server DIT, deletes of all entries under the suffix, recreating the DIT node structure, and re-adding of the config node.
+B. just updates the config node with the new values, preserving the other data.
 
 ### More notes:
  * Use caution when running the **refreshLDAPData.xml** script.  It deletes all nodes below the suffix before readding.
diff --git a/README-QUICKSTART-APACHEDS.md b/README-QUICKSTART-APACHEDS.md
index 8f0bf89..0f81c34 100644
--- a/README-QUICKSTART-APACHEDS.md
+++ b/README-QUICKSTART-APACHEDS.md
@@ -41,10 +41,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
diff --git a/README-QUICKSTART-DOCKER-APACHEDS.md b/README-QUICKSTART-DOCKER-APACHEDS.md
index 85f68f1..c3fd1d1 100644
--- a/README-QUICKSTART-DOCKER-APACHEDS.md
+++ b/README-QUICKSTART-DOCKER-APACHEDS.md
@@ -35,10 +35,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
@@ -48,134 +44,144 @@
 ___________________________________________________________________________________
 ## SECTION 2. Apache Fortress Core Setup using ApacheDS Docker Image
 
-1. Download the apache directory fortress-core source from apache git repo:
+1. Download the package:
 
- a. from the command line:
- ```
- git clone  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
- cd directory-fortress-core
- ```
+ a. from git:
+```
+git clone --branch 2.0.5  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
+cd directory-fortress-core
+```
 
-2. Now build the apache directory fortress docker image (trailing dot matters):
+b. or from Apache:
+```
+wget http://www.apache.org/dist/directory/fortress/dist/2.0.5/fortress-core-2.0.5-source-release.zip
+unzip fortress-core-2.0.5-source-release.zip
+cd fortress-core-2.0.5
+```
 
- ```
- docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+2. Prepare the package:
+
+```
+cp build.properties.example build.properties
+```
+
+ * Seeds the apacheds properties with defaults.
+ * [build.properties.example](build.properties.example) contains the default config for the apacheds docker image.
+ * Learn how the fortress config subsystem works: [README-CONFIG](README-CONFIG.md).
+
+3. Now build the apachedirectory apacheds docker image (trailing dot matters):
+
+```
+docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
  Or just pull the prebuilt image:
 
- ```
- docker pull apachedirectory/apacheds-for-apache-fortress-tests
- ```
+```
+docker pull apachedirectory/apacheds-for-apache-fortress-tests
+```
 
-3. Run the docker container:
+4. Run the docker container:
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
- *note: make note of the port as it's needed later
- *depending on your docker setup may need to run as root or sudo priv's.
+ * The '$CONTAINER_PORT' value required for next step.
+ * Depending on your Docker setup, may need to run this step as root or sudo priv's.
 
-4. Prepare fortress to use the apacheds running inside docker container:
+5. Prepare your terminal for execution of maven commands.
 
- ```
- cp build.properties.example build.properties
- ```
+```
+#!/bin/sh
+export M2_HOME=...
+export JAVA_HOME=...
+export PATH=$PATH:$M2_HOME/bin
+export MAVEN_OPTS="
+    -Dfortress.host=localhost  
+    -Dfortress.port=32768"
+```
 
-5. Edit the *build.properties* file:
+ More about 'MAVEN_OPTS': 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
 
- ```
- vi build.properties
- ```
+6. Run the maven install to build fortress and initialize config settings:
 
-6. Update the *ldap.port* prop:
-
- ```
- ldap.port= port from earlier step
- ```
-
-7. Save and exit
-
-8. Prepare your terminal for execution of maven commands.
-
- ```
- #!/bin/sh
- export M2_HOME=...
- export JAVA_HOME=...
- export PATH=$PATH:$M2_HOME/bin
- ```
-
-9. Run the maven install to build fortress lib and prepare its configuration (fortress.properties):
-
- ```
- mvn clean install
- ```
-
+```
+mvn clean install
+```
 ___________________________________________________________________________________
 ## SECTION 3. Apache Fortress Core Integration Test
 
 1. From fortress core base folder, enter the following commands:
 
- ```
- mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
- mvn install -Dload.file=./ldap/setup/DelegatedAdminManagerLoad.xml
- ```
+```
+mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
+```
 
  *These will build the Directory Information Tree (DIT), create the config and data policies needed for the integration test to follow.*
 
 2. Next, enter the following command:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
 
- *Tests the APIs against your LDAP server.*
+ More about this step: 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
+  * Tests the APIs against your LDAP server.*
 
 3. Verify the tests worked:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0
- Results :
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+```
 
 4. Rerun the tests to verify teardown APIs work:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
+
+ More about this step: 
+  * Again verify fortress.host and fortress.port match your environment.  
 
 5. Verify that worked also:
 
- ```
- Results :
+```
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- ```
- Notice more tests ran this time vs the first time, due to teardown.
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+```
+ * More tests ran this time vs the first time, due to teardown.
 
  Test Notes:
   * If tests complete without errors Apache Fortress works with your ApacheDS server (in Docker).
@@ -196,44 +202,44 @@
 
 #### Build image
 
- ```
- docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
  * trailing dot matters
 
  Or just to be sure don't use cached layers:
 
- ```
- docker build   --no-cache=true -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build   --no-cache=true -t apachedirectory/apacheds-for-apache-fortress-tests -f src/docker/apacheds-for-apache-fortress-tests/Dockerfile .
+```
 
 #### Run container
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/apacheds-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "10389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
 #### Go into the container
 
- ```
- docker exec -it $CONTAINER_ID bash
- ```
+```
+docker exec -it $CONTAINER_ID bash
+```
 
 #### Restart container
 
- ```
- docker restart $CONTAINER_ID
- ```
+```
+docker restart $CONTAINER_ID
+```
 
 #### Stop and delete container
 
- ```
- docker stop $CONTAINER_ID
- docker rm $CONTAINER_ID
- ```
+```
+docker stop $CONTAINER_ID
+docker rm $CONTAINER_ID
+```
 
 ____________________________________________________________________________________
 #### END OF README-QUICKSTART-DOCKER-APACHEDS
diff --git a/README-QUICKSTART-DOCKER-SLAPD.md b/README-QUICKSTART-DOCKER-SLAPD.md
index ed403a9..84919be 100644
--- a/README-QUICKSTART-DOCKER-SLAPD.md
+++ b/README-QUICKSTART-DOCKER-SLAPD.md
@@ -35,10 +35,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
@@ -48,145 +44,156 @@
 ___________________________________________________________________________________
 ## SECTION 2. Apache Fortress Core Setup using OpenLDAP Docker Image
 
-1. Download the apache directory fortress-core source from apache git repo:
+1. Download the package:
 
- a. from the command line:
- ```
- git clone  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
- cd directory-fortress-core
- ```
+ a. from git:
+```
+git clone --branch 2.0.5  https://gitbox.apache.org/repos/asf/directory-fortress-core.git
+cd directory-fortress-core
+```
 
-2. Now build the apache directory fortress docker image (trailing dot matters):
+b. or from Apache:
+```
+wget http://www.apache.org/dist/directory/fortress/dist/2.0.5/fortress-core-2.0.5-source-release.zip
+unzip fortress-core-2.0.5-source-release.zip
+cd fortress-core-2.0.5
+```
 
- ```
- docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+2. Prepare the package:
+
+```
+cp build.properties.example build.properties
+cp slapd.properties.example slapd.properties
+```
+
+ * Seeds the openldap properties with defaults.
+ * [slapd.properties.example](slapd.properties.example) contains the default config for openldap docker image.
+ * Learn how the fortress config subsystem works: [README-CONFIG](README-CONFIG.md).
+
+3. Now build the apachedirectory openldap docker image (trailing dot matters):
+
+```
+docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
  Or just pull the prebuilt image:
 
- ```
- docker pull apachedirectory/openldap-for-apache-fortress-tests
- ```
+```
+docker pull apachedirectory/openldap-for-apache-fortress-tests
+```
 
-3. Run the docker container:
+4. Run the docker container:
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
- *note: make note of the port as it's needed later
- *depending on your docker setup may need to run as root or sudo priv's.
+ * The '$CONTAINER_PORT' value required for next step.
+ * Depending on your Docker setup, may need to run this step as root or sudo priv's.
 
-4. Prepare fortress to use the slapd running inside docker container:
+5. Prepare your terminal for execution of maven commands.
 
- ```
- cp build.properties.example build.properties
- cp slapd.properties.example slapd.properties
- ```
+```
+#!/bin/sh
+export M2_HOME=...
+export JAVA_HOME=...
+export PATH=$PATH:$M2_HOME/bin
+export MAVEN_OPTS="
+    -Dfortress.host=localhost  
+    -Dfortress.port=32768"
+```
 
-5. Edit the *slapd.properties* file:
+ More about 'MAVEN_OPTS':  
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.  
 
- ```
- vi slapd.properties
- ```
+6. Run the maven install to build fortress and initialize config settings:
 
-6. Update the *ldap.port* prop:
-
- ```
- ldap.port= port from earlier step
- ```
-
-7. Save and exit
-
-8. Prepare your terminal for execution of maven commands.
-
- ```
- #!/bin/sh
- export M2_HOME=...
- export JAVA_HOME=...
- export PATH=$PATH:$M2_HOME/bin
- ```
-
-9. Run the maven install to build fortress lib and prepare its configuration (fortress.properties):
-
- ```
- mvn clean install
- ```
+```
+mvn clean install
+```
 ___________________________________________________________________________________
 ## SECTION 3. Apache Fortress Core Integration Test
 
 1. From fortress core base folder, enter the following commands:
 
- ```
- mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
- mvn install -Dload.file=./ldap/setup/DelegatedAdminManagerLoad.xml
- ```
+```
+mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml
+```
 
  *These will build the Directory Information Tree (DIT), create the config and data policies needed for the integration test to follow.*
 
 2. Next, enter the following command:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
 
- *Tests the APIs against your LDAP server.*
+ More about this step: 
+  * Provides the coordinates to the ldap server running inside Docker container.  
+  * Replace the 'fortress.port' value with result from ```echo $CONTAINER_PORT```.
+  * if Docker image running on a different machine, replace fortress.host to point to it.
+  * Tests the APIs against your LDAP server.*
 
 3. Verify the tests worked:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
 
- Results :
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 03:19 min
- [INFO] Finished at: 2016-01-07T09:28:18-06:00
- [INFO] Final Memory: 27M/532M
- [INFO] ------------------------------------------------------------------------
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 03:19 min
+[INFO] Finished at: 2016-01-07T09:28:18-06:00
+[INFO] Final Memory: 27M/532M
+[INFO] ------------------------------------------------------------------------
+```
 
 4. Rerun the tests to verify teardown APIs work:
 
- ```
- mvn -Dtest=FortressJUnitTest test
- ```
+```
+mvn -Dtest=FortressJUnitTest test -Dfortress.host=localhost -Dfortress.port=32768
+```
+
+ More about this step: 
+  * Again verify fortress.host and fortress.port match your environment.  
 
 5. Verify that worked also:
 
- ```
- Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 207.081 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
+```
+Tests run: Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 207.081 sec - in org.apache.directory.fortress.core.impl.FortressJUnitTest
 
- Results :
+Results :
 
- Tests run: Failures: 0, Errors: 0, Skipped: 0
+Tests run: Failures: 0, Errors: 0, Skipped: 0
 
- [INFO]
- [INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
- [INFO] Executing tasks
+[INFO]
+[INFO] --- maven-antrun-plugin:1.8:run (default) @ fortress-core ---
+[INFO] Executing tasks
 
- fortress-load:
- [INFO] Executed tasks
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 03:30 min
- [INFO] Finished at: 2016-01-07T09:33:11-06:00
- [INFO] Final Memory: 27M/531M
- [INFO] ------------------------------------------------------------------------
- ```
+fortress-load:
+[INFO] Executed tasks
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 03:30 min
+[INFO] Finished at: 2016-01-07T09:33:11-06:00
+[INFO] Final Memory: 27M/531M
+[INFO] ------------------------------------------------------------------------
+```
  Notice more tests ran this time vs the first time, due to teardown
 
  Test Notes:
@@ -206,44 +213,44 @@
 
 #### Build image
 
- ```
- docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
  * trailing dot matters
 
  Or just to be sure don't use cached layers:
 
- ```
- docker build  --no-cache=true -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
- ```
+```
+docker build  --no-cache=true -t apachedirectory/openldap-for-apache-fortress-tests -f src/docker/openldap-for-apache-fortress-tests/Dockerfile .
+```
 
 #### Run container
 
- ```
- CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
- CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
- echo $CONTAINER_PORT
- ```
+```
+CONTAINER_ID=$(docker run -d -P apachedirectory/openldap-for-apache-fortress-tests)
+CONTAINER_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "389/tcp") 0).HostPort}}' $CONTAINER_ID)
+echo $CONTAINER_PORT
+```
 
 #### Go into the container
 
- ```
- docker exec -it $CONTAINER_ID bash
- ```
+```
+docker exec -it $CONTAINER_ID bash
+```
 
 #### Restart container
 
- ```
- docker restart $CONTAINER_ID
- ```
+```
+docker restart $CONTAINER_ID
+```
 
 #### Stop and delete container
 
- ```
- docker stop $CONTAINER_ID
- docker rm $CONTAINER_ID
- ```
+```
+docker stop $CONTAINER_ID
+docker rm $CONTAINER_ID
+```
 
 ____________________________________________________________________________________
 #### END OF README-QUICKSTART-DOCKER-SLAPD
diff --git a/README-QUICKSTART-SLAPD.md b/README-QUICKSTART-SLAPD.md
index a8072be..7662012 100644
--- a/README-QUICKSTART-SLAPD.md
+++ b/README-QUICKSTART-SLAPD.md
@@ -40,10 +40,6 @@
 -------------------------------------------------------------------------------
 ## SECTION 1. Prerequisites
 
-Minimum hardware requirements:
- * 2 Cores
- * 4GB RAM
-
 Minimum software requirements:
  * Centos or Debian Machine
  * Java SDK 8++
diff --git a/build-config.xml b/build-config.xml
index 270a24e..ea68140 100644
--- a/build-config.xml
+++ b/build-config.xml
@@ -305,8 +305,8 @@
          <replace file="${dst.bootstrap.conf}" token="@ADM_MAX_CONN@" value="${admin.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@LOG_ROOT_DN@" value="${log.admin.user}"/>
          <replace file="${dst.bootstrap.conf}" token="@CFG_LOG_ROOT_PW@" value="${log.admin.pw}"/>
-         <replace file="${dst.bootstrap.conf}" token="@LOG_MIN_CONN@" value="${min.log.conn}"/>
-         <replace file="${dst.bootstrap.conf}" token="@LOG_MAX_CONN@" value="${max.log.conn}"/>
+         <replace file="${dst.bootstrap.conf}" token="@LOG_MIN_CONN@" value="${log.min.conn}"/>
+         <replace file="${dst.bootstrap.conf}" token="@LOG_MAX_CONN@" value="${log.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@USR_MIN_CONN@" value="${user.min.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@USR_MAX_CONN@" value="${user.max.conn}"/>
          <replace file="${dst.bootstrap.conf}" token="@CFG_CRYPTO_PROP@" value="${crypto.prop}"/>
@@ -343,8 +343,8 @@
          <replace file="${dst.remote.conf}" token="@LOG_ROOT_DN@" value="${log.admin.user}"/>
          <replace file="${dst.remote.conf}" token="@CFG_LOG_ROOT_PW@" value="${log.admin.pw}"/>
          <replace file="${dst.remote.conf}" token="@ROLE_OCCUPANTS@" value="${role.occupants}"/>
-         <replace file="${dst.remote.conf}" token="@LOG_MIN_CONN@" value="${min.log.conn}"/>
-         <replace file="${dst.remote.conf}" token="@LOG_MAX_CONN@" value="${max.log.conn}"/>
+         <replace file="${dst.remote.conf}" token="@LOG_MIN_CONN@" value="${log.min.conn}"/>
+         <replace file="${dst.remote.conf}" token="@LOG_MAX_CONN@" value="${log.max.conn}"/>
          <replace file="${dst.remote.conf}" token="@USR_MIN_CONN@" value="${user.min.conn}"/>
          <replace file="${dst.remote.conf}" token="@USR_MAX_CONN@" value="${user.max.conn}"/>
          <replace file="${dst.remote.conf}" token="@CFG_CRYPTO_PROP@" value="${crypto.prop}"/>
diff --git a/pom.xml b/pom.xml
index 242c8c6..c78d2bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,7 @@
   <version>2.0.6-SNAPSHOT</version>
   <inceptionYear>2007</inceptionYear>
   <description>
-    Apache Fortress is a standards-based Access Management SDK that implements ANSI RBAC INCITS 359.
+    Apache Fortress is an authorization platform that implements ANSI INCITS 359 Role-Based Access Control (RBAC).
   </description>
   <url>https://directory.apache.org/fortress/</url>
 
@@ -529,16 +529,12 @@
           <artifactId>maven-surefire-plugin</artifactId>
           <configuration>
             <argLine>-Xmx1024m</argLine>
-            <systemProperties>
-              <systemProperty>
-                <key>version</key>
-                <value>${project.version}</value>
-              </systemProperty>
-              <systemProperty>
-                <key>tenant</key>
-                <value>${tenant}</value>
-              </systemProperty>
-            </systemProperties>
+
+            <systemPropertyVariables>
+              <version>${project.version}</version>
+              <tenant>${tenant}</tenant>
+            </systemPropertyVariables>
+
             <excludes>
               <exclude>${exclude.tests}</exclude>
             </excludes>
@@ -712,9 +708,10 @@
           <execution>
             <phase>test</phase>
             <configuration>
+              <!--<target name="stop-slapd-win-if-present" depends="slapd.dir.check" if="slapd.dir.exists">-->
               <target name="fortress-load" if="load.file" description="Loads fortress policy into ldap">
                 <echo message="############### Run Fortress Ant script to load policy ###############" />
-                <java classname="org.apache.tools.ant.launch.Launcher" fork="true" failonerror="true" dir="${basedir}" timeout="4000000" taskname="startAnt">
+                <java classname="org.apache.tools.ant.launch.Launcher" fork="true" clonevm="true" failonerror="true" dir="${basedir}" timeout="600000" taskname="startAnt">
                   <classpath>
                     <!-- use config/bootstrap folder for config because the config ldap node isn't (might not be) inserted: -->
                     <pathelement location="./config/bootstrap/" />
@@ -770,9 +767,9 @@
 
     <!-- If JDK11++ pull in the JAXB API dependency. -->
     <profile>
-      <id>java-11</id>
+      <id>jdk-11+</id>
       <activation>
-        <jdk>11</jdk>
+        <jdk>[11,]</jdk>
       </activation>
       <dependencies>
         <dependency>
@@ -783,7 +780,6 @@
       </dependencies>
     </profile>
 
-
     <!-- This profile starts the Fortress Console App -->
     <!-- To execute: mvn -Pconsole test -->
     <profile>
diff --git a/slapd.properties.example b/slapd.properties.example
index ea42f7e..d2afc05 100644
--- a/slapd.properties.example
+++ b/slapd.properties.example
@@ -69,8 +69,8 @@
 user.max.conn=10
 
 # Used for slapd logger connection pool.  Leave zeros when using apacheds:
-min.log.conn=1
-max.log.conn=3
+log.min.conn=1
+log.max.conn=3
 
 #These are passwords used for LDAP audit log service accounts:
 # Audit Pool:
diff --git a/src/docker/apacheds-for-apache-fortress-tests/Dockerfile b/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
index d943071..34e20b4 100644
--- a/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
+++ b/src/docker/apacheds-for-apache-fortress-tests/Dockerfile
@@ -32,7 +32,7 @@
 
 # Install ApacheDS
 RUN \
-    wget http://archive.apache.org/dist//directory/apacheds/dist/${APACHEDS_VERSION}/apacheds-${APACHEDS_VERSION}-amd64.deb -q -O /tmp/apacheds.deb && \
+    wget http://archive.apache.org/dist/directory/apacheds/dist/${APACHEDS_VERSION}/apacheds-${APACHEDS_VERSION}-amd64.deb -q -O /tmp/apacheds.deb && \
     dpkg -i /tmp/apacheds.deb && \
     rm /tmp/apacheds.deb
 
diff --git a/src/docker/apacheds-for-apache-fortress-tests/README.md b/src/docker/apacheds-for-apache-fortress-tests/README.md
index 271702b..24cd953 100644
--- a/src/docker/apacheds-for-apache-fortress-tests/README.md
+++ b/src/docker/apacheds-for-apache-fortress-tests/README.md
@@ -36,3 +36,11 @@
 docker push apachedirectory/apacheds-for-apache-fortress-tests
 ```
 
+Note:  Login
+
+```groovy
+docker login
+Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
+Username: whatever
+Password: *****
+```
diff --git a/src/docker/openldap-for-apache-fortress-tests/slapd.conf b/src/docker/openldap-for-apache-fortress-tests/slapd.conf
new file mode 100644
index 0000000..9348a0c
--- /dev/null
+++ b/src/docker/openldap-for-apache-fortress-tests/slapd.conf
@@ -0,0 +1,149 @@
+#
+#   Licensed to the Apache Software Foundation (ASF) under one
+#   or more contributor license agreements.  See the NOTICE file
+#   distributed with this work for additional information
+#   regarding copyright ownership.  The ASF licenses this file
+#   to you under the Apache License, Version 2.0 (the
+#   "License"); you may not use this file except in compliance
+#   with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing,
+#   software distributed under the License is distributed on an
+#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#   KIND, either express or implied.  See the License for the
+#   specific language governing permissions and limitations
+#   under the License.
+#
+#
+# Fortress slapd.conf default settings.
+
+include		/etc/ldap/schema/core.schema
+include		/etc/ldap/schema/ppolicy.schema
+include		/etc/ldap/schema/cosine.schema
+include		/etc/ldap/schema/inetorgperson.schema
+include		/etc/ldap/schema/nis.schema
+include		/etc/ldap/schema/openldap.schema
+include		/etc/ldap/schema/fortress.schema
+include		/etc/ldap/schema/rbac.schema
+
+disallow bind_anon
+idletimeout 0
+sizelimit 5000
+timelimit 60
+threads 4
+loglevel 32768
+gentlehup on
+sortvals  roleOccupant
+
+pidfile		/var/run/slapd/slapd.pid
+argsfile	/var/run/slapd/slapd.args
+
+modulepath	/usr/lib/ldap
+moduleload	back_mdb.la
+moduleload	ppolicy.la
+moduleload  accesslog.la
+moduleload  dds.la
+moduleload  back_monitor.la
+
+# Global ACLS:
+# RootDSE is always readable
+access to dn.base="" by * read
+
+# For tooling:
+access to dn.base="cn=subschema"
+  by * read
+
+password-hash {SSHA}
+
+#######################################################################
+# History DB Settings
+#######################################################################
+database	 mdb
+maxreaders 64
+maxsize 1000000000
+suffix		"cn=log"
+rootdn      "cn=Manager,cn=log"
+rootpw      "{SSHA}pSOV2TpCxj2NMACijkcMko4fGrFopctU"
+index objectClass,reqDN,reqAuthzID,reqStart,reqAttr eq
+directory	"/var/lib/ldap/hist"
+access to *
+    by dn.base="cn=Manager,cn=log" write
+dbnosync
+checkpoint   64 5
+
+# Accesslog is readable by replicator and fortress:
+access to dn.subtree="cn=log"
+        by dn.exact="cn=replicator,dc=admin,dc=example,dc=com" read
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" read
+        by * break
+
+#######################################################################
+# Default DB Settings
+#######################################################################
+database	mdb
+maxreaders 64
+maxsize 1000000000
+suffix		"dc=example,dc=com"
+rootdn      "cn=Manager,dc=example,dc=com"
+rootpw      "{SSHA}pSOV2TpCxj2NMACijkcMko4fGrFopctU"
+
+index uidNumber,gidNumber,objectclass eq
+index cn,sn,ftObjNm,ftOpNm,ftRoleName,uid,ou eq,sub
+index ftId,ftPermName,ftRoles,ftUsers,ftRA,ftARA eq
+index roleOccupant eq
+
+directory	"/var/lib/ldap/dflt"
+overlay accesslog
+logdb   "cn=log"
+dbnosync
+checkpoint	64 5
+
+# The fortress admin needs write access to the whole DIT
+access to dn.subtree="dc=example,dc=com"
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" write
+        by * break
+
+# Accesslog is readable by replicator and fortress:
+access to dn.subtree="cn=log"
+        by dn.exact="cn=replicator,dc=admin,dc=example,dc=com" read
+        by dn.exact="cn=fortress-admin,dc=admin,dc=example,dc=com" read
+        by * break
+
+# Allow anonymous ability to bind:
+access to dn.subtree="dc=example,dc=com" attrs=userPassword
+  by anonymous auth
+  by * break
+
+# For audit trail:
+# Allow users access to modify their own pw & fortress audit attrs.
+access to dn.subtree="dc=example,dc=com" attrs=userPassword,ftModifier,ftModCode,ftModId
+  by self =wx
+  by * none
+
+# Allow users compare access to a fortress perm op name:
+access to dn.subtree="dc=example,dc=com" attrs=ftOpNm
+  by users compare
+
+#######################################################################
+# Audit Log Settings
+#######################################################################
+logops bind writes compare
+logoldattr ftModifier ftModCode ftModId ftRC ftRA ftARC ftARA ftCstr ftId ftPermName ftObjNm ftOpNm ftObjId ftGroups ftRoles ftUsers ftType
+logpurge 5+00:00 1+00:00
+
+#######################################################################
+# PW Policy Settings
+#######################################################################
+# Enable the Password Policy overlay to enforce password policies on this database.
+overlay     ppolicy
+ppolicy_default "cn=PasswordPolicy,ou=Policies,dc=example,dc=com"
+ppolicy_use_lockout
+ppolicy_hash_cleartext
+
+#######################################################################
+# Monitor database
+#######################################################################
+database monitor
+
diff --git a/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java b/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
index 1a35b98..4db5e9f 100755
--- a/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
+++ b/src/main/java/org/apache/directory/fortress/core/impl/ConfigDAO.java
@@ -87,7 +87,6 @@
     public static final String GID_NUMBER_SEQUENCE = "ftGidNumber";
     public static final String UID_NUMBER_SEQUENCE = "ftUidNumber";
 
-
     private final String[] CONFIG_OBJ_CLASS =
     {
         SchemaConstants.DEVICE_OC, GlobalIds.PROPS_AUX_OBJECT_CLASS_NAME, GlobalIds.FT_CONFIG_AUX_OBJECT_CLASS_NAME
@@ -101,7 +100,6 @@
         SchemaConstants.CN_AT, GlobalIds.PROPS, GID_NUMBER_SEQUENCE, UID_NUMBER_SEQUENCE
     };
 
-
     /**
      * Package private default constructor.
      */
@@ -331,7 +329,7 @@
         Configuration configuration = new Configuration();
         LdapConnection ld = null;
         String dn = getDn( name );
-        LOG.debug( "getConfig dn [{}]", dn );
+        LOG.info( "getConfig dn [{}]", dn );
         try
         {
             ld = getAdminConnection();
@@ -404,6 +402,6 @@
      */
     private String getDn( String name )
     {
-        return SchemaConstants.CN_AT + "=" + name + "," + CONFIG_ROOT_DN;
+        return SchemaConstants.CN_AT + "=" + name + "," + Config.getInstance().getProperty( GlobalIds.CONFIG_ROOT_PARAM );
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/directory/fortress/core/util/Config.java b/src/main/java/org/apache/directory/fortress/core/util/Config.java
index 8b96bf9..3b64e89 100755
--- a/src/main/java/org/apache/directory/fortress/core/util/Config.java
+++ b/src/main/java/org/apache/directory/fortress/core/util/Config.java
@@ -76,6 +76,7 @@
     private static final String EXT_TRUST_STORE_ONCLASSPATH = "fortress.trust.store.onclasspath";
     private static final String EXT_CONFIG_REALM = "fortress.config.realm";
     private static final String EXT_CONFIG_ROOT_DN = "fortress.config.root";
+    private static final String EXT_CONFIG_SUFFIX = "fortress.suffix";
     private static final String EXT_SERVER_TYPE = "fortress.ldap.server.type";
     private static final String EXT_IS_ARBAC02 = "fortress.is.arbac02";
 
@@ -677,6 +678,15 @@
             LOG.info( PREFIX, GlobalIds.TRUST_STORE_ON_CLASSPATH, szValue );
         }
 
+        // Check to see if the suffix has been overridden by a system property:
+        szValue = System.getProperty( EXT_CONFIG_SUFFIX );
+        if( StringUtils.isNotEmpty( szValue ))
+        {
+            config.setProperty( GlobalIds.SUFFIX, szValue );
+            LOG.info( PREFIX, GlobalIds.SUFFIX, szValue );
+
+        }
+
         // Check to see if the config realm name has been overridden by a system property:
         szValue = System.getProperty( EXT_CONFIG_REALM );
         if( StringUtils.isNotEmpty( szValue ))
@@ -685,7 +695,7 @@
             LOG.info( PREFIX, GlobalIds.CONFIG_REALM, szValue );
         }
 
-        // Check to see if the config realm name has been overridden by a system property:
+        // Check to see if the config node dn has been overridden by a system property:
         szValue = System.getProperty( EXT_CONFIG_ROOT_DN );
         if( StringUtils.isNotEmpty( szValue ))
         {
@@ -703,11 +713,9 @@
 
         // Check to see if ARBAC02 checking enforced in service layer:
         szValue = System.getProperty( EXT_IS_ARBAC02 );
-        LOG.info( PREFIX, GlobalIds.IS_ARBAC02, szValue );
-
         if( StringUtils.isNotEmpty( szValue ))
         {
-            Boolean isArbac02 = new Boolean(szValue);
+            Boolean isArbac02 = Boolean. valueOf( szValue );
             config.setProperty( GlobalIds.IS_ARBAC02, isArbac02.booleanValue() );
             LOG.info( PREFIX, GlobalIds.IS_ARBAC02, isArbac02.booleanValue() );
         }