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 2018/03/06 00:06:02 UTC

[2/2] ranger git commit: RANGER-1985: Auditing for Ranger usersync operations

RANGER-1985: Auditing for Ranger usersync operations


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

Branch: refs/heads/master
Commit: 52f5249bbdc7f1bd8c8b3aa91d2040a9f63c47ee
Parents: 19d6ef4
Author: Sailaja Polavarapu <sp...@hortonworks.com>
Authored: Mon Mar 5 16:05:34 2018 -0800
Committer: Sailaja Polavarapu <sp...@hortonworks.com>
Committed: Mon Mar 5 16:05:34 2018 -0800

----------------------------------------------------------------------
 .../optimized/current/ranger_core_db_mysql.sql  |  20 ++
 ...31-create-schema-for-usersync-audit-info.sql |  37 ++++
 .../optimized/current/ranger_core_db_oracle.sql |  22 ++
 ...31-create-schema-for-usersync-audit-info.sql |  36 ++++
 .../current/ranger_core_db_postgres.sql         |  23 ++
 ...31-create-schema-for-usersync-audit-info.sql |  38 ++++
 .../current/ranger_core_db_sqlanywhere.sql      |  25 +++
 ...31-create-schema-for-usersync-audit-info.sql |  38 ++++
 .../current/ranger_core_db_sqlserver.sql        |  38 ++++
 ...31-create-schema-for-usersync-audit-info.sql |  65 ++++++
 .../java/org/apache/ranger/biz/AssetMgr.java    |  65 ++++--
 .../java/org/apache/ranger/biz/XUserMgr.java    |  49 ++---
 .../org/apache/ranger/common/AppConstants.java  |   6 +-
 .../apache/ranger/db/RangerDaoManagerBase.java  |  10 +
 .../apache/ranger/db/XXUgsyncAuditInfoDao.java  |  72 +++++++
 .../apache/ranger/entity/XXUgsyncAuditInfo.java | 210 +++++++++++++++++++
 .../java/org/apache/ranger/rest/AssetREST.java  |  54 +++--
 .../java/org/apache/ranger/rest/XUserREST.java  |  37 +---
 .../ranger/security/context/RangerAPIList.java  |   4 +-
 .../ranger/service/XUgsyncAuditInfoService.java | 182 ++++++++++++++++
 .../service/XUgsyncAuditInfoServiceBase.java    |  57 +++++
 .../ranger/view/VXFileSyncSourceInfo.java       |  87 ++++++++
 .../ranger/view/VXLdapSyncSourceInfo.java       | 108 ++++++++++
 .../apache/ranger/view/VXUgsyncAuditInfo.java   | 141 +++++++++++++
 .../ranger/view/VXUgsyncAuditInfoList.java      |  83 ++++++++
 .../ranger/view/VXUnixSyncSourceInfo.java       | 117 +++++++++++
 .../resources/META-INF/jpa_named_queries.xml    |  13 ++
 .../src/main/resources/META-INF/persistence.xml |   1 +
 .../process/LdapDeltaUserGroupBuilder.java      |  42 +++-
 .../process/LdapPolicyMgrUserGroupBuilder.java  |  75 ++++++-
 .../process/LdapUserGroupBuilder.java           |  34 ++-
 .../unixusersync/model/FileSyncSourceInfo.java  |  65 ++++++
 .../unixusersync/model/LdapSyncSourceInfo.java  |  85 ++++++++
 .../unixusersync/model/UgsyncAuditInfo.java     | 114 ++++++++++
 .../unixusersync/model/UnixSyncSourceInfo.java  |  95 +++++++++
 .../process/FileSourceUserGroupBuilder.java     |  19 +-
 .../process/PolicyMgrUserGroupBuilder.java      | 100 +++++++--
 .../process/UnixUserGroupBuilder.java           |  21 ++
 .../ranger/usergroupsync/UserGroupSink.java     |   4 +
 39 files changed, 2173 insertions(+), 119 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
----------------------------------------------------------------------
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 9e8fcad..7892a6a 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
@@ -80,6 +80,25 @@ CREATE TABLE `x_db_version_h`  (
         `active`          	ENUM('Y', 'N') DEFAULT 'Y'
 )ROW_FORMAT=DYNAMIC;
 
+CREATE TABLE IF NOT EXISTS `x_ugsync_audit_info`(
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`create_time` datetime NULL DEFAULT NULL,
+`update_time` datetime NULL DEFAULT NULL,
+`added_by_id` bigint(20) NULL DEFAULT NULL,
+`upd_by_id` bigint(20) NULL DEFAULT NULL,
+`event_time` datetime NULL DEFAULT NULL,
+`user_name` varchar(255) NOT  NULL,
+`sync_source` varchar(128) NOT NULL,
+`no_of_users` bigint(20) NOT NULL,
+`no_of_groups` bigint(20) NOT NULL,
+`sync_source_info` varchar(4000) NOT NULL,
+`session_id` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `x_ugsync_audit_info_etime`(`event_time`),
+ KEY `x_ugsync_audit_info_sync_src`(`sync_source`),
+ KEY `x_ugsync_audit_info_uname`(`user_name`)
+)ROW_FORMAT=DYNAMIC;
+
 CREATE TABLE `x_portal_user` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `create_time` datetime DEFAULT NULL,
@@ -1320,6 +1339,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 ('028',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 ('029',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 ('030',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 ('031',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) VALUES (1,3,UTC_TIMESTAMP(),UTC_TIMESTAMP(),1,1,1);
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (1,1,UTC_TIMESTAMP(),UTC_TIMESTAMP(),1,1,1);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/mysql/patches/031-create-schema-for-usersync-audit-info.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/mysql/patches/031-create-schema-for-usersync-audit-info.sql b/security-admin/db/mysql/patches/031-create-schema-for-usersync-audit-info.sql
new file mode 100644
index 0000000..2405a3e
--- /dev/null
+++ b/security-admin/db/mysql/patches/031-create-schema-for-usersync-audit-info.sql
@@ -0,0 +1,37 @@
+-- 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 TABLE IF EXISTS `x_ugsync_audit_info`;
+
+
+CREATE TABLE IF NOT EXISTS `x_ugsync_audit_info`(
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`create_time` datetime NULL DEFAULT NULL,
+`update_time` datetime NULL DEFAULT NULL,
+`added_by_id` bigint(20) NULL DEFAULT NULL,
+`upd_by_id` bigint(20) NULL DEFAULT NULL,
+`event_time` datetime NULL DEFAULT NULL,
+`user_name` varchar(255) NOT  NULL,
+`sync_source` varchar(128) NOT NULL,
+`no_of_users` bigint(20) NOT NULL,
+`no_of_groups` bigint(20) NOT NULL,
+`sync_source_info` varchar(4000) NOT NULL,
+`session_id` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `x_ugsync_audit_info_etime`(`event_time`),
+ KEY `x_ugsync_audit_info_sync_src`(`sync_source`),
+ KEY `x_ugsync_audit_info_uname`(`user_name`)
+)DEFAULT CHARSET=latin1;
+

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
----------------------------------------------------------------------
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 55d44a1..1f03978 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
@@ -71,6 +71,7 @@ CREATE SEQUENCE X_SERVICE_VERSION_INFO_SEQ START WITH 1 INCREMENT BY 1 NOCACHE N
 CREATE SEQUENCE X_PLUGIN_INFO_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE X_POLICY_LABEL_MAP_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE X_POLICY_LABEL_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
+CREATE SEQUENCE X_UGSYNC_AUDIT_INFO_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 --CREATE SEQUENCE X_DB_VERSION_H_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 commit;
 
@@ -1094,6 +1095,23 @@ CONSTRAINT x_plmap_FK_policy_label_id FOREIGN KEY (policy_label_id) REFERENCES x
 );
 commit;
 
+CREATE TABLE x_ugsync_audit_info(
+id NUMBER(20) NOT NULL,
+create_time DATE DEFAULT NULL NULL,
+update_time DATE DEFAULT NULL NULL,
+added_by_id NUMBER(20) DEFAULT NULL NULL,
+upd_by_id NUMBER(20) DEFAULT NULL NULL,
+event_time DATE DEFAULT NULL NULL,
+user_name VARCHAR(255) NOT  NULL,
+sync_source VARCHAR(128) NOT NULL,
+no_of_users NUMBER(20) NOT NULL,
+no_of_groups NUMBER(20) NOT NULL,
+sync_source_info VARCHAR(4000) NOT NULL,
+session_id VARCHAR(255) DEFAULT NULL,
+ PRIMARY KEY (id)
+);
+commit;
+
 CREATE VIEW vx_trx_log AS select x_trx_log.id AS id,x_trx_log.create_time AS create_time,x_trx_log.update_time AS update_time,x_trx_log.added_by_id AS added_by_id,x_trx_log.upd_by_id AS upd_by_id,x_trx_log.class_type AS class_type,x_trx_log.object_id AS object_id,x_trx_log.parent_object_id AS parent_object_id,x_trx_log.parent_object_class_type AS parent_object_class_type,x_trx_log.attr_name AS attr_name,x_trx_log.parent_object_name AS parent_object_name,x_trx_log.object_name AS object_name,x_trx_log.prev_val AS prev_val,x_trx_log.new_val AS new_val,x_trx_log.trx_id AS trx_id,x_trx_log.action AS action,x_trx_log.sess_id AS sess_id,x_trx_log.req_id AS req_id,x_trx_log.sess_type AS sess_type from x_trx_log  where id in(select min(x_trx_log.id) from x_trx_log group by x_trx_log.trx_id);
 commit;
 
@@ -1250,6 +1268,9 @@ CREATE INDEX x_plc_item_rf_IDX_plc_item_id ON x_policy_item_rowfilter(policy_ite
 CREATE INDEX x_svc_ver_info_IDX_service_id ON x_service_version_info(service_id);
 CREATE INDEX x_plugin_info_IDX_service_name ON x_plugin_info(service_name);
 CREATE INDEX x_plugin_info_IDX_host_name ON x_plugin_info(host_name);
+CREATE INDEX x_ugsync_audit_info_etime ON x_ugsync_audit_info(event_time);
+CREATE INDEX x_ugsync_audit_info_sync_src ON x_ugsync_audit_info(sync_source);
+CREATE INDEX x_ugsync_audit_info_uname ON x_ugsync_audit_info(user_name);
 commit;
 
 insert into x_portal_user (id,CREATE_TIME, UPDATE_TIME,FIRST_NAME, LAST_NAME, PUB_SCR_NAME, LOGIN_ID, PASSWORD, EMAIL, STATUS) values (X_PORTAL_USER_SEQ.NEXTVAL, SYSDATE, SYSDATE, 'Admin', '', 'Admin', 'admin', 'ceb4f32325eda6142bd65215f4c0f371', '', 1);
@@ -1294,6 +1315,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, '028',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, '029',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, '030',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, '031',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,1,3,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),1,1,1);
 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,1,1,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),1,1,1);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/oracle/patches/031-create-schema-for-usersync-audit-info.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/oracle/patches/031-create-schema-for-usersync-audit-info.sql b/security-admin/db/oracle/patches/031-create-schema-for-usersync-audit-info.sql
new file mode 100644
index 0000000..e03e893
--- /dev/null
+++ b/security-admin/db/oracle/patches/031-create-schema-for-usersync-audit-info.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.
+
+/
+CREATE SEQUENCE X_UGSYNC_AUDIT_INFO_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
+CREATE TABLE x_ugsync_audit_info(
+id NUMBER(20) NOT NULL,
+create_time DATE DEFAULT NULL NULL,
+update_time DATE DEFAULT NULL NULL,
+added_by_id NUMBER(20) DEFAULT NULL NULL,
+upd_by_id NUMBER(20) DEFAULT NULL NULL,
+event_time DATE DEFAULT NULL NULL,
+user_name VARCHAR(255) NOT  NULL,
+sync_source VARCHAR(128) NOT NULL,
+no_of_users NUMBER(20) NOT NULL,
+no_of_groups NUMBER(20) NOT NULL,
+sync_source_info VARCHAR(4000) NOT NULL,
+session_id VARCHAR(255) DEFAULT NULL,
+ PRIMARY KEY (id)
+);
+CREATE INDEX x_ugsync_audit_info_etime ON x_ugsync_audit_info(event_time);
+CREATE INDEX x_ugsync_audit_info_sync_src ON x_ugsync_audit_info(sync_source);
+CREATE INDEX x_ugsync_audit_info_uname ON x_ugsync_audit_info(user_name);
+COMMIT;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
----------------------------------------------------------------------
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 ef9ece7..5b3f4be 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
@@ -1209,6 +1209,25 @@ CONSTRAINT x_policy_label_map_FK_policy_id FOREIGN KEY (policy_id) REFERENCES x_
 CONSTRAINT x_policy_label_map_FK_policy_label_id FOREIGN KEY (policy_label_id) REFERENCES x_policy_label (id)
 );
 
+DROP TABLE IF EXISTS x_ugsync_audit_info CASCADE;
+DROP SEQUENCE IF EXISTS x_ugsync_audit_info_seq;
+CREATE SEQUENCE x_ugsync_audit_info_seq;
+CREATE TABLE x_ugsync_audit_info (
+id BIGINT DEFAULT nextval('x_ugsync_audit_info_seq'::regclass),
+create_time TIMESTAMP DEFAULT NULL NULL,
+update_time TIMESTAMP DEFAULT NULL NULL,
+added_by_id BIGINT DEFAULT NULL NULL,
+upd_by_id BIGINT DEFAULT NULL NULL,
+event_time TIMESTAMP DEFAULT NULL NULL,
+user_name varchar(255) NOT  NULL,
+sync_source varchar(128) NOT NULL,
+no_of_users bigint(20) NOT NULL,
+no_of_groups bigint(20) NOT NULL,
+sync_source_info varchar(4000) NOT NULL,
+session_id varchar(255) DEFAULT NULL,
+primary key (id),
+);
+
 CREATE INDEX xa_access_audit_added_by_id ON xa_access_audit(added_by_id);
 CREATE INDEX xa_access_audit_upd_by_id ON xa_access_audit(upd_by_id);
 CREATE INDEX xa_access_audit_cr_time ON xa_access_audit(create_time);
@@ -1365,6 +1384,9 @@ CREATE INDEX x_plugin_info_IDX_host_name ON x_plugin_info(host_name);
 CREATE INDEX x_policy_label_label_id ON x_policy_label(id);
 CREATE INDEX x_policy_label_label_name ON x_policy_label(label_name);
 CREATE INDEX x_policy_label_label_map_id ON x_policy_label_map(id);
+CREATE INDEX x_ugsync_audit_info_etime ON x_ugsync_audit_info(event_time);
+CREATE INDEX x_ugsync_audit_info_sync_src ON x_ugsync_audit_info(sync_source);
+CREATE INDEX x_ugsync_audit_info_uname ON x_ugsync_audit_info(user_name);
 
 INSERT INTO x_portal_user(CREATE_TIME,UPDATE_TIME,FIRST_NAME,LAST_NAME,PUB_SCR_NAME,LOGIN_ID,PASSWORD,EMAIL,STATUS)VALUES(current_timestamp,current_timestamp,'Admin','','Admin','admin','ceb4f32325eda6142bd65215f4c0f371','',1);
 INSERT INTO x_portal_user_role(CREATE_TIME,UPDATE_TIME,USER_ID,USER_ROLE,STATUS)VALUES(current_timestamp,current_timestamp,1,'ROLE_SYS_ADMIN',1);
@@ -1406,6 +1428,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 ('028',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 ('029',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 ('030',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 ('031',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 (1,3,current_timestamp,current_timestamp,1,1,1);
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (1,1,current_timestamp,current_timestamp,1,1,1);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/postgres/patches/031-create-schema-for-usersync-audit-info.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/postgres/patches/031-create-schema-for-usersync-audit-info.sql b/security-admin/db/postgres/patches/031-create-schema-for-usersync-audit-info.sql
new file mode 100644
index 0000000..2227f01
--- /dev/null
+++ b/security-admin/db/postgres/patches/031-create-schema-for-usersync-audit-info.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 TABLE IF EXISTS x_ugsync_audit_info CASCADE;
+DROP SEQUENCE IF EXISTS x_ugsync_audit_info_seq;
+
+CREATE SEQUENCE x_ugsync_audit_info_seq;
+
+CREATE TABLE x_ugsync_audit_info (
+id BIGINT DEFAULT nextval('x_ugsync_audit_info_seq'::regclass),
+create_time TIMESTAMP DEFAULT NULL NULL,
+update_time TIMESTAMP DEFAULT NULL NULL,
+added_by_id BIGINT DEFAULT NULL NULL,
+upd_by_id BIGINT DEFAULT NULL NULL,
+event_time TIMESTAMP DEFAULT NULL NULL,
+user_name varchar(255) NOT  NULL,
+sync_source varchar(128) NOT NULL,
+no_of_users bigint NOT NULL,
+no_of_groups bigint NOT NULL,
+sync_source_info varchar(4000) NOT NULL,
+session_id varchar(255) DEFAULT NULL,
+primary key (id)
+);
+CREATE INDEX x_ugsync_audit_info_etime ON x_ugsync_audit_info(event_time);
+CREATE INDEX x_ugsync_audit_info_sync_src ON x_ugsync_audit_info(sync_source);
+CREATE INDEX x_ugsync_audit_info_uname ON x_ugsync_audit_info(user_name);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
----------------------------------------------------------------------
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 c98d362..42a8704 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
@@ -867,6 +867,23 @@ CREATE TABLE dbo.x_policy_label_map (
         CONSTRAINT x_policy_label_map_PK_id PRIMARY KEY CLUSTERED(id)
 )
 GO
+CREATE TABLE dbo.x_ugsync_audit_info(
+        id bigint IDENTITY NOT NULL,
+        create_time datetime DEFAULT NULL NULL,
+        update_time datetime DEFAULT NULL NULL,
+        added_by_id bigint DEFAULT NULL NULL,
+        upd_by_id bigint DEFAULT NULL NULL,
+        event_time datetime DEFAULT NULL NULL,
+        user_name varchar(255) NOT  NULL,
+        sync_source varchar(128) NOT NULL,
+        no_of_users bigint NOT NULL,
+        no_of_groups bigint NOT NULL,
+        sync_source_info varchar(4000) NOT NULL,
+        session_id varchar(255) DEFAULT NULL NULL,
+        CONSTRAINT x_ugsync_audit_info_PK_id PRIMARY KEY CLUSTERED(id)
+)
+GO
+
 ALTER TABLE dbo.x_asset ADD CONSTRAINT x_asset_FK_added_by_id FOREIGN KEY(added_by_id) REFERENCES dbo.x_portal_user(id)
 GO
 ALTER TABLE dbo.x_asset ADD CONSTRAINT x_asset_FK_upd_by_id FOREIGN KEY(upd_by_id) REFERENCES dbo.x_portal_user (id)
@@ -1489,6 +1506,12 @@ CREATE NONCLUSTERED INDEX x_policy_label_IDX_label_name ON dbo.x_policy_label(la
 GO
 CREATE NONCLUSTERED INDEX x_policy_label_IDX_label_map_id ON dbo.x_policy_label_map(id ASC)
 GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_etime ON dbo.x_ugsync_audit_info(event_time ASC)
+GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_sync_src ON dbo.x_ugsync_audit_info(sync_source ASC)
+GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_uname ON dbo.x_ugsync_audit_info(user_name ASC)
+GO
 insert into x_portal_user (create_time,update_time,first_name,last_name,pub_scr_name,login_id,password,email,status) values (GETDATE(),GETDATE(),'Admin','','Admin','admin','ceb4f32325eda6142bd65215f4c0f371','',1)
 GO
 insert into x_portal_user_role (create_time,update_time,user_id,user_role,status) values (GETDATE(),GETDATE(),1,'ROLE_SYS_ADMIN',1)
@@ -1557,6 +1580,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 ('030',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 ('031',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 (1,3,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,1,1);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/sqlanywhere/patches/031-create-schema-for-usersync-audit-info.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/sqlanywhere/patches/031-create-schema-for-usersync-audit-info.sql b/security-admin/db/sqlanywhere/patches/031-create-schema-for-usersync-audit-info.sql
new file mode 100644
index 0000000..26d857b
--- /dev/null
+++ b/security-admin/db/sqlanywhere/patches/031-create-schema-for-usersync-audit-info.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.
+
+CREATE TABLE dbo.x_ugsync_audit_info(
+        id bigint IDENTITY NOT NULL,
+        create_time datetime DEFAULT NULL NULL,
+        update_time datetime DEFAULT NULL NULL,
+        added_by_id bigint DEFAULT NULL NULL,
+        upd_by_id bigint DEFAULT NULL NULL,
+        event_time datetime DEFAULT NULL NULL,
+        user_name varchar(255) NOT  NULL,
+        sync_source varchar(128) NOT NULL,
+        no_of_users bigint NOT NULL,
+        no_of_groups bigint NOT NULL,
+        sync_source_info varchar(4000) NOT NULL,
+        session_id varchar(255) DEFAULT NULL NULL,
+        CONSTRAINT x_ugsync_audit_info_PK_id PRIMARY KEY CLUSTERED(id)
+)
+GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_etime ON dbo.x_ugsync_audit_info(event_time ASC)
+GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_sync_src ON dbo.x_ugsync_audit_info(sync_source ASC)
+GO
+CREATE NONCLUSTERED INDEX x_ugsync_audit_info_uname ON dbo.x_ugsync_audit_info(user_name ASC)
+GO
+exit

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
----------------------------------------------------------------------
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 61e81a0..7421d4d 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
@@ -681,6 +681,10 @@ IF (OBJECT_ID('x_portal_user') IS NOT NULL)
 BEGIN
     DROP TABLE [dbo].[x_portal_user]
 END
+IF (OBJECT_ID('x_ugsync_audit_info') IS NOT NULL)
+BEGIN
+    DROP TABLE [dbo].[x_ugsync_audit_info]
+END
 IF (OBJECT_ID('x_db_version_h') IS NOT NULL)
 BEGIN
     DROP TABLE [dbo].[x_db_version_h]
@@ -1869,6 +1873,27 @@ CREATE TABLE dbo.x_policy_label_map (
 SET ANSI_NULLS ON
 SET QUOTED_IDENTIFIER ON
 SET ANSI_PADDING ON
+CREATE TABLE [dbo].[x_ugsync_audit_info](
+        [id] [bigint] IDENTITY(1,1) NOT NULL,
+        [create_time] [datetime2] DEFAULT NULL NULL,
+        [update_time] [datetime2] DEFAULT NULL NULL,
+        [added_by_id] [bigint] DEFAULT NULL NULL,
+        [upd_by_id] [bigint] DEFAULT NULL NULL,
+        [event_time] [datetime2] DEFAULT NULL NULL,
+        [user_name] [varchar](255) NOT  NULL,
+        [sync_source] [varchar](128) NOT NULL,
+        [no_of_users] [bigint] NOT NULL,
+        [no_of_groups] [bigint] NOT NULL,
+        [sync_source_info] [varchar](4000) NOT NULL,
+        [session_id] [varchar](255) DEFAULT NULL NULL,
+        PRIMARY KEY CLUSTERED
+(
+        [id] ASC
+)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+SET ANSI_NULLS ON
+SET QUOTED_IDENTIFIER ON
+SET ANSI_PADDING ON
 
 ALTER TABLE [dbo].[x_asset]  WITH CHECK ADD  CONSTRAINT [x_asset_FK_added_by_id] FOREIGN KEY([added_by_id])
 REFERENCES [dbo].[x_portal_user] ([id])
@@ -3023,6 +3048,18 @@ CREATE NONCLUSTERED INDEX x_policy_label_IDX_label_map_id ON [dbo].[x_policy_lab
 (
 [id] ASC
 )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_etime] ON [x_ugsync_audit_info]
+(
+   [event_time] ASC
+)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_sync_src] ON [x_ugsync_audit_info]
+(
+   [sync_source] ASC
+)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_uname] ON [x_ugsync_audit_info]
+(
+   [user_name] ASC
+)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
 
 insert into x_portal_user (CREATE_TIME,UPDATE_TIME,FIRST_NAME,LAST_NAME,PUB_SCR_NAME,LOGIN_ID,PASSWORD,EMAIL,STATUS) values (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'Admin','','Admin','admin','ceb4f32325eda6142bd65215f4c0f371','',1);
 insert into x_portal_user_role (CREATE_TIME,UPDATE_TIME,USER_ID,USER_ROLE,STATUS) values (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,'ROLE_SYS_ADMIN',1);
@@ -3058,6 +3095,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 ('028',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 ('029',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 ('030',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 ('031',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 (1,3,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,1,1);
 INSERT INTO x_user_module_perm (user_id,module_id,create_time,update_time,added_by_id,upd_by_id,is_allowed) VALUES (1,1,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,1,1);

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/db/sqlserver/patches/031-create-schema-for-usersync-audit-info.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/sqlserver/patches/031-create-schema-for-usersync-audit-info.sql b/security-admin/db/sqlserver/patches/031-create-schema-for-usersync-audit-info.sql
new file mode 100644
index 0000000..362f415
--- /dev/null
+++ b/security-admin/db/sqlserver/patches/031-create-schema-for-usersync-audit-info.sql
@@ -0,0 +1,65 @@
+-- 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 (OBJECT_ID('x_ugsync_audit_info') IS NOT NULL)
+BEGIN
+    DROP TABLE [dbo].[x_ugsync_audit_info]
+END
+GO
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+SET ANSI_PADDING ON
+GO
+CREATE TABLE [dbo].[x_ugsync_audit_info](
+        [id] [bigint] IDENTITY(1,1) NOT NULL,
+        [create_time] [datetime2] DEFAULT NULL NULL,
+        [update_time] [datetime2] DEFAULT NULL NULL,
+        [added_by_id] [bigint] DEFAULT NULL NULL,
+        [upd_by_id] [bigint] DEFAULT NULL NULL,
+        [event_time] [datetime2] DEFAULT NULL NULL,
+        [user_name] [varchar](255) NOT  NULL,
+        [sync_source] [varchar](128) NOT NULL,
+        [no_of_users] [bigint] NOT NULL,
+        [no_of_groups] [bigint] NOT NULL,
+        [sync_source_info] [varchar](4000) NOT NULL,
+        [session_id] [varchar](255) DEFAULT NULL NULL,
+        PRIMARY KEY CLUSTERED
+(
+        [id] ASC
+)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+) ON [PRIMARY]
+GO
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_etime] ON [x_ugsync_audit_info]
+(
+   [event_time] ASC
+)
+WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+GO
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_sync_src] ON [x_ugsync_audit_info]
+(
+   [sync_source] ASC
+)
+WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+GO
+CREATE NONCLUSTERED INDEX [x_ugsync_audit_info_uname] ON [x_ugsync_audit_info]
+(
+   [user_name] ASC
+)
+WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
+GO
+exit

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
index 034053d..15937c7 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
@@ -55,26 +55,10 @@ import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.entity.XXUser;
 import org.apache.ranger.plugin.model.RangerPluginInfo;
 import org.apache.ranger.plugin.util.RangerRESTUtils;
-import org.apache.ranger.service.RangerPluginActivityLogger;
-import org.apache.ranger.service.RangerPluginInfoService;
-import org.apache.ranger.service.XAccessAuditService;
-import org.apache.ranger.service.XAuditMapService;
-import org.apache.ranger.service.XGroupService;
-import org.apache.ranger.service.XPermMapService;
-import org.apache.ranger.service.XPolicyService;
-import org.apache.ranger.service.XTrxLogService;
-import org.apache.ranger.service.XUserService;
+import org.apache.ranger.service.*;
 import org.apache.ranger.solr.SolrAccessAuditsService;
 import org.apache.ranger.util.RestUtil;
-import org.apache.ranger.view.VXAccessAuditList;
-import org.apache.ranger.view.VXAsset;
-import org.apache.ranger.view.VXAuditMap;
-import org.apache.ranger.view.VXPermMap;
-import org.apache.ranger.view.VXPolicyExportAuditList;
-import org.apache.ranger.view.VXResource;
-import org.apache.ranger.view.VXTrxLog;
-import org.apache.ranger.view.VXTrxLogList;
-import org.apache.ranger.view.VXUser;
+import org.apache.ranger.view.*;
 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -131,6 +115,9 @@ public class AssetMgr extends AssetMgrBase {
 	@Autowired
 	RangerPluginInfoService pluginInfoService;
 
+	@Autowired
+	XUgsyncAuditInfoService xUgsyncAuditInfoService;
+
 	private static final Logger logger = Logger.getLogger(AssetMgr.class);
 
 	public File getXResourceFile(Long id, String fileType) {
@@ -1098,4 +1085,46 @@ public class AssetMgr extends AssetMgrBase {
         }
         return xPolicyExportAuditService.searchXPolicyExportAudits(searchCriteria);
     }
+
+	public VXUgsyncAuditInfoList getUgsyncAudits(SearchCriteria searchCriteria) {
+
+		if (searchCriteria == null) {
+			searchCriteria = new SearchCriteria();
+		}
+		if (searchCriteria.getParamList() != null
+				&& !searchCriteria.getParamList().isEmpty()) {
+			int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
+			Date temp = null;
+			DateUtil dateUtil = new DateUtil();
+			if (searchCriteria.getParamList().containsKey("startDate")) {
+				temp = (Date) searchCriteria.getParamList().get(
+						"startDate");
+				temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
+				temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+				searchCriteria.getParamList().put("startDate", temp);
+			}
+			if (searchCriteria.getParamList().containsKey("endDate")) {
+				temp = (Date) searchCriteria.getParamList().get(
+						"endDate");
+				temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
+				temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+				searchCriteria.getParamList().put("endDate", temp);
+			}
+
+		}
+		if (searchCriteria.getSortType() == null) {
+			searchCriteria.setSortType("desc");
+		} else if (!"asc".equalsIgnoreCase(searchCriteria.getSortType()) && !"desc".equalsIgnoreCase(searchCriteria.getSortType())) {
+			searchCriteria.setSortType("desc");
+		}
+		return xUgsyncAuditInfoService.searchXUgsyncAuditInfoList(searchCriteria);
+	}
+	
+	public VXUgsyncAuditInfoList getUgsyncAuditsBySyncSource(String syncSource) {
+		if(syncSource!=null && !syncSource.trim().isEmpty()){
+			return xUgsyncAuditInfoService.searchXUgsyncAuditInfoBySyncSource(syncSource);
+		}else{
+			throw restErrorUtil.createRESTException("Please provide a valid syncSource", MessageEnums.INVALID_INPUT_DATA);
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
----------------------------------------------------------------------
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 71298a4..b713d12 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -38,15 +38,8 @@ import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerDataMaskPolicyItem;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerRowFilterPolicyItem;
-import org.apache.ranger.service.RangerPolicyService;
-import org.apache.ranger.service.XGroupPermissionService;
-import org.apache.ranger.service.XModuleDefService;
-import org.apache.ranger.service.XPortalUserService;
-import org.apache.ranger.service.XResourceService;
-import org.apache.ranger.service.XUserPermissionService;
-import org.apache.ranger.view.VXGroupPermission;
-import org.apache.ranger.view.VXModuleDef;
-import org.apache.ranger.view.VXUserPermission;
+import org.apache.ranger.service.*;
+import org.apache.ranger.view.*;
 import org.apache.log4j.Logger;
 import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.common.AppConstants;
@@ -81,23 +74,6 @@ import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.entity.XXResource;
 import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.entity.XXUser;
-import org.apache.ranger.service.XGroupService;
-import org.apache.ranger.service.XUserService;
-import org.apache.ranger.view.VXAuditMap;
-import org.apache.ranger.view.VXAuditMapList;
-import org.apache.ranger.view.VXGroup;
-import org.apache.ranger.view.VXGroupGroup;
-import org.apache.ranger.view.VXGroupList;
-import org.apache.ranger.view.VXGroupUser;
-import org.apache.ranger.view.VXGroupUserInfo;
-import org.apache.ranger.view.VXGroupUserList;
-import org.apache.ranger.view.VXLong;
-import org.apache.ranger.view.VXPermMap;
-import org.apache.ranger.view.VXPermMapList;
-import org.apache.ranger.view.VXPortalUser;
-import org.apache.ranger.view.VXUser;
-import org.apache.ranger.view.VXUserGroupInfo;
-import org.apache.ranger.view.VXUserList;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Propagation;
@@ -105,10 +81,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.ranger.view.VXResponse;
 import org.apache.ranger.entity.XXPortalUserRole;
-import org.apache.ranger.view.VXString;
-import org.apache.ranger.view.VXStringList;
+
 @Component
 public class XUserMgr extends XUserMgrBase {
 
@@ -160,6 +134,9 @@ public class XUserMgr extends XUserMgrBase {
     @Autowired
     UserMgr userManager;
 
+	@Autowired
+	XUgsyncAuditInfoService xUgsyncAuditInfoService;
+
 	static final Logger logger = Logger.getLogger(XUserMgr.class);
 
 
@@ -581,7 +558,7 @@ public class XUserMgr extends XUserMgrBase {
 		List<VXUser> vxu = new ArrayList<VXUser>();
         for (VXUser vXUser : vXGroupUserInfo.getXuserInfo()) {
             XXUser xUser = daoManager.getXXUser().findByUserName(
-                    vXUser.getName());
+					vXUser.getName());
             XXPortalUser xXPortalUser = daoManager.getXXPortalUser()
                     .findByLoginId(vXUser.getName());
             if (xUser != null) {
@@ -1678,7 +1655,7 @@ public class XUserMgr extends XUserMgrBase {
 			if(searchCriteria.getParamList() != null && searchCriteria.getParamList().get("name") != null){
 				searchCriteria.setSortBy("name");
 				vXGroupListSort = xGroupService.searchXGroups(searchCriteria);
-				vXGroupExactMatch = getGroupByGroupName((String)searchCriteria.getParamList().get("name"));
+				vXGroupExactMatch = getGroupByGroupName((String) searchCriteria.getParamList().get("name"));
 			}
 			int vXGroupExactMatchwithSearchCriteria = 0;
 			if(vXGroupExactMatch != null){
@@ -2258,4 +2235,14 @@ public class XUserMgr extends XUserMgrBase {
                 }
             }
 	}
+
+	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
+	public synchronized VXUgsyncAuditInfo postUserGroupAuditInfo(
+			VXUgsyncAuditInfo vxUgsyncAuditInfo) {
+		checkAdminAccess();
+		//logger.info("post usersync audit info");
+		vxUgsyncAuditInfo = xUgsyncAuditInfoService.createUgsyncAuditInfo(vxUgsyncAuditInfo);
+		return vxUgsyncAuditInfo;
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
index 4a02e26..032e5f0 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
@@ -594,10 +594,11 @@ public class AppConstants extends RangerCommonEnums {
 	public static final int CLASS_TYPE_XA_SERVICE_VERSION_INFO = 1052;
 	public static final int CLASS_TYPE_XA_ACCESS_AUDIT_V4 = 1053;
 	public static final int CLASS_TYPE_XA_ACCESS_AUDIT_V5 = 1054;
+	public static final int CLASS_TYPE_UGYNC_AUDIT_INFO = 1055;
 	/**
 	 * Max value for enum ClassTypes_MAX
 	 */
-	public static final int ClassTypes_MAX = 1054;
+	public static final int ClassTypes_MAX = 1055;
 	
 	/***************************************************************
 	 * Enum values for Default SortOrder
@@ -968,6 +969,9 @@ public class AppConstants extends RangerCommonEnums {
 		if( elementValue == 1054 ) {
 			return "Access Audit V5"; //CLASS_TYPE_XA_ACCESS_AUDIT_V5
 		}
+		if( elementValue == 1055 ) {
+			return "Usersync Audit Info"; //CLASS_TYPE_UGYNC_AUDIT_INFO
+		}
 		return null;
 	}
 

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
index d61cbc7..c57ecc8 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
@@ -198,6 +198,9 @@ public abstract class RangerDaoManagerBase {
 		if (classType== AppConstants.CLASS_TYPE_XA_SERVICE_VERSION_INFO) {
 			return getXXServiceVersionInfo();
 		}
+		if (classType == AppConstants.CLASS_TYPE_UGYNC_AUDIT_INFO) {
+			return getXXUgsyncAuditInfo();
+		}
 		logger.error("No DaoManager found for classType=" + classType, new Throwable());
 		return null;
 	}
@@ -369,6 +372,9 @@ public abstract class RangerDaoManagerBase {
                 if ("XXPolicyLabel".equals(className)) {
                         return getXXPolicyLabels();
                 }
+		if ("XXUgsyncAuditInfo".equals(className)) {
+			return getXXUgsyncAuditInfo();
+		}
 		logger.error("No DaoManager found for className=" + className, new Throwable());
 		return null;
 	}
@@ -601,5 +607,9 @@ public abstract class RangerDaoManagerBase {
 	public XXPluginInfoDao getXXPluginInfo() {
 		return new XXPluginInfoDao(this);
 	}
+
+	public XXUgsyncAuditInfoDao getXXUgsyncAuditInfo() {
+		return new XXUgsyncAuditInfoDao(this);
+	}
 }
 

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/db/XXUgsyncAuditInfoDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXUgsyncAuditInfoDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXUgsyncAuditInfoDao.java
new file mode 100644
index 0000000..1955923
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXUgsyncAuditInfoDao.java
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+package org.apache.ranger.db;
+
+import org.apache.log4j.Logger;
+import org.apache.ranger.common.DateUtil;
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXUgsyncAuditInfo;
+
+import javax.persistence.NoResultException;
+import java.util.List;
+
+/**
+ */
+
+public class XXUgsyncAuditInfoDao extends BaseDao<XXUgsyncAuditInfo> {
+	protected static final Logger logger = Logger
+			.getLogger(XXUgsyncAuditInfoDao.class);
+	/**
+	 * Default Constructor
+	 */
+	public XXUgsyncAuditInfoDao(RangerDaoManagerBase daoManager) {
+		super(daoManager);
+	}
+
+	@Override
+	public XXUgsyncAuditInfo create(XXUgsyncAuditInfo obj) {
+		obj.setEventTime(DateUtil.getUTCDate());
+		return super.create(obj);
+	}
+
+	public XXUgsyncAuditInfo findBySessionId(String sessionId) {
+		if (sessionId == null) {
+			return null;
+		}
+		try {
+			return getEntityManager()
+					.createNamedQuery("XXUgsyncAuditInfo.findBySessionId", tClass)
+					.setParameter("sessionId", sessionId)
+					.getSingleResult();
+		} catch (NoResultException e) {
+			return null;
+		}
+	}
+	public List<XXUgsyncAuditInfo> findBySyncSource(String syncSource) {
+		if (syncSource == null) {
+			return null;
+		}
+		try {
+			return getEntityManager()
+					.createNamedQuery("XXUgsyncAuditInfo.findBySyncSource", tClass)
+					.setParameter("syncSource", syncSource).getResultList();
+		} catch (NoResultException e) {
+			return null;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/entity/XXUgsyncAuditInfo.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXUgsyncAuditInfo.java b/security-admin/src/main/java/org/apache/ranger/entity/XXUgsyncAuditInfo.java
new file mode 100644
index 0000000..5609833
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXUgsyncAuditInfo.java
@@ -0,0 +1,210 @@
+/*
+ * 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.
+ */
+
+package org.apache.ranger.entity;
+
+import org.apache.ranger.common.AppConstants;
+
+import javax.persistence.*;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Date;
+
+@Entity
+@Cacheable
+@XmlRootElement
+@Table(name = "x_ugsync_audit_info")
+public class XXUgsyncAuditInfo extends XXDBBase implements java.io.Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@SequenceGenerator(name = "X_UGSYNC_AUDIT_INFO_SEQ", sequenceName = "X_UGSYNC_AUDIT_INFO_SEQ", allocationSize = 1)
+	@GeneratedValue(strategy = GenerationType.AUTO, generator = "X_UGSYNC_AUDIT_INFO_SEQ")
+	@Column(name = "id")
+	protected Long id;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="event_time"   )
+	protected Date eventTime;
+
+	@Column(name = "user_name")
+	protected String userName;
+
+	@Column(name = "sync_source")
+	protected String syncSource;
+
+	@Column(name = "no_of_users")
+	protected Long noOfUsers;
+
+	@Column(name = "no_of_groups")
+	protected Long noOfGroups;
+
+	@Column(name = "sync_source_info")
+	protected String syncSourceInfo;
+
+	@Column(name="session_id")
+	protected String sessionId;
+
+	/**
+	 * Default constructor. This will set all the attributes to default value.
+	 */
+	public XXUgsyncAuditInfo() {
+	}
+
+	public int getMyClassType( ) {
+	    return AppConstants.CLASS_TYPE_UGYNC_AUDIT_INFO;
+	}
+
+	public String getMyDisplayValue() {
+		return null;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getId() {
+		return this.id;
+	}
+
+	public Date getEventTime() {
+		return eventTime;
+	}
+
+	public void setEventTime(Date eventTime) {
+		this.eventTime = eventTime;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getSyncSource() {
+		return syncSource;
+	}
+
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	public Long getNoOfUsers() {
+		return noOfUsers;
+	}
+
+	public void setNoOfUsers(Long noOfUsers) {
+		this.noOfUsers = noOfUsers;
+	}
+
+	public Long getNoOfGroups() {
+		return noOfGroups;
+	}
+
+	public void setNoOfGroups(Long noOfGroups) {
+		this.noOfGroups = noOfGroups;
+	}
+
+	public String getSyncSourceInfo() {
+		return syncSourceInfo;
+	}
+
+	public void setSyncSourceInfo(String syncSourceInfo) {
+		this.syncSourceInfo = syncSourceInfo;
+	}
+
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
+	/**
+	 * This return the bean content in string format
+	 * @return formatedStr
+	*/
+	@Override
+	public String toString( ) {
+		String str = "XXUgsyncAuditInfo={";
+		str += "id={" + id + "} ";
+		str += "eventTime={" + eventTime + "} ";
+		str += "userName={" + userName + "} ";
+		str += "syncSource={" + syncSource + "} ";
+		str += "noOfUsers={" + noOfUsers + "} ";
+		str += "noOfGroups={" + noOfGroups + "} ";
+		str += "syncSourceInfo={" + syncSourceInfo + "} ";
+		str += "sessionId={" + sessionId + "} ";
+		str += "}";
+		return str;
+	}
+
+	/**
+	 * Checks for all attributes except referenced db objects
+	 * @return true if all attributes match
+	*/
+	@Override
+	public boolean equals( Object obj) {
+		if (obj == null)
+			return false;
+		if (this == obj)
+			return true;
+		if (getClass() != obj.getClass())
+			return false;
+		XXUgsyncAuditInfo other = (XXUgsyncAuditInfo) obj;
+		if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+			return false;
+		}
+		if ((this.eventTime == null && other.eventTime != null) || (this.eventTime != null && !this.eventTime.equals(other.eventTime))) {
+			return false;
+		}
+		if ((this.userName == null && other.userName != null) || (this.userName != null && !this.userName.equals(other.userName))) {
+			return false;
+		}
+		if ((this.syncSource == null && other.syncSource != null) || (this.syncSource != null && !this.syncSource.equals(other.syncSource))) {
+			return false;
+		}
+		if ((this.noOfUsers == null && other.noOfUsers != null) || (this.noOfUsers != null && !this.noOfUsers.equals(other.noOfUsers))) {
+			return false;
+		}
+		if ((this.noOfGroups == null && other.noOfGroups != null) || (this.noOfGroups != null && !this.noOfGroups.equals(other.noOfGroups))) {
+			return false;
+		}
+		if ((this.syncSourceInfo == null && other.syncSourceInfo != null) || (this.syncSourceInfo != null && !this.syncSourceInfo.equals(other.syncSourceInfo))) {
+			return false;
+		}
+		if ((this.sessionId == null && other.sessionId != null) || (this.sessionId != null && !this.sessionId.equals(other.sessionId))) {
+			return false;
+		}
+		return true;
+	}
+
+	public static boolean equals(Object object1, Object object2) {
+		if (object1 == object2) {
+			return true;
+		}
+		if ((object1 == null) || (object2 == null)) {
+			return false;
+		}
+		return object1.equals(object2);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java b/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
index 3c274e3..9f7cd26 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
@@ -68,18 +68,7 @@ import org.apache.ranger.service.XPolicyExportAuditService;
 import org.apache.ranger.service.XPolicyService;
 import org.apache.ranger.service.XResourceService;
 import org.apache.ranger.service.XTrxLogService;
-import org.apache.ranger.view.VXAccessAuditList;
-import org.apache.ranger.view.VXAsset;
-import org.apache.ranger.view.VXAssetList;
-import org.apache.ranger.view.VXCredentialStore;
-import org.apache.ranger.view.VXCredentialStoreList;
-import org.apache.ranger.view.VXLong;
-import org.apache.ranger.view.VXPolicy;
-import org.apache.ranger.view.VXPolicyExportAuditList;
-import org.apache.ranger.view.VXResource;
-import org.apache.ranger.view.VXResourceList;
-import org.apache.ranger.view.VXResponse;
-import org.apache.ranger.view.VXTrxLogList;
+import org.apache.ranger.view.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -331,7 +320,7 @@ public class AssetREST {
 		RangerService service = serviceREST.getService(vXResource.getAssetId());
 		RangerPolicy  policy  = serviceUtil.toRangerPolicy(vXResource, service);
 
-		RangerPolicy createdPolicy = serviceREST.createPolicy(policy,null);
+		RangerPolicy createdPolicy = serviceREST.createPolicy(policy, null);
 
 		VXResource ret = serviceUtil.toVXResource(createdPolicy, service);
 
@@ -579,7 +568,7 @@ public class AssetREST {
 		searchUtil.extractInt(request, searchCriteria, "httpRetCode",
 				"HTTP response code for exported policy.");
 		searchUtil.extractDate(request, searchCriteria, "startDate",
-                                "Start Date", null);
+				"Start Date", null);
 		searchUtil.extractDate(request, searchCriteria, "endDate",
                                 "End Date", null);
 		searchUtil.extractString(request, searchCriteria, "cluster",
@@ -736,4 +725,41 @@ public class AssetREST {
 		}
 		return vXPolicy;
 	}
+
+	@GET
+	@Path("/ugsyncAudits")
+	@Produces({ "application/xml", "application/json" })
+	@PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_UGSYNC_AUDITS + "\")")
+	public VXUgsyncAuditInfoList getUgsyncAudits(@Context HttpServletRequest request){
+
+		SearchCriteria searchCriteria = searchUtil.extractCommonCriterias(
+				request, xAccessAuditService.sortFields);
+		searchUtil.extractString(request, searchCriteria, "userName",
+				"User Name", StringUtil.VALIDATION_TEXT);
+		searchUtil.extractString(request, searchCriteria, "sessionId",
+				"Session Id", StringUtil.VALIDATION_TEXT);
+		searchUtil.extractString(request, searchCriteria, "syncSource",
+				"Sync Source", StringUtil.VALIDATION_TEXT);
+		searchUtil.extractString(request, searchCriteria, "syncSourceInfo",
+				"Sync Source Info", StringUtil.VALIDATION_TEXT);
+		searchUtil.extractLong(request, searchCriteria, "noOfUsers", "No of Users");
+		searchUtil.extractLong(request, searchCriteria, "noOfGroups", "No of Groups");
+
+		searchUtil.extractDate(request, searchCriteria, "startDate",
+				"Start Date", "MM/dd/yyyy");
+		searchUtil.extractDate(request, searchCriteria, "endDate", "End Date",
+				"MM/dd/yyyy");
+		return assetMgr.getUgsyncAudits(searchCriteria);
+	}
+
+	@GET
+	@Path("/ugsyncAudits/{syncSource}")
+	@Encoded
+	@Produces({ "application/xml", "application/json" })
+	@PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_UGSYNC_AUDITS_BY_SYNCSOURCE + "\")")
+	public VXUgsyncAuditInfoList getUgsyncAuditsBySyncSource(@PathParam("syncSource") String syncSource){
+		VXUgsyncAuditInfoList vxUgsyncAuditInfoList = new VXUgsyncAuditInfoList();
+		vxUgsyncAuditInfoList = assetMgr.getUgsyncAuditsBySyncSource(syncSource);
+		return vxUgsyncAuditInfoList;
+	}
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
----------------------------------------------------------------------
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 a07c243..9a9604f 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
@@ -59,31 +59,7 @@ import org.apache.ranger.service.XPermMapService;
 import org.apache.ranger.service.XResourceService;
 import org.apache.ranger.service.XUserPermissionService;
 import org.apache.ranger.service.XUserService;
-import org.apache.ranger.view.VXAuditMap;
-import org.apache.ranger.view.VXAuditMapList;
-import org.apache.ranger.view.VXAuthSession;
-import org.apache.ranger.view.VXAuthSessionList;
-import org.apache.ranger.view.VXGroup;
-import org.apache.ranger.view.VXGroupGroup;
-import org.apache.ranger.view.VXGroupGroupList;
-import org.apache.ranger.view.VXGroupList;
-import org.apache.ranger.view.VXGroupPermission;
-import org.apache.ranger.view.VXGroupPermissionList;
-import org.apache.ranger.view.VXGroupUser;
-import org.apache.ranger.view.VXGroupUserInfo;
-import org.apache.ranger.view.VXGroupUserList;
-import org.apache.ranger.view.VXLong;
-import org.apache.ranger.view.VXModuleDef;
-import org.apache.ranger.view.VXModuleDefList;
-import org.apache.ranger.view.VXPermMap;
-import org.apache.ranger.view.VXPermMapList;
-import org.apache.ranger.view.VXString;
-import org.apache.ranger.view.VXStringList;
-import org.apache.ranger.view.VXUser;
-import org.apache.ranger.view.VXUserGroupInfo;
-import org.apache.ranger.view.VXUserList;
-import org.apache.ranger.view.VXUserPermission;
-import org.apache.ranger.view.VXUserPermissionList;
+import org.apache.ranger.view.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -1152,4 +1128,13 @@ public class XUserREST {
                         xUserMgr.deleteXGroup(groupId, forceDelete);
                 }
         }
-}
\ No newline at end of file
+
+	@POST
+	@Path("/ugsync/auditinfo")
+	@Produces({ "application/xml", "application/json" })
+	@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+	public VXUgsyncAuditInfo postUserGroupAuditInfo(VXUgsyncAuditInfo vxUgsyncAuditInfo) {
+
+		return xUserMgr.postUserGroupAuditInfo(vxUgsyncAuditInfo);
+	}
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
index 460c7fd..0f96453 100644
--- a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
+++ b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java
@@ -52,6 +52,8 @@ public class RangerAPIList {
 	public static final String GET_ACCESS_LOGS = "AssetREST.getAccessLogs";
 	public static final String GRANT_PERMISSION = "AssetREST.grantPermission";
 	public static final String REVOKE_PERMISSION = "AssetREST.revokePermission";
+	public static final String GET_UGSYNC_AUDITS = "AssetREST.getUgsyncAudits";
+	public static final String GET_UGSYNC_AUDITS_BY_SYNCSOURCE = "AssetREST.getUgsyncAuditsBySyncSource";
 
 	/**
 	 * List of APIs for ServiceREST
@@ -206,4 +208,4 @@ public class RangerAPIList {
 	public static final String SET_USER_ROLES_BY_NAME="XUserREST.setUserRolesByName";
 	public static final String GET_USER_ROLES_BY_ID="XUserREST.getUserRolesByID";
 	public static final String GET_USER_ROLES_BY_NAME="XUserREST.getUserRolesByName";
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoService.java b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoService.java
new file mode 100644
index 0000000..85a9651
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoService.java
@@ -0,0 +1,182 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.service;
+
+import org.apache.ranger.common.*;
+import org.apache.ranger.common.SearchField.DATA_TYPE;
+import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.common.SortField.SORT_ORDER;
+import org.apache.ranger.entity.XXUgsyncAuditInfo;
+import org.apache.ranger.view.VXUgsyncAuditInfo;
+import org.apache.ranger.view.VXUgsyncAuditInfoList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Scope("singleton")
+public class XUgsyncAuditInfoService extends XUgsyncAuditInfoServiceBase<XXUgsyncAuditInfo, VXUgsyncAuditInfo>{
+	@Autowired
+	JSONUtil jsonUtil;
+
+	public static final String NAME = "XUgsyncAuditInfo";
+	protected static final String distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM XXUgsyncAuditInfo obj ";
+	protected static final String distinctQueryStr = "SELECT distinct obj FROM XXUgsyncAuditInfo obj ";
+
+	public XUgsyncAuditInfoService() {
+		countQueryStr = "SELECT COUNT(obj) FROM XXUgsyncAuditInfo  obj ";
+		queryStr = "SELECT obj FROM XXUgsyncAuditInfo obj ";
+
+		sortFields.add(new SortField("eventTime", "obj.eventTime", true, SORT_ORDER.DESC));
+		searchFields.add(new SearchField("userName", "obj.userName",
+				DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+		searchFields.add(new SearchField("sessionId", "obj.sessionId",
+				DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+		searchFields.add(new SearchField("syncSource", "obj.syncSource",
+				DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+		searchFields.add(new SearchField("noOfUsers", "obj.noOfUsers",
+				DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+		searchFields.add(new SearchField("noOfGroups", "obj.noOfGroups",
+				DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+		searchFields.add(new SearchField("syncSourceInfo", "obj.syncSourceInfo", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+		searchFields.add(new SearchField("startDate", "obj.eventTime",
+				DATA_TYPE.DATE, SEARCH_TYPE.GREATER_EQUAL_THAN));
+		searchFields.add(new SearchField("endDate", "obj.eventTime",
+				DATA_TYPE.DATE, SEARCH_TYPE.LESS_EQUAL_THAN));
+}
+
+	protected XXUgsyncAuditInfo mapViewToEntityBean(VXUgsyncAuditInfo vObj, XXUgsyncAuditInfo mObj, int OPERATION_CONTEXT) {
+		mObj.setId(vObj.getId());
+		mObj.setEventTime(vObj.getEventTime());
+		mObj.setUserName(vObj.getUserName());
+		mObj.setSyncSource(vObj.getSyncSource());
+		mObj.setNoOfUsers(vObj.getNoOfUsers());
+		mObj.setNoOfGroups(vObj.getNoOfGroups());
+		mObj.setSyncSourceInfo(jsonUtil.readMapToString(vObj.getSyncSourceInfo()));
+		mObj.setSessionId(vObj.getSessionId());
+		return mObj;
+	}
+
+	protected VXUgsyncAuditInfo mapEntityToViewBean(VXUgsyncAuditInfo vObj, XXUgsyncAuditInfo mObj) {
+		vObj.setId(mObj.getId());
+		vObj.setEventTime(mObj.getEventTime());
+		vObj.setUserName(mObj.getUserName());
+		vObj.setSyncSource(mObj.getSyncSource());
+		vObj.setNoOfUsers(mObj.getNoOfUsers());
+		vObj.setNoOfGroups(mObj.getNoOfGroups());
+		String jsonString = mObj.getSyncSourceInfo();
+		vObj.setSyncSourceInfo(jsonUtil.jsonToMap(jsonString));
+		vObj.setSessionId( mObj.getSessionId());
+
+		return vObj;
+	}
+
+	/**
+	 * @param searchCriteria
+	 * @return
+	 */
+	public VXUgsyncAuditInfoList searchXUgsyncAuditInfoList(SearchCriteria searchCriteria) {
+        VXUgsyncAuditInfoList returnList = new VXUgsyncAuditInfoList();
+        List<VXUgsyncAuditInfo> xUgsyncAuditInfoList = new ArrayList<VXUgsyncAuditInfo>();
+
+        List<XXUgsyncAuditInfo> resultList = (List<XXUgsyncAuditInfo>) searchResources(searchCriteria,
+                searchFields, sortFields, returnList);
+
+        // Iterate over the result list and create the return list
+        for (XXUgsyncAuditInfo gjXUgsyncAuditInfo : resultList) {
+            VXUgsyncAuditInfo vxUgsyncAuditInfo = populateViewBean(gjXUgsyncAuditInfo);
+
+            if(vxUgsyncAuditInfo != null) {
+				xUgsyncAuditInfoList.add(vxUgsyncAuditInfo);
+            }
+        }
+
+        returnList.setVxUgsyncAuditInfoList(xUgsyncAuditInfoList);
+        return returnList;
+    }
+
+	public VXUgsyncAuditInfoList searchXUgsyncAuditInfoBySyncSource(String syncSource) {
+		VXUgsyncAuditInfoList returnList = new VXUgsyncAuditInfoList();
+		List<VXUgsyncAuditInfo> xUgsyncAuditInfoList = new ArrayList<VXUgsyncAuditInfo>();
+
+		List<XXUgsyncAuditInfo> resultList = daoManager.getXXUgsyncAuditInfo().findBySyncSource(syncSource);
+
+		// Iterate over the result list and create the return list
+		for (XXUgsyncAuditInfo gjXUgsyncAuditInfo : resultList) {
+			VXUgsyncAuditInfo vxUgsyncAuditInfo = populateViewBean(gjXUgsyncAuditInfo);
+
+			if(vxUgsyncAuditInfo != null) {
+				xUgsyncAuditInfoList.add(vxUgsyncAuditInfo);
+			}
+		}
+
+		returnList.setVxUgsyncAuditInfoList(xUgsyncAuditInfoList);
+		return returnList;
+	}
+	
+	public VXUgsyncAuditInfo populateViewBean(XXUgsyncAuditInfo gjXUgsyncAuditInfo) {
+		//VXUgsyncAuditInfo vxUgsyncAuditInfo = new VXUgsyncAuditInfo();
+		VXUgsyncAuditInfo vxUgsyncAuditInfo = super.populateViewBean(gjXUgsyncAuditInfo);
+		return mapEntityToViewBean(vxUgsyncAuditInfo, gjXUgsyncAuditInfo);
+	}
+
+	@Override
+	protected void validateForCreate(VXUgsyncAuditInfo viewBaseBean) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	protected void validateForUpdate(VXUgsyncAuditInfo viewBaseBean, XXUgsyncAuditInfo t) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public VXUgsyncAuditInfo createUgsyncAuditInfo(VXUgsyncAuditInfo vxUgsyncAuditInfo) {
+
+		XXUgsyncAuditInfo xxUgsyncAuditInfo = new XXUgsyncAuditInfo();
+		Long sessionId = ContextUtil.getCurrentUserSession().getSessionId();
+		if (sessionId != null) {
+			vxUgsyncAuditInfo.setSessionId("" + sessionId);
+		}
+		vxUgsyncAuditInfo.setEventTime(DateUtil.getUTCDate());
+		vxUgsyncAuditInfo.setUserName(ContextUtil.getCurrentUserLoginId());
+
+		// Process the sync source information
+		if (vxUgsyncAuditInfo.getUnixSyncSourceInfo() != null) {
+			vxUgsyncAuditInfo.setSyncSourceInfo(jsonUtil.jsonToMap(vxUgsyncAuditInfo.getUnixSyncSourceInfo().toString()));
+		} else if (vxUgsyncAuditInfo.getFileSyncSourceInfo() != null) {
+			vxUgsyncAuditInfo.setSyncSourceInfo(jsonUtil.jsonToMap(vxUgsyncAuditInfo.getFileSyncSourceInfo().toString()));
+		} else if (vxUgsyncAuditInfo.getLdapSyncSourceInfo() != null) {
+			vxUgsyncAuditInfo.setSyncSourceInfo(jsonUtil.jsonToMap(vxUgsyncAuditInfo.getLdapSyncSourceInfo().toString()));
+		}
+
+		mapViewToEntityBean(vxUgsyncAuditInfo, xxUgsyncAuditInfo, 0);
+		preCreate(vxUgsyncAuditInfo);
+		xxUgsyncAuditInfo = getDao().create(xxUgsyncAuditInfo);
+		postCreate(xxUgsyncAuditInfo);
+
+		//logger.info("postCreate ugsync audit info" + vxUgsyncAuditInfo.toString());
+		return vxUgsyncAuditInfo;
+	}
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoServiceBase.java
new file mode 100644
index 0000000..bf6f6e1
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/service/XUgsyncAuditInfoServiceBase.java
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.service;
+
+/**
+ *
+ */
+
+import org.apache.ranger.entity.XXUgsyncAuditInfo;
+import org.apache.ranger.view.VXUgsyncAuditInfo;
+
+public abstract class XUgsyncAuditInfoServiceBase<T extends XXUgsyncAuditInfo, V extends VXUgsyncAuditInfo>
+		extends AbstractBaseResourceService<T, V> {
+	public static final String NAME = "XUgsyncAuditInfo";
+
+	public XUgsyncAuditInfoServiceBase() {
+
+	}
+
+	@Override
+	protected T mapViewToEntityBean(V vObj, T mObj, int OPERATION_CONTEXT) {
+		mObj.setEventTime(vObj.getEventTime());
+		mObj.setUserName(vObj.getUserName());
+		mObj.setSyncSource(vObj.getSyncSource());
+		mObj.setNoOfGroups(vObj.getNoOfGroups());
+		mObj.setNoOfUsers(vObj.getNoOfUsers());
+		return mObj;
+	}
+
+	@Override
+	protected V mapEntityToViewBean(V vObj, T mObj) {
+		vObj.setEventTime( mObj.getEventTime());
+		vObj.setUserName( mObj.getUserName());
+		vObj.setSyncSource( mObj.getSyncSource());
+		vObj.setNoOfUsers( mObj.getNoOfUsers());
+		vObj.setNoOfGroups( mObj.getNoOfGroups());
+		return vObj;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/view/VXFileSyncSourceInfo.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXFileSyncSourceInfo.java b/security-admin/src/main/java/org/apache/ranger/view/VXFileSyncSourceInfo.java
new file mode 100644
index 0000000..d8c66ca
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXFileSyncSourceInfo.java
@@ -0,0 +1,87 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.view;
+
+/**
+ * UserGroupInfo
+ *
+ */
+
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@JsonAutoDetect(getterVisibility=Visibility.NONE, setterVisibility=Visibility.NONE, fieldVisibility=Visibility.ANY)
+@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL )
+@JsonIgnoreProperties(ignoreUnknown=true)
+@XmlRootElement
+public class VXFileSyncSourceInfo implements java.io.Serializable  {
+
+	private static final long serialVersionUID = 1L;
+
+	private String fileName;
+	private String syncTime;
+	private String lastModified;
+
+	public VXFileSyncSourceInfo() {
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getSyncTime() {
+		return syncTime;
+	}
+
+	public void setSyncTime(String syncTime) {
+		this.syncTime = syncTime;
+	}
+
+	public String getLastModified() {
+		return lastModified;
+	}
+
+	public void setLastModified(String lastModified) {
+		this.lastModified = lastModified;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		toString(sb);
+		return sb.toString();
+	}
+
+	public StringBuilder toString(StringBuilder sb) {
+		sb.append("{\"fileName\":\"").append(fileName);
+		sb.append("\", \"syncTime\":\"").append(syncTime);
+		sb.append("\", \"lastModified\":\"").append(lastModified);
+		sb.append("\"}");
+		return sb;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/view/VXLdapSyncSourceInfo.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXLdapSyncSourceInfo.java b/security-admin/src/main/java/org/apache/ranger/view/VXLdapSyncSourceInfo.java
new file mode 100644
index 0000000..fd2d8e1
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXLdapSyncSourceInfo.java
@@ -0,0 +1,108 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.view;
+
+/**
+ * UserGroupInfo
+ *
+ */
+
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@JsonAutoDetect(getterVisibility=Visibility.NONE, setterVisibility=Visibility.NONE, fieldVisibility=Visibility.ANY)
+@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL )
+@JsonIgnoreProperties(ignoreUnknown=true)
+@XmlRootElement
+public class VXLdapSyncSourceInfo implements java.io.Serializable  {
+
+	private static final long serialVersionUID = 1L;
+
+	private String ldapUrl;
+	private String incrementalSycn;
+	private String userSearchFilter;
+	private String groupSearchFilter;
+	private String groupHierarchyLevel;
+
+	public VXLdapSyncSourceInfo() {
+	}
+
+	public String getLdapUrl() {
+		return ldapUrl;
+	}
+
+	public void setLdapUrl(String ldapUrl) {
+		this.ldapUrl = ldapUrl;
+	}
+
+	public String isIncrementalSycn() {
+		return incrementalSycn;
+	}
+
+	public void setIncrementalSycn(String incrementalSycn) {
+		this.incrementalSycn = incrementalSycn;
+	}
+
+	public String getUserSearchFilter() {
+		return userSearchFilter;
+	}
+
+	public void setUserSearchFilter(String userSearchFilter) {
+		this.userSearchFilter = userSearchFilter;
+	}
+
+	public String getGroupSearchFilter() {
+		return groupSearchFilter;
+	}
+
+	public void setGroupSearchFilter(String groupSearchFilter) {
+		this.groupSearchFilter = groupSearchFilter;
+	}
+
+	public String getGroupHierarchyLevel() {
+		return groupHierarchyLevel;
+	}
+
+	public void setGroupHierarchyLevel(String groupHierarchyLevel) {
+		this.groupHierarchyLevel = groupHierarchyLevel;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		toString(sb);
+		return sb.toString();
+	}
+
+	public StringBuilder toString(StringBuilder sb) {
+		sb.append("{\"ldapUrl\":\"").append(ldapUrl);
+		sb.append("\", \"isIncrementalSync\":\"").append(incrementalSycn);
+		sb.append("\", \"userSearchFilter\":\"").append(userSearchFilter);
+		sb.append("\", \"groupSearchFilter\":\"").append(groupSearchFilter);
+		sb.append("\", \"groupHierarchyLevel\":\"").append(groupHierarchyLevel);
+		sb.append("\"}");
+		return sb;
+	}
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfo.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfo.java b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfo.java
new file mode 100644
index 0000000..6fef928
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfo.java
@@ -0,0 +1,141 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.view;
+
+/**
+ * UserGroupInfo
+ *
+ */
+
+import org.apache.ranger.json.JsonDateSerializer;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@JsonAutoDetect(getterVisibility=Visibility.NONE, setterVisibility=Visibility.NONE, fieldVisibility=Visibility.ANY)
+@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL )
+@JsonIgnoreProperties(ignoreUnknown=true)
+@XmlRootElement
+public class VXUgsyncAuditInfo extends VXDataObject implements java.io.Serializable  {
+
+	private static final long serialVersionUID = 1L;
+
+	@JsonSerialize(using=JsonDateSerializer.class)
+	private Date eventTime;
+
+	private String userName;
+	private Long noOfUsers;
+	private Long noOfGroups;
+	private String syncSource;
+	private String sessionId;
+	private Map<String, String> syncSourceInfo;
+	private VXLdapSyncSourceInfo ldapSyncSourceInfo;
+	private VXFileSyncSourceInfo fileSyncSourceInfo;
+	private VXUnixSyncSourceInfo unixSyncSourceInfo;
+
+	public VXUgsyncAuditInfo() {
+	}
+
+	public Date getEventTime() {
+		return eventTime;
+	}
+
+	public void setEventTime(Date eventTime) {
+		this.eventTime = eventTime;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Long getNoOfUsers() {
+		return noOfUsers;
+	}
+
+	public void setNoOfUsers(Long noOfUsers) {
+		this.noOfUsers = noOfUsers;
+	}
+
+	public Long getNoOfGroups() {
+		return noOfGroups;
+	}
+
+	public void setNoOfGroups(Long noOfGroups) {
+		this.noOfGroups = noOfGroups;
+	}
+
+	public String getSyncSource() {
+		return syncSource;
+	}
+
+	public void setSyncSource(String syncSource) {
+		this.syncSource = syncSource;
+	}
+
+	public VXLdapSyncSourceInfo getLdapSyncSourceInfo() {
+		return ldapSyncSourceInfo;
+	}
+
+	public void setLdapSyncSourceInfo(VXLdapSyncSourceInfo ldapSyncSourceInfo) {
+		this.ldapSyncSourceInfo = ldapSyncSourceInfo;
+	}
+
+	public VXFileSyncSourceInfo getFileSyncSourceInfo() {
+		return fileSyncSourceInfo;
+	}
+
+	public void setFileSyncSourceInfo(VXFileSyncSourceInfo fileSyncSourceInfo) {
+		this.fileSyncSourceInfo = fileSyncSourceInfo;
+	}
+
+	public VXUnixSyncSourceInfo getUnixSyncSourceInfo() {
+		return unixSyncSourceInfo;
+	}
+
+	public void setUnixSyncSourceInfo(VXUnixSyncSourceInfo unixSyncSourceInfo) {
+		this.unixSyncSourceInfo = unixSyncSourceInfo;
+	}
+
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
+	public Map<String, String> getSyncSourceInfo() {
+		return syncSourceInfo;
+	}
+
+	public void setSyncSourceInfo(Map<String, String> syncSourceInfo) {
+		this.syncSourceInfo = syncSourceInfo == null ? new HashMap<String, String>() :syncSourceInfo;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/52f5249b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfoList.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfoList.java b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfoList.java
new file mode 100644
index 0000000..c2170e8
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/VXUgsyncAuditInfoList.java
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+
+ package org.apache.ranger.view;
+
+/**
+ * List wrapper class for VXAccessAudit
+ *
+ */
+
+import org.apache.ranger.common.view.VList;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
+
+@JsonAutoDetect(getterVisibility=Visibility.NONE, setterVisibility=Visibility.NONE, fieldVisibility=Visibility.ANY)
+@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL )
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class VXUgsyncAuditInfoList extends VList {
+	private static final long serialVersionUID = 1L;
+    List<VXUgsyncAuditInfo> vxUgsyncAuditInfoList = new ArrayList<VXUgsyncAuditInfo>();
+
+    public VXUgsyncAuditInfoList() {
+	super();
+    }
+
+    public VXUgsyncAuditInfoList(List<VXUgsyncAuditInfo> objList) {
+	super(objList);
+	this.vxUgsyncAuditInfoList = objList;
+    }
+
+    /**
+     * @return the vXAccessAudits
+     */
+    public List<VXUgsyncAuditInfo> getVxUgsyncAuditInfoList() {
+	return vxUgsyncAuditInfoList;
+    }
+
+    /**
+     * @param vxUgsyncAuditInfoList
+     *            the vXAccessAudits to set
+     */
+    public void setVxUgsyncAuditInfoList(List<VXUgsyncAuditInfo> vxUgsyncAuditInfoList) {
+	this.vxUgsyncAuditInfoList = vxUgsyncAuditInfoList;
+    }
+
+    @Override
+    public int getListSize() {
+	if (vxUgsyncAuditInfoList != null) {
+	    return vxUgsyncAuditInfoList.size();
+	}
+	return 0;
+    }
+
+    @Override
+    public List<VXUgsyncAuditInfo> getList() {
+	return vxUgsyncAuditInfoList;
+    }
+
+}