Repository: incubator-ranger
Updated Branches:
  refs/heads/master 634e8d4e6 -> 80e2eae09


RANGER-892:Ranger SOLR plugins should not add dependent libraries to 
component's CLASSPATH


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

Branch: refs/heads/master
Commit: 428ce978fb04e9679ea7f52312347c762a5b1a9d
Parents: da3a323
Author: rmani <[email protected]>
Authored: Thu Apr 14 11:35:49 2016 -0700
Committer: rmani <[email protected]>
Committed: Thu Apr 14 11:35:49 2016 -0700

----------------------------------------------------------------------
 agents-common/scripts/enable-agent.sh           |  33 +++--
 pom.xml                                         |   8 +-
 ranger-solr-plugin-shim/.gitignore              |   2 +
 ranger-solr-plugin-shim/pom.xml                 |  60 +++++++++
 .../solr/authorizer/RangerSolrAuthorizer.java   | 132 +++++++++++++++++++
 src/main/assembly/plugin-solr.xml               |  17 ++-
 6 files changed, 229 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/agents-common/scripts/enable-agent.sh
----------------------------------------------------------------------
diff --git a/agents-common/scripts/enable-agent.sh 
b/agents-common/scripts/enable-agent.sh
index b9511d2..3791847 100755
--- a/agents-common/scripts/enable-agent.sh
+++ b/agents-common/scripts/enable-agent.sh
@@ -510,23 +510,22 @@ then
        #if [ -d "${PROJ_LIB_DIR}" ]
        #then
                dt=`date '+%Y%m%d%H%M%S'`
-               for f in ${PROJ_LIB_DIR}/*.jar
-               do
-                       if [ -f "${f}" ]
-                       then    
-                               bn=`basename $f`
-                               if [ -f ${HCOMPONENT_LIB_DIR}/${bn} ]
-                               then
-                                       log "Saving lib file: 
${HCOMPONENT_LIB_DIR}/${bn} to ${HCOMPONENT_LIB_DIR}/.${bn}.${dt} ..."
-                                       mv ${HCOMPONENT_LIB_DIR}/${bn} 
${HCOMPONENT_LIB_DIR}/.${bn}.${dt}
-                               fi
-                               if [ ! -f ${HCOMPONENT_LIB_DIR}/${bn} ]
-                               then
-                                       ln -s ${f} ${HCOMPONENT_LIB_DIR}/${bn}
-                               fi
-                       fi
-               done
-               
+        for f in ${PROJ_LIB_DIR}/*
+            do
+               if [ -f "${f}" ] || [ -d "${f}" ]
+               then
+                   bn=`basename $f`
+                   if [ -f ${HCOMPONENT_LIB_DIR}/${bn} ] || [  -d 
${HCOMPONENT_LIB_DIR}/${bn} ]
+                   then
+                       log "Saving lib file: ${HCOMPONENT_LIB_DIR}/${bn} to 
${HCOMPONENT_LIB_DIR}/.${bn}.${dt} ..."
+                       mv ${HCOMPONENT_LIB_DIR}/${bn} 
${HCOMPONENT_LIB_DIR}/.${bn}.${dt}
+                   fi
+                   if [ ! -f ${HCOMPONENT_LIB_DIR}/${bn} ] && [ ! -d  
${HCOMPONENT_LIB_DIR}/${bn} ]
+                   then
+                       ln -s ${f} ${HCOMPONENT_LIB_DIR}/${bn}
+                   fi
+                fi
+        done
                # ADD SQL CONNECTOR JAR TO PLUGIN DEPENDENCY JAR FOLDER
                dbJar=$(getInstallProperty 'SQL_CONNECTOR_JAR')
                if [ -f "${dbJar}" ]

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 03815c1..c6f8ed7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,8 +14,7 @@
   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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+--><project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache</groupId>
@@ -103,10 +102,11 @@
         <module>ranger-yarn-plugin-shim</module>
         <module>ranger-storm-plugin-shim</module>
         <module>ranger-kafka-plugin-shim</module>
+        <module>ranger-solr-plugin-shim</module>
         <module>ranger-hive-utils</module>
         <module>ranger-examples</module>
         <module>ranger-tools</module>
-    </modules>
+  </modules>
     <properties>
         <javac.source.version>1.7</javac.source.version>
         <javac.target.version>1.7</javac.target.version>
@@ -564,4 +564,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/ranger-solr-plugin-shim/.gitignore
----------------------------------------------------------------------
diff --git a/ranger-solr-plugin-shim/.gitignore 
b/ranger-solr-plugin-shim/.gitignore
new file mode 100644
index 0000000..b9c5b0b
--- /dev/null
+++ b/ranger-solr-plugin-shim/.gitignore
@@ -0,0 +1,2 @@
+/target/
+.settings/

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/ranger-solr-plugin-shim/pom.xml
----------------------------------------------------------------------
diff --git a/ranger-solr-plugin-shim/pom.xml b/ranger-solr-plugin-shim/pom.xml
new file mode 100644
index 0000000..a9df073
--- /dev/null
+++ b/ranger-solr-plugin-shim/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>ranger-solr-plugin-shim</artifactId>
+    <name>SOLR Security Plugin Shim</name>
+    <description>SOLR Security Plugin Shim</description>
+    <packaging>jar</packaging>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <parent>
+        <groupId>org.apache.ranger</groupId>
+        <artifactId>ranger</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ranger</groupId>
+            <artifactId>ranger-plugins-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ranger</groupId>
+            <artifactId>ranger-plugins-audit</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ranger</groupId>
+            <artifactId>credentialbuilder</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.solr</groupId>
+            <artifactId>solr-core</artifactId>
+            <version>${solr.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ranger</groupId>
+            <artifactId>ranger-plugin-classloader</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/ranger-solr-plugin-shim/src/main/java/org/apache/ranger/authorization/solr/authorizer/RangerSolrAuthorizer.java
----------------------------------------------------------------------
diff --git 
a/ranger-solr-plugin-shim/src/main/java/org/apache/ranger/authorization/solr/authorizer/RangerSolrAuthorizer.java
 
b/ranger-solr-plugin-shim/src/main/java/org/apache/ranger/authorization/solr/authorizer/RangerSolrAuthorizer.java
new file mode 100644
index 0000000..c82e123
--- /dev/null
+++ 
b/ranger-solr-plugin-shim/src/main/java/org/apache/ranger/authorization/solr/authorizer/RangerSolrAuthorizer.java
@@ -0,0 +1,132 @@
+package org.apache.ranger.authorization.solr.authorizer;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.plugin.classloader.RangerPluginClassLoader;
+import org.apache.solr.security.AuthorizationContext;
+import org.apache.solr.security.AuthorizationPlugin;
+import org.apache.solr.security.AuthorizationResponse;
+
+public class RangerSolrAuthorizer implements AuthorizationPlugin {
+       private static final Log LOG = LogFactory
+                       .getLog(RangerSolrAuthorizer.class);
+
+       private static final String   RANGER_PLUGIN_TYPE                      = 
"solr";
+       private static final String   RANGER_SOLR_AUTHORIZER_IMPL_CLASSNAME   = 
"org.apache.ranger.authorization.solr.authorizer.RangerSolrAuthorizer";
+
+       private                 AuthorizationPlugin     
rangerSolrAuthorizerImpl          = null;
+       private static  RangerPluginClassLoader rangerPluginClassLoader         
  = null;
+
+       public RangerSolrAuthorizer() {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
RangerSolrAuthorizer.RangerSolrAuthorizer()");
+               }
+
+               this.init0();
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
RangerSolrAuthorizer.RangerSolrAuthorizer()");
+               }
+       }
+
+       private void init0(){
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> RangerSolrAuthorizer.init0()");
+               }
+
+               try {
+                       rangerPluginClassLoader = 
RangerPluginClassLoader.getInstance(RANGER_PLUGIN_TYPE, this.getClass());
+
+                       @SuppressWarnings("unchecked")
+                       Class<AuthorizationPlugin> cls = 
(Class<AuthorizationPlugin>) 
Class.forName(RANGER_SOLR_AUTHORIZER_IMPL_CLASSNAME, true, 
rangerPluginClassLoader);
+
+                       activatePluginClassLoader();
+
+                       rangerSolrAuthorizerImpl = cls.newInstance();
+               } catch (Exception e) {
+                       // check what need to be done
+                       LOG.error("Error Enabling RangerSolrPlugin", e);
+               } finally {
+                       deactivatePluginClassLoader();
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== RangerSolrAuthorizer.init0()");
+               }
+       }
+
+
+       @Override
+       public void init(Map<String, Object> initInfo) {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> RangerSolrAuthorizer.init(Resource)");
+               }
+               try {
+                       activatePluginClassLoader();
+
+                       rangerSolrAuthorizerImpl.init(initInfo);
+               } finally {
+                       deactivatePluginClassLoader();
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== RangerSolrAuthorizer.init(Resource)");
+               }
+       }
+
+       @Override
+       public void close() throws IOException {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> RangerSolrAuthorizer.close(Resource)");
+               }
+               try {
+                       activatePluginClassLoader();
+
+                       rangerSolrAuthorizerImpl.close();
+               } finally {
+                       deactivatePluginClassLoader();
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== RangerSolrAuthorizer.close()");
+               }
+
+       }
+
+       @Override
+       public AuthorizationResponse authorize(AuthorizationContext context) {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> RangerSolrAuthorizer.init(context)");
+               }
+               AuthorizationResponse ret = null;
+               try {
+                       activatePluginClassLoader();
+
+                       ret = rangerSolrAuthorizerImpl.authorize(context);
+               } finally {
+                       deactivatePluginClassLoader();
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== RangerSolrAuthorizer.init(context)");
+               }
+
+               return ret;
+       }
+
+       private void activatePluginClassLoader() {
+               if(rangerPluginClassLoader != null) {
+                       rangerPluginClassLoader.activate();
+               }
+       }
+
+       private void deactivatePluginClassLoader() {
+               if(rangerPluginClassLoader != null) {
+                       rangerPluginClassLoader.deactivate();
+               }
+       }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/428ce978/src/main/assembly/plugin-solr.xml
----------------------------------------------------------------------
diff --git a/src/main/assembly/plugin-solr.xml 
b/src/main/assembly/plugin-solr.xml
index 31ebd6b..43ab738 100644
--- a/src/main/assembly/plugin-solr.xml
+++ b/src/main/assembly/plugin-solr.xml
@@ -20,6 +20,19 @@
        <includeBaseDirectory>true</includeBaseDirectory>
        <moduleSets>
                <moduleSet>
+            <binaries>
+               <includeDependencies>false</includeDependencies>
+               <unpack>false</unpack>
+                   <directoryMode>755</directoryMode>
+                   <fileMode>644</fileMode>
+                   <outputDirectory>/lib</outputDirectory>
+            </binaries>
+            <includes>
+                 <include>org.apache.ranger:ranger-solr-plugin-shim</include>
+                 <include>org.apache.ranger:ranger-plugin-classloader</include>
+             </includes>
+           </moduleSet>
+               <moduleSet>
                        <binaries>
                                <includeDependencies>false</includeDependencies>
                                <unpack>false</unpack>
@@ -27,7 +40,7 @@
                                <fileMode>644</fileMode>
                                <dependencySets>
                                        <dependencySet>
-                                               
<outputDirectory>/lib</outputDirectory>
+                                               
<outputDirectory>/lib/ranger-solr-plugin-impl</outputDirectory>
                                                <unpack>false</unpack>
                                                <includes>
                                                        
<include>com.google.code.gson:gson</include>
@@ -74,7 +87,7 @@
                                                </includes>
                                        </dependencySet>
                                </dependencySets>
-                               <outputDirectory>/lib</outputDirectory>
+                               
<outputDirectory>/lib/ranger-solr-plugin-impl</outputDirectory>
                        </binaries>
                        <includes>
                                <include>org.apache.ranger:ranger-plugins-audit

Reply via email to