You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by rm...@apache.org on 2016/06/17 02:48:53 UTC

incubator-ranger git commit: RANGER-1036 : avoid solr JAASConfiguration class override of appName

Repository: incubator-ranger
Updated Branches:
  refs/heads/master 2f6483721 -> 8f77aec59


RANGER-1036 : avoid solr JAASConfiguration class override of appName

Signed-off-by: rmani <rm...@hortonworks.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/8f77aec5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/8f77aec5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/8f77aec5

Branch: refs/heads/master
Commit: 8f77aec59ce71bcbfbcc574815749f9f6f21f908
Parents: 2f64837
Author: sneethiraj <sn...@apache.org>
Authored: Thu Jun 16 22:36:15 2016 -0400
Committer: rmani <rm...@hortonworks.com>
Committed: Thu Jun 16 19:48:41 2016 -0700

----------------------------------------------------------------------
 .../audit/destination/SolrAuditDestination.java | 58 ++++++++++++++++++--
 1 file changed, 52 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/8f77aec5/agents-audit/src/main/java/org/apache/ranger/audit/destination/SolrAuditDestination.java
----------------------------------------------------------------------
diff --git a/agents-audit/src/main/java/org/apache/ranger/audit/destination/SolrAuditDestination.java b/agents-audit/src/main/java/org/apache/ranger/audit/destination/SolrAuditDestination.java
index 9fe7e27..5be2b42 100644
--- a/agents-audit/src/main/java/org/apache/ranger/audit/destination/SolrAuditDestination.java
+++ b/agents-audit/src/main/java/org/apache/ranger/audit/destination/SolrAuditDestination.java
@@ -19,11 +19,6 @@
 
 package org.apache.ranger.audit.destination;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Properties;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ranger.audit.model.AuditEventBase;
@@ -39,6 +34,13 @@ import org.apache.solr.client.solrj.response.UpdateResponse;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+
 
 public class SolrAuditDestination extends AuditDestination {
 	private static final Log LOG = LogFactory
@@ -114,6 +116,9 @@ public class SolrAuditDestination extends AuditDestination {
 						LOG.fatal("Can't connect to Solr server. ZooKeepers="
 								+ zkHosts, t);
 					}
+					finally {
+						resetInitializerInSOLR() ;
+					}
 				} else if (solrURLs != null && !solrURLs.isEmpty()) {
 					try {
 						LOG.info("Connecting to Solr using URLs=" + solrURLs);
@@ -130,11 +135,46 @@ public class SolrAuditDestination extends AuditDestination {
 						LOG.fatal("Can't connect to Solr server. URL="
 								+ solrURLs, t);
 					}
+					finally {
+						resetInitializerInSOLR() ;
+					}
 				}
 			}
 		}
 	}
 
+    private void resetInitializerInSOLR() {
+		javax.security.auth.login.Configuration solrConfig = javax.security.auth.login.Configuration.getConfiguration();
+		String solrConfigClassName = solrConfig.getClass().getName() ;
+		String solrJassConfigEnd = "SolrJaasConfiguration" ;
+		if (solrConfigClassName.endsWith(solrJassConfigEnd)) {
+			try {
+				Field f = solrConfig.getClass().getDeclaredField("initiateAppNames");
+				if (f != null) {
+					f.setAccessible(true);
+					HashSet<String> val = new HashSet<String>();
+					f.set(solrConfig, val);
+					if ( LOG.isDebugEnabled() ) {
+						LOG.debug("resetInitializerInSOLR: successfully reset the initiateAppNames");
+					}
+
+				} else {
+					if ( LOG.isDebugEnabled() ) {
+						LOG.debug("resetInitializerInSOLR: not applying on class [" + solrConfigClassName + "] as it does not have initiateAppNames variable name.");
+					}
+				}
+			} catch (Throwable t) {
+				logError("resetInitializerInSOLR: Unable to reset SOLRCONFIG.initiateAppNames to be empty", t);
+			}
+		}
+		else {
+			if ( LOG.isDebugEnabled() ) {
+				LOG.debug("resetInitializerInSOLR: not applying on class [" + solrConfigClassName + "] as it does not endwith [" + solrJassConfigEnd + "]");
+			}
+		}
+
+    }
+
 	@Override
 	public boolean log(Collection<AuditEventBase> events) {
 		try {
@@ -225,6 +265,8 @@ public class SolrAuditDestination extends AuditDestination {
 			 // SolrJ requires "java.security.auth.login.config"  property to be set to identify itself that it is kerberized. So using a dummy property for it
 			 // Acutal solrclient JAAS configs are read from the ranger-<component>-audit.xml present in  components conf folder and set by InMemoryJAASConfiguration
 			 // Refer InMemoryJAASConfiguration doc for JAAS Configuration
+			 String confFileName = System.getProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG) ;
+			 LOG.info("In solrAuditDestination.init() : JAAS Configuration set as [" + confFileName + "]") ;
 			 if ( System.getProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG) == null ) {
 				 System.setProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG, "/dev/null") ;
 			 }
@@ -232,7 +274,11 @@ public class SolrAuditDestination extends AuditDestination {
 			 InMemoryJAASConfiguration.init(props);
 			} catch (Exception e) {
 				LOG.error("ERROR: Unable to load SolrClient JAAS config from Audit config file. Audit to Kerberized Solr will fail...", e);
-			}
+		}
+        finally {
+			 String confFileName = System.getProperty(PROP_JAVA_SECURITY_AUTH_LOGIN_CONFIG) ;
+			 LOG.info("In solrAuditDestination.init() (finally) : JAAS Configuration set as [" + confFileName + "]") ;
+		}
 		LOG.info("<==SolrAuditDestination.init()" );
 	}
 }