Repository: incubator-ranger
Updated Branches:
  refs/heads/master a6e0eb908 -> a15af08ca


RANGER-1206 : Modifications to install scripts to skip checking of DB and java 
patches in each install

Signed-off-by: Gautam Borad <gau...@apache.org>


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

Branch: refs/heads/master
Commit: a15af08cab65ae631b1a853b6de8fa613925b1fa
Parents: a6e0eb9
Author: pradeep agrawal <pradeep.agra...@freestoneinfotech.com>
Authored: Fri Nov 18 16:41:13 2016 +0530
Committer: Gautam Borad <gau...@apache.org>
Committed: Tue Nov 22 12:37:18 2016 +0530

----------------------------------------------------------------------
 security-admin/scripts/db_setup.py | 307 ++++++++++++++++++++++++++------
 security-admin/scripts/setup.sh    |  16 +-
 2 files changed, 256 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/a15af08c/security-admin/scripts/db_setup.py
----------------------------------------------------------------------
diff --git a/security-admin/scripts/db_setup.py 
b/security-admin/scripts/db_setup.py
index c1efd4a..bb51cc7 100644
--- a/security-admin/scripts/db_setup.py
+++ b/security-admin/scripts/db_setup.py
@@ -32,7 +32,7 @@ globalDict = {}
 
 os_name = platform.system()
 os_name = os_name.upper()
-
+ranger_version=''
 jisql_debug=True
 
 if os_name == "LINUX":
@@ -102,6 +102,7 @@ def password_validation(password):
                        log("[E] password contains one of the unsupported 
special characters like \" ' \ `","error")
                        sys.exit(1)
 
+
 class BaseDB(object):
 
        def check_connection(self, db_name, db_user, db_password):
@@ -128,6 +129,7 @@ class BaseDB(object):
                                for filename in sorted_files:
                                        currentPatch = 
os.path.join(PATCHES_PATH, filename)
                                        self.import_db_patches(db_name, 
db_user, db_password, currentPatch)
+                                self.update_applied_patches_status(db_name, 
db_user, db_password, "DB_PATCHES")
                        else:
                                log("[I] No patches to apply!","info")
 
@@ -267,11 +269,11 @@ class MysqlConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -354,11 +356,11 @@ class MysqlConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       query = get_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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:
@@ -492,11 +494,11 @@ class MysqlConf(BaseDB):
                                                                output = 
check_output(query)
                                                else:
                                                        if os_name == "LINUX":
-                                                               query = get_cmd 
+ " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, 
updated_by,active) values ('J%s', now(), '%s', now(), '%s','N') ;\"" 
%(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%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 ('J%s', now(), '%s', now(), '%s','N') ;\" -c ;" 
%(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%s', now(), '%s', now(), '%s','N') ;\" 
-c ;" %(version,ranger_version,client_host)
                                                                
jisql_log(query, db_password)
                                                                ret = 
subprocess.call(query)
                                                        if ret == 0:
@@ -581,11 +583,11 @@ class MysqlConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       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,client_host,client_host)
+                                                        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,client_host,client_host)
+                                                        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:
@@ -689,11 +691,11 @@ class MysqlConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -753,6 +755,36 @@ class MysqlConf(BaseDB):
                                                log("[E] "+version + " import 
failed!","error")
                                                sys.exit(1)
 
+        def hasPendingPatches(self, db_name, db_user, db_password, version):
+                get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+                if os_name == "LINUX":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active='Y';\"" 
%(version,ranger_version)
+                elif os_name == "WINDOWS":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active='Y';\" -c ;" 
%(version,ranger_version)
+                jisql_log(query, db_password)
+                output = check_output(query)
+                if output.strip(version + " |"):
+                        return False
+                else:
+                        return True
+
+        def update_applied_patches_status(self,db_name, db_user, 
db_password,version):
+                if self.hasPendingPatches(db_name, db_user, 
db_password,version) == True:
+                        get_cmd = self.get_jisql_cmd(db_user, db_password, 
db_name)
+                        if os_name == "LINUX":
+                                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','Y') ;\"" 
%(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','Y') ;\" -c ;" 
%(version,ranger_version,client_host)
+                                jisql_log(query, db_password)
+                                ret = subprocess.call(query)
+                        if ret != 0:
+                                log("[E] "+ version +" status entry to 
x_db_version_h table failed", "error")
+                                sys.exit(1)
+                        else:
+                                log("[I] "+ version +" status entry to 
x_db_version_h table completed", "info")
+
 class OracleConf(BaseDB):
        # Constructor
        def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -897,11 +929,11 @@ class OracleConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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, client_host, client_host)
+                                                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, client_host, client_host)
+                                                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:
@@ -983,11 +1015,11 @@ class OracleConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       query = get_cmd1 + " -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, client_host, client_host)
+                                                        query = get_cmd1 + " 
-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_cmd1 + " 
-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, client_host, client_host)
+                                                        query = get_cmd1 + " 
-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:
@@ -1126,9 +1158,9 @@ class OracleConf(BaseDB):
                                                log("[I] java patch "+ 
className  +" is already applied" ,"info")
                                        else:
                                                if os_name == "LINUX":
-                                                       query = get_cmd + " -c 
\; -query \"select version from x_db_version_h where version = 'J%s' and active 
= 'Y';\"" %(version)
+                                                        query = get_cmd + " -c 
\; -query \"select version from x_db_version_h where version = 'J%s' and active 
= 'N';\"" %(version)
                                                elif os_name == "WINDOWS":
-                                                       query = get_cmd + " 
-query \"select version from x_db_version_h where version = 'J%s' and active = 
'Y';\" -c ;" %(version)
+                                                        query = get_cmd + " 
-query \"select version from x_db_version_h where version = 'J%s' and active = 
'N';\" -c ;" %(version)
                                                jisql_log(query, db_password)
                                                output = check_output(query)
                                                if output.strip(version + " |"):
@@ -1139,11 +1171,11 @@ class OracleConf(BaseDB):
                                                                output = 
check_output(query)
                                                else:
                                                        if os_name == "LINUX":
-                                                               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,'J%s', 
sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
+                                                                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,'J%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,'J%s', 
sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
+                                                                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,'J%s', 
sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, ranger_version, 
client_host)
                                                                
jisql_log(query, db_password)
                                                                ret = 
subprocess.call(query)
                                                        if ret == 0:
@@ -1155,11 +1187,11 @@ class OracleConf(BaseDB):
                                                                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_cmd = "%s 
-Djava.security.egd=file:///dev/urandom -Dlogdir=%s 
-Dlog4j.configuration=db_patch.log4j.xml -cp %s 
org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className)
+                                                        get_java_cmd = "%s 
-Djava.security.egd=file:///dev/urandom -Dlogdir=%s 
-Dlog4j.configuration=db_patch.log4j.xml -cp %s 
org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className)
                                                        if os_name == "LINUX":
-                                                               ret = 
subprocess.call(shlex.split(get_cmd))
+                                                                ret = 
subprocess.call(shlex.split(get_java_cmd))
                                                        elif os_name == 
"WINDOWS":
-                                                               ret = 
subprocess.call(get_cmd)
+                                                                ret = 
subprocess.call(get_java_cmd)
                                                        if ret == 0:
                                                                if os_name == 
"LINUX":
                                                                        query = 
get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where 
version='J%s' and active='N' and updated_by='%s';\"" %(version, client_host)
@@ -1228,11 +1260,11 @@ class OracleConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       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, client_host, client_host)
+                                                        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, client_host, client_host)
+                                                        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:
@@ -1336,11 +1368,11 @@ class OracleConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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, client_host, client_host)
+                                                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, client_host, client_host)
+                                                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:
@@ -1400,6 +1432,36 @@ class OracleConf(BaseDB):
                                                log("[E] "+version + " import 
failed!","error")
                                                sys.exit(1)
 
+        def hasPendingPatches(self, db_name, db_user, db_password, version):
+                get_cmd = self.get_jisql_cmd(db_user, db_password)
+                if os_name == "LINUX":
+                        query = get_cmd + " -c \; -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\"" 
%(version,ranger_version)
+                elif os_name == "WINDOWS":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\" -c 
;" %(version,ranger_version)
+                jisql_log(query, db_password)
+                output = check_output(query)
+                if output.strip(version + " |"):
+                        return False
+                else:
+                        return True
+
+        def update_applied_patches_status(self,db_name, db_user, 
db_password,version):
+                if self.hasPendingPatches(db_name, db_user, 
db_password,version) == True:
+                        get_cmd = self.get_jisql_cmd(db_user, db_password)
+                        if os_name == "LINUX":
+                                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','Y');\"" 
%(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','Y');\" 
-c ;" %(version, ranger_version, client_host)
+                                jisql_log(query, db_password)
+                                ret = subprocess.call(query)
+                        if ret != 0:
+                                log("[E] "+ version +" status entry to 
x_db_version_h table failed", "error")
+                                sys.exit(1)
+                        else:
+                                log("[I] "+ version +" status entry to 
x_db_version_h table completed", "info")
+
 class PostgresConf(BaseDB):
        # Constructor
        def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -1539,11 +1601,11 @@ class PostgresConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -1626,11 +1688,11 @@ class PostgresConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       query = get_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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:
@@ -1766,11 +1828,11 @@ class PostgresConf(BaseDB):
                                                                output = 
check_output(query)
                                                else:
                                                        if os_name == "LINUX":
-                                                               query = get_cmd 
+ " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, 
updated_by,active) values ('J%s', current_timestamp, '%s', current_timestamp, 
'%s','N') ;\"" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%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 ('J%s', current_timestamp, '%s', current_timestamp, 
'%s','N') ;\" -c ;" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%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:
@@ -1855,11 +1917,11 @@ class PostgresConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       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,client_host,client_host)
+                                                        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,client_host,client_host)
+                                                        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:
@@ -1963,11 +2025,11 @@ class PostgresConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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', now(), '%s', now(), '%s','N') ;\" -c ;" 
%(version)
+                                                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:
@@ -2027,6 +2089,36 @@ class PostgresConf(BaseDB):
                                                log("[E] "+version + " import 
failed!","error")
                                                sys.exit(1)
 
+        def hasPendingPatches(self, db_name, db_user, db_password, version):
+                get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+                if os_name == "LINUX":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\"" 
%(version,ranger_version)
+                elif os_name == "WINDOWS":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\" -c 
;" %(version,ranger_version)
+                jisql_log(query, db_password)
+                output = check_output(query)
+                if output.strip(version + " |"):
+                        return False
+                else:
+                        return True
+
+        def update_applied_patches_status(self,db_name, db_user, 
db_password,version):
+                if self.hasPendingPatches(db_name, db_user, 
db_password,version) == True:
+                        get_cmd = self.get_jisql_cmd(db_user, db_password, 
db_name)
+                        if os_name == "LINUX":
+                                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','Y') ;\"" 
%(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','Y') ;\" -c ;" 
%(version,ranger_version,client_host)
+                                jisql_log(query, db_password)
+                                ret = subprocess.call(query)
+                        if ret != 0:
+                                log("[E] "+ version +" status entry to 
x_db_version_h table failed", "error")
+                                sys.exit(1)
+                        else:
+                                log("[I] "+ version +" status entry to 
x_db_version_h table completed", "info")
+
 class SqlServerConf(BaseDB):
        # Constructor
        def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -2144,11 +2236,11 @@ class SqlServerConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -2231,11 +2323,11 @@ class SqlServerConf(BaseDB):
                                        else:
                                                get_cmd2 = 
self.get_jisql_cmd(db_user, db_password, audit_db_name)
                                                if os_name == "LINUX":
-                                                       query = get_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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:
@@ -2354,11 +2446,11 @@ class SqlServerConf(BaseDB):
                                                                output = 
check_output(query)
                                                else:
                                                        if os_name == "LINUX":
-                                                               query = get_cmd 
+ " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, 
updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c 
\;" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%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 ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c 
;" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), 
'%s','N') ;\" -c ;" %(version,ranger_version,client_host)
                                                                
jisql_log(query, db_password)
                                                                ret = 
subprocess.call(query)
                                                        if ret == 0:
@@ -2443,11 +2535,11 @@ class SqlServerConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       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,client_host,client_host)
+                                                        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,client_host,client_host)
+                                                        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:
@@ -2551,11 +2643,11 @@ class SqlServerConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -2615,6 +2707,36 @@ class SqlServerConf(BaseDB):
                                                log("[E] "+version + " import 
failed!","error")
                                                sys.exit(1)
 
+        def hasPendingPatches(self, db_name, db_user, db_password, version):
+                get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+                if os_name == "LINUX":
+                        query = get_cmd + " -c \; -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\"" 
%(version,ranger_version)
+                elif os_name == "WINDOWS":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\" -c 
;" %(version,ranger_version)
+                jisql_log(query, db_password)
+                output = check_output(query)
+                if output.strip(version + " |"):
+                        return False
+                else:
+                        return True
+
+        def update_applied_patches_status(self,db_name, db_user, 
db_password,version):
+                if self.hasPendingPatches(db_name, db_user, 
db_password,version) == True:
+                        get_cmd = self.get_jisql_cmd(db_user, db_password, 
db_name)
+                        if os_name == "LINUX":
+                                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','Y') ;\" -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','Y') ;\" -c ;" 
%(version,ranger_version,client_host)
+                                jisql_log(query, db_password)
+                                ret = subprocess.call(query)
+                        if ret != 0:
+                                log("[E] "+ version +" status entry to 
x_db_version_h table failed", "error")
+                                sys.exit(1)
+                        else:
+                                log("[I] "+ version +" status entry to 
x_db_version_h table completed", "info")
+
 class SqlAnywhereConf(BaseDB):
        # Constructor
        def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -2732,11 +2854,11 @@ class SqlAnywhereConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -2810,11 +2932,11 @@ class SqlAnywhereConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       query = get_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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_cmd1 + " 
-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,client_host,client_host)
+                                                        query = get_cmd1 + " 
-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:
@@ -2934,11 +3056,11 @@ class SqlAnywhereConf(BaseDB):
                                                                output = 
check_output(query)
                                                else:
                                                        if os_name == "LINUX":
-                                                               query = get_cmd 
+ " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, 
updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c 
\;" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%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 ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c 
;" %(version,client_host,client_host)
+                                                                query = 
get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, 
updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), 
'%s','N') ;\" -c ;" %(version,ranger_version,client_host)
                                                                
jisql_log(query, db_password)
                                                                ret = 
subprocess.call(query)
                                                        if ret == 0:
@@ -3044,11 +3166,11 @@ class SqlAnywhereConf(BaseDB):
                                                        output = 
check_output(query)
                                        else:
                                                if os_name == "LINUX":
-                                                       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,client_host,client_host)
+                                                        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,client_host,client_host)
+                                                        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:
@@ -3152,11 +3274,11 @@ class SqlAnywhereConf(BaseDB):
                                                output = check_output(query)
                                else:
                                        if os_name == "LINUX":
-                                               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,client_host,client_host)
+                                                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,client_host,client_host)
+                                                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:
@@ -3216,6 +3338,36 @@ class SqlAnywhereConf(BaseDB):
                                                log("[E] "+version + " import 
failed!","error")
                                                sys.exit(1)
 
+        def hasPendingPatches(self, db_name, db_user, db_password, version):
+                get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+                if os_name == "LINUX":
+                        query = get_cmd + " -c \; -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\"" 
%(version,ranger_version)
+                elif os_name == "WINDOWS":
+                        query = get_cmd + " -query \"select version from 
x_db_version_h where version = '%s' and inst_by = '%s' and active = 'Y';\" -c 
;" %(version,ranger_version)
+                jisql_log(query, db_password)
+                output = check_output(query)
+                if output.strip(version + " |"):
+                        return False
+                else:
+                        return True
+
+        def update_applied_patches_status(self,db_name, db_user, 
db_password,version):
+                if self.hasPendingPatches(db_name, db_user, 
db_password,version) == True:
+                        get_cmd = self.get_jisql_cmd(db_user, db_password, 
db_name)
+                        if os_name == "LINUX":
+                                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','Y') ;\" -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','Y') ;\" -c ;" 
%(version,ranger_version,client_host)
+                                jisql_log(query, db_password)
+                                ret = subprocess.call(query)
+                        if ret != 0:
+                                log("[E] "+ version +" status entry to 
x_db_version_h table failed", "error")
+                                sys.exit(1)
+                        else:
+                                log("[I] "+ version +" status entry to 
x_db_version_h table completed", "info")
+
 def main(argv):
        populate_global_dict()
 
@@ -3238,6 +3390,32 @@ def main(argv):
                else:
                        log("[E] ---------- JAVA Not Found, aborting 
installation. ----------", "error")
                        sys.exit(1)
+        #get ranger version
+        global ranger_version
+        try:
+                lib_home = 
os.path.join(RANGER_ADMIN_HOME,"ews","webapp","WEB-INF","lib","*")
+                get_ranger_version_cmd="%s -cp %s 
org.apache.ranger.common.RangerVersionInfo"%(JAVA_BIN,lib_home)
+                ranger_version = 
check_output(get_ranger_version_cmd).split("\n")[1]
+        except Exception, error:
+                ranger_version=''
+
+        try:
+                if ranger_version=="" or ranger_version=="ranger-admin - None":
+                        script_path = 
os.path.join(RANGER_ADMIN_HOME,"ews","ranger-admin-services.sh")
+                        ranger_version=check_output(script_path +" 
version").split("\n")[1]
+        except Exception, error:
+                ranger_version=''
+
+        try:
+                if ranger_version=="" or ranger_version=="ranger-admin - None":
+                        ranger_version=check_output("ranger-admin 
version").split("\n")[1]
+        except Exception, error:
+                ranger_version=''
+
+        if ranger_version=="" or ranger_version is None:
+                log("[E] Unable to find ranger version details, Exiting..", 
"error")
+                sys.exit(1)
+
        XA_DB_FLAVOR=globalDict['DB_FLAVOR']
        AUDIT_DB_FLAVOR=globalDict['DB_FLAVOR']
        XA_DB_FLAVOR = XA_DB_FLAVOR.upper()
@@ -3406,8 +3584,13 @@ def main(argv):
                                if audit_db_user != "" and db_user != 
audit_db_user:
                                        xa_sqlObj.create_synonym(db_name, 
db_user, db_password,audit_db_user)
 
-               log("[I] --------- Applying Ranger DB patches ---------","info")
-               xa_sqlObj.apply_patches(db_name, db_user, db_password, 
xa_patch_file)
+                applyDBPatches=xa_sqlObj.hasPendingPatches(db_name, db_user, 
db_password, "DB_PATCHES")
+                if applyDBPatches == True:
+                        log("[I] --------- Applying Ranger DB patches 
---------","info")
+                        xa_sqlObj.apply_patches(db_name, db_user, db_password, 
xa_patch_file)
+                else:
+                        log("[I] DB_PATCHES have already been applied","info")
+
                if audit_store == "db" and audit_db_password!='':
                        log("[I] --------- Starting Audit Operation 
---------","info")
                        audit_sqlObj.auditdb_operation(xa_db_host, 
audit_db_host, db_name, audit_db_name, db_user, audit_db_user, db_password, 
audit_db_password, audit_db_file, xa_access_audit)
@@ -3417,7 +3600,13 @@ def main(argv):
        if len(argv)>1:
                for i in range(len(argv)):
                        if str(argv[i]) == "-javapatch":
-                               xa_sqlObj.execute_java_patches(xa_db_host, 
db_user, db_password, db_name)
+                                
applyJavaPatches=xa_sqlObj.hasPendingPatches(db_name, db_user, db_password, 
"JAVA_PATCHES")
+                                if applyJavaPatches == True:
+                                        log("[I] ----------------- Applying 
java patches ------------", "info")
+                                        
xa_sqlObj.execute_java_patches(xa_db_host, db_user, db_password, db_name)
+                                        
xa_sqlObj.update_applied_patches_status(db_name,db_user, 
db_password,"JAVA_PATCHES")
+                                else:
+                                        log("[I] JAVA_PATCHES have already 
been applied","info")
                        if str(argv[i]) == "-changepassword":
                                if len(argv)==5:
                                        userName=argv[2]

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/a15af08c/security-admin/scripts/setup.sh
----------------------------------------------------------------------
diff --git a/security-admin/scripts/setup.sh b/security-admin/scripts/setup.sh
index 6aefe12..2ec26f7 100755
--- a/security-admin/scripts/setup.sh
+++ b/security-admin/scripts/setup.sh
@@ -1178,24 +1178,24 @@ check_python_command
 run_dba_steps
 if [ "$?" == "0" ]
 then
-$PYTHON_COMMAND_INVOKER db_setup.py
-else
-       exit 1
-fi
-if [ "$?" == "0" ]
-then
 update_properties
 do_authentication_setup
 else
        log "[E] DB schema setup failed! Please contact Administrator."
        exit 1
 fi
-$PYTHON_COMMAND_INVOKER db_setup.py -javapatch
 if [ "$?" == "0" ]
 then
 echo "ln -sf ${WEBAPP_ROOT}/WEB-INF/classes/conf ${INSTALL_DIR}/conf"
 ln -sf ${WEBAPP_ROOT}/WEB-INF/classes/conf ${INSTALL_DIR}/conf
-echo "Installation of Ranger PolicyManager Web Application is completed."
 else
        exit 1
 fi
+if [ "$?" == "0" ]
+then
+$PYTHON_COMMAND_INVOKER db_setup.py
+else
+        exit 1
+fi
+$PYTHON_COMMAND_INVOKER db_setup.py -javapatch
+echo "Installation of Ranger PolicyManager Web Application is completed."
\ No newline at end of file

Reply via email to