You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by sp...@apache.org on 2021/08/23 20:53:34 UTC

[ranger] branch ranger-2.2 updated: Introduce new column syncSource for Ranger UI

This is an automated email from the ASF dual-hosted git repository.

spolavarapu pushed a commit to branch ranger-2.2
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.2 by this push:
     new 1ea8274  Introduce new column syncSource for Ranger UI
1ea8274 is described below

commit 1ea8274b80482d9d21037fd87f2af7f7a708f998
Author: abhishek.kumar <ab...@cloudera.com>
AuthorDate: Thu Aug 5 14:57:57 2021 -0700

    Introduce new column syncSource for Ranger UI
    
    Signed-off-by: Sailaja Polavarapu <sp...@cloudera.com>
---
 .../optimized/current/ranger_core_db_mysql.sql     |  4 +++
 ...cSource-col-in-x_user-x_portal_user-x_group.sql | 38 ++++++++++++++++++++
 .../optimized/current/ranger_core_db_oracle.sql    |  4 +++
 ...cSource-col-in-x_user-x_portal_user-x_group.sql | 36 +++++++++++++++++++
 .../optimized/current/ranger_core_db_postgres.sql  |  4 +++
 ...cSource-col-in-x_user-x_portal_user-x_group.sql | 42 ++++++++++++++++++++++
 .../current/ranger_core_db_sqlanywhere.sql         |  5 +++
 ...cSource-col-in-x_user-x_portal_user-x_group.sql | 28 +++++++++++++++
 .../optimized/current/ranger_core_db_sqlserver.sql |  4 +++
 ...cSource-col-in-x_user-x_portal_user-x_group.sql | 33 +++++++++++++++++
 .../main/java/org/apache/ranger/biz/UserMgr.java   |  3 +-
 .../main/java/org/apache/ranger/biz/XUserMgr.java  |  1 +
 .../java/org/apache/ranger/entity/XXGroup.java     | 24 +++++++++++++
 .../org/apache/ranger/entity/XXPortalUser.java     | 25 +++++++++++++
 .../main/java/org/apache/ranger/entity/XXUser.java | 25 +++++++++++++
 .../java/org/apache/ranger/rest/XUserREST.java     |  7 ++--
 .../org/apache/ranger/service/XGroupService.java   |  4 ++-
 .../apache/ranger/service/XGroupServiceBase.java   |  8 ++---
 .../ranger/service/XPortalUserServiceBase.java     |  2 ++
 .../org/apache/ranger/service/XUserService.java    |  3 ++
 .../apache/ranger/service/XUserServiceBase.java    |  9 ++---
 .../main/java/org/apache/ranger/view/VXGroup.java  | 19 ++++++++++
 .../java/org/apache/ranger/view/VXPortalUser.java  | 22 ++++++++++++
 .../main/java/org/apache/ranger/view/VXUser.java   | 17 +++++++++
 .../apache/ranger/ugsyncutil/model/XGroupInfo.java |  5 +++
 .../apache/ranger/ugsyncutil/model/XUserInfo.java  | 10 ++++++
 .../process/PolicyMgrUserGroupBuilder.java         |  5 ++-
 27 files changed, 373 insertions(+), 14 deletions(-)

diff --git a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
index 1ba3e69..d5d8129 100644
--- a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
+++ b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
@@ -117,6 +117,7 @@ CREATE TABLE `x_portal_user` (
   `user_src` int(11) NOT NULL DEFAULT '0',
   `notes` varchar(4000) DEFAULT NULL,
   `other_attributes` varchar(4000) DEFAULT NULL,
+  `sync_source` varchar(4000) DEFAULT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `x_portal_user_UK_login_id` (`login_id`),
   UNIQUE KEY `x_portal_user_UK_email` (`email`),
@@ -276,6 +277,7 @@ CREATE TABLE `x_group` (
   `group_src` INT NOT NULL DEFAULT 0,
   `is_visible` INT(11) NOT NULL DEFAULT '1',
   `other_attributes` varchar(4000) DEFAULT NULL,
+  `sync_source` varchar(4000) DEFAULT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `x_group_UK_group_name` (`group_name`),
   KEY `x_group_FK_added_by_id` (`added_by_id`),
@@ -322,6 +324,7 @@ CREATE TABLE `x_user` (
   `cred_store_id` bigint(20) DEFAULT NULL,
   `is_visible` INT(11) NOT NULL DEFAULT '1',
   `other_attributes` varchar(4000) DEFAULT NULL,
+  `sync_source` varchar(4000) DEFAULT NULL,
   PRIMARY KEY (`id`),
   KEY `x_user_FK_added_by_id` (`added_by_id`),
   KEY `x_user_FK_upd_by_id` (`upd_by_id`),
@@ -1734,6 +1737,7 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('051',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('052',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('054',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
+INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('055',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('DB_PATCHES',UTC_TIMESTAMP(),'Ranger 1.0.0',UTC_TIMESTAMP(),'localhost','Y');
 
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed)
diff --git a/security-admin/db/mysql/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql b/security-admin/db/mysql/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
new file mode 100644
index 0000000..4ca8a82
--- /dev/null
+++ b/security-admin/db/mysql/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
@@ -0,0 +1,38 @@
+-- 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.
+
+drop procedure if exists add_column_in_x_user_and_x_portal_user_and_x_group;
+
+delimiter ;;
+create procedure add_column_in-x_user-x_portal_user-x_group() begin
+
+if not exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_user' and column_name='sync_source') then
+        ALTER TABLE x_user ADD sync_source varchar(4000) DEFAULT NULL;
+end if;
+
+if not exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_portal_user' and column_name='sync_source') then
+        ALTER TABLE x_portal_user ADD sync_source varchar(4000) DEFAULT NULL;
+end if;
+
+if not exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_group' and column_name='sync_source') then
+        ALTER TABLE x_group ADD sync_source varchar(4000) DEFAULT NULL;
+end if;
+
+end;;
+
+delimiter ;
+call add_column_in_x_user_and_x_portal_user_and_x_group();
+
+drop procedure if exists add_column_in_x_user_and_x_portal_user_and_x_group;
\ No newline at end of file
diff --git a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
index 021c34c..2210a2a 100644
--- a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
+++ b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
@@ -309,6 +309,7 @@ CREATE TABLE x_portal_user (
         user_src NUMBER(11) DEFAULT '0' NOT NULL ,
         notes VARCHAR(4000) DEFAULT NULL NULL ,
         other_attributes VARCHAR(4000) DEFAULT NULL NULL,
+        sync_source VARCHAR(4000) DEFAULT NULL NULL,
         PRIMARY KEY (id),
         CONSTRAINT x_portal_user_UK_login_id UNIQUE (login_id) ,
         CONSTRAINT x_portal_user_UK_email UNIQUE (email),
@@ -435,6 +436,7 @@ CREATE TABLE X_GROUP(
         group_src NUMBER(10) DEFAULT 0 NOT NULL,
         is_visible NUMBER(11) DEFAULT 1 NOT NULL,
         other_attributes VARCHAR(4000) DEFAULT NULL NULL,
+        sync_source VARCHAR(4000) DEFAULT NULL NULL,
         PRIMARY KEY (ID),
         CONSTRAINT x_group_UK_group_name UNIQUE (group_name),
         CONSTRAINT X_GROUP_FK_ADDED_BY_ID FOREIGN KEY (ADDED_BY_ID) REFERENCES X_PORTAL_USER (ID) ENABLE,
@@ -470,6 +472,7 @@ CREATE TABLE x_user (
         cred_store_id NUMBER(20) DEFAULT NULL NULL ,
         is_visible NUMBER(11) DEFAULT 1 NOT NULL ,
         other_attributes VARCHAR(4000) DEFAULT NULL NULL ,
+        sync_source VARCHAR(4000) DEFAULT NULL NULL,
         PRIMARY KEY (id),
         CONSTRAINT x_user_UK_user_name UNIQUE (user_name),
         CONSTRAINT x_user_FK_added_by_id FOREIGN KEY (added_by_id) REFERENCES x_portal_user (id),
@@ -1959,6 +1962,7 @@ INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,act
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, '051',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, '052',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, '054',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
+INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, '055',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval, 'DB_PATCHES',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 
 INSERT INTO x_user_module_perm (id,user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (X_USER_MODULE_PERM_SEQ.nextval,getXportalUIdByLoginId('admin'),getModulesIdByName('Reports'),sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),getXportalUIdByLoginId('admin'),getXportalUIdByLoginId('admin'),1);
diff --git a/security-admin/db/oracle/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql b/security-admin/db/oracle/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
new file mode 100644
index 0000000..a1d4b36
--- /dev/null
+++ b/security-admin/db/oracle/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
@@ -0,0 +1,36 @@
+-- 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.
+
+DECLARE
+        v_count number:=0;
+BEGIN
+        select count(*) into v_count from user_tab_cols where table_name='x_portal_user' and column_name='sync_source';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE x_portal_user ADD sync_source VARCHAR(4000) DEFAULT NULL NULL';
+        end if;
+
+        v_count number:=0;
+        select count(*) into v_count from user_tab_cols where table_name='x_user' and column_name='sync_source';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE x_user ADD sync_source VARCHAR(4000) DEFAULT NULL NULL';
+        end if;
+
+        v_count number:=0;
+        select count(*) into v_count from user_tab_cols where table_name='X_GROUP' and column_name='sync_source';
+        if (v_count = 0) then
+                execute immediate 'ALTER TABLE X_GROUP ADD sync_source VARCHAR(4000) DEFAULT NULL NULL';
+        end if;
+        commit;
+END;/
\ No newline at end of file
diff --git a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
index 89e9e77..25fe2bf 100644
--- a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
+++ b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
@@ -192,6 +192,7 @@ status INT DEFAULT '0' NOT NULL,
 user_src INT DEFAULT '0' NOT NULL,
 notes VARCHAR(4000) DEFAULT NULL NULL,
 other_attributes VARCHAR(4000) DEFAULT NULL NULL,
+sync_source VARCHAR(4000) DEFAULT NULL NULL,
 PRIMARY KEY(id),
 CONSTRAINT x_portal_user_UK_login_id UNIQUE(login_id),
 CONSTRAINT x_portal_user_UK_email UNIQUE(email),
@@ -325,6 +326,7 @@ CRED_STORE_ID BIGINT DEFAULT NULL,
 GROUP_SRC INT DEFAULT 0 NOT NULL,
 IS_VISIBLE INT DEFAULT '1' NOT NULL,
 other_attributes VARCHAR(4000) DEFAULT NULL NULL,
+sync_source VARCHAR(4000) DEFAULT NULL NULL,
 PRIMARY KEY(ID),
 CONSTRAINT x_group_UK_group_name UNIQUE(group_name),
 CONSTRAINT X_GROUP_FK_ADDED_BY_ID FOREIGN KEY(ADDED_BY_ID) REFERENCES X_PORTAL_USER(ID),
@@ -362,6 +364,7 @@ status INT DEFAULT '0' NOT NULL,
 cred_store_id BIGINT DEFAULT NULL NULL,
 is_visible INT DEFAULT '1' NOT NULL,
 other_attributes VARCHAR(4000) DEFAULT NULL NULL,
+sync_source VARCHAR(4000) DEFAULT NULL NULL,
 PRIMARY KEY(id),
 CONSTRAINT x_user_UK_user_name UNIQUE(user_name),
 CONSTRAINT x_user_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES x_portal_user(id),
@@ -1882,6 +1885,7 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('051',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('052',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('054',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
+INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('055',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('DB_PATCHES',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
 
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES
diff --git a/security-admin/db/postgres/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql b/security-admin/db/postgres/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
new file mode 100644
index 0000000..68117a1
--- /dev/null
+++ b/security-admin/db/postgres/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
@@ -0,0 +1,42 @@
+-- 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.
+
+select 'delimiter start';
+CREATE OR REPLACE FUNCTION add_column_in_x_user_and_x_portal_user_and_x_group()
+RETURNS void AS $$
+DECLARE
+ v_column_exists integer := 0;
+BEGIN
+ select count(*) into v_column_exists from pg_attribute where attrelid in(select oid from pg_class where relname='x_portal_user') and attname='sync_source';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_portal_user ADD COLUMN sync_source VARCHAR(4000) DEFAULT NULL NULL;
+ END IF;
+
+ select count(*) into v_column_exists from pg_attribute where attrelid in(select oid from pg_class where relname='x_user') and attname='sync_source';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_user ADD COLUMN sync_source VARCHAR(4000) DEFAULT NULL NULL;
+ END IF;
+
+ select count(*) into v_column_exists from pg_attribute where attrelid in(select oid from pg_class where relname='x_group') and attname='sync_source';
+ IF v_column_exists = 0 THEN
+  ALTER TABLE x_group ADD COLUMN sync_source VARCHAR(4000) DEFAULT NULL NULL;
+ END IF;
+
+END;
+$$ LANGUAGE plpgsql;
+select 'delimiter end';
+
+select add_column_in_x_user_and_x_portal_user_and_x_group();
+select 'delimiter end';
\ No newline at end of file
diff --git a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
index b90a48e..cbc5d73 100644
--- a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
+++ b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
@@ -217,6 +217,7 @@ create table dbo.x_portal_user(
 	user_src int DEFAULT 0 NOT NULL,
 	notes varchar(4000) DEFAULT NULL NULL,
 	other_attributes varchar(4000) DEFAULT NULL NULL,
+	sync_source varchar(4000) DEFAULT NULL NULL,
 	CONSTRAINT x_portal_user_PK_id PRIMARY KEY CLUSTERED(id),
 	CONSTRAINT x_portal_user_UK_login_id UNIQUE NONCLUSTERED (login_id)
 )
@@ -331,6 +332,7 @@ create table dbo.x_group(
 	group_src int DEFAULT 0 NOT NULL,
 	is_visible int DEFAULT 1 NOT NULL,
 	other_attributes varchar(4000) DEFAULT NULL NULL,
+	sync_source varchar(4000) DEFAULT NULL NULL,
 	CONSTRAINT x_group_PK_id PRIMARY KEY CLUSTERED(id),
 	CONSTRAINT x_group_UK_group_name UNIQUE NONCLUSTERED (group_name)
 )
@@ -359,6 +361,7 @@ create table dbo.x_user(
 	cred_store_id bigint DEFAULT NULL NULL,
 	is_visible int DEFAULT 1 NOT NULL,
 	other_attributes varchar(4000) DEFAULT NULL NULL,
+	sync_source varchar(4000) DEFAULT NULL NULL,
 	CONSTRAINT x_user_PK_id PRIMARY KEY CLUSTERED(id),
 	CONSTRAINT x_user_UK_user_name UNIQUE NONCLUSTERED (user_name)
 )
@@ -2247,6 +2250,8 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
 GO
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('054',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 GO
+INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('055',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
+GO
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('DB_PATCHES',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 GO
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Reports'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
diff --git a/security-admin/db/sqlanywhere/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql b/security-admin/db/sqlanywhere/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
new file mode 100644
index 0000000..3354590
--- /dev/null
+++ b/security-admin/db/sqlanywhere/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
@@ -0,0 +1,28 @@
+-- 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.
+
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_portal_user' and cname = 'sync_source') THEN
+		ALTER TABLE dbo.x_portal_user ADD sync_source varchar(4000) DEFAULT NULL NULL;
+END IF;
+GO
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_user' and cname = 'sync_source') THEN
+		ALTER TABLE dbo.x_user ADD sync_source varchar(4000) DEFAULT NULL NULL;
+END IF;
+GO
+IF NOT EXISTS(select * from SYS.SYSCOLUMNS where tname = 'x_group' and cname = 'sync_source') THEN
+		ALTER TABLE dbo.x_group ADD sync_source varchar(4000) DEFAULT NULL NULL;
+END IF;
+GO
+exit
\ No newline at end of file
diff --git a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
index 7e03289..a87692e 100644
--- a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
+++ b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
@@ -966,6 +966,7 @@ CREATE TABLE [dbo].[x_portal_user](
         [user_src] [int] DEFAULT 0 NOT NULL,
         [notes] [varchar](4000) DEFAULT NULL NULL,
         [other_attributes] [varchar](4000) DEFAULT NULL NULL,
+        [sync_source] [varchar](4000) DEFAULT NULL NULL,
 PRIMARY KEY CLUSTERED
 (
         [id] ASC
@@ -1118,6 +1119,7 @@ CREATE TABLE [dbo].[x_group](
         [group_src] [int] DEFAULT 0 NOT NULL,
         [is_visible] [int] DEFAULT 1 NOT NULL,
         [other_attributes] [varchar](4000) DEFAULT NULL NULL,
+        [sync_source] [varchar](4000) DEFAULT NULL NULL,
 PRIMARY KEY CLUSTERED
 (
         [id] ASC
@@ -1161,6 +1163,7 @@ CREATE TABLE [dbo].[x_user](
         [cred_store_id] [bigint] DEFAULT NULL NULL,
         [is_visible] [int] DEFAULT 1 NOT NULL,
         [other_attributes] [varchar](4000) DEFAULT NULL NULL,
+        [sync_source] [varchar](4000) DEFAULT NULL NULL,
 PRIMARY KEY CLUSTERED
 (
         [id] ASC
@@ -4095,6 +4098,7 @@ INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('052',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('053',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('054',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
+INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('055',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('DB_PATCHES',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Reports'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (dbo.getXportalUIdByLoginId('admin'),dbo.getModulesIdByName('Resource Based Policies'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,dbo.getXportalUIdByLoginId('admin'),dbo.getXportalUIdByLoginId('admin'),1);
diff --git a/security-admin/db/sqlserver/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql b/security-admin/db/sqlserver/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
new file mode 100644
index 0000000..3b8a8d8
--- /dev/null
+++ b/security-admin/db/sqlserver/patches/055-add-syncSource-col-in-x_user-x_portal_user-x_group.sql
@@ -0,0 +1,33 @@
+-- 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.
+
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 'x_portal_user' and column_name = 'sync_source')
+BEGIN
+	ALTER TABLE [dbo].[x_portal_user] ADD [sync_source] [varchar](4000) DEFAULT NULL NULL;
+END
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 'x_user' and column_name = 'sync_source')
+BEGIN
+	ALTER TABLE [dbo].[x_user] ADD [sync_source] [varchar](4000) DEFAULT NULL NULL;
+END
+GO
+IF NOT EXISTS(select * from INFORMATION_SCHEMA.columns where table_name = 'x_group' and column_name = 'sync_source')
+BEGIN
+	ALTER TABLE [dbo].[x_group] ADD [sync_source] [varchar](4000) DEFAULT NULL NULL;
+END
+GO
+exit
+
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
index e72a7a7..7046c9b 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
@@ -596,6 +596,7 @@ public class UserMgr {
 		gjUser.setUserSource(userProfile.getUserSource());
 		gjUser.setPublicScreenName(userProfile.getPublicScreenName());
 		gjUser.setOtherAttributes(userProfile.getOtherAttributes());
+		gjUser.setSyncSource(userProfile.getSyncSource());
 		if (userProfile.getFirstName() != null
 				&& userProfile.getLastName() != null
 				&& !userProfile.getFirstName().trim().isEmpty()
@@ -1289,7 +1290,7 @@ public class UserMgr {
 		userProfile.setLastName(user.getLastName());
 		userProfile.setPublicScreenName(user.getPublicScreenName());
 		userProfile.setOtherAttributes(user.getOtherAttributes());
-
+		userProfile.setSyncSource(user.getSyncSource());
 		List<XXPortalUserRole> gjUserRoleList = daoManager
 				.getXXPortalUserRole().findByParentId(user.getId());
 
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index 6596bac..7b29f3d 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -3070,6 +3070,7 @@ public class XUserMgr extends XUserMgrBase {
 			vXPortalUser.setPublicScreenName(vXUser.getName());
 		}
 		vXPortalUser.setUserSource(vXUser.getUserSource());
+		vXPortalUser.setSyncSource(vXUser.getSyncSource());
 
 		String hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
 		String password = vXUser.getPassword();
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXGroup.java b/security-admin/src/main/java/org/apache/ranger/entity/XXGroup.java
index 996a9e1..708375f 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXGroup.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXGroup.java
@@ -129,6 +129,15 @@ public class XXGroup extends XXDBBase implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * Sync Source Attribute.
+	 * <ul>
+	 * </ul>
+	 *
+	 */
+	@Column(name="SYNC_SOURCE")
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public XXGroup ( ) {
@@ -265,6 +274,20 @@ public class XXGroup extends XXDBBase implements java.io.Serializable {
 	}
 
 	/**
+	 * This method sets JSON {@link String} representation of sync source attribute.
+	 * This method accepts null values.
+	 * @param syncSource
+	 */
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	/**
+	 * @return JSON {@link String} representation of sync source attribute if available,
+	 * <code>null</code> otherwise.
+	 */
+	public String getSyncSource() { return syncSource; }
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -280,6 +303,7 @@ public class XXGroup extends XXDBBase implements java.io.Serializable {
 		str += "credStoreId={" + credStoreId + "} ";
 		str += "groupSrc={" + groupSource + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXPortalUser.java b/security-admin/src/main/java/org/apache/ranger/entity/XXPortalUser.java
index ed69f38..d0451b4 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXPortalUser.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXPortalUser.java
@@ -157,6 +157,15 @@ public class XXPortalUser extends XXDBBase implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * Sync Source Attribute.
+	 * <ul>
+	 * </ul>
+	 *
+	 */
+	@Column(name="SYNC_SOURCE")
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public XXPortalUser ( ) {
@@ -340,6 +349,21 @@ public class XXPortalUser extends XXDBBase implements java.io.Serializable {
 	}
 
 	/**
+	 * This method sets JSON {@link String} representation of sync source attribute.
+	 * This method accepts null values.
+	 * @param syncSource
+	 */
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	/**
+	 * @return JSON {@link String} representation of sync source attribute if available,
+	 * <code>null</code> otherwise.
+	 */
+	public String getSyncSource() { return syncSource; }
+
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -356,6 +380,7 @@ public class XXPortalUser extends XXDBBase implements java.io.Serializable {
 		str += "userSource={" + userSource + "} ";
 		str += "notes={" + notes + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXUser.java b/security-admin/src/main/java/org/apache/ranger/entity/XXUser.java
index 0464e7b..99bea26 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXUser.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXUser.java
@@ -116,6 +116,15 @@ public class XXUser extends XXDBBase implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * Sync Source attribute.
+	 * <ul>
+	 * </ul>
+	 *
+	 */
+	@Column(name="SYNC_SOURCE")
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public XXUser ( ) {
@@ -237,6 +246,21 @@ public class XXUser extends XXDBBase implements java.io.Serializable {
 	}
 
 	/**
+	 * This method sets JSON {@link String} representation of sync source attribute.
+	 * This method accepts null values.
+	 * @param syncSource
+	 */
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	/**
+	 * @return JSON {@link String} representation of sync source attribute if available,
+	 * <code>null</code> otherwise.
+	 */
+	public String getSyncSource() { return syncSource; }
+
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -250,6 +274,7 @@ public class XXUser extends XXDBBase implements java.io.Serializable {
 		str += "isvisible={" + isVisible + "} ";
 		str += "credStoreId={" + credStoreId + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java b/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
index 4c648ae..1f44703 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
@@ -254,8 +254,8 @@ public class XUserREST {
 				request, xGroupService.sortFields);
 		searchUtil.extractString(request, searchCriteria, "name", "group name", null);
 		searchUtil.extractInt(request, searchCriteria, "isVisible", "Group Visibility");
-//		searchUtil.extractString(request, searchCriteria, "groupSource", "group source", null);
 		searchUtil.extractInt(request, searchCriteria, "groupSource", "group source");
+		searchUtil.extractString(request, searchCriteria, "syncSource", "Sync Source", null);
 		return xUserMgr.searchXGroups(searchCriteria);
 	}
 
@@ -384,9 +384,10 @@ public class XUserREST {
 		searchUtil.extractInt(request, searchCriteria, "userSource", "User Source");
 		searchUtil.extractInt(request, searchCriteria, "isVisible", "User Visibility");
 		searchUtil.extractInt(request, searchCriteria, "status", "User Status");
-		List<String> userRolesList = searchUtil.extractStringList(request, searchCriteria, "userRoleList", "User Role List", "userRoleList", null,
-				null);
+		List<String> userRolesList = searchUtil.extractStringList(request, searchCriteria, "userRoleList",
+				"User Role List", "userRoleList", null, null);
 		searchUtil.extractRoleString(request, searchCriteria, "userRole", "Role", null);
+		searchUtil.extractString(request, searchCriteria, "syncSource", "Sync Source", null);
 
 		if (CollectionUtils.isNotEmpty(userRolesList) && CollectionUtils.size(userRolesList) == 1 && userRolesList.get(0).equalsIgnoreCase(UserRoleParamName)) {
 			if (!(searchCriteria.getParamList().containsKey("name"))) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XGroupService.java b/security-admin/src/main/java/org/apache/ranger/service/XGroupService.java
index 44eebcf..c397968 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XGroupService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XGroupService.java
@@ -74,10 +74,12 @@ public class XGroupService extends XGroupServiceBase<XXGroup, VXGroup> {
 				SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,
 				"XXGroupUser groupUser", "obj.id = groupUser.parentGroupId"));
 
+		searchFields.add(new SearchField("syncSource", "obj.syncSource",
+				SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
 
 		createdByUserId = PropertiesUtil.getLongProperty("ranger.xuser.createdByUserId", 1);
 
-		 sortFields.add(new SortField("name", "obj.name",true,SortField.SORT_ORDER.ASC));
+		sortFields.add(new SortField("name", "obj.name",true,SortField.SORT_ORDER.ASC));
 	}
 
 	@Override
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
index cde91dc..447bdd3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
@@ -53,6 +53,7 @@ public abstract class XGroupServiceBase<T extends XXGroup, V extends VXGroup>
 		mObj.setCredStoreId( vObj.getCredStoreId());
 		mObj.setGroupSource(vObj.getGroupSource());
 		mObj.setOtherAttributes(vObj.getOtherAttributes());
+		mObj.setSyncSource(vObj.getSyncSource());
 		return mObj;
 	}
 
@@ -65,6 +66,7 @@ public abstract class XGroupServiceBase<T extends XXGroup, V extends VXGroup>
 		vObj.setCredStoreId( mObj.getCredStoreId());
 		vObj.setGroupSource(mObj.getGroupSource());
 		vObj.setOtherAttributes(mObj.getOtherAttributes());
+		vObj.setSyncSource(mObj.getSyncSource());
 		return vObj;
 	}
 
@@ -73,11 +75,9 @@ public abstract class XGroupServiceBase<T extends XXGroup, V extends VXGroup>
 	 * @return
 	 */
 	public VXGroupList searchXGroups(SearchCriteria searchCriteria) {
-		VXGroupList returnList = new VXGroupList();
+		VXGroupList returnList   = new VXGroupList();
 		List<VXGroup> xGroupList = new ArrayList<VXGroup>();
-
-		List<T> resultList = searchResources(searchCriteria,
-				searchFields, sortFields, returnList);
+		List<T> resultList       = searchResources(searchCriteria, searchFields, sortFields, returnList);
 
 		// Iterate over the result list and create the return list
 		for (T gjXGroup : resultList) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XPortalUserServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XPortalUserServiceBase.java
index 85e4b84..4d2e9d7 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XPortalUserServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XPortalUserServiceBase.java
@@ -51,6 +51,7 @@ public abstract class XPortalUserServiceBase<T extends XXPortalUser, V extends V
 		mObj.setUserSource( vObj.getUserSource());
 		mObj.setNotes( vObj.getNotes());
 		mObj.setOtherAttributes(vObj.getOtherAttributes());
+		mObj.setSyncSource(vObj.getSyncSource());
 		return mObj;
 	}
 
@@ -66,6 +67,7 @@ public abstract class XPortalUserServiceBase<T extends XXPortalUser, V extends V
 		vObj.setUserSource( mObj.getUserSource());
 		vObj.setNotes( mObj.getNotes());
 		vObj.setOtherAttributes(mObj.getOtherAttributes());
+		vObj.setSyncSource(mObj.getSyncSource());
 		return vObj;
 	}
 
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XUserService.java b/security-admin/src/main/java/org/apache/ranger/service/XUserService.java
index 0728eea..eff1718 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XUserService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XUserService.java
@@ -117,6 +117,9 @@ public class XUserService extends XUserServiceBase<XXUser, VXUser> {
 				"XXPortalUser xXPortalUser, XXPortalUserRole xXPortalUserRole",
 				"xXPortalUser.id=xXPortalUserRole.userId and xXPortalUser.loginId = obj.name "));
 
+		searchFields.add(new SearchField("syncSource", "obj.syncSource",
+				SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+
 		createdByUserId = PropertiesUtil.getLongProperty("ranger.xuser.createdByUserId", 1);
 
 		hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden","*****");
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
index 9cdc14e..25fec3d 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
@@ -52,6 +52,7 @@ public abstract class XUserServiceBase<T extends XXUser, V extends VXUser>
 		mObj.setDescription( vObj.getDescription());
 		mObj.setCredStoreId( vObj.getCredStoreId());
 		mObj.setOtherAttributes(vObj.getOtherAttributes());
+		mObj.setSyncSource(vObj.getSyncSource());
 		return mObj;
 	}
 
@@ -63,6 +64,7 @@ public abstract class XUserServiceBase<T extends XXUser, V extends VXUser>
 		vObj.setDescription( mObj.getDescription());
 		vObj.setCredStoreId( mObj.getCredStoreId());
 		vObj.setOtherAttributes(mObj.getOtherAttributes());
+		vObj.setSyncSource(mObj.getSyncSource());
 		return vObj;
 	}
 
@@ -71,12 +73,11 @@ public abstract class XUserServiceBase<T extends XXUser, V extends VXUser>
 	 * @return
 	 */
 	public VXUserList searchXUsers(SearchCriteria searchCriteria) {
-		VXUserList returnList = new VXUserList();
-		List<VXUser> xUserList = new ArrayList<VXUser>();
+		VXUserList returnList   = new VXUserList();
+		List<VXUser> xUserList  = new ArrayList<VXUser>();
 
 		@SuppressWarnings("unchecked")
-		List<XXUser> resultList = (List<XXUser>)searchResources(searchCriteria,
-				searchFields, sortFields, returnList);
+		List<XXUser> resultList = (List<XXUser>)searchResources(searchCriteria, searchFields, sortFields, returnList);
 
 		// Iterate over the result list and create the return list
 		for (XXUser gjXUser : resultList) {
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXGroup.java b/security-admin/src/main/java/org/apache/ranger/view/VXGroup.java
index ed64704..0106de2 100644
--- a/security-admin/src/main/java/org/apache/ranger/view/VXGroup.java
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXGroup.java
@@ -73,6 +73,11 @@ public class VXGroup extends VXDataObject implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * Sync Source Attribute
+	 * */
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public VXGroup ( ) {
@@ -194,6 +199,19 @@ public class VXGroup extends VXDataObject implements java.io.Serializable {
 	}
 
 	/**
+	 * This method sets sync source attribute.
+	 * @param syncSource
+	 */
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	/**
+	 * @return {@link String} sync source attribute
+	 */
+	public String getSyncSource() { return syncSource; }
+
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -207,6 +225,7 @@ public class VXGroup extends VXDataObject implements java.io.Serializable {
 		str += "isVisible={" + isVisible + "} ";
 		str += "groupSrc={" + groupSource + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXPortalUser.java b/security-admin/src/main/java/org/apache/ranger/view/VXPortalUser.java
index b6035b2..5a1b203 100644
--- a/security-admin/src/main/java/org/apache/ranger/view/VXPortalUser.java
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXPortalUser.java
@@ -92,6 +92,12 @@ public class VXPortalUser extends VXDataObject implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * sync Source Attribute.
+	 *
+	 */
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public VXPortalUser ( ) {
@@ -316,6 +322,21 @@ public class VXPortalUser extends VXDataObject implements java.io.Serializable {
 	}
 
 	/**
+	 * @return {@link String} - sync Source attribute.
+	 */
+	public String getSyncSource() {
+		return syncSource;
+	}
+
+	/**
+	 * This method sets sync Source attribute.
+	 * @param syncSource
+	 */
+	public void setSyncSource(final String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -332,6 +353,7 @@ public class VXPortalUser extends VXDataObject implements java.io.Serializable {
 		str += "notes={" + notes + "} ";
 		str += "userRoleList={" + userRoleList + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXUser.java b/security-admin/src/main/java/org/apache/ranger/view/VXUser.java
index 96f6468..59375c4 100644
--- a/security-admin/src/main/java/org/apache/ranger/view/VXUser.java
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXUser.java
@@ -92,6 +92,11 @@ public class VXUser extends VXDataObject implements java.io.Serializable {
 	protected String otherAttributes;
 
 	/**
+	 * Sync Source
+	 */
+	protected String syncSource;
+
+	/**
 	 * Default constructor. This will set all the attributes to default value.
 	 */
 	public VXUser ( ) {
@@ -306,6 +311,17 @@ public class VXUser extends VXDataObject implements java.io.Serializable {
 	}
 
 	/**
+	 * @return {@link String} - sync Source.
+	 */
+	public String getSyncSource() { return syncSource; }
+
+	/**
+	 * This method sets additional attributes.
+	 * @param syncSource
+	 */
+	public void setSyncSource(String syncSource) { this.syncSource = syncSource; }
+
+	/**
 	 * This return the bean content in string format
 	 * @return formatedStr
 	*/
@@ -323,6 +339,7 @@ public class VXUser extends VXDataObject implements java.io.Serializable {
 		str += "groupNameList={" + groupNameList + "} ";
         str += "roleList={" + userRoleList + "} ";
 		str += "otherAttributes={" + otherAttributes + "} ";
+		str += "syncSource={" + syncSource + "} ";
 		str += "}";
 		return str;
 	}
diff --git a/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XGroupInfo.java b/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XGroupInfo.java
index a80e5dc..e8f3e96 100644
--- a/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XGroupInfo.java
+++ b/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XGroupInfo.java
@@ -31,6 +31,7 @@ public class XGroupInfo {
 	private String isVisible;
 	private String groupSource;
 	private String otherAttributes;
+	private String syncSource;
 	private Map<String, String> otherAttrsMap = new HashMap<>();
 	public String getId() {
 		return id;
@@ -91,6 +92,10 @@ public class XGroupInfo {
 		this.otherAttributes = otherAttributes;
 	}
 
+	public String getSyncSource() { return syncSource; }
+
+	public void setSyncSource(String syncSource) { this.syncSource = syncSource; }
+
 	@Override
 	public boolean equals(Object o) {
 		if (this == o) return true;
diff --git a/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XUserInfo.java b/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XUserInfo.java
index bc1a665..2a2e01e 100644
--- a/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XUserInfo.java
+++ b/ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/model/XUserInfo.java
@@ -29,6 +29,7 @@ public class XUserInfo {
 	private String name;
 	private String 	description;
 	private String otherAttributes;
+	private String syncSource;
 	private Map<String, String> otherAttrsMap = new HashMap<>();
 	private String userSource;
 	private String status;
@@ -39,18 +40,23 @@ public class XUserInfo {
 	public String getId() {
 		return id;
 	}
+
 	public void setId(String id) {
 		this.id = id;
 	}
+
 	public String getName() {
 		return name;
 	}
+
 	public void setName(String name) {
 		this.name = name;
 	}
+
 	public String getDescription() {
 		return description;
 	}
+
 	public void setDescription(String description) {
 		this.description = description;
 	}
@@ -123,6 +129,10 @@ public class XUserInfo {
 		this.otherAttributes = otherAttributes;
 	}
 
+	public String getSyncSource() { return syncSource; }
+
+	public void setSyncSource(String syncSource) { this.syncSource = syncSource; }
+
 	@Override
     public String toString() {
         return "XUserInfo [id=" + id + ", name=" + name + ", description="
diff --git a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/PolicyMgrUserGroupBuilder.java b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/PolicyMgrUserGroupBuilder.java
index 65e26fe..ff513aa 100644
--- a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/PolicyMgrUserGroupBuilder.java
+++ b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/PolicyMgrUserGroupBuilder.java
@@ -630,6 +630,7 @@ public class PolicyMgrUserGroupBuilder extends AbstractUserGroupSource implement
 								|| StringUtils.equalsIgnoreCase(oldGroupAttrs.get(UgsyncCommonConstants.SYNC_SOURCE),
 								newGroupAttrs.get(UgsyncCommonConstants.SYNC_SOURCE))))) {
 							oldGroup.setOtherAttributes(newGroupAttrsStr);
+							oldGroup.setSyncSource(newGroupAttrs.get(UgsyncCommonConstants.SYNC_SOURCE));
 							oldGroup.setOtherAttrsMap(newGroupAttrs);
 							deltaGroups.put(groupName, oldGroup);
 							noOfModifiedGroups++;
@@ -686,6 +687,7 @@ public class PolicyMgrUserGroupBuilder extends AbstractUserGroupSource implement
 								|| StringUtils.equalsIgnoreCase(oldUserAttrs.get(UgsyncCommonConstants.SYNC_SOURCE),
 								newUserAttrs.get(UgsyncCommonConstants.SYNC_SOURCE))))) {
 							oldUser.setOtherAttributes(newUserAttrsStr);
+							oldUser.setSyncSource(newUserAttrs.get(UgsyncCommonConstants.SYNC_SOURCE));
 							oldUser.setOtherAttrsMap(newUserAttrs);
 							oldUser.setUserSource(SOURCE_EXTERNAL);
 							deltaUsers.put(userName, oldUser);
@@ -797,8 +799,8 @@ public class PolicyMgrUserGroupBuilder extends AbstractUserGroupSource implement
 		}
 		xuserInfo.setUserRoleList(roleList);
 		xuserInfo.setOtherAttributes(otherAttributes);
+		xuserInfo.setSyncSource(otherAttrsMap.get(UgsyncCommonConstants.SYNC_SOURCE));
 		xuserInfo.setOtherAttrsMap(otherAttrsMap);
-
 		return xuserInfo;
 	}
 
@@ -815,6 +817,7 @@ public class PolicyMgrUserGroupBuilder extends AbstractUserGroupSource implement
 		addGroup.setIsVisible(ISVISIBLE);
 		addGroup.setGroupSource(SOURCE_EXTERNAL);
 		addGroup.setOtherAttributes(otherAttributes);
+		addGroup.setSyncSource(otherAttrsMap.get(UgsyncCommonConstants.SYNC_SOURCE));
 		addGroup.setOtherAttrsMap(otherAttrsMap);
 
 		return addGroup;