Repository: incubator-ranger Updated Branches: refs/heads/master b802bd3ee -> b05edbc8d
RANGER-421: Streamline usersync process Signed-off-by: sneethiraj <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/b05edbc8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/b05edbc8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/b05edbc8 Branch: refs/heads/master Commit: b05edbc8d568119bb709c65ed5007784dc716407 Parents: b802bd3 Author: Velmurugan Periasamy <[email protected]> Authored: Thu Apr 23 04:52:56 2015 -0400 Committer: sneethiraj <[email protected]> Committed: Thu Apr 23 05:04:14 2015 -0400 ---------------------------------------------------------------------- .../db/mysql/patches/012-createusersyncuser.sql | 48 ++++++ .../oracle/patches/012-createusersyncuser.sql | 50 ++++++ .../db/postgres/xa_core_db_postgres.sql | 4 + .../db/sqlserver/xa_core_db_sqlserver.sql | 6 + .../java/org/apache/ranger/biz/UserMgr.java | 38 ++++- .../java/org/apache/ranger/biz/XUserMgr.java | 141 ++++++++++++++- .../org/apache/ranger/common/RESTErrorUtil.java | 22 +++ .../java/org/apache/ranger/rest/UserREST.java | 1 - .../java/org/apache/ranger/rest/XUserREST.java | 7 + .../conf.dist/security-applicationContext.xml | 4 +- src/main/assembly/usersync.xml | 1 + .../process/PolicyMgrUserGroupBuilder.java | 9 +- .../config/UserGroupSyncConfig.java | 60 ++++++- .../process/PolicyMgrUserGroupBuilder.java | 15 +- .../conf.dist/unixauthservice.properties | 4 + .../scripts/updatepolicymgrpassword.py | 171 +++++++++++++++++++ .../scripts/updatepolicymgrpassword.sh | 128 ++++++++++++++ 17 files changed, 698 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/db/mysql/patches/012-createusersyncuser.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/mysql/patches/012-createusersyncuser.sql b/security-admin/db/mysql/patches/012-createusersyncuser.sql new file mode 100644 index 0000000..9f3af62 --- /dev/null +++ b/security-admin/db/mysql/patches/012-createusersyncuser.sql @@ -0,0 +1,48 @@ +-- 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 create_user_sync; + +delimiter ;; +create procedure create_user_sync() begin +DECLARE loginID varchar(1024); + /* check tables exist or not */ + if exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_portal_user') then + if exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_portal_user_role') then + if exists (select * from information_schema.columns where table_schema=database() and table_name = 'x_user') then + /* check record for login id rangerusersync exist or not */ + if not exists (select * from x_portal_user where login_id = 'rangerusersync') then + INSERT INTO x_portal_user(create_time,update_time,added_by_id,upd_by_id,first_name,last_name,pub_scr_name,login_id,password,email,status,user_src,notes) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),NULL,NULL,'rangerusersync','','rangerusersync','rangerusersync','70b8374d3dfe0325aaa5002a688c7e3b','rangerusersync',1,0,NULL); + end if; + set loginID = (select id from x_portal_user where login_id = 'rangerusersync'); + if not exists (select * from x_portal_user_role where user_id =loginID ) then + INSERT INTO x_portal_user_role(create_time,update_time,added_by_id,upd_by_id,user_id,user_role,status) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),NULL,NULL,loginID,'ROLE_SYS_ADMIN',1); + end if; + if not exists (select * from x_user where user_name = 'admin') then + INSERT INTO x_user(create_time,update_time,added_by_id,upd_by_id,user_name,descr,status) values (UTC_TIMESTAMP(), UTC_TIMESTAMP(),NULL,NULL,'admin','Administrator',0); + end if; + if not exists (select * from x_user where user_name = 'rangerusersync') then + INSERT INTO x_user(create_time,update_time,added_by_id,upd_by_id,user_name,descr,status) values (UTC_TIMESTAMP(), UTC_TIMESTAMP(),NULL,NULL,'rangerusersync','rangerusersync',0); + end if; + end if; + end if; + end if; + +end;; + +delimiter ; +call create_user_sync(); + +drop procedure if exists create_user_sync; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/db/oracle/patches/012-createusersyncuser.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/oracle/patches/012-createusersyncuser.sql b/security-admin/db/oracle/patches/012-createusersyncuser.sql new file mode 100644 index 0000000..5b99b1f --- /dev/null +++ b/security-admin/db/oracle/patches/012-createusersyncuser.sql @@ -0,0 +1,50 @@ +-- 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; + loginID number:=0; + sql_stmt VARCHAR2(1000); + first_name VARCHAR2(10):='rangerusersync'; + scr_name VARCHAR2(10):='rangerusersync'; + login_name VARCHAR2(10):='rangerusersync'; + password VARCHAR2(50):='70b8374d3dfe0325aaa5002a688c7e3b'; + user_role VARCHAR2(50):='ROLE_SYS_ADMIN'; + email VARCHAR2(20):='rangerusersync'; +BEGIN + select count(*) into v_count from user_tables where table_name IN('X_PORTAL_USER','X_PORTAL_USER_ROLE','X_USER'); + if (v_count = 3) then + v_count:=0; + select count(*) into v_count from x_portal_user where login_id = login_name; + if (v_count = 0) then + sql_stmt := 'INSERT INTO x_portal_user(ID,CREATE_TIME,UPDATE_TIME,FIRST_NAME,LAST_NAME,PUB_SCR_NAME,LOGIN_ID,PASSWORD,EMAIL,STATUS,USER_SRC) VALUES (X_PORTAL_USER_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),:1,NULL,:2,:3,:4,:5,1,0)'; + EXECUTE IMMEDIATE sql_stmt USING first_name,scr_name,login_name,password,email; + commit; + end if; + select id into loginID from x_portal_user where login_id = login_name; + if (loginID > 0) then + sql_stmt := 'INSERT INTO x_portal_user_role(id,create_time,update_time,user_id,user_role,status) VALUES (X_PORTAL_USER_ROLE_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),:1,:2,1)'; + EXECUTE IMMEDIATE sql_stmt USING loginID,user_role; + commit; + end if; + v_count:=0; + select count(*) into v_count from x_user where user_name = login_name; + if (v_count = 0) then + sql_stmt := 'INSERT INTO x_user(id,create_time,update_time,user_name,descr,status) values (X_USER_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),:1,:2,0)'; + EXECUTE IMMEDIATE sql_stmt USING login_name,login_name; + commit; + end if; + end if; +end;/ \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/db/postgres/xa_core_db_postgres.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/postgres/xa_core_db_postgres.sql b/security-admin/db/postgres/xa_core_db_postgres.sql index d4aee9f..574b4ec 100644 --- a/security-admin/db/postgres/xa_core_db_postgres.sql +++ b/security-admin/db/postgres/xa_core_db_postgres.sql @@ -967,4 +967,8 @@ CREATE INDEX x_usr_module_perm_idx_moduleid ON x_user_module_perm(module_id); CREATE INDEX x_usr_module_perm_idx_userid ON x_user_module_perm(user_id); CREATE INDEX x_grp_module_perm_idx_groupid ON x_group_module_perm(group_id); CREATE INDEX x_grp_module_perm_idx_moduleid ON x_group_module_perm(module_id); +COMMIT; +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,'rangerusersync','','rangerusersync','rangerusersync','70b8374d3dfe0325aaa5002a688c7e3b','rangerusersync',1); +INSERT INTO x_portal_user_role(CREATE_TIME,UPDATE_TIME,USER_ID,USER_ROLE,STATUS)VALUES(current_timestamp,current_timestamp,2,'ROLE_SYS_ADMIN',1); +INSERT INTO x_user(CREATE_TIME,UPDATE_TIME,user_name,status,descr)VALUES(current_timestamp,current_timestamp,'rangerusersync',0,'rangerusersync'); COMMIT; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/db/sqlserver/xa_core_db_sqlserver.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql index 835dd3e..207b137 100644 --- a/security-admin/db/sqlserver/xa_core_db_sqlserver.sql +++ b/security-admin/db/sqlserver/xa_core_db_sqlserver.sql @@ -2748,4 +2748,10 @@ GO INSERT INTO x_modules_master(create_time,update_time,added_by_id,upd_by_id,module,url) VALUES(CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,1,'Audit',''); GO INSERT INTO x_modules_master(create_time,update_time,added_by_id,upd_by_id,module,url) VALUES(CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1,1,'KMS',''); +GO +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,'rangerusersync','','rangerusersync','rangerusersync','70b8374d3dfe0325aaa5002a688c7e3b','rangerusersync',1); +GO +insert into x_portal_user_role (CREATE_TIME,UPDATE_TIME,USER_ID,USER_ROLE,STATUS) values (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,2,'ROLE_SYS_ADMIN',1); +GO +insert into x_user (CREATE_TIME,UPDATE_TIME,user_name,status,descr) values (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'rangerusersync',0,'rangerusersync'); exit \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java ---------------------------------------------------------------------- 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 0b6281b..08afe79 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 @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import javax.persistence.Query; +import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.ranger.common.AppConstants; @@ -135,6 +136,21 @@ public class UserMgr { public XXPortalUser createUser(VXPortalUser userProfile, int userStatus, Collection<String> userRoleList) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("User " + + "creation denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } XXPortalUser user = mapVXPortalUserToXXPortalUser(userProfile); user = createUser(user, userStatus, userRoleList); @@ -511,6 +527,21 @@ public class UserMgr { * @param userId */ public VXPortalUser deactivateUser(XXPortalUser gjUser) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("deactivation of user" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } if (gjUser != null && gjUser.getStatus() != RangerConstants.ACT_STATUS_DEACTIVATED) { logger.info("Marking user " + gjUser.getLoginId() + " as deleted"); @@ -1101,8 +1132,13 @@ public class UserMgr { + " ,isn't permitted to perform the action."); } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); } - + logger.info("create:" + userProfile.getEmailAddress()); XXPortalUser xXPortalUser = null; String loginId = userProfile.getLoginId(); String emailAddress = userProfile.getEmailAddress(); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/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 c96eb17..512c58f 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 @@ -46,6 +46,7 @@ import org.apache.ranger.common.MessageEnums; import org.apache.ranger.common.PropertiesUtil; import org.apache.ranger.common.RangerConstants; import org.apache.ranger.common.SearchCriteria; +import org.apache.ranger.common.UserSessionBase; import org.apache.ranger.db.RangerDaoManager; import org.apache.ranger.db.XXGroupUserDao; import org.apache.ranger.entity.XXGroup; @@ -65,7 +66,8 @@ 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 javax.servlet.http.HttpServletResponse; +import org.apache.ranger.view.VXResponse; @Component public class XUserMgr extends XUserMgrBase { @@ -102,6 +104,21 @@ public class XUserMgr extends XUserMgrBase { static final Logger logger = Logger.getLogger(XUserMgr.class); public void deleteXGroup(Long id, boolean force) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("deletion of group" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } if (force) { SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.addParam("xGroupId", id); @@ -122,6 +139,21 @@ public class XUserMgr extends XUserMgrBase { } public void deleteXUser(Long id, boolean force) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("deletion of user" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } if (force) { SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.addParam("xUserId", id); @@ -153,7 +185,21 @@ public class XUserMgr extends XUserMgrBase { } public VXUser createXUser(VXUser vXUser) { - + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("creation of user" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } String userName = vXUser.getName(); if (userName == null || userName.isEmpty()) { throw restErrorUtil.createRESTException("Please provide a valid " @@ -432,7 +478,21 @@ public class XUserMgr extends XUserMgrBase { public VXUserGroupInfo createXUserGroupFromMap( VXUserGroupInfo vXUserGroupInfo) { - + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("User group " + + "creation denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } VXUserGroupInfo vxUGInfo = new VXUserGroupInfo(); VXUser vXUser = vXUserGroupInfo.getXuserInfo(); @@ -459,10 +519,40 @@ public class XUserMgr extends XUserMgrBase { } public VXUser createXUserWithOutLogin(VXUser vXUser) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("creation of user" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } return xUserService.createXUserWithOutLogin(vXUser); } public VXGroup createXGroup(VXGroup vXGroup) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("creation of group" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } // FIXME Just a hack if (vXGroup.getDescription() == null) { vXGroup.setDescription(vXGroup.getName()); @@ -476,10 +566,40 @@ public class XUserMgr extends XUserMgrBase { } public VXGroup createXGroupWithoutLogin(VXGroup vXGroup) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("creation of group" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } return xGroupService.createXGroupWithOutLogin(vXGroup); } public VXGroupUser createXGroupUser(VXGroupUser vXGroupUser) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("creation of group" + + " denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } vXGroupUser = xGroupUserService .createXGroupUserWithOutLogin(vXGroupUser); return vXGroupUser; @@ -526,6 +646,21 @@ public class XUserMgr extends XUserMgrBase { */ public void deleteXGroupAndXUser(String groupName, String userName) { + UserSessionBase session = ContextUtil.getCurrentUserSession(); + if (session != null) { + if (!session.isUserAdmin()) { + throw restErrorUtil.create403RESTException("User " + + "deletion denied. LoggedInUser=" + + (session != null ? session.getXXPortalUser().getId() + : "Not Logged In") + + " ,isn't permitted to perform the action."); + } + }else{ + VXResponse vXResponse = new VXResponse(); + vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED); + vXResponse.setMsgDesc("Bad Credentials"); + throw restErrorUtil.generateRESTException(vXResponse); + } VXGroup vxGroup = xGroupService.getGroupByGroupName(groupName); VXUser vxUser = xUserService.getXUserByUserName(userName); SearchCriteria searchCriteria = new SearchCriteria(); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/src/main/java/org/apache/ranger/common/RESTErrorUtil.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/common/RESTErrorUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RESTErrorUtil.java index 8d7d96d..a17da9b 100644 --- a/security-admin/src/main/java/org/apache/ranger/common/RESTErrorUtil.java +++ b/security-admin/src/main/java/org/apache/ranger/common/RESTErrorUtil.java @@ -68,6 +68,28 @@ public class RESTErrorUtil { return restException; } + public WebApplicationException generateRESTException(VXResponse gjResponse) { + Response errorResponse = Response + .status(gjResponse.getStatusCode()) + .entity(gjResponse).build(); + + WebApplicationException restException = new WebApplicationException( + errorResponse); + restException.fillInStackTrace(); + UserSessionBase userSession = ContextUtil.getCurrentUserSession(); + Long sessionId = null; + String loginId = null; + if (userSession != null) { + loginId = userSession.getLoginId(); + sessionId = userSession.getSessionId(); + } + + logger.info("Request failed. SessionId=" + sessionId + ", loginId=" + + loginId + ", logMessage=" + gjResponse.getMsgDesc(), + restException); + + return restException; + } /** * * @param logMessage http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/src/main/java/org/apache/ranger/rest/UserREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/UserREST.java b/security-admin/src/main/java/org/apache/ranger/rest/UserREST.java index 3cb2d2d..a9d0059 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/UserREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/UserREST.java @@ -188,7 +188,6 @@ public class UserREST { public VXPortalUser createDefaultAccountUser(VXPortalUser userProfile, @Context HttpServletRequest servletRequest) { VXPortalUser vxPortalUser; - logger.info("create:" + userProfile.getEmailAddress()); vxPortalUser=userManager.createDefaultAccountUser(userProfile); if(vxPortalUser!=null) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/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 45fea99..4c47584 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 @@ -154,6 +154,7 @@ public class XUserREST { @POST @Path("/groups") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXGroup createXGroup(VXGroup vXGroup) { return xUserMgr.createXGroupWithoutLogin(vXGroup); } @@ -161,6 +162,7 @@ public class XUserREST { @POST @Path("/secure/groups") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXGroup secureCreateXGroup(VXGroup vXGroup) { return xUserMgr.createXGroup(vXGroup); } @@ -244,6 +246,7 @@ public class XUserREST { @POST @Path("/users") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXUser createXUser(VXUser vXUser) { return xUserMgr.createXUserWithOutLogin(vXUser); } @@ -251,6 +254,7 @@ public class XUserREST { @POST @Path("/users/userinfo") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXUserGroupInfo createXUserGroupFromMap(VXUserGroupInfo vXUserGroupInfo) { return xUserMgr.createXUserGroupFromMap(vXUserGroupInfo); } @@ -258,6 +262,7 @@ public class XUserREST { @POST @Path("/secure/users") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXUser secureCreateXUser(VXUser vXUser) { return xUserMgr.createXUser(vXUser); } @@ -338,6 +343,7 @@ public class XUserREST { @POST @Path("/groupusers") @Produces({ "application/xml", "application/json" }) + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public VXGroupUser createXGroupUser(VXGroupUser vXGroupUser) { return xUserMgr.createXGroupUser(vXGroupUser); } @@ -604,6 +610,7 @@ public class XUserREST { // @DELETE @Path("/group/{groupName}/user/{userName}") + @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") public void deleteXGroupAndXUser(@PathParam("groupName") String groupName, @PathParam("userName") String userName, @Context HttpServletRequest request) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/security-admin/src/main/resources/conf.dist/security-applicationContext.xml ---------------------------------------------------------------------- diff --git a/security-admin/src/main/resources/conf.dist/security-applicationContext.xml b/security-admin/src/main/resources/conf.dist/security-applicationContext.xml index 8d2392b..ee73136 100644 --- a/security-admin/src/main/resources/conf.dist/security-applicationContext.xml +++ b/security-admin/src/main/resources/conf.dist/security-applicationContext.xml @@ -61,10 +61,10 @@ http://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd"> <security:http pattern="/service/plugins/policies/download/*" security="none"/> <security:http pattern="/service/plugins/services/grant/*" security="none"/> <security:http pattern="/service/plugins/services/revoke/*" security="none"/> - <security:http pattern="/service/users/default" security="none"/> + <!--<security:http pattern="/service/users/default" security="none"/> <security:http pattern="/service/xusers/groups/**" security="none"/> <security:http pattern="/service/xusers/users/*" security="none"/> - <security:http pattern="/service/xusers/groupusers/*" security="none"/> + <security:http pattern="/service/xusers/groupusers/*" security="none"/>--> <security:http auto-config="false" create-session="always" entry-point-ref="authenticationProcessingFilterEntryPoint"> <security:session-management session-fixation-protection="newSession" /> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/src/main/assembly/usersync.xml ---------------------------------------------------------------------- diff --git a/src/main/assembly/usersync.xml b/src/main/assembly/usersync.xml index 6ad433c..b5f1620 100644 --- a/src/main/assembly/usersync.xml +++ b/src/main/assembly/usersync.xml @@ -50,6 +50,7 @@ <include>org.apache.ranger:credentialbuilder</include> <include>org.apache.ranger:ranger-util</include> <include>commons-io:commons-io:jar:${commons.io.version}</include> + <include>org.apache.htrace:htrace-core</include> </includes> <unpack>false</unpack> </dependencySet> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/PolicyMgrUserGroupBuilder.java ---------------------------------------------------------------------- diff --git a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/PolicyMgrUserGroupBuilder.java b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/PolicyMgrUserGroupBuilder.java index 7cd06cc..2013f1c 100644 --- a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/PolicyMgrUserGroupBuilder.java +++ b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/PolicyMgrUserGroupBuilder.java @@ -59,6 +59,7 @@ import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; import com.sun.jersey.client.urlconnection.HTTPSProperties; public class PolicyMgrUserGroupBuilder implements UserGroupSink { @@ -669,7 +670,13 @@ public class PolicyMgrUserGroupBuilder implements UserGroupSink { cc.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true); ret = Client.create(cc); } - + if(ret!=null){ + String username = config.getPolicyMgrUserName(); + String password = config.getPolicyMgrPassword(); + if(username!=null && password!=null){ + ret.addFilter(new HTTPBasicAuthFilter(username, password)); + } + } return ret ; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java ---------------------------------------------------------------------- diff --git a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java index 2701353..3ff3a0a 100644 --- a/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java +++ b/ugsync/src/main/java/org/apache/ranger/unixusersync/config/UserGroupSyncConfig.java @@ -144,6 +144,17 @@ public class UserGroupSyncConfig { private static final String LGSYNC_GROUP_MEMBER_ATTRIBUTE_NAME = "ldapGroupSync.groupMemberAttributeName"; private static final String DEFAULT_LGSYNC_GROUP_MEMBER_ATTRIBUTE_NAME = "member"; + private static final String SYNC_POLICY_MGR_KEYSTORE = "userSync.policyMgrKeystore"; + + private static final String SYNC_POLICY_MGR_ALIAS = "userSync.policyMgrAlias"; + + private static final String SYNC_POLICY_MGR_PASSWORD = "userSync.policyMgrPassword"; + + private static final String SYNC_POLICY_MGR_USERNAME = "userSync.policyMgrUserName"; + + private static final String DEFAULT_POLICYMGR_USERNAME = "rangerusersync"; + + private static final String DEFAULT_POLICYMGR_PASSWORD = "rangerusersync"; private Properties prop = new Properties() ; private static volatile UserGroupSyncConfig me = null ; @@ -564,5 +575,52 @@ public class UserGroupSyncConfig { public String getProperty(String aPropertyName, String aDefaultValue) { return prop.getProperty(aPropertyName, aDefaultValue) ; } - + + public String getPolicyMgrPassword(){ + //update credential from keystore + String password=null; + if(prop!=null && prop.containsKey(SYNC_POLICY_MGR_KEYSTORE)){ + password=prop.getProperty(SYNC_POLICY_MGR_PASSWORD); + if(password!=null && !password.isEmpty()){ + return password; + } + } + if(prop!=null && prop.containsKey(SYNC_POLICY_MGR_KEYSTORE) && prop.containsKey(SYNC_POLICY_MGR_ALIAS)){ + String path=prop.getProperty(SYNC_POLICY_MGR_KEYSTORE); + String alias=prop.getProperty(SYNC_POLICY_MGR_ALIAS,"policymgr.user.password"); + if(path!=null && alias!=null){ + if(!path.trim().isEmpty() && !alias.trim().isEmpty()){ + try{ + password=CredentialReader.getDecryptedString(path.trim(),alias.trim()); + }catch(Exception ex){ + password=null; + } + if(password!=null&& !password.trim().isEmpty() && !password.trim().equalsIgnoreCase("none")){ + prop.setProperty(SYNC_POLICY_MGR_PASSWORD,password); + return password; + } + } + } + } + return null; + } + + public String getPolicyMgrUserName() { + String userName=null; + if(prop!=null && prop.containsKey(SYNC_POLICY_MGR_USERNAME)){ + userName=prop.getProperty(SYNC_POLICY_MGR_USERNAME); + if(userName!=null && !userName.isEmpty()){ + return userName; + } + } + return null; + } + + public String getDefaultPolicyMgrUserName(){ + return DEFAULT_POLICYMGR_USERNAME; + } + + public String getDefaultPolicyMgrPassword(){ + return DEFAULT_POLICYMGR_PASSWORD; + } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/ugsync/src/main/java/org/apache/ranger/unixusersync/process/PolicyMgrUserGroupBuilder.java ---------------------------------------------------------------------- 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 6d78d25..20ffbf1 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 @@ -50,6 +50,7 @@ import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; import com.sun.jersey.client.urlconnection.HTTPSProperties; import org.apache.ranger.unixusersync.config.UserGroupSyncConfig; import org.apache.ranger.unixusersync.model.GetXGroupListResponse; @@ -446,7 +447,7 @@ public class PolicyMgrUserGroupBuilder implements UserGroupSink { addXUserGroupInfo(user, groups) ; } - Client c = new Client(); + Client c = getClient(); WebResource r = c.resource(getURL(PM_ADD_USER_GROUP_INFO_URI)); @@ -687,7 +688,17 @@ public class PolicyMgrUserGroupBuilder implements UserGroupSink { cc.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true); ret = Client.create(cc); } - + if(ret!=null){ + String username = config.getPolicyMgrUserName(); + String password = config.getPolicyMgrPassword(); + if(username==null||password==null||username.trim().isEmpty()||password.trim().isEmpty()){ + username=config.getDefaultPolicyMgrUserName(); + password=config.getDefaultPolicyMgrPassword(); + } + if(username!=null && password!=null){ + ret.addFilter(new HTTPBasicAuthFilter(username, password)); + } + } return ret ; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/unixauthservice/conf.dist/unixauthservice.properties ---------------------------------------------------------------------- diff --git a/unixauthservice/conf.dist/unixauthservice.properties b/unixauthservice/conf.dist/unixauthservice.properties index bedc810..d1a1f5f 100644 --- a/unixauthservice/conf.dist/unixauthservice.properties +++ b/unixauthservice/conf.dist/unixauthservice.properties @@ -242,3 +242,7 @@ ldapGroupSync.pagedResultsEnabled= # search results would be returned page by page with the specified number of entries per page # default value: 500 ldapGroupSync.pagedResultsSize= +userSync.policyMgrUserName =rangerusersync +userSync.policyMgrPassword = +userSync.policyMgrAlias =policymgr.user.password +userSync.policyMgrKeystore =/usr/lib/xausersync/.jceks/xausersync.jceks \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/unixauthservice/scripts/updatepolicymgrpassword.py ---------------------------------------------------------------------- diff --git a/unixauthservice/scripts/updatepolicymgrpassword.py b/unixauthservice/scripts/updatepolicymgrpassword.py new file mode 100644 index 0000000..b07458b --- /dev/null +++ b/unixauthservice/scripts/updatepolicymgrpassword.py @@ -0,0 +1,171 @@ +# +# Licensed 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. See accompanying LICENSE file. +# + +import os +import re +import sys +import errno +import shlex +import logging +import subprocess +import platform +import fileinput +import getpass +import shutil +from os.path import basename +from subprocess import Popen,PIPE +from datetime import date +from datetime import datetime +globalDict = {} + +os_name = platform.system() +os_name = os_name.upper() + +def check_output(query): + if os_name == "LINUX": + p = subprocess.Popen(shlex.split(query), stdout=subprocess.PIPE) + elif os_name == "WINDOWS": + p = subprocess.Popen(query, stdout=subprocess.PIPE, shell=True) + output = p.communicate ()[0] + return output + +def log(msg,type): + if type == 'info': + logging.info(" %s",msg) + if type == 'debug': + logging.debug(" %s",msg) + if type == 'warning': + logging.warning(" %s",msg) + if type == 'exception': + logging.exception(" %s",msg) + if type == 'error': + logging.error(" %s",msg) + +def populate_global_dict(): + global globalDict + read_config_file = open(os.path.join(os.getcwd(),'install.properties')) + for each_line in read_config_file.read().split('\n') : + if len(each_line) == 0 : continue + if re.search('=', each_line): + key , value = each_line.strip().split("=",1) + key = key.strip() + value = value.strip() + globalDict[key] = value + +def ModConfig(File, Variable, Setting): + """ + Modify Config file variable with new setting + """ + VarFound = False + AlreadySet = False + V=str(Variable) + S=str(Setting) + # use quotes if setting has spaces # + if ' ' in S: + S = '"%s"' % S + + for line in fileinput.input(File, inplace = 1): + # process lines that look like config settings # + if not line.lstrip(' ').startswith('#') and '=' in line: + _infile_var = str(line.split('=')[0].rstrip(' ')) + _infile_set = str(line.split('=')[1].lstrip(' ').rstrip()) + # only change the first matching occurrence # + if VarFound == False and _infile_var.rstrip(' ') == V: + VarFound = True + # don't change it if it is already set # + if _infile_set.lstrip(' ') == S: + AlreadySet = True + else: + line = "%s = %s\n" % (V, S) + + sys.stdout.write(line) + + # Append the variable if it wasn't found # + if not VarFound: + print "property '%s' not found. Adding it to %s" % (V, File) + with open(File, "a") as f: + f.write("%s = %s\n" % (V, S)) + elif AlreadySet == True: + print "property '%s' unchanged" % (V) + else: + print "property '%s' modified to '%s'" % (V, S) + + return + +def main(): + + FORMAT = '%(asctime)-15s %(message)s' + logging.basicConfig(format=FORMAT, level=logging.DEBUG) + populate_global_dict() + + SYNC_LDAP_BIND_KEYSTOREPATH=globalDict['CRED_KEYSTORE_FILENAME'] + SYNC_POLICY_MGR_ALIAS="policymgr.user.password" + SYNC_POLICY_MGR_PASSWORD = '' + SYNC_POLICY_MGR_USERNAME = '' + JAVA_BIN = '' + unix_user = "ranger" + unix_group = "ranger" + + if os.environ['JAVA_HOME'] == "": + log("[E] ---------- JAVA_HOME environment property not defined, aborting installation. ----------", "error") + sys.exit(1) + + JAVA_BIN=os.path.join(os.environ['JAVA_HOME'],'bin','java') + if os_name == "WINDOWS" : + JAVA_BIN = JAVA_BIN+'.exe' + if os.path.isfile(JAVA_BIN): + pass + else: + while os.path.isfile(JAVA_BIN) == False: + log("Enter java executable path: :","info") + JAVA_BIN=raw_input() + + log("[I] Using Java:" + str(JAVA_BIN),"info") + + while SYNC_POLICY_MGR_USERNAME == "": + print "Enter policymgr user name:" + SYNC_POLICY_MGR_USERNAME=raw_input() + + while SYNC_POLICY_MGR_PASSWORD == "": + SYNC_POLICY_MGR_PASSWORD=getpass.getpass("Enter policymgr user password:") + + if SYNC_LDAP_BIND_KEYSTOREPATH != "" or SYNC_POLICY_MGR_ALIAS != "" or SYNC_POLICY_MGR_USERNAME != "" or SYNC_POLICY_MGR_PASSWORD != "": + log("[I] Storing policymgr usersync password in credential store:","info") + cmd="%s -cp lib/* org.apache.ranger.credentialapi.buildks create %s -value %s -provider jceks://file%s" %(JAVA_BIN,SYNC_POLICY_MGR_ALIAS,SYNC_POLICY_MGR_PASSWORD,SYNC_LDAP_BIND_KEYSTOREPATH) + ret=subprocess.call(shlex.split(cmd)) + if ret == 0: + cmd="chown %s:%s %s" %(unix_user,unix_group,SYNC_LDAP_BIND_KEYSTOREPATH) + ret=subprocess.call(shlex.split(cmd)) + if ret == 0: + CFG_FILE=os.path.join(os.getcwd(),'conf','unixauthservice.properties') + NEW_CFG_FILE=os.path.join(os.getcwd(),'conf','unixauthservice.properties.tmp') + if os.path.isfile(CFG_FILE): + shutil.copyfile(CFG_FILE, NEW_CFG_FILE) + ModConfig(NEW_CFG_FILE, "userSync.policyMgrUserName", SYNC_POLICY_MGR_USERNAME) + ModConfig(NEW_CFG_FILE, "userSync.policyMgrKeystore", SYNC_LDAP_BIND_KEYSTOREPATH) + ModConfig(NEW_CFG_FILE, "userSync.policyMgrAlias", SYNC_POLICY_MGR_ALIAS) + now = datetime.now() + shutil.copyfile(CFG_FILE, CFG_FILE+"."+now.strftime('%Y%m%d%H%M%S')) + shutil.copyfile(NEW_CFG_FILE,CFG_FILE) + else: + log("[E] Required file not found: ["+CFG_FILE+"]","error") + else: + log("[E] unable to execute command ["+cmd+"]","error") + else: + log("[E] unable to execute command ["+cmd+"]","error") + else: + log("[E] Input Error","error") + + +main() http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/b05edbc8/unixauthservice/scripts/updatepolicymgrpassword.sh ---------------------------------------------------------------------- diff --git a/unixauthservice/scripts/updatepolicymgrpassword.sh b/unixauthservice/scripts/updatepolicymgrpassword.sh new file mode 100644 index 0000000..a13c030 --- /dev/null +++ b/unixauthservice/scripts/updatepolicymgrpassword.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +# 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. + +INSTALL_BASE=$PWD + +MOD_NAME="ranger-usersync" +unix_user=ranger +unix_group=ranger + +INSTALL_DIR=${INSTALL_BASE} + +curDt=`date '+%Y%m%d%H%M%S'` +LOGFILE=setup.log.$curDt + +log() { + local prefix="[$(date +%Y/%m/%d\ %H:%M:%S)]: " + echo "${prefix} $@" >> $LOGFILE + echo "${prefix} $@" +} + +# Ensure that the user is root +MY_ID=`id -u` +if [ "${MY_ID}" -ne 0 ] +then + echo "ERROR: You must run this script as root user." + exit 1 +fi + +# Ensure JAVA_HOME is set +if [ "${JAVA_HOME}" == "" ] +then + echo "ERROR: JAVA_HOME environment property not defined, aborting installation" + exit 2 +fi + +# Grep configuration properties from install.properties +cdir=`dirname $0` + +check_ret_status(){ + if [ $1 -ne 0 ]; then + log "[E] $2"; + exit 1; + fi +} + +SYNC_LDAP_BIND_KEYSTOREPATH=`grep '^[ \t]*CRED_KEYSTORE_FILENAME[ \t]*=' ${cdir}/install.properties | sed -e 's:^[ \t]*CRED_KEYSTORE_FILENAME[ \t]*=[ \t]*::'` + +# END Grep configuration properties from install.properties +# Store POLICY_MGR user password in credential store +SYNC_POLICY_MGR_ALIAS="policymgr.user.password" +SYNC_POLICY_MGR_PASSWORD="rangerusersync" +SYNC_POLICY_MGR_USERNAME="rangerusersync" +count=0 +while : +do + if [ $count -gt 2 ] + then + log "[E] Unable to continue as correct input is not provided in 3 attempts." + exit 1 + fi + printf "Please enter policymgr username: " + read SYNC_POLICY_MGR_USERNAME + if [[ "${SYNC_POLICY_MGR_USERNAME}" != "" ]] + then + break; + fi +done +while : +do + if [ $count -gt 2 ] + then + log "[E] Unable to continue as correct input is not provided in 3 attempts." + exit 1 + fi + printf "Please enter policymgr password: " + stty -echo + read SYNC_POLICY_MGR_PASSWORD + stty echo + if [[ "${SYNC_POLICY_MGR_PASSWORD}" != "" ]] + then + break; + fi +done +if [[ "${SYNC_POLICY_MGR_ALIAS}" != "" && "${SYNC_LDAP_BIND_KEYSTOREPATH}" != "" && "${SYNC_POLICY_MGR_PASSWORD}" != "" && "${SYNC_POLICY_MGR_USERNAME}" != "" ]] +then + log "[I] Storing policymgr usersync password in credential store" + mkdir -p `dirname "${SYNC_LDAP_BIND_KEYSTOREPATH}"` + chown ${unix_user}:${unix_group} `dirname "${SYNC_LDAP_BIND_KEYSTOREPATH}"` + $JAVA_HOME/bin/java -cp "lib/*" org.apache.ranger.credentialapi.buildks create "$SYNC_POLICY_MGR_ALIAS" -value "$SYNC_POLICY_MGR_PASSWORD" -provider jceks://file$SYNC_LDAP_BIND_KEYSTOREPATH +fi + +# Create $INSTALL_DIR/conf/unixauthservice.properties + +CFG_FILE="${cdir}/conf/unixauthservice.properties" +NEW_CFG_FILE=${cdir}/conf/unixauthservice.properties.tmp + +if [ -f ${CFG_FILE} ] +then + sed \ + -e "s|^\( *userSync.policyMgrUserName *=\).*|\1 ${SYNC_POLICY_MGR_USERNAME}|" \ + -e "s|^\( *userSync.policyMgrKeystore *=\).*|\1 ${SYNC_LDAP_BIND_KEYSTOREPATH}|" \ + -e "s|^\( *userSync.policyMgrAlias *=\).*|\1 ${SYNC_POLICY_MGR_ALIAS}|" \ + ${CFG_FILE} > ${NEW_CFG_FILE} + + echo "<${logdir}> ${CFG_FILE} > ${NEW_CFG_FILE}" +else + echo "ERROR: Required file, not found: ${CFG_FILE}, Aborting installation" + exit 8 +fi + +mv ${cdir}/conf/unixauthservice.properties ${cdir}/conf/unixauthservice.properties.${curDt} +mv ${cdir}/conf/unixauthservice.properties.tmp ${cdir}/conf/unixauthservice.properties + +#END Create $INSTALL_DIR/conf/unixauthservice.properties \ No newline at end of file
