From 8e008eedfcb98ac17d46a8495800003329daff87 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 17 Jun 2013 07:55:49 +0000
Subject: [PATCH] OPENDJ-960 (CR-1858) Rest2LDAP - Validate http-config.json file 

---
 opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java                                          |   15 ++++++++++-----
 opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPAuthnFilter.java               |    5 ++++-
 opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPConnectionFactoryProvider.java |   18 ++++++++++--------
 3 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPAuthnFilter.java b/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPAuthnFilter.java
index 6e6fbd5..61c3f52 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPAuthnFilter.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPAuthnFilter.java
@@ -318,7 +318,7 @@
             }
 
             // Parse the authentication configuration.
-            final JsonValue configuration = new JsonValue(content);
+            final JsonValue configuration = new JsonValue(content).recordKeyAccesses();
             final JsonValue authnConfig = configuration.get("authenticationFilter");
             if (!authnConfig.isNull()) {
                 supportHTTPBasicAuthentication =
@@ -373,6 +373,9 @@
                 bindLDAPConnectionFactory =
                         Rest2LDAP.configureConnectionFactory(configuration.get(
                                 "ldapConnectionFactories").required(), ldapFactoryName);
+                // we are now done reading the config, 
+                configuration.verifyAllKeysAccessed();
+
 
                 // Set the completion handler factory based on the Servlet API version.
                 syncFactory = ServletApiVersionAdapter.getInstance(config.getServletContext());
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPConnectionFactoryProvider.java b/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPConnectionFactoryProvider.java
index 0ced0b8..8f188bb 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPConnectionFactoryProvider.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap-servlet/src/main/java/org/forgerock/opendj/rest2ldap/servlet/Rest2LDAPConnectionFactoryProvider.java
@@ -15,8 +15,8 @@
  */
 package org.forgerock.opendj.rest2ldap.servlet;
 
-import static org.forgerock.json.resource.Resources.newInternalConnectionFactory;
-import static org.forgerock.opendj.rest2ldap.Rest2LDAP.configureConnectionFactory;
+import static org.forgerock.json.resource.Resources.*;
+import static org.forgerock.opendj.rest2ldap.Rest2LDAP.*;
 
 import java.io.InputStream;
 import java.util.Map;
@@ -38,6 +38,8 @@
 import org.forgerock.opendj.rest2ldap.Rest2LDAP;
 import org.forgerock.opendj.rest2ldap.Rest2LDAP.Builder;
 
+import com.forgerock.opendj.util.StaticUtils;
+
 /**
  * The connection factory provider which is used by the OpenDJ Commons REST LDAP
  * Gateway.
@@ -81,7 +83,7 @@
                 throw new ServletException("Servlet configuration file '" + configFileName
                         + "' does not contain a valid JSON configuration");
             }
-            final JsonValue configuration = new JsonValue(content);
+            final JsonValue configuration = new JsonValue(content).recordKeyAccesses();
 
             // Parse the authorization configuration.
             final AuthorizationPolicy authzPolicy =
@@ -113,6 +115,10 @@
                                 .configureMapping(mapping).build();
                 router.addRoute(mappingUrl, provider);
             }
+            // we are now done reading the config,
+            configuration.verifyAllKeysAccessed();
+
+
             final ConnectionFactory factory = newInternalConnectionFactory(router);
             if (ldapFactory != null) {
                 /*
@@ -147,11 +153,7 @@
             throw new ServletException("Servlet configuration file '" + configFileName
                     + "' could not be read: " + e.getMessage());
         } finally {
-            try {
-                configFile.close();
-            } catch (final Exception e) {
-                // Ignore.
-            }
+            StaticUtils.closeSilently(configFile);
         }
     }
 
diff --git a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
index b03538a..dbdb736 100644
--- a/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
+++ b/opendj-sdk/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
@@ -16,9 +16,9 @@
 
 package org.forgerock.opendj.rest2ldap;
 
-import static org.forgerock.opendj.ldap.requests.Requests.newSearchRequest;
-import static org.forgerock.opendj.ldap.schema.CoreSchema.getEntryUUIDAttributeType;
-import static org.forgerock.opendj.rest2ldap.ReadOnUpdatePolicy.CONTROLS;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
+import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
+import static org.forgerock.opendj.rest2ldap.ReadOnUpdatePolicy.*;
 import static org.forgerock.opendj.rest2ldap.Utils.ensureNotNull;
 
 import java.util.ArrayList;
@@ -575,11 +575,16 @@
      * @throws IllegalArgumentException
      *             If the configuration is invalid.
      */
-    public static ConnectionFactory configureConnectionFactory(final JsonValue configuration,
+    public static ConnectionFactory configureConnectionFactory(JsonValue configuration,
             final String name) {
+        configuration = configuration.recordKeyAccesses();
         final JsonValue normalizedConfiguration =
                 normalizeConnectionFactory(configuration, name, 0);
-        return configureConnectionFactory(normalizedConfiguration);
+        final ConnectionFactory connectionFactory =
+            configureConnectionFactory(normalizedConfiguration);
+        // we are now done reading the config,
+        configuration.verifyAllKeysAccessed();
+        return connectionFactory;
     }
 
     public static AttributeMapper constant(final Object value) {

--
Gitblit v1.10.0