From 50dfcf693125e0eff3dba5535ade9fabbe426b58 Mon Sep 17 00:00:00 2001
From: Peter Skopek <pskopek@redhat.com>
Date: Thu, 03 Jul 2014 14:07:31 +0000
Subject: [PLINK-509] setting required parser features and logger chanages

---
diff --git a/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkLoggerImpl.java b/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkLoggerImpl.java
index 96eaf29..fbfd61a 100644
--- a/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkLoggerImpl.java
+++ b/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkLoggerImpl.java
@@ -1627,4 +1627,8 @@ public final class PicketLinkLoggerImpl implements PicketLinkLogger {
     public ConfigurationException wrongMetadataRootElement() {
         return MESSAGES.wrongMetadataRootElement();
     }
+    
+    public RuntimeException parserFeatureNotSupported(String feature) {
+        return MESSAGES.parserFeatureNotSupported(feature);
+    }
 }
\ No newline at end of file
diff --git a/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkMessages.java b/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkMessages.java
index 5581505..a45496d 100644
--- a/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkMessages.java
+++ b/picketlink-bindings/picketlink-jbas7/src/main/java/org/picketlink/identity/federation/PicketLinkMessages.java
@@ -534,4 +534,8 @@ public interface PicketLinkMessages {
     
     @Message(id = 187, value = "Wrong metadata root element should be EntitiesDescriptor or EntityDescriptor.")
     ConfigurationException wrongMetadataRootElement();
+    
+    @Message(id = 188, value = "Parser feature %s not supported.")
+    RuntimeException parserFeatureNotSupported(String feature);
+
 }
\ No newline at end of file
diff --git a/picketlink-core/src/main/java/org/picketlink/identity/federation/DefaultPicketLinkLogger.java b/picketlink-core/src/main/java/org/picketlink/identity/federation/DefaultPicketLinkLogger.java
index f49576e..065b90f 100644
--- a/picketlink-core/src/main/java/org/picketlink/identity/federation/DefaultPicketLinkLogger.java
+++ b/picketlink-core/src/main/java/org/picketlink/identity/federation/DefaultPicketLinkLogger.java
@@ -2372,4 +2372,9 @@ public class DefaultPicketLinkLogger implements PicketLinkLogger {
     public ConfigurationException wrongMetadataRootElement() {
         return new ConfigurationException(ErrorCodes.WRONG_METADATA_ROOT_ELEMENT);
     }
+    
+    @Override
+    public RuntimeException parserFeatureNotSupported(String feature) {
+        return new RuntimeException("Parser feature " + feature + " not supported.");
+    }
 }
\ No newline at end of file
diff --git a/picketlink-core/src/main/java/org/picketlink/identity/federation/PicketLinkLogger.java b/picketlink-core/src/main/java/org/picketlink/identity/federation/PicketLinkLogger.java
index c88c6ce..11a59a2 100644
--- a/picketlink-core/src/main/java/org/picketlink/identity/federation/PicketLinkLogger.java
+++ b/picketlink-core/src/main/java/org/picketlink/identity/federation/PicketLinkLogger.java
@@ -1312,4 +1312,6 @@ public interface PicketLinkLogger {

     
     ConfigurationException wrongMetadataRootElement();
+    
+    RuntimeException parserFeatureNotSupported(String feature);
 }
\ No newline at end of file
diff --git a/picketlink-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/util/DocumentUtil.java b/picketlink-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/util/DocumentUtil.java
index 5258ed5..4077392 100644
--- a/picketlink-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/util/DocumentUtil.java
+++ b/picketlink-core/src/main/java/org/picketlink/identity/federation/core/saml/v2/util/DocumentUtil.java
@@ -73,6 +73,10 @@ public class DocumentUtil {
     
     private static DocumentBuilderFactory documentBuilderFactory;
 
+    public static final String feature_external_general_entities = "http://xml.org/sax/features/external-general-entities";
+    public static final String feature_external_parameter_entities = "http://xml.org/sax/features/external-parameter-entities";
+    public static final String feature_disallow_doctype_decl = "http://apache.org/xml/features/disallow-doctype-decl";
+
     /**
      * Check whether a node belongs to a document
      *
@@ -506,6 +510,17 @@ public class DocumentUtil {
                 documentBuilderFactory = DocumentBuilderFactory.newInstance();
                 documentBuilderFactory.setNamespaceAware(true);
                 documentBuilderFactory.setXIncludeAware(true);
+                String feature = "";
+                try {
+                    feature = feature_disallow_doctype_decl;
+                    documentBuilderFactory.setFeature(feature, true);
+                    feature = feature_external_general_entities;
+                    documentBuilderFactory.setFeature(feature, false);
+                    feature = feature_external_parameter_entities;
+                    documentBuilderFactory.setFeature(feature, false);
+                } catch (ParserConfigurationException e) {
+                    throw logger.parserFeatureNotSupported(feature);
+                }
             } finally {
                 if (tccl_jaxp) {
                     SecurityActions.setTCCL(prevTCCL);
--
cgit v0.9.2
