Repository: ranger Updated Branches: refs/heads/ranger-1.1 4550f7ffd -> 737ec9969
RANGER-2279: Reduce the time spent changing passwords during Ranger Admin start Project: http://git-wip-us.apache.org/repos/asf/ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/737ec996 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/737ec996 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/737ec996 Branch: refs/heads/ranger-1.1 Commit: 737ec99695c7256e908ab79418708c0be526f485 Parents: 4550f7f Author: Pradeep <prad...@apache.org> Authored: Tue Nov 6 18:38:35 2018 +0530 Committer: Pradeep <prad...@apache.org> Committed: Wed Nov 14 19:25:03 2018 +0530 ---------------------------------------------------------------------- security-admin/scripts/db_setup.py | 534 ++++++++++++++++++- security-admin/scripts/setup.sh | 91 ++-- .../patch/cliutil/ChangePasswordUtil.java | 191 +++++-- 3 files changed, 718 insertions(+), 98 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/737ec996/security-admin/scripts/db_setup.py ---------------------------------------------------------------------- diff --git a/security-admin/scripts/db_setup.py b/security-admin/scripts/db_setup.py index f84c8ca..73b24ac 100644 --- a/security-admin/scripts/db_setup.py +++ b/security-admin/scripts/db_setup.py @@ -703,6 +703,109 @@ class MysqlConf(BaseDB): log("[E] Ranger "+ userName +" default password change request failed", "error") sys.exit(1) + def change_all_admin_default_password(self, xa_db_host, db_user, db_password, db_name,userPwdArray): + userPwdString ="" + if len(userPwdArray)>5: + for j in range(len(userPwdArray)): + if str(userPwdArray[j]) == "-pair": + userPwdString= userPwdString + " \"" + userPwdArray[j+1] + "\" \"" + userPwdArray[j+2] + "\" \"" + userPwdArray[j+3] +"\"" + + userName = "all admins" + className = "ChangePasswordUtil" + version = "DEFAULT_ALL_ADMIN_UPDATE" + app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") + filePath = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch","cliutil","ChangePasswordUtil.class") + if os.path.exists(filePath): + if version != "": + get_cmd = self.get_jisql_cmd(db_user, db_password, db_name) + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + log("[I] Ranger "+ userName +" default password has already been changed!!","info") + else: + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + countTries = 0 + while(output.strip(version + " |")): + if countTries < 3: + log("[I] Ranger Password change utility is being executed by some other process" ,"info") + time.sleep(retryPatchAfterSeconds) + jisql_log(query, db_password) + output = check_output(query) + countTries += 1 + else: + log("[E] Tried updating the password "+ str(countTries) + " times","error") + log("[E] If Ranger "+ userName +" user password is not being changed by some other process then manually delete the entry from ranger database table x_db_version_h table where version is " + version ,"error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\"" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0: + log ("[I] Ranger "+ userName +" default password change request is in process..","info") + else: + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + if is_unix: + path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + elif os_name == "WINDOWS": + path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + get_java_cmd = "%s -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.cliutil.%s %s -default"%(self.JAVA_BIN,ranger_log,path,className, userPwdString) + if is_unix: + status = subprocess.call(shlex.split(get_java_cmd)) + elif os_name == "WINDOWS": + status = subprocess.call(get_java_cmd) + if status == 0 or status==2: + if is_unix: + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0 and status == 0: + log ("[I] Ranger "+ userName +" default password change request processed successfully..","info") + elif ret == 0 and status == 2: + log ("[I] Ranger "+ userName +" default password change request process skipped!","info") + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name): name = basename(file_name) if os.path.isfile(file_name): @@ -1445,6 +1548,109 @@ class OracleConf(BaseDB): log("[E] Ranger "+ userName +" default password change request failed", "error") sys.exit(1) + def change_all_admin_default_password(self, xa_db_host, db_user, db_password, db_name,userPwdArray): + userPwdString ="" + if len(userPwdArray)>5: + for j in range(len(userPwdArray)): + if str(userPwdArray[j]) == "-pair": + userPwdString= userPwdString + " \"" + userPwdArray[j+1] + "\" \"" + userPwdArray[j+2] + "\" \"" + userPwdArray[j+3] +"\"" + + userName = "all admins" + className = "ChangePasswordUtil" + version = "DEFAULT_ALL_ADMIN_UPDATE" + app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") + filePath = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch","cliutil","ChangePasswordUtil.class") + if os.path.exists(filePath): + if version != "": + get_cmd = self.get_jisql_cmd(db_user, db_password) + if is_unix: + query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + log("[I] Ranger "+ userName +" default password has already been changed!!","info") + else: + if is_unix: + query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + countTries = 0 + while(output.strip(version + " |")): + if countTries < 3: + log("[I] Ranger Password change utility is being executed by some other process" ,"info") + time.sleep(retryPatchAfterSeconds) + jisql_log(query, db_password) + output = check_output(query) + countTries += 1 + else: + log("[E] Tried updating the password "+ str(countTries) + " times","error") + log("[E] If Ranger "+ userName +" user password is not being changed by some other process then manually delete the entry from ranger database table x_db_version_h table where version is " + version ,"error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, ranger_version, client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, ranger_version, client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0: + log ("[I] Ranger "+ userName +" default password change request is in process..","info") + else: + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + if is_unix: + path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + elif os_name == "WINDOWS": + path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + get_java_cmd = "%s -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=200m -Xmx%s -Xms1g -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.cliutil.%s %s -default"%(self.JAVA_BIN,globalDict['ranger_admin_max_heap_size'],ranger_log,path,className,userPwdString) + if is_unix: + status = subprocess.call(shlex.split(get_java_cmd)) + elif os_name == "WINDOWS": + status = subprocess.call(get_java_cmd) + if status == 0 or status==2: + if is_unix: + query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0 and status == 0: + log ("[I] Ranger "+ userName +" default password change request processed successfully..","info") + elif ret == 0 and status == 2: + log ("[I] Ranger "+ userName +" default password change request process skipped!","info") + else: + if is_unix: + query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name): name = basename(file_name) if os.path.isfile(file_name): @@ -2162,6 +2368,109 @@ class PostgresConf(BaseDB): log("[E] Ranger "+ userName +" default password change request failed", "error") sys.exit(1) + def change_all_admin_default_password(self, xa_db_host, db_user, db_password, db_name,userPwdArray): + userPwdString ="" + if len(userPwdArray)>5: + for j in range(len(userPwdArray)): + if str(userPwdArray[j]) == "-pair": + userPwdString= userPwdString + " \"" + userPwdArray[j+1] + "\" \"" + userPwdArray[j+2] + "\" \"" + userPwdArray[j+3] +"\"" + + userName = "all admins" + className = "ChangePasswordUtil" + version = "DEFAULT_ALL_ADMIN_UPDATE" + app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") + filePath = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch","cliutil","ChangePasswordUtil.class") + if os.path.exists(filePath): + if version != "": + get_cmd = self.get_jisql_cmd(db_user, db_password, db_name) + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + log("[I] Ranger "+ userName +" default password has already been changed!!","info") + else: + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + countTries = 0 + while(output.strip(version + " |")): + if countTries < 3: + log("[I] Ranger Password change utility is being executed by some other process" ,"info") + time.sleep(retryPatchAfterSeconds) + jisql_log(query, db_password) + output = check_output(query) + countTries += 1 + else: + log("[E] Tried updating the password "+ str(countTries) + " times","error") + log("[E] If Ranger "+ userName +" user password is not being changed by some other process then manually delete the entry from ranger database table x_db_version_h table where version is " + version ,"error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0: + log ("[I] Ranger "+ userName +" default password change request is in process..","info") + else: + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + if is_unix: + path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + elif os_name == "WINDOWS": + path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + get_java_cmd = "%s -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=200m -Xmx%s -Xms1g -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.cliutil.%s %s -default"%(self.JAVA_BIN,globalDict['ranger_admin_max_heap_size'],ranger_log,path,className,userPwdString) + if is_unix: + status = subprocess.call(shlex.split(get_java_cmd)) + elif os_name == "WINDOWS": + status = subprocess.call(get_java_cmd) + if status == 0 or status==2: + if is_unix: + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0 and status == 0: + log ("[I] Ranger "+ userName +" default password change request processed successfully..","info") + elif ret == 0 and status == 2: + log ("[I] Ranger "+ userName +" default password change request process skipped!","info") + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name): name = basename(file_name) if os.path.isfile(file_name): @@ -2821,6 +3130,109 @@ class SqlServerConf(BaseDB): log("[E] Ranger "+ userName +" default password change request failed", "error") sys.exit(1) + def change_all_admin_default_password(self, xa_db_host, db_user, db_password, db_name,userPwdArray): + userPwdString ="" + if len(userPwdArray)>5: + for j in range(len(userPwdArray)): + if str(userPwdArray[j]) == "-pair": + userPwdString= userPwdString + " \"" + userPwdArray[j+1] + "\" \"" + userPwdArray[j+2] + "\" \"" + userPwdArray[j+3] +"\"" + + userName = "all admins" + className = "ChangePasswordUtil" + version = "DEFAULT_ALL_ADMIN_UPDATE" + app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") + filePath = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch","cliutil","ChangePasswordUtil.class") + if os.path.exists(filePath): + if version != "": + get_cmd = self.get_jisql_cmd(db_user, db_password, db_name) + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c \;" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + log("[I] Ranger "+ userName +" default password has already been changed!!","info") + else: + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c \;" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + countTries = 0 + while(output.strip(version + " |")): + if countTries < 3: + log("[I] Ranger Password change utility is being executed by some other process" ,"info") + time.sleep(retryPatchAfterSeconds) + jisql_log(query, db_password) + output = check_output(query) + countTries += 1 + else: + log("[E] Tried updating the password "+ str(countTries) + " times","error") + log("[E] If Ranger "+ userName +" user password is not being changed by some other process then manually delete the entry from ranger database table x_db_version_h table where version is " + version ,"error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0: + log ("[I] Ranger "+ userName +" default password change request is in process..","info") + else: + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + if is_unix: + path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + elif os_name == "WINDOWS": + path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + get_java_cmd = "%s -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=200m -Xmx%s -Xms1g -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.cliutil.%s %s -default"%(self.JAVA_BIN,globalDict['ranger_admin_max_heap_size'],ranger_log,path,className,userPwdString) + if is_unix: + status = subprocess.call(shlex.split(get_java_cmd)) + elif os_name == "WINDOWS": + status = subprocess.call(get_java_cmd) + if status == 0 or status==2: + if is_unix: + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0 and status == 0: + log ("[I] Ranger "+ userName +" default password change request processed successfully..","info") + elif ret == 0 and status == 2: + log ("[I] Ranger "+ userName +" default password change request process skipped!","info") + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name): name = basename(file_name) if os.path.isfile(file_name): @@ -3493,6 +3905,110 @@ class SqlAnywhereConf(BaseDB): log("[E] Ranger "+ userName +" default password change request failed", "error") sys.exit(1) + def change_all_admin_default_password(self, xa_db_host, db_user, db_password, db_name,userPwdArray): + userPwdString ="" + if len(userPwdArray)>5: + for j in range(len(userPwdArray)): + if str(userPwdArray[j]) == "-pair": + userPwdString= userPwdString + " \"" + userPwdArray[j+1] + "\" \"" + userPwdArray[j+2] + "\" \"" + userPwdArray[j+3] +"\"" + + userName = "all admins" + className = "ChangePasswordUtil" + version = "DEFAULT_ALL_ADMIN_UPDATE" + app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") + filePath = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch","cliutil","ChangePasswordUtil.class") + if os.path.exists(filePath): + if version != "": + get_cmd = self.get_jisql_cmd(db_user, db_password, db_name) + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c \;" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + log("[I] Ranger "+ userName +" default password has already been changed!!","info") + else: + if is_unix: + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c \;" %(version) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version) + jisql_log(query, db_password) + output = check_output(query) + if output.strip(version + " |"): + countTries = 0 + while(output.strip(version + " |")): + if countTries < 3: + log("[I] Ranger Password change utility is being executed by some other process" ,"info") + time.sleep(retryPatchAfterSeconds) + jisql_log(query, db_password) + output = check_output(query) + countTries += 1 + else: + log("[E] Tried updating the password "+ str(countTries) + " times","error") + log("[E] If Ranger "+ userName +" user password is not being changed by some other process then manually delete the entry from ranger database table x_db_version_h table where version is " + version ,"error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,ranger_version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0: + log ("[I] Ranger "+ userName +" default password change request is in process..","info") + else: + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + if is_unix: + path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + elif os_name == "WINDOWS": + path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) + get_java_cmd = "%s -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=200m -Xmx%s -Xms1g -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.cliutil.%s %s -default"%(self.JAVA_BIN,globalDict['ranger_admin_max_heap_size'],ranger_log,path,className,userPwdString) + if is_unix: + status = subprocess.call(shlex.split(get_java_cmd)) + elif os_name == "WINDOWS": + status = subprocess.call(get_java_cmd) + if status == 0 or status==2: + if is_unix: + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + if ret == 0 and status == 0: + log ("[I] Ranger "+ userName +" default password change request processed successfully..","info") + elif ret == 0 and status == 2: + log ("[I] Ranger "+ userName +" default password change request process skipped!","info") + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + else: + if is_unix: + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(shlex.split(query)) + elif os_name == "WINDOWS": + query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host) + jisql_log(query, db_password) + ret = subprocess.call(query) + log("[E] Ranger "+ userName +" default password change request failed", "error") + sys.exit(1) + + def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name): name = basename(file_name) if os.path.isfile(file_name): @@ -3955,7 +4471,23 @@ def main(argv): xa_sqlObj.is_new_install(xa_db_host, db_user, db_password, db_name) if str(argv[i]) == "-changepassword": - if len(argv)==5: + if len(argv)>5: + isValidPassWord = False + for j in range(len(argv)): + if str(argv[j]) == "-pair": + userName=argv[j+1] + oldPassword=argv[j+2] + newPassword=argv[j+3] + if oldPassword==newPassword: + log("[E] Old Password and New Password argument are same. Exiting!!", "error") + sys.exit(1) + if userName != "" and oldPassword != "" and newPassword != "": + password_validation(newPassword) + isValidPassWord=True + if isValidPassWord == True: + xa_sqlObj.change_all_admin_default_password(xa_db_host, db_user, db_password, db_name,argv) + + elif len(argv)==5: userName=argv[2] oldPassword=argv[3] newPassword=argv[4] http://git-wip-us.apache.org/repos/asf/ranger/blob/737ec996/security-admin/scripts/setup.sh ---------------------------------------------------------------------- diff --git a/security-admin/scripts/setup.sh b/security-admin/scripts/setup.sh index 0b10e0f..bd4bd4c 100755 --- a/security-admin/scripts/setup.sh +++ b/security-admin/scripts/setup.sh @@ -1384,7 +1384,7 @@ setup_install_files(){ fi } python_command_for_change_password(){ - $PYTHON_COMMAND_INVOKER db_setup.py -changepassword "${1}" "${2}" "${3}" + $PYTHON_COMMAND_INVOKER db_setup.py -changepassword -pair "${1}" "${2}" "${3}" -pair "${4}" "${5}" "${6}" -pair "${7}" "${8}" "${9}" -pair "${10}" "${11}" "${12}" } validateDefaultUsersPassword(){ if [ "${2}" == "" ] @@ -1399,38 +1399,47 @@ validateDefaultUsersPassword(){ } change_default_users_password(){ - if [ "${rangerAdmin_password}" != "admin" ] - then - python_command_for_change_password 'admin' 'admin' "${rangerAdmin_password}" - if [ "$?" != "0" ] - then - exit 1 - fi - fi - if [ "${rangerTagsync_password}" != "rangertagsync" ] - then - python_command_for_change_password 'rangertagsync' 'rangertagsync' "${rangerTagsync_password}" - if [ "$?" != "0" ] - then - exit 1 - fi - fi - if [ "${rangerUsersync_password}" != "rangerusersync" ] - then - python_command_for_change_password 'rangerusersync' 'rangerusersync' "${rangerUsersync_password}" - if [ "$?" != "0" ] - then - exit 1 - fi - fi - if [ "${keyadmin_password}" != "keyadmin" ] - then - python_command_for_change_password 'keyadmin' 'keyadmin' "${keyadmin_password}" - if [ "$?" != "0" ] - then - exit 1 - fi - fi + if [ "${rangerAdmin_password}" != "admin" ] && [ "${rangerTagsync_password}" != "rangertagsync" ] && [ "${rangerUsersync_password}" != "rangerusersync" ] && [ "${keyadmin_password}" != "keyadmin" ] + then + python_command_for_change_password 'admin' 'admin' "${rangerAdmin_password}" 'rangertagsync' 'rangertagsync' "${rangerTagsync_password}" 'rangerusersync' 'rangerusersync' "${rangerUsersync_password}" 'keyadmin' 'keyadmin' "${keyadmin_password}" + if [ "$?" != "0" ] + then + exit 1 + fi + else + if [ "${rangerAdmin_password}" != "admin" ] + then + python_command_for_change_password 'admin' 'admin' "${rangerAdmin_password}" + if [ "$?" != "0" ] + then + exit 1 + fi + fi + if [ "${rangerTagsync_password}" != "rangertagsync" ] + then + python_command_for_change_password 'rangertagsync' 'rangertagsync' "${rangerTagsync_password}" + if [ "$?" != "0" ] + then + exit 1 + fi + fi + if [ "${rangerUsersync_password}" != "rangerusersync" ] + then + python_command_for_change_password 'rangerusersync' 'rangerusersync' "${rangerUsersync_password}" + if [ "$?" != "0" ] + then + exit 1 + fi + fi + if [ "${keyadmin_password}" != "keyadmin" ] + then + python_command_for_change_password 'keyadmin' 'keyadmin' "${keyadmin_password}" + if [ "$?" != "0" ] + then + exit 1 + fi + fi + fi } log " --------- Running Ranger PolicyManager Web Application Install Script --------- " log "[I] uname=`uname`" @@ -1447,10 +1456,10 @@ check_python_command check_ranger_version if [ "$?" != "0" ] then - validateDefaultUsersPassword 'admin' "${rangerAdmin_password}" - validateDefaultUsersPassword 'rangertagsync' "${rangerTagsync_password}" - validateDefaultUsersPassword 'rangerusersync' "${rangerUsersync_password}" - validateDefaultUsersPassword 'keyadmin' "${keyadmin_password}" + validateDefaultUsersPassword 'admin' "${rangerAdmin_password}" + validateDefaultUsersPassword 'rangertagsync' "${rangerTagsync_password}" + validateDefaultUsersPassword 'rangerusersync' "${rangerUsersync_password}" + validateDefaultUsersPassword 'keyadmin' "${keyadmin_password}" fi run_dba_steps if [ "$?" == "0" ] @@ -1474,10 +1483,10 @@ then if [ "$?" == "0" ] then $PYTHON_COMMAND_INVOKER db_setup.py -javapatch - if [ "$?" == "0" ] - then - change_default_users_password - fi + if [ "$?" == "0" ] + then + change_default_users_password + fi else exit 1 fi http://git-wip-us.apache.org/repos/asf/ranger/blob/737ec996/security-admin/src/main/java/org/apache/ranger/patch/cliutil/ChangePasswordUtil.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/patch/cliutil/ChangePasswordUtil.java b/security-admin/src/main/java/org/apache/ranger/patch/cliutil/ChangePasswordUtil.java index 9d3ce59..3037053 100644 --- a/security-admin/src/main/java/org/apache/ranger/patch/cliutil/ChangePasswordUtil.java +++ b/security-admin/src/main/java/org/apache/ranger/patch/cliutil/ChangePasswordUtil.java @@ -7,7 +7,7 @@ (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 + 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, @@ -39,41 +39,51 @@ public class ChangePasswordUtil extends BaseLoader { @Autowired UserMgr userMgr; - - @Autowired - RESTErrorUtil restErrorUtil; + + @Autowired + RESTErrorUtil restErrorUtil; public static String userLoginId; public static String currentPassword; public static String newPassword; - public static boolean defaultPwdChangeRequest=false; + public static boolean defaultPwdChangeRequest = false; + public static String[] userPwdArgs; public static void main(String[] args) { logger.info("main()"); try { ChangePasswordUtil loader = (ChangePasswordUtil) CLIUtil.getBean(ChangePasswordUtil.class); loader.init(); - if (args.length == 3 || args.length == 4) { - + userPwdArgs=args; + if (args.length > 4) { + if ("-default".equalsIgnoreCase(args[args.length-1])) { + defaultPwdChangeRequest = true; + } + while (loader.isMoreToProcess()) { + loader.load(); + } + logger.info("Load complete. Exiting!!!"); + System.exit(0); + } else if (args.length == 3 || args.length == 4) { userLoginId = args[0]; currentPassword = args[1]; newPassword = args[2]; - if (args.length == 4) { - if("-default".equalsIgnoreCase(args[3])){ - defaultPwdChangeRequest=true; - } - } - if(StringUtils.isEmpty(userLoginId)){ + if (args.length == 4) { + if ("-default".equalsIgnoreCase(args[3])) { + defaultPwdChangeRequest = true; + } + } + if (StringUtils.isEmpty(userLoginId)) { System.out.println("Invalid login ID. Exiting!!!"); logger.info("Invalid login ID. Exiting!!!"); System.exit(1); } - if(StringUtils.isEmpty(currentPassword)){ + if (StringUtils.isEmpty(currentPassword)) { System.out.println("Invalid current password. Exiting!!!"); logger.info("Invalid current password. Exiting!!!"); System.exit(1); } - if(StringUtils.isEmpty(newPassword)){ + if (StringUtils.isEmpty(newPassword)) { System.out.println("Invalid new password. Exiting!!!"); logger.info("Invalid new password. Exiting!!!"); System.exit(1); @@ -83,13 +93,14 @@ public class ChangePasswordUtil extends BaseLoader { } logger.info("Load complete. Exiting!!!"); System.exit(0); - }else{ - System.out.println("ChangePasswordUtil: Incorrect Arguments \n Usage: \n <loginId> <current-password> <new-password>"); - logger.error("ChangePasswordUtil: Incorrect Arguments \n Usage: \n <loginId> <current-password> <new-password>"); + } else { + System.out.println( + "ChangePasswordUtil: Incorrect Arguments \n Usage: \n <loginId> <current-password> <new-password>"); + logger.error( + "ChangePasswordUtil: Incorrect Arguments \n Usage: \n <loginId> <current-password> <new-password>"); System.exit(1); } - } - catch (Exception e) { + } catch (Exception e) { logger.error("Error loading", e); System.exit(1); } @@ -106,29 +117,32 @@ public class ChangePasswordUtil extends BaseLoader { @Override public void execLoad() { logger.info("==> ChangePasswordUtil.execLoad()"); - updateAdminPassword(); + if(userPwdArgs.length>4) { + updateMultiplePasswords(); + }else { + updateAdminPassword(); + } logger.info("<== ChangePasswordUtil.execLoad()"); } public void updateAdminPassword() { - XXPortalUser xPortalUser=daoMgr.getXXPortalUser().findByLoginId(userLoginId); - if (xPortalUser!=null){ - String dbPassword=xPortalUser.getPassword(); - String currentEncryptedPassword=null; - + XXPortalUser xPortalUser = daoMgr.getXXPortalUser().findByLoginId(userLoginId); + if (xPortalUser != null) { + String dbPassword = xPortalUser.getPassword(); + String currentEncryptedPassword = null; try { - - currentEncryptedPassword=userMgr.encrypt(userLoginId, currentPassword); - if (currentEncryptedPassword.equals(dbPassword)){ - validatePassword(newPassword); - userMgr.updatePasswordInSHA256(userLoginId,newPassword,true); - logger.info("User '"+userLoginId+"' Password updated sucessfully."); - }else if (!currentEncryptedPassword.equals(dbPassword) && defaultPwdChangeRequest){ - System.out.println("Skipping default password change request as provided password doesn't match with existing password."); - logger.error("Skipping default password change request as provided password doesn't match with existing password."); - System.exit(2); - } - else{ + currentEncryptedPassword = userMgr.encrypt(userLoginId, currentPassword); + if (currentEncryptedPassword.equals(dbPassword)) { + validatePassword(newPassword); + userMgr.updatePasswordInSHA256(userLoginId, newPassword, true); + logger.info("User '" + userLoginId + "' Password updated sucessfully."); + } else if (!currentEncryptedPassword.equals(dbPassword) && defaultPwdChangeRequest) { + System.out.println( + "Skipping default password change request as provided password doesn't match with existing password."); + logger.error( + "Skipping default password change request as provided password doesn't match with existing password."); + System.exit(2); + } else { System.out.println("Invalid user password"); logger.error("Invalid user password"); System.exit(1); @@ -137,28 +151,93 @@ public class ChangePasswordUtil extends BaseLoader { logger.error("Update Admin Password failure. Detail: \n", e); System.exit(1); } - } - else{ + } else { System.out.println("User does not exist in DB!!"); logger.error("User does not exist in DB"); System.exit(1); } } - private void validatePassword(String newPassword) { - boolean checkPassword = false; - if (newPassword != null ) { - String pattern = "(?=.*[0-9])(?=.*[a-zA-Z]).{8,}"; - checkPassword = newPassword.trim().matches(pattern); - if (!checkPassword) { - logger.error("validatePassword(). Password should be minimum 8 characters with minimum one alphabet and one numeric."); - System.out.println("validatePassword(). Password should be minimum 8 characters with minimum one alphabet and one numeric."); - throw restErrorUtil.createRESTException("serverMsg.changePasswordValidatePassword", MessageEnums.INVALID_PASSWORD, null, "Password should be minimum 8 characters with minimum one alphabet and one numeric", null); - } - } else { - logger.error("validatePassword(). Password cannot be blank/null."); - System.out.println("validatePassword(). Password cannot be blank/null."); - throw restErrorUtil.createRESTException("serverMsg.changePasswordValidatePassword", MessageEnums.INVALID_PASSWORD, null, "Password cannot be blank/null", null); - } - } + + public void updateMultiplePasswords() { + for (int i=0; i<userPwdArgs.length ; i+=3) { + if ("-default".equalsIgnoreCase(userPwdArgs[i])) { + continue; + } + String userLoginIdTemp=userPwdArgs[i]; + String currentPasswordTemp=userPwdArgs[i+1]; + String newPasswordTemp=userPwdArgs[i+2]; + if (StringUtils.isEmpty(userLoginIdTemp)) { + System.out.println("Invalid login ID. Exiting!!!"); + logger.info("Invalid login ID. Exiting!!!"); + System.exit(1); + } + if (StringUtils.isEmpty(currentPasswordTemp)) { + System.out.println("Invalid current password. Exiting!!!"); + logger.info("Invalid current password. Exiting!!!"); + System.exit(1); + } + if (StringUtils.isEmpty(newPasswordTemp)) { + System.out.println("Invalid new password. Exiting!!!"); + logger.info("Invalid new password. Exiting!!!"); + System.exit(1); + } + XXPortalUser xPortalUser = daoMgr.getXXPortalUser().findByLoginId(userLoginIdTemp); + if (xPortalUser != null) { + String dbPassword = xPortalUser.getPassword(); + String currentEncryptedPassword = null; + try { + currentEncryptedPassword = userMgr.encrypt(userLoginIdTemp, currentPasswordTemp); + if (currentEncryptedPassword.equals(dbPassword)) { + validatePassword(newPasswordTemp); + logger.info("User:" + userLoginIdTemp + "|Password:"+newPasswordTemp); + userMgr.updatePasswordInSHA256(userLoginIdTemp, newPasswordTemp, true); + logger.info("User '" + userLoginIdTemp + "' Password updated sucessfully."); + } else if (!currentEncryptedPassword.equals(dbPassword) && defaultPwdChangeRequest) { + System.out.println( + "Skipping default password change request as provided password doesn't match with existing password."); + logger.error( + "Skipping default password change request as provided password doesn't match with existing password."); + System.exit(2); + } else { + System.out.println("Invalid user password"); + logger.error("Invalid user password"); + System.exit(1); + break; + } + } catch (Exception e) { + logger.error("Update Admin Password failure. Detail: \n", e); + System.exit(1); + break; + } + } else { + System.out.println("User does not exist in DB!!"); + logger.error("User does not exist in DB"); + System.exit(1); + break; + } + } + } + + private void validatePassword(String newPassword) { + boolean checkPassword = false; + if (newPassword != null) { + String pattern = "(?=.*[0-9])(?=.*[a-zA-Z]).{8,}"; + checkPassword = newPassword.trim().matches(pattern); + if (!checkPassword) { + logger.error( + "validatePassword(). Password should be minimum 8 characters with minimum one alphabet and one numeric."); + System.out.println( + "validatePassword(). Password should be minimum 8 characters with minimum one alphabet and one numeric."); + throw restErrorUtil.createRESTException("serverMsg.changePasswordValidatePassword", + MessageEnums.INVALID_PASSWORD, null, + "Password should be minimum 8 characters with minimum one alphabet and one numeric", null); + } + } else { + logger.error("validatePassword(). Password cannot be blank/null."); + System.out.println("validatePassword(). Password cannot be blank/null."); + throw restErrorUtil.createRESTException("serverMsg.changePasswordValidatePassword", + MessageEnums.INVALID_PASSWORD, null, "Password cannot be blank/null", null); + } + } }