You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/05/27 03:22:46 UTC

incubator-ranger git commit: RANGER-274: tag-based-policies: added RangerServiceDef.options field

Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy d61bce5c4 -> d8f7a9605


RANGER-274: tag-based-policies: added RangerServiceDef.options field


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

Branch: refs/heads/tag-policy
Commit: d8f7a960540860137656ace18dd668f1465fd556
Parents: d61bce5
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Tue May 26 16:49:56 2015 -0700
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Tue May 26 16:49:56 2015 -0700

----------------------------------------------------------------------
 .../RangerAbstractContextEnricher.java          | 34 ++++++++--------
 .../ranger/plugin/model/RangerServiceDef.java   | 41 +++++++++++++++++++-
 .../RangerAbstractResourceMatcher.java          | 37 +++++++++---------
 .../service-defs/ranger-servicedef-_tag_.json   |  4 ++
 .../service-defs/ranger-servicedef-kms.json     |  5 +++
 .../ranger/plugin/store/TestServiceStore.java   |  2 +-
 .../services/hbase/TestRangerServiceHBase.java  |  2 +-
 .../services/hdfs/TestRangerServiceHdfs.java    |  2 +-
 .../hive/client/TestRangerServiceHive.java      |  2 +-
 .../knox/client/TestRangerServiceKnox.java      |  2 +-
 .../db/mysql/patches/009-updated_schema.sql     |  1 +
 .../db/oracle/patches/009-updated_schema.sql    |  1 +
 .../db/postgres/xa_core_db_postgres.sql         |  1 +
 .../db/sqlserver/xa_core_db_sqlserver.sql       |  1 +
 .../org/apache/ranger/entity/XXServiceDef.java  | 35 +++++++++++++++++
 .../ranger/service/RangerServiceDefService.java |  2 +
 .../service/RangerServiceDefServiceBase.java    |  6 ++-
 17 files changed, 132 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerAbstractContextEnricher.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerAbstractContextEnricher.java b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerAbstractContextEnricher.java
index 922cfea..72affda 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerAbstractContextEnricher.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerAbstractContextEnricher.java
@@ -41,7 +41,6 @@ public abstract class RangerAbstractContextEnricher implements RangerContextEnri
 	protected String componentServiceName;
 	protected RangerServiceDef componentServiceDef;
 
-	private Map<String, String> options = null;
 
 	@Override
 	public void setContextEnricherDef(RangerContextEnricherDef enricherDef) {
@@ -54,8 +53,6 @@ public abstract class RangerAbstractContextEnricher implements RangerContextEnri
 			LOG.debug("==> RangerAbstractContextEnricher.init(" + enricherDef + ")");
 		}
 
-		options = enricherDef.getEnricherOptions();
-
 		if(LOG.isDebugEnabled()) {
 			LOG.debug("<== RangerAbstractContextEnricher.init(" + enricherDef + ")");
 		}
@@ -84,6 +81,8 @@ public abstract class RangerAbstractContextEnricher implements RangerContextEnri
 	public String getOption(String name) {
 		String ret = null;
 
+		Map<String, String> options = enricherDef != null ? enricherDef.getEnricherOptions() : null;
+
 		if(options != null && name != null) {
 			ret = options.get(name);
 		}
@@ -92,35 +91,34 @@ public abstract class RangerAbstractContextEnricher implements RangerContextEnri
 	}
 
 	public String getOption(String name, String defaultValue) {
-		String ret = getOption(name);
-
-		if(StringUtils.isEmpty(ret)) {
-			ret = defaultValue;
-		}
-
-		return ret;
-	}
-
-	public boolean getBooleanOption(String name) {
+		String ret = defaultValue;
 		String val = getOption(name);
 
-		boolean ret = StringUtils.isEmpty(val) ? false : Boolean.parseBoolean(val);
+		if(val != null) {
+			ret = val;
+		}
 
 		return ret;
 	}
 
 	public boolean getBooleanOption(String name, boolean defaultValue) {
-		String strVal = getOption(name);
+		boolean ret = defaultValue;
+		String  val = getOption(name);
 
-		boolean ret = StringUtils.isEmpty(strVal) ? defaultValue : Boolean.parseBoolean(strVal);
+		if(val != null) {
+			ret = Boolean.parseBoolean(val);
+		}
 
 		return ret;
 	}
 
 	public char getCharOption(String name, char defaultValue) {
-		String strVal = getOption(name);
+		char   ret = defaultValue;
+		String val = getOption(name);
 
-		char ret = StringUtils.isEmpty(strVal) ? defaultValue : strVal.charAt(0);
+		if(! StringUtils.isEmpty(val)) {
+			ret = val.charAt(0);
+		}
 
 		return ret;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
index 49ee3a1..cd69320 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceDef.java
@@ -49,6 +49,7 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 	private String                         description      = null;
 	private String                         rbKeyLabel       = null;
 	private String                         rbKeyDescription = null;
+	private Map<String, String>            options          = null;
 	private List<RangerServiceConfigDef>   configs          = null;
 	private List<RangerResourceDef>        resources        = null;
 	private List<RangerAccessTypeDef>      accessTypes      = null;
@@ -58,7 +59,7 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 
 
 	public RangerServiceDef() {
-		this(null, null, null, null, null, null, null, null, null, null);
+		this(null, null, null, null, null, null, null, null, null, null, null);
 	}
 
 	/**
@@ -66,6 +67,7 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 	 * @param implClass
 	 * @param label
 	 * @param description
+	 * @param options
 	 * @param configs
 	 * @param resources
 	 * @param accessTypes
@@ -73,7 +75,7 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 	 * @param contextEnrichers
 	 * @param enums
 	 */
-	public RangerServiceDef(String name, String implClass, String label, String description, List<RangerServiceConfigDef> configs, List<RangerResourceDef> resources, List<RangerAccessTypeDef> accessTypes, List<RangerPolicyConditionDef> policyConditions, List<RangerContextEnricherDef> contextEnrichers, List<RangerEnumDef> enums) {
+	public RangerServiceDef(String name, String implClass, String label, String description, Map<String, String> options, List<RangerServiceConfigDef> configs, List<RangerResourceDef> resources, List<RangerAccessTypeDef> accessTypes, List<RangerPolicyConditionDef> policyConditions, List<RangerContextEnricherDef> contextEnrichers, List<RangerEnumDef> enums) {
 		super();
 
 		setName(name);
@@ -81,6 +83,7 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 		setLabel(label);
 		setDescription(description);
 		setConfigs(configs);
+		setOptions(options);
 		setResources(resources);
 		setAccessTypes(accessTypes);
 		setPolicyConditions(policyConditions);
@@ -218,6 +221,32 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 	}
 
 	/**
+	 * @return the options
+	 */
+	public Map<String, String> getOptions() {
+		return options;
+	}
+
+	/**
+	 * @param options the options to set
+	 */
+	public void setOptions(Map<String, String> options) {
+		if(this.options == null) {
+			this.options = new HashMap<String, String>();
+		} else if(this.options == options) {
+			return;
+		}
+
+		this.options.clear();
+
+		if(options != null) {
+			for(Map.Entry<String, String> entry : options.entrySet()) {
+				this.options.put(entry.getKey(), entry.getValue());
+			}
+		}
+	}
+
+	/**
 	 * @return the resources
 	 */
 	public List<RangerResourceDef> getResources() {
@@ -378,6 +407,14 @@ public class RangerServiceDef extends RangerBaseModelObject implements java.io.S
 		sb.append("rbKeyLabel={").append(rbKeyLabel).append("} ");
 		sb.append("rbKeyDescription={").append(rbKeyDescription).append("} ");
 
+		sb.append("options={");
+		if(options != null) {
+			for(Map.Entry<String, String> entry : options.entrySet()) {
+				sb.append(entry.getKey()).append("=").append(entry.getValue()).append(" ");
+			}
+		}
+		sb.append("} ");
+
 		sb.append("configs={");
 		if(configs != null) {
 			for(RangerServiceConfigDef config : configs) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java
index 9e547f1..56c4cfb 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java
@@ -43,7 +43,6 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat
 
 	protected RangerResourceDef    resourceDef    = null;
 	protected RangerPolicyResource policyResource = null;
-	protected Map<String, String>  options        = null;
 
 	protected boolean      optIgnoreCase = false;
 	protected boolean      optWildCard   = false;
@@ -55,7 +54,6 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat
 	@Override
 	public void setResourceDef(RangerResourceDef resourceDef) {
 		this.resourceDef = resourceDef;
-		this.options     = resourceDef != null ? resourceDef.getMatcherOptions() : null;
 	}
 
 	@Override
@@ -133,6 +131,8 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat
 	public String getOption(String name) {
 		String ret = null;
 
+		Map<String, String> options = resourceDef != null ? resourceDef.getMatcherOptions() : null;
+
 		if(options != null && name != null) {
 			ret = options.get(name);
 		}
@@ -141,35 +141,34 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat
 	}
 
 	public String getOption(String name, String defaultValue) {
-		String ret = getOption(name);
-
-		if(StringUtils.isEmpty(ret)) {
-			ret = defaultValue;
-		}
-
-		return ret;
-	}
-
-	public boolean getBooleanOption(String name) {
+		String ret = defaultValue;
 		String val = getOption(name);
 
-		boolean ret = StringUtils.isEmpty(val) ? false : Boolean.parseBoolean(val);
+		if(val != null) {
+			ret = val;
+		}
 
 		return ret;
 	}
 
 	public boolean getBooleanOption(String name, boolean defaultValue) {
-		String strVal = getOption(name);
+		boolean ret = defaultValue;
+		String  val = getOption(name);
 
-		boolean ret = StringUtils.isEmpty(strVal) ? defaultValue : Boolean.parseBoolean(strVal);
+		if(val != null) {
+			ret = Boolean.parseBoolean(val);
+		}
 
 		return ret;
 	}
 
 	public char getCharOption(String name, char defaultValue) {
-		String strVal = getOption(name);
+		char   ret = defaultValue;
+		String val = getOption(name);
 
-		char ret = StringUtils.isEmpty(strVal) ? defaultValue : strVal.charAt(0);
+		if(! StringUtils.isEmpty(val)) {
+			ret = val.charAt(0);
+		}
 
 		return ret;
 	}
@@ -211,8 +210,8 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat
 		sb.append("isMatchAny={").append(isMatchAny).append("} ");
 
 		sb.append("options={");
-		if(options != null) {
-			for(Map.Entry<String, String> e : options.entrySet()) {
+		if(resourceDef != null && resourceDef.getMatcherOptions() != null) {
+			for(Map.Entry<String, String> e : resourceDef.getMatcherOptions().entrySet()) {
 				sb.append(e.getKey()).append("=").append(e.getValue()).append(OPTIONS_SEP);
 			}
 		}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/main/resources/service-defs/ranger-servicedef-_tag_.json
----------------------------------------------------------------------
diff --git a/agents-common/src/main/resources/service-defs/ranger-servicedef-_tag_.json b/agents-common/src/main/resources/service-defs/ranger-servicedef-_tag_.json
index a20d467..e0ae0bc 100644
--- a/agents-common/src/main/resources/service-defs/ranger-servicedef-_tag_.json
+++ b/agents-common/src/main/resources/service-defs/ranger-servicedef-_tag_.json
@@ -4,6 +4,10 @@
   "label": "TAG",
   "description": "TAG Service Definition",
   "guid": "0d047248-baff-4cf9-8e9e-d5d377284b2e",
+  "options":
+  {
+    "ui.pages":"tag-based-policies"
+  },
   "resources":
   [
     {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/main/resources/service-defs/ranger-servicedef-kms.json
----------------------------------------------------------------------
diff --git a/agents-common/src/main/resources/service-defs/ranger-servicedef-kms.json b/agents-common/src/main/resources/service-defs/ranger-servicedef-kms.json
index 35d36e5..491cd17 100755
--- a/agents-common/src/main/resources/service-defs/ranger-servicedef-kms.json
+++ b/agents-common/src/main/resources/service-defs/ranger-servicedef-kms.json
@@ -3,6 +3,11 @@
 	"implClass": "org.apache.ranger.services.kms.RangerServiceKMS",
 	"label": "KMS",
 	"description": "KMS",
+    "options":
+    {
+        "ui.pages":"encryption",
+        "security.allowed.roles":"keyadmin"
+    },
 	"resources": 
 	[
 		{

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/agents-common/src/test/java/org/apache/ranger/plugin/store/TestServiceStore.java
----------------------------------------------------------------------
diff --git a/agents-common/src/test/java/org/apache/ranger/plugin/store/TestServiceStore.java b/agents-common/src/test/java/org/apache/ranger/plugin/store/TestServiceStore.java
index 59bbb25..6a759a3 100644
--- a/agents-common/src/test/java/org/apache/ranger/plugin/store/TestServiceStore.java
+++ b/agents-common/src/test/java/org/apache/ranger/plugin/store/TestServiceStore.java
@@ -91,7 +91,7 @@ public class TestServiceStore {
 
 		int initSdCount = sds == null ? 0 : sds.size();
 
-		RangerServiceDef sd = new RangerServiceDef(sdName, "org.apache.ranger.services.TestService", "TestService", "test servicedef description", null, null, null, null, null, null);
+		RangerServiceDef sd = new RangerServiceDef(sdName, "org.apache.ranger.services.TestService", "TestService", "test servicedef description", null, null, null, null, null, null, null);
 
 		RangerServiceDef createdSd = svcStore.createServiceDef(sd);
 		assertNotNull("createServiceDef() failed", createdSd != null);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/hbase-agent/src/test/java/org/apache/ranger/services/hbase/TestRangerServiceHBase.java
----------------------------------------------------------------------
diff --git a/hbase-agent/src/test/java/org/apache/ranger/services/hbase/TestRangerServiceHBase.java b/hbase-agent/src/test/java/org/apache/ranger/services/hbase/TestRangerServiceHBase.java
index 6340204..e723392 100644
--- a/hbase-agent/src/test/java/org/apache/ranger/services/hbase/TestRangerServiceHBase.java
+++ b/hbase-agent/src/test/java/org/apache/ranger/services/hbase/TestRangerServiceHBase.java
@@ -57,7 +57,7 @@ public class TestRangerServiceHBase {
 		buildHbaseConnectionConfig();
 		buildLookupContext();
 		
-		sd		 = new RangerServiceDef(sdName, "org.apache.ranger.services.hbase.RangerServiceHBase", "TestService", "test servicedef description", null, null, null, null, null, null);
+		sd		 = new RangerServiceDef(sdName, "org.apache.ranger.services.hbase.RangerServiceHBase", "TestService", "test servicedef description", null, null, null, null, null, null, null);
 		svc   	 = new RangerService(sdName, serviceName, "unit test hbase resource lookup and validateConfig", null, configs);
 		svcHBase = new RangerServiceHBase();
 		svcHBase.init(sd, svc);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/hdfs-agent/src/test/java/org/apache/ranger/services/hdfs/TestRangerServiceHdfs.java
----------------------------------------------------------------------
diff --git a/hdfs-agent/src/test/java/org/apache/ranger/services/hdfs/TestRangerServiceHdfs.java b/hdfs-agent/src/test/java/org/apache/ranger/services/hdfs/TestRangerServiceHdfs.java
index 0af6a3f..377b7e5 100644
--- a/hdfs-agent/src/test/java/org/apache/ranger/services/hdfs/TestRangerServiceHdfs.java
+++ b/hdfs-agent/src/test/java/org/apache/ranger/services/hdfs/TestRangerServiceHdfs.java
@@ -55,7 +55,7 @@ public class TestRangerServiceHdfs {
 		buildHdfsConnectionConfig();
 		buildLookupContext();
 
-		sd		 = new RangerServiceDef(sdName, "org.apache.ranger.service.hdfs.RangerServiceHdfs", "TestService", "test servicedef description", null, null, null, null, null, null);
+		sd		 = new RangerServiceDef(sdName, "org.apache.ranger.service.hdfs.RangerServiceHdfs", "TestService", "test servicedef description", null, null, null, null, null, null, null);
 		svc   	 = new RangerService(sdName, serviceName, "unit test hdfs resource lookup and validateConfig", null, configs);
 		svcHdfs = new RangerServiceHdfs();
 		svcHdfs.init(sd, svc);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/hive-agent/src/test/java/org/apache/ranger/services/hive/client/TestRangerServiceHive.java
----------------------------------------------------------------------
diff --git a/hive-agent/src/test/java/org/apache/ranger/services/hive/client/TestRangerServiceHive.java b/hive-agent/src/test/java/org/apache/ranger/services/hive/client/TestRangerServiceHive.java
index d65d3b7..a676b13 100644
--- a/hive-agent/src/test/java/org/apache/ranger/services/hive/client/TestRangerServiceHive.java
+++ b/hive-agent/src/test/java/org/apache/ranger/services/hive/client/TestRangerServiceHive.java
@@ -56,7 +56,7 @@ public class TestRangerServiceHive {
 		buildHbaseConnectionConfig();
 		buildLookupContext();
 				
-		sd		= new RangerServiceDef(sdName, "org.apache.ranger.services.hive.RangerServiceHive", "TestHiveService", "test servicedef description", null, null, null, null, null, null);
+		sd		= new RangerServiceDef(sdName, "org.apache.ranger.services.hive.RangerServiceHive", "TestHiveService", "test servicedef description", null, null, null, null, null, null, null);
 		svc   	= new RangerService(sdName, serviceName, "unit test hive resource lookup and validateConfig", null, configs);
 		svcHive = new RangerServiceHive();
 		svcHive.init(sd, svc);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/knox-agent/src/test/java/org/apache/ranger/services/knox/client/TestRangerServiceKnox.java
----------------------------------------------------------------------
diff --git a/knox-agent/src/test/java/org/apache/ranger/services/knox/client/TestRangerServiceKnox.java b/knox-agent/src/test/java/org/apache/ranger/services/knox/client/TestRangerServiceKnox.java
index e931aea..3e04cf3 100644
--- a/knox-agent/src/test/java/org/apache/ranger/services/knox/client/TestRangerServiceKnox.java
+++ b/knox-agent/src/test/java/org/apache/ranger/services/knox/client/TestRangerServiceKnox.java
@@ -58,7 +58,7 @@ public class TestRangerServiceKnox {
 		buildHbaseConnectionConfig();
 		buildLookupContext();
 	
-		sd		 = new RangerServiceDef(sdName, " org.apache.ranger.services.knox.RangerServiceKnox", "TestKnoxService", "test Knox servicedef description", null, null, null, null, null, null);
+		sd		 = new RangerServiceDef(sdName, " org.apache.ranger.services.knox.RangerServiceKnox", "TestKnoxService", "test Knox servicedef description", null, null, null, null, null, null, null);
 		svc   	 = new RangerService(sdName, serviceName, "unit test Knox resource lookup and validateConfig", null, configs);
 		svcKnox  = new RangerServiceKnox();
 		svcKnox.init(sd, svc);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/db/mysql/patches/009-updated_schema.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/mysql/patches/009-updated_schema.sql b/security-admin/db/mysql/patches/009-updated_schema.sql
index 2c14bc9..b0f8432 100644
--- a/security-admin/db/mysql/patches/009-updated_schema.sql
+++ b/security-admin/db/mysql/patches/009-updated_schema.sql
@@ -29,6 +29,7 @@ CREATE TABLE `x_service_def` (
 `impl_class_name` varchar(1024) DEFAULT NULL,
 `label` varchar(1024) DEFAULT NULL,
 `description` varchar(1024) DEFAULT NULL,
+`options` varchar(1024) DEFAULT NULL,
 `rb_key_label` varchar(1024) DEFAULT NULL,
 `rb_key_description` varchar(1024) DEFAULT NULL,
 `is_enabled` tinyint DEFAULT 1,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/db/oracle/patches/009-updated_schema.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/oracle/patches/009-updated_schema.sql b/security-admin/db/oracle/patches/009-updated_schema.sql
index 11946bf..ed47237 100644
--- a/security-admin/db/oracle/patches/009-updated_schema.sql
+++ b/security-admin/db/oracle/patches/009-updated_schema.sql
@@ -46,6 +46,7 @@ name VARCHAR(1024) DEFAULT NULL NULL,
 impl_class_name VARCHAR(1024) DEFAULT NULL NULL,
 label VARCHAR(1024) DEFAULT NULL NULL,
 description VARCHAR(1024) DEFAULT NULL NULL,
+options VARCHAR(1024) DEFAULT NULL NULL,
 rb_key_label VARCHAR(1024) DEFAULT NULL NULL,
 rb_key_description VARCHAR(1024) DEFAULT NULL NULL,
 is_enabled NUMBER(1) DEFAULT '1' NULL,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/db/postgres/xa_core_db_postgres.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/postgres/xa_core_db_postgres.sql b/security-admin/db/postgres/xa_core_db_postgres.sql
index 3530490..f995d56 100644
--- a/security-admin/db/postgres/xa_core_db_postgres.sql
+++ b/security-admin/db/postgres/xa_core_db_postgres.sql
@@ -473,6 +473,7 @@ name VARCHAR(1024) DEFAULT NULL NULL,
 impl_class_name VARCHAR(1024) DEFAULT NULL NULL,
 label VARCHAR(1024) DEFAULT NULL NULL,
 description VARCHAR(1024) DEFAULT NULL NULL,
+options VARCHAR(1024) DEFAULT NULL NULL,
 rb_key_label VARCHAR(1024) DEFAULT NULL NULL,
 rb_key_description VARCHAR(1024) DEFAULT NULL NULL,
 is_enabled BOOLEAN DEFAULT '1' NULL,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/db/sqlserver/xa_core_db_sqlserver.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql
index 6553085..7bf5b04 100644
--- a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql
+++ b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql
@@ -1759,6 +1759,7 @@ CREATE TABLE [dbo].[x_service_def](
 	[impl_class_name] [varchar](1024) DEFAULT NULL NULL,
 	[label] [varchar](1024) DEFAULT NULL NULL,
 	[description] [varchar](1024) DEFAULT NULL NULL,
+	[options] [varchar](1024) DEFAULT NULL NULL,
 	[rb_key_label] [varchar](1024) DEFAULT NULL NULL,
 	[rb_key_description] [varchar](1024) DEFAULT NULL NULL,
 	[is_enabled] [tinyint] DEFAULT 1 NULL,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/src/main/java/org/apache/ranger/entity/XXServiceDef.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXServiceDef.java b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceDef.java
index 4e52eb9..6f79432 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXServiceDef.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceDef.java
@@ -94,6 +94,15 @@ public class XXServiceDef extends XXDBBase implements java.io.Serializable {
 	protected String description;
 
 	/**
+	 * options of the XXServiceDef
+	 * <ul>
+	 * </ul>
+	 *
+	 */
+	@Column(name = "options")
+	protected String options;
+
+	/**
 	 * rbKeyLabel of the XXServiceDef
 	 * <ul>
 	 * </ul>
@@ -255,6 +264,25 @@ public class XXServiceDef extends XXDBBase implements java.io.Serializable {
 	}
 
 	/**
+	 * This method sets the value to the member attribute <b> options</b> .
+	 *
+	 * @param options
+	 *            Value to set member attribute <b> options</b>
+	 */
+	public void setOptions(String options) {
+		this.options = options;
+	}
+
+	/**
+	 * Returns the value for the member attribute <b>options</b>
+	 *
+	 * @return String - value of member attribute <b>options</b> .
+	 */
+	public String getOptions() {
+		return this.options;
+	}
+
+	/**
 	 * This method sets the value to the member attribute <b> rbKeyLabel</b> .
 	 * You cannot set null to the attribute.
 	 * 
@@ -373,6 +401,13 @@ public class XXServiceDef extends XXDBBase implements java.io.Serializable {
 		} else if (!name.equals(other.name)) {
 			return false;
 		}
+		if (options == null) {
+			if (other.options != null) {
+				return false;
+			}
+		} else if (!options.equals(other.options)) {
+			return false;
+		}
 		if (rbKeyDescription == null) {
 			if (other.rbKeyDescription != null) {
 				return false;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
index f1a1034..591b245 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
@@ -77,6 +77,8 @@ public class RangerServiceDefService extends RangerServiceDefServiceBase<XXServi
 	protected RangerServiceDef populateViewBean(XXServiceDef xServiceDef) {
 		RangerServiceDef serviceDef = super.populateViewBean(xServiceDef);
 		Long serviceDefId = xServiceDef.getId();
+
+		serviceDef.setOptions(jsonStringToMap(xServiceDef.getOptions()));
 		
 		List<XXServiceConfigDef> xConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
 		if (!stringUtil.isEmpty(xConfigs)) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/d8f7a960/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
index f6a24aa..8df8c44 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
@@ -75,6 +75,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte
 		xObj.setImplclassname(vObj.getImplClass());
 		xObj.setLabel(vObj.getLabel());
 		xObj.setDescription(vObj.getDescription());
+		xObj.setOptions(mapToJsonString(vObj.getOptions()));
 		xObj.setRbkeylabel(vObj.getRbKeyLabel());
 		xObj.setRbkeydescription(vObj.getRbKeyDescription());
 		xObj.setIsEnabled(vObj.getIsEnabled());
@@ -90,6 +91,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte
 		vObj.setImplClass(xObj.getImplclassname());
 		vObj.setLabel(xObj.getLabel());
 		vObj.setDescription(xObj.getDescription());
+		vObj.setOptions(jsonStringToMap(xObj.getOptions()));
 		vObj.setRbKeyLabel(xObj.getRbkeylabel());
 		vObj.setRbKeyDescription(xObj.getRbkeydescription());
 		vObj.setIsEnabled(xObj.getIsEnabled());
@@ -372,7 +374,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte
 		return retList;
 	}
 
-	private String mapToJsonString(Map<String, String> map) {
+	protected String mapToJsonString(Map<String, String> map) {
 		String ret = null;
 
 		if(map != null) {
@@ -386,7 +388,7 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte
 		return ret;
 	}
 
-	private Map<String, String> jsonStringToMap(String jsonStr) {
+	protected Map<String, String> jsonStringToMap(String jsonStr) {
 		Map<String, String> ret = null;
 
 		if(!StringUtils.isEmpty(jsonStr)) {