Repository: incubator-ranger
Updated Branches:
  refs/heads/master 23482defe -> 03d1dec38


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/03d1dec3/security-admin/scripts/dba_script.py
----------------------------------------------------------------------
diff --git a/security-admin/scripts/dba_script.py 
b/security-admin/scripts/dba_script.py
new file mode 100644
index 0000000..9680bfa
--- /dev/null
+++ b/security-admin/scripts/dba_script.py
@@ -0,0 +1,959 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License. See accompanying LICENSE file.
+#
+
+import os
+import re
+import sys
+import errno
+import shlex
+import logging
+import subprocess
+import fileinput
+import getpass
+from os.path import basename
+from subprocess import Popen,PIPE
+from datetime import date
+globalDict = {}
+
+def check_output(query):
+       p = subprocess.Popen(query, stdout=subprocess.PIPE)
+       output = p.communicate ()[0]
+       return output
+       
+def log(msg,type):
+       if type == 'info':
+               logging.info(" %s",msg)
+       if type == 'debug':
+               logging.debug(" %s",msg)
+       if type == 'warning':
+               logging.warning(" %s",msg)
+       if type == 'exception':
+               logging.exception(" %s",msg)
+       if type == 'error':
+               logging.error(" %s",msg)
+'''
+def populate_global_dict():
+       global globalDict
+       read_config_file = open(os.path.join(os.getcwd(),'install.properties'))
+       for each_line in read_config_file.read().split('\n') :
+               if len(each_line) == 0 : continue
+               if re.search('=', each_line):
+                       key , value = each_line.strip().split("=",1)
+                       key = key.strip()
+
+                       if 'PASSWORD' in key:
+                               jceks_file_path = 
os.path.join(os.getenv('RANGER_HOME'), 'jceks','ranger_db.jceks')
+                               statuscode,value = 
call_keystore(library_path,key,'',jceks_file_path,'get')
+                               if statuscode == 1:
+                                       value = ''
+                       value = value.strip()
+                       globalDict[key] = value
+'''
+
+class BaseDB(object):
+
+       def create_rangerdb_user(self, root_user, db_user, db_password, 
db_root_password):      
+               log("[I] ---------- Creating user ----------", "info")
+
+       def check_connection(self, db_name, db_user, db_password):
+               log("[I] ---------- Verifying DB connection ----------", "info")
+
+       def create_db(self, root_user, db_root_password, db_name, db_user, 
db_password):
+               log("[I] ---------- Verifying database ----------", "info")
+
+       def create_auditdb_user(self, xa_db_host , audit_db_host , db_name 
,audit_db_name, xa_db_root_user, audit_db_root_user, db_user, audit_db_user, 
xa_db_root_password, audit_db_root_password, db_password, audit_db_password, 
DBA_MODE):
+               log("[I] ----------------- Create audit user ------------", 
"info")
+
+
+
+class MysqlConf(BaseDB):
+       # Constructor
+       def __init__(self, host,SQL_CONNECTOR_JAR,JAVA_BIN):
+               self.host = host
+               self.SQL_CONNECTOR_JAR = SQL_CONNECTOR_JAR
+               self.JAVA_BIN = JAVA_BIN
+
+       def get_jisql_cmd(self, user, password ,db_name):
+               #TODO: User array for forming command
+               jisql_cmd = "%s -cp %s:jisql/lib/* org.apache.util.sql.Jisql 
-driver mysqlconj -cstring jdbc:mysql://%s/%s -u %s -p %s -noheader -trim -c 
\;" %(self.JAVA_BIN,self.SQL_CONNECTOR_JAR,self.host,db_name,user,password)
+               return jisql_cmd
+
+       def verify_user(slef, root_user, db_root_password, host, db_user, 
get_cmd):
+               log("[I] Verifying user " + db_user , "info")
+               query = get_cmd + " -query \"select user from mysql.user where 
user='%s' and host='%s';\"" %(db_user,host)
+               output = check_output(shlex.split(query))
+               if output.strip(db_user + " |"):
+                       return True
+               else:
+                       return False
+
+       def check_connection(self, db_name, db_user, db_password):
+               log("[I] Checking connection..", "info")
+               get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+               query = get_cmd + " -query \"SELECT version();\""
+               output = check_output(shlex.split(query))
+               if output.strip('Production  |'):
+                       log("[I] Checking connection passed.", "info")
+                       return True
+               else:
+                       log("[E] Can't establish connection!! Exiting.." 
,"error")
+                       sys.exit(1)
+
+       def create_rangerdb_user(self, root_user, db_user, db_password, 
db_root_password):
+               if self.check_connection('mysql', root_user, db_root_password):
+                       hosts_arr =["%", "localhost"]
+                       for host in hosts_arr:
+                               get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'mysql')
+                               if self.verify_user(root_user, 
db_root_password, host, db_user, get_cmd):
+                                       log("[I] MySQL user " + db_user + " 
already exists for host " + host, "info")
+                               else:
+                                       log("[I] MySQL user " + db_user + " 
does not exists for host " + host, "info")
+                                       if db_password == "":
+                                               query = get_cmd + " -query 
\"create user '%s'@'%s';\"" %(db_user, host)
+                                               ret = 
subprocess.check_call(shlex.split(query))
+                                               if ret == 0:
+                                                       if 
self.verify_user(root_user, db_root_password, host, db_user, get_cmd):
+                                                               log("[I] MySQL 
user " + db_user +" created for host " + host ,"info")
+                                                       else:
+                                                               log("[E] 
Creating MySQL user " + db_user +" failed","error")
+                                                               sys.exit(1)
+                                       else:
+                                               query = get_cmd + " -query 
\"create user '%s'@'%s' identified by '%s';\"" %(db_user,host,db_password)
+                                               ret = 
subprocess.check_call(shlex.split(query))
+                                               if ret == 0:
+                                                       if 
self.verify_user(root_user, db_root_password, host, db_user, get_cmd):
+                                                               log("[I] MySQL 
user " + db_user +" created for host " + host ,"info")
+                                                       else:
+                                                               log("[E] 
Creating MySQL user " + db_user +" failed","error")
+                                                               sys.exit(1)
+                                               else:
+                                                       log("[E] Creating MySQL 
user " + db_user +" failed","error")
+                                                       sys.exit(1)
+
+
+       def verify_db(self, root_user, db_root_password, db_name):
+               log("[I] Verifying database " + db_name , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'mysql')
+               query = get_cmd + " -query \"show databases like '%s';\"" 
%(db_name)
+               output = check_output(shlex.split(query))
+               if output.strip(db_name + " |"):
+                       return True
+               else:
+                       return False
+
+
+       def create_db(self, root_user, db_root_password, db_name, db_user, 
db_password):
+               if self.verify_db(root_user, db_root_password, db_name):
+                       log("[I] Database "+db_name + " already exists.","info")
+               else:
+                       log("[I] Database does not exist! Creating database " + 
db_name,"info")
+                       get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'mysql')
+                       query = get_cmd + " -query \"create database %s;\"" 
%(db_name)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret != 0:
+                               log("[E] Database creation failed!!","error")
+                               sys.exit(1)
+                       else:
+                               if self.verify_db(root_user, db_root_password, 
db_name):
+                                       log("[I] Creating database " + db_name 
+ " succeeded", "info")
+                                       return True
+                               else:
+                                       log("[E] Database creation 
failed!!","error")
+                                       sys.exit(1)
+
+
+       def grant_xa_db_user(self, root_user, db_name, db_user, db_password, 
db_root_password, is_revoke):
+               hosts_arr =["%", "localhost"]
+               if is_revoke:
+                       for host in hosts_arr:
+                               get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'mysql')
+                               query = get_cmd + " -query \"REVOKE ALL 
PRIVILEGES,GRANT OPTION FROM '%s'@'%s';\"" %(db_user, host)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       query = get_cmd + " -query \"FLUSH 
PRIVILEGES;\""
+                                       ret = 
subprocess.check_call(shlex.split(query))
+                                       if ret != 0:
+                                               sys.exit(1)
+                               else:
+                                       sys.exit(1)
+
+               for host in hosts_arr:
+                       log("[I] ---------------Granting privileges TO user 
'"+db_user+"'@'"+host+"' on db '"+db_name+"'-------------" , "info")
+                       get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'mysql')
+                       query = get_cmd + " -query \"grant all privileges on 
%s.* to '%s'@'%s' with grant option;\"" %(db_name,db_user, host)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret == 0:
+                               log("[I] ---------------FLUSH PRIVILEGES 
-------------" , "info")
+                               query = get_cmd + " -query \"FLUSH 
PRIVILEGES;\""
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       log("[I] Privileges granted to '" + 
db_user + "' on '"+db_name+"'", "info")
+                               else:
+                                       log("[E] Granting privileges to '" 
+db_user+"' failed on '"+db_name+"'", "error")
+                                       sys.exit(1)
+                       else:
+                               log("[E] Granting privileges to '" +db_user+"' 
failed on '"+db_name+"'", "error")
+                               sys.exit(1)
+
+
+       def create_auditdb_user(self, xa_db_host, audit_db_host, db_name, 
audit_db_name, xa_db_root_user, audit_db_root_user, db_user, audit_db_user, 
xa_db_root_password, audit_db_root_password, db_password, audit_db_password, 
DBA_MODE):
+               if DBA_MODE == "TRUE" :
+                       log("[I] --------- Setup audit user ---------","info")
+                       self.create_rangerdb_user(audit_db_root_user, 
audit_db_user, audit_db_password, audit_db_root_password)
+                       hosts_arr =["%", "localhost"]
+                       for host in hosts_arr:
+                               get_cmd = 
self.get_jisql_cmd(audit_db_root_user, audit_db_root_password ,'mysql')
+                               query = get_cmd + " -query \"REVOKE ALL 
PRIVILEGES,GRANT OPTION FROM '%s'@'%s';\"" %(audit_db_user, host)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       query = get_cmd + " -query \"FLUSH 
PRIVILEGES;\""
+                                       ret = 
subprocess.check_call(shlex.split(query))
+                                       if ret != 0:
+                                               sys.exit(1)
+                               else:
+                                       sys.exit(1)
+                       self.create_db(audit_db_root_user, 
audit_db_root_password, audit_db_name, db_user, db_password)
+                       self.grant_xa_db_user(audit_db_root_user, 
audit_db_name, db_user, db_password, audit_db_root_password, False)
+               
+       
+
+class OracleConf(BaseDB):
+       # Constructor
+       def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
+               self.host = host 
+               self.SQL_CONNECTOR_JAR = SQL_CONNECTOR_JAR
+               self.JAVA_BIN = JAVA_BIN
+
+       def get_jisql_cmd(self, user, password):
+               #TODO: User array for forming command
+               jisql_cmd = "%s -cp %s:jisql/lib/* org.apache.util.sql.Jisql 
-driver oraclethin -cstring jdbc:oracle:thin:@%s -u '%s' -p '%s' -noheader 
-trim" %(self.JAVA_BIN, self.SQL_CONNECTOR_JAR, self.host, user, password)
+               return jisql_cmd
+
+       def check_connection(self, db_name, db_user, db_password):
+               log("[I] Checking connection", "info")
+               get_cmd = self.get_jisql_cmd(db_user, db_password)
+               query = get_cmd + " -c \; -query \"select * from v$version;\""
+               output = check_output(shlex.split(query))
+               if output.strip('Production  |'):
+                       log("[I] Connection success", "info")
+                       return True
+               else:
+                       log("[E] Can't establish connection!", "error")
+                       sys.exit(1)
+
+       def verify_user(self, root_user, db_user, db_root_password):
+               log("[I] Verifying user " + db_user ,"info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password)       
        
+               query = get_cmd + " -c \; -query \"select username from 
all_users where upper(username)=upper('%s');\"" %(db_user)
+               output = check_output(shlex.split(query))
+               if output.strip(db_user + " |"):
+                       return True
+               else:
+                       return False
+
+       def create_rangerdb_user(self, root_user, db_user, db_password, 
db_root_password):
+               if self.check_connection(self, root_user, db_root_password):
+                       if self.verify_user(root_user, db_user, 
db_root_password):
+                               log("[I] Oracle user " + db_user + " already 
exists!", "info")
+                       else:
+                               log("[I] User does not exists, Creating user : 
" + db_user, "info")
+                               get_cmd = self.get_jisql_cmd(root_user, 
db_root_password)
+                               query = get_cmd + " -c \; -query 'create user 
%s identified by \"%s\";'" %(db_user, db_password)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       if self.verify_user(root_user, db_user, 
db_root_password):
+                                               log("[I] User " + db_user + " 
created", "info")
+                                               log("[I] Granting permission to 
" + db_user, "info")
+                                               query = get_cmd + " -c \; 
-query 'GRANT CREATE SESSION,CREATE PROCEDURE,CREATE TABLE,CREATE VIEW,CREATE 
SEQUENCE,CREATE PUBLIC SYNONYM,CREATE TRIGGER,UNLIMITED Tablespace TO %s WITH 
ADMIN OPTION;'" % (db_user)
+                                               ret = 
subprocess.check_call(shlex.split(query))
+                                               if ret == 0:
+                                                       log("[I] Granting 
permissions to Oracle user '" + db_user + "' for %s done" %(self.host), "info")
+                                               else:
+                                                       log("[E] Granting 
permissions to Oracle user '" + db_user + "' failed", "error")
+                                                       sys.exit(1)
+                                       else:
+                                               log("[E] Creating Oracle user 
'" + db_user + "' failed", "error")
+                                               sys.exit(1)
+                               else:
+                                       log("[E] Creating Oracle user '" + 
db_user + "' failed", "error")
+                                       sys.exit(1)
+
+
+       def verify_tablespace(self, root_user, db_root_password, db_name):
+               log("[I] Verifying tablespace " + db_name, "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password)       
        
+               query = get_cmd + " -c \; -query \"SELECT DISTINCT 
UPPER(TABLESPACE_NAME) FROM USER_TablespaceS where 
UPPER(Tablespace_Name)=UPPER(\'%s\');\"" %(db_name)
+               output = check_output(shlex.split(query))
+               if output.strip(db_name+' |'):
+                       return True
+               else:
+                       return False
+
+       def create_db(self, root_user, db_root_password, db_name, db_user, 
db_password):
+               if self.verify_tablespace(root_user, db_root_password, db_name):
+                       log("[I] Tablespace " + db_name + " already 
exists.","info")
+                       if self.verify_user(root_user, db_user, 
db_root_password):
+                               get_cmd = self.get_jisql_cmd(db_user 
,db_password)
+                               query = get_cmd + " -c \; -query 'select 
default_tablespace from user_users;'"
+                               output = 
check_output(shlex.split(query)).strip()
+                               db_name = db_name.upper() +' |'
+                               if output == db_name:
+                                       log("[I] User name " + db_user + " and 
tablespace " + db_name + " already exists.","info")
+                               else:
+                                       log("[E] "+db_user + " user already 
assigned some other tablespace , give some other DB name.","error")
+                                       sys.exit(1)
+                               #status = self.assign_tablespace(root_user, 
db_root_password, db_user, db_password, db_name, False)
+                               #return status
+               else:
+                       log("[I] Tablespace does not exist. Creating 
tablespace: " + db_name,"info")
+                       get_cmd = self.get_jisql_cmd(root_user, 
db_root_password)
+                       query = get_cmd + " -c \; -query \"create tablespace %s 
datafile '%s.dat' size 10M autoextend on;\"" %(db_name, db_name)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret == 0:
+                               if self.verify_tablespace(root_user, 
db_root_password, db_name):
+                                       log("[I] Creating tablespace 
"+db_name+" succeeded", "info")
+                                       status = 
self.assign_tablespace(root_user, db_root_password, db_user, db_password, 
db_name, True)
+                                       return status
+                               else:
+                                       log("[E] Creating tablespace 
"+db_name+" failed", "error")
+                                       sys.exit(1)
+                       else:
+                               log("[E] Creating tablespace "+db_name+" 
failed", "error")
+                               sys.exit(1)
+
+       def assign_tablespace(self, root_user, db_root_password, db_user, 
db_password, db_name, status):
+               log("[I] Assign default tablespace " +db_name + " to " + 
db_user, "info")
+               # Assign default tablespace db_name
+               get_cmd = self.get_jisql_cmd(root_user , db_root_password)
+               query = get_cmd +" -c \; -query 'alter user %s identified by 
\"%s\" DEFAULT Tablespace %s;'" %(db_user, db_password, db_name)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret == 0:
+                       log("[I] Granting permission to " + db_user, "info")
+                       query = get_cmd + " -c \; -query 'GRANT CREATE 
SESSION,CREATE PROCEDURE,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,CREATE PUBLIC 
SYNONYM,CREATE TRIGGER,UNLIMITED Tablespace TO %s WITH ADMIN OPTION;'" % 
(db_user)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret == 0:
+                               log("[I] Granting Oracle user '" + db_user + "' 
done", "info")
+                               return status
+                       else:
+                               log("[E] Granting Oracle user '" + db_user + "' 
failed", "error")
+                               sys.exit(1)
+               else:
+                       log("[E] Assigning default tablespace to user '" + 
db_user + "' failed", "error")
+                       sys.exit(1)
+
+
+       def create_auditdb(self, audit_db_root_user, db_name ,audit_db_name, 
db_user, audit_db_user, db_password, audit_db_password, audit_db_root_password):
+               if self.verify_tablespace(audit_db_root_user, 
audit_db_root_password, audit_db_name):
+                       log("[I] Tablespace " + audit_db_name + " already 
exists.","info")
+                       status1 = True
+               else:
+                       log("[I] Tablespace does not exist. Creating 
tablespace: " + audit_db_name,"info")
+                       get_cmd = self.get_jisql_cmd(audit_db_root_user, 
audit_db_root_password)
+                       query = get_cmd + " -c \; -query \"create tablespace %s 
datafile '%s.dat' size 10M autoextend on;\"" %(audit_db_name, audit_db_name)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret != 0:
+                               log("[E] Tablespace creation failed!!","error")
+                               sys.exit(1)
+                       else:
+                               log("[I] Creating tablespace "+ audit_db_name + 
" succeeded", "info")
+                               status1 = True
+
+               if self.verify_tablespace(audit_db_root_user, 
audit_db_root_password, db_name):
+                       log("[I] Tablespace " + db_name + " already 
exists.","info")
+                       status2 = True
+               else:
+                       log("[I] Tablespace does not exist. Creating 
tablespace: " + db_name,"info")
+                       get_cmd = self.get_jisql_cmd(audit_db_root_user, 
audit_db_root_password)
+                       query = get_cmd + " -c \; -query \"create tablespace %s 
datafile '%s.dat' size 10M autoextend on;\"" %(db_name, db_name)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret != 0:
+                               log("[E] Tablespace creation failed!!","error")
+                               sys.exit(1)
+                       else:
+                               log("[I] Creating tablespace "+ db_name + " 
succeeded", "info")
+                               status2 = True
+
+               if (status1 == True and status2 == True):
+                       log("[I] Assign default tablespace " + db_name + " to : 
" + audit_db_user, "info")
+                       # Assign default tablespace db_name
+                       get_cmd = self.get_jisql_cmd(audit_db_root_user , 
audit_db_root_password)
+                       query = get_cmd +" -c \; -query 'alter user %s 
identified by \"%s\" DEFAULT Tablespace %s;'" %(audit_db_user, 
audit_db_password, db_name)
+                       ret1 = subprocess.check_call(shlex.split(query))
+ 
+                       log("[I] Assign default tablespace " + audit_db_name + 
" to : " + audit_db_user, "info")
+                       # Assign default tablespace audit_db_name
+                       get_cmd = self.get_jisql_cmd(audit_db_root_user , 
audit_db_root_password)
+                       query = get_cmd +" -c \; -query 'alter user %s 
identified by \"%s\" DEFAULT Tablespace %s;'" %(audit_db_user, 
audit_db_password, audit_db_name)
+                       ret2 = subprocess.check_call(shlex.split(query))
+
+                       if (ret1 == 0 and ret2 == 0):
+                               log("[I] Granting permission to " + db_user, 
"info")
+                               query = get_cmd + " -c \; -query 'GRANT CREATE 
SESSION,CREATE PROCEDURE,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,CREATE PUBLIC 
SYNONYM,CREATE TRIGGER,UNLIMITED Tablespace TO %s WITH ADMIN OPTION;'" % 
(db_user)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       return True
+                               else:
+                                       log("[E] Granting Oracle user '" + 
db_user + "' failed", "error")
+                                       sys.exit(1)
+                       else:
+                               return False
+
+
+       def grant_xa_db_user(self, root_user, db_name, db_user, db_password, 
db_root_password, invoke):
+               get_cmd = self.get_jisql_cmd(root_user ,db_root_password)
+               query = get_cmd + " -c \; -query 'GRANT CREATE SESSION,CREATE 
PROCEDURE,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,CREATE PUBLIC SYNONYM,CREATE 
TRIGGER,UNLIMITED Tablespace TO %s WITH ADMIN OPTION;'" % (db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret == 0:
+                       log("[I] Granted permission to " + db_user, "info")
+                       return True
+               else:
+                       log("[E] Granting Oracle user '" + db_user + "' 
failed", "error")
+                       sys.exit(1)
+
+
+       def create_auditdb_user(self, xa_db_host , audit_db_host , db_name 
,audit_db_name, xa_db_root_user, audit_db_root_user, db_user, audit_db_user, 
xa_db_root_password, audit_db_root_password, db_password, audit_db_password, 
DBA_MODE):
+               if DBA_MODE == "TRUE":
+                       log("[I] --------- Setup audit user ---------","info")
+                       #self.create_rangerdb_user(audit_db_root_user, db_user, 
db_password, audit_db_root_password)
+                       if self.verify_user(audit_db_root_user, db_user, 
audit_db_root_password):
+                               log("[I] Oracle admin user " + db_user + " 
already exists!", "info")
+                       else:
+                               log("[I] User does not exists, Creating user " 
+ db_user, "info")
+                               get_cmd = 
self.get_jisql_cmd(audit_db_root_user, audit_db_root_password)
+                               query = get_cmd + " -c \; -query 'create user 
%s identified by \"%s\";'" %(db_user, db_password)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       if self.verify_user(audit_db_root_user, 
db_user, audit_db_root_password):
+                                               log("[I] User " + db_user + " 
created", "info")
+                                               log("[I] Granting permission to 
" + db_user, "info")
+                                               query = get_cmd + " -c \; 
-query 'GRANT CREATE SESSION,CREATE PROCEDURE,CREATE TABLE,CREATE VIEW,CREATE 
SEQUENCE,CREATE PUBLIC SYNONYM,CREATE TRIGGER,UNLIMITED Tablespace TO %s WITH 
ADMIN OPTION;'" % (db_user)
+                                               ret = 
subprocess.check_call(shlex.split(query))
+                                               if ret == 0:
+                                                       log("[I] Granting 
permissions to Oracle user '" + db_user + "' for %s Done" %(self.host), "info")
+                                               else:
+                                                       log("[E] Granting 
permissions to Oracle user '" + db_user + "' failed", "error")
+                                                       sys.exit(1)
+                                       else:
+                                               log("[E] Creating Oracle user 
'" + db_user + "' failed", "error")
+                                               sys.exit(1)
+                               else:
+                                       log("[E] Creating Oracle user '" + 
db_user + "' failed", "error")
+                                       sys.exit(1)
+
+                       if self.verify_user(audit_db_root_user, audit_db_user, 
audit_db_root_password):
+                               log("[I] Oracle audit user " + audit_db_user + 
" already exist!", "info")
+                       else:
+                               log("[I] Audit user does not exists, Creating 
audit user " + audit_db_user, "info")
+                               get_cmd = 
self.get_jisql_cmd(audit_db_root_user, audit_db_root_password)
+                               query = get_cmd + " -c \; -query 'create user 
%s identified by \"%s\";'" %(audit_db_user, audit_db_password)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       if self.verify_user(audit_db_root_user, 
audit_db_user, audit_db_root_password):
+                                               query = get_cmd + " -c \; 
-query \"GRANT CREATE SESSION TO %s;\"" %(audit_db_user)
+                                               ret = 
subprocess.check_call(shlex.split(query))
+                                               if ret == 0:
+                                                       log("[I] Granting 
permission to " + audit_db_user + " done", "info")
+                                               else:
+                                                       log("[E] Granting 
permission to " + audit_db_user + " failed", "error")
+                                                       sys.exit(1)
+                                       else:
+                                               log("[I] Creating audit user " 
+ audit_db_user + " failed!", "info")
+                       
+                       self.create_auditdb(audit_db_root_user, db_name 
,audit_db_name, db_user, audit_db_user, db_password, audit_db_password, 
audit_db_root_password)
+               if DBA_MODE == "TRUE":
+                       self.grant_xa_db_user(audit_db_root_user, 
audit_db_name, db_user, db_password, audit_db_root_password, True)
+
+
+class PostgresConf(BaseDB):
+       # Constructor
+       def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
+               self.host = host
+               self.SQL_CONNECTOR_JAR = SQL_CONNECTOR_JAR
+               self.JAVA_BIN = JAVA_BIN
+
+
+       def get_jisql_cmd(self, user, password, db_name):
+               #TODO: User array for forming command
+               jisql_cmd = "%s -cp %s:jisql/lib/* org.apache.util.sql.Jisql 
-driver postgresql -cstring jdbc:postgresql://%s:5432/%s -u %s -p %s -noheader 
-trim -c \;" %(self.JAVA_BIN, self.SQL_CONNECTOR_JAR, self.host, db_name, user, 
password)
+               return jisql_cmd
+
+       def verify_user(self, root_user, db_root_password, db_user):
+               log("[I] Verifying user " + db_user , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'postgres')
+               query = get_cmd + " -query \"SELECT rolname FROM pg_roles WHERE 
rolname='%s';\"" %(db_user)
+               output = check_output(shlex.split(query))
+               if output.strip(db_user + " |"):
+                       return True
+               else:
+                       return False
+
+       def check_connection(self, db_name, db_user, db_password):
+               log("[I] Checking connection", "info")
+               get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+               query = get_cmd + " -query \"SELECT 1;\""
+               output = check_output(shlex.split(query))
+               if output.strip('1 |'):
+                       log("[I] connection success", "info")
+                       return True
+               else:
+                       log("[E] Can't establish connection", "error")
+                       sys.exit(1)
+
+       def create_rangerdb_user(self, root_user, db_user, db_password, 
db_root_password):
+               if self.check_connection('postgres', root_user, 
db_root_password):
+                       if self.verify_user(root_user, db_root_password, 
db_user):
+                               log("[I] Postgres user " + db_user + " already 
exists!", "info")
+                       else:
+                               log("[I] User does not exists, Creating user : 
" + db_user, "info")
+                               get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'postgres')
+                               query = get_cmd + " -query \"CREATE USER %s 
WITH LOGIN PASSWORD '%s';\"" %(db_user, db_password)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       if self.verify_user(root_user, 
db_root_password, db_user):
+                                               log("[I] Postgres user " + 
db_user + " created", "info")
+                                       else:
+                                               log("[E] Postgres user " 
+db_user+" creation failed", "error")
+                                               sys.exit(1)
+                               else:
+                                       log("[E] Postgres user " +db_user+" 
creation failed", "error")
+                                       sys.exit(1)
+
+
+       def verify_db(self, root_user, db_root_password, db_name):
+               log("[I] Verifying database " + db_name , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'postgres')
+               query = get_cmd + " -query \"SELECT datname FROM pg_database 
where datname='%s';\"" %(db_name)
+               output = check_output(shlex.split(query))
+               if output.strip(db_name + " |"):
+                       return True
+               else:
+                       return False
+
+
+       def create_db(self, root_user, db_root_password, db_name, db_user, 
db_password):
+               if self.verify_db(root_user, db_root_password, db_name):
+                       log("[I] Database "+db_name + " already exists.", 
"info")
+               else:
+                       log("[I] Database does not exist! Creating database : " 
+ db_name,"info")
+                       get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'postgres')
+                       query = get_cmd + " -query \"create database %s with 
OWNER %s;\"" %(db_name, db_user)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret != 0:
+                               log("[E] Database creation failed!!","error")
+                               sys.exit(1)
+                       else:
+                               if self.verify_db(root_user, db_root_password, 
db_name):
+                                       log("[I] Creating database " + db_name 
+ " succeeded", "info")
+                                       return True
+                               else:
+                                       log("[E] Database creation 
failed!!","error")
+                                       sys.exit(1)
+
+
+       def grant_xa_db_user(self, root_user, db_name, db_user, db_password, 
db_root_password , True):
+               log("[I] Granting privileges TO user '"+db_user+"' on db 
'"+db_name+"'" , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
db_name)
+               query = get_cmd + " -query \"GRANT ALL PRIVILEGES ON DATABASE 
%s to %s;\"" %(db_name, db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       log("[E] Granting privileges on tables in schema public 
failed", "error")
+                       sys.exit(1)
+
+               query = get_cmd + " -query \"GRANT ALL PRIVILEGES ON SCHEMA 
public TO %s;\"" %(db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       log("[E] Granting privileges on schema public failed", 
"error")
+                       sys.exit(1)
+
+               query = get_cmd + " -query \"GRANT ALL PRIVILEGES ON ALL TABLES 
IN SCHEMA public TO %s;\"" %(db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       log("[E] Granting privileges on database "+db_name+ " 
failed", "error")
+                       sys.exit(1)
+
+               query = get_cmd + " -query \"GRANT ALL PRIVILEGES ON ALL 
SEQUENCES IN SCHEMA public TO %s;\"" %(db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       log("[E] Granting privileges on database "+db_name+ " 
failed", "error")
+                       sys.exit(1)
+               log("[I] Granting privileges TO user '"+db_user+"' on db 
'"+db_name+"' Done" , "info")
+
+
+       def create_auditdb_user(self, xa_db_host, audit_db_host, db_name, 
audit_db_name, xa_db_root_user, audit_db_root_user, db_user, audit_db_user, 
xa_db_root_password, audit_db_root_password, db_password, audit_db_password, 
DBA_MODE):
+               if DBA_MODE == "TRUE":
+                       log("[I] --------- Setup audit user ---------","info")
+                       self.create_rangerdb_user(audit_db_root_user, db_user, 
db_password, audit_db_root_password)
+                       self.create_rangerdb_user(audit_db_root_user, 
audit_db_user, audit_db_password, audit_db_root_password)
+                       self.create_db(audit_db_root_user, 
audit_db_root_password, audit_db_name, db_user, db_password)
+
+               if DBA_MODE == "TRUE":
+                       self.grant_xa_db_user(audit_db_root_user, 
audit_db_name, db_user, db_password, audit_db_root_password, True)
+
+
+class SqlServerConf(BaseDB):
+       # Constructor
+       def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
+               self.host = host
+               self.SQL_CONNECTOR_JAR = SQL_CONNECTOR_JAR
+               self.JAVA_BIN = JAVA_BIN
+
+
+       def get_jisql_cmd(self, user, password, db_name):
+               #TODO: User array for forming command
+               jisql_cmd = "%s -cp %s:jisql/lib/* org.apache.util.sql.Jisql 
-user %s -password %s -driver mssql -cstring 
jdbc:sqlserver://%s:1433\\;databaseName=%s -noheader -trim"%(self.JAVA_BIN, 
self.SQL_CONNECTOR_JAR, user, password, self.host,db_name)
+               return jisql_cmd
+
+       def verify_user(self, root_user, db_root_password, db_user):
+               log("[I] Verifying user " + db_user , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'msdb')
+               query = get_cmd + " -c \; -query \"select loginname from 
master.dbo.syslogins where loginname = '%s';\"" %(db_user)
+               output = check_output(shlex.split(query))
+               if output.strip(db_user + " |"):
+                       return True
+               else:
+                       return False
+
+       def check_connection(self, db_name, db_user, db_password):
+               log("[I] Checking connection", "info")
+               get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+               query = get_cmd + " -c \; -query \"SELECT 1;\""
+               output = check_output(shlex.split(query))
+               if output.strip('1 |'):
+                       log("[I] Connection success", "info")
+                       return True
+               else:
+                       log("[E] Can't establish connection", "error")
+                       sys.exit(1)
+
+       def create_rangerdb_user(self, root_user, db_user, db_password, 
db_root_password):
+               if self.check_connection('msdb', root_user, db_root_password):
+                       if self.verify_user(root_user, db_root_password, 
db_user):
+                               log("[I] SQL Server user " + db_user + " 
already exists!", "info")
+                       else:
+                               get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'msdb')
+                               log("[I] User does not exists, Creating Login 
user " + db_user, "info")
+                               query = get_cmd + " -c \; -query \"CREATE LOGIN 
%s WITH PASSWORD = '%s';\"" %(db_user,db_password)
+                               ret = subprocess.check_call(shlex.split(query))
+                               if ret == 0:
+                                       if self.verify_user(root_user, 
db_root_password, db_user):
+                                                log("[I] SQL Server user " + 
db_user + " created", "info")
+                                       else:
+                                               log("[E] SQL Server user " 
+db_user+" creation failed", "error")
+                                               sys.exit(1)
+                               else:
+                                       log("[E] SQL Server user " +db_user+" 
creation failed", "error")
+                                       sys.exit(1)
+
+
+       def verify_db(self, root_user, db_root_password, db_name):
+               log("[I] Verifying database " + db_name, "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'msdb')
+               query = get_cmd + " -c \; -query \"SELECT name from 
sys.databases where name='%s';\"" %(db_name)
+               output = check_output(shlex.split(query))
+               if output.strip(db_name + " |"):
+                       return True
+               else:
+                       return False
+
+       def create_db(self, root_user, db_root_password, db_name, db_user, 
db_password):
+               if self.verify_db(root_user, db_root_password, db_name):
+                       log("[I] Database " + db_name + " already 
exists.","info")
+               else:
+                       log("[I] Database does not exist! Creating database : " 
+ db_name,"info")
+                       get_cmd = self.get_jisql_cmd(root_user, 
db_root_password, 'msdb')
+                       query = get_cmd + " -c \; -query \"create database 
%s;\"" %(db_name)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret != 0:
+                               log("[E] Database creation failed!!","error")
+                               sys.exit(1)
+                       else:
+                               if self.verify_db(root_user, db_root_password, 
db_name):
+                                       self.create_user(root_user, db_name 
,db_user, db_password, db_root_password)
+                                       log("[I] Creating database " + db_name 
+ " succeeded", "info")
+                                       return True
+#                                      self.import_db_file(db_name, root_user, 
db_user, db_password, db_root_password, file_name)
+                               else:
+                                       log("[E] Database creation 
failed!!","error")
+                                       sys.exit(1)
+
+
+       def create_user(self, root_user, db_name ,db_user, db_password, 
db_root_password):
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'msdb')
+               query = get_cmd + " -c \; -query \"USE %s SELECT name FROM 
sys.database_principals WHERE name = N'%s';\"" %(db_name, db_user)
+               output = check_output(shlex.split(query))
+               if output.strip(db_user + " |"):
+                       log("[I] User "+db_user+" exist ","info")
+               else:
+                       query = get_cmd + " -c \; -query \"USE %s CREATE USER 
%s for LOGIN %s;\"" %(db_name ,db_user, db_user)
+                       ret = subprocess.check_call(shlex.split(query))
+                       if ret == 0:
+                               query = get_cmd + " -c \; -query \"USE %s 
SELECT name FROM sys.database_principals WHERE name = N'%s';\"" %(db_name 
,db_user)
+                               output = check_output(shlex.split(query))
+                               if output.strip(db_user + " |"):
+                                       log("[I] User "+db_user+" exist 
","info")
+                               else:
+                                       log("[E] Database creation 
failed!!","error")
+                                       sys.exit(1)
+                       else:
+                               log("[E] Database creation failed!!","error")
+                               sys.exit(1)
+
+
+       def grant_xa_db_user(self, root_user, db_name, db_user, db_password, 
db_root_password, True):
+               log("[I] Granting permission to admin user '" + db_user + "' on 
db '" + db_name + "'" , "info")
+               get_cmd = self.get_jisql_cmd(root_user, db_root_password, 
'msdb')
+               query = get_cmd + " -c \; -query \"ALTER LOGIN [%s] WITH 
DEFAULT_DATABASE=[%s];\"" %(db_user, db_name)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       sys.exit(1)
+               query = get_cmd + " -c \; -query \" USE %s EXEC 
sp_addrolemember N'db_owner', N'%s';\"" %(db_name, db_user)
+#                query = get_cmd + " -c \; -query \" USE %s GRANT ALL 
PRIVILEGES to %s;\"" %(db_name , db_user)
+               ret = subprocess.check_call(shlex.split(query))
+               if ret != 0:
+                       sys.exit(1)
+
+
+       def create_auditdb_user(self, xa_db_host, audit_db_host, db_name, 
audit_db_name, xa_db_root_user, audit_db_root_user, db_user, audit_db_user, 
xa_db_root_password, audit_db_root_password, db_password, audit_db_password, 
DBA_MODE):
+               if DBA_MODE == "TRUE":
+                       log("[I] --------- Setup audit user --------- ","info")
+                       self.create_rangerdb_user(audit_db_root_user, db_user, 
db_password, audit_db_root_password)
+                       #log("[I] --------- Setup audit user --------- ","info")
+                       self.create_rangerdb_user(audit_db_root_user, 
audit_db_user, audit_db_password, audit_db_root_password)
+                       self.create_db(audit_db_root_user, 
audit_db_root_password ,audit_db_name, audit_db_user, audit_db_password)
+                       self.create_user(xa_db_root_user, audit_db_name 
,db_user, db_password, xa_db_root_password)
+                       self.grant_xa_db_user(audit_db_root_user, 
audit_db_name, db_user, db_password, audit_db_root_password, True)
+
+
+def main():
+       #populate_global_dict()
+
+       FORMAT = '%(asctime)-15s %(message)s'
+       logging.basicConfig(format=FORMAT, level=logging.DEBUG)
+
+       DBA_MODE = 'TRUE'
+
+       #JAVA_BIN=globalDict['JAVA_BIN']
+       if os.environ['JAVA_HOME'] == "":
+               log("[E] --------- JAVA_HOME environment property not defined, 
aborting installation! ---------", "error")
+               sys.exit(1)
+       JAVA_BIN=os.environ['JAVA_HOME']+'/bin/java'
+       while os.path.isfile(JAVA_BIN) == False:
+               log("Enter java executable path: :","info")
+               JAVA_BIN=raw_input()
+
+       #XA_DB_FLAVOR=globalDict['DB_FLAVOR']
+       #AUDIT_DB_FLAVOR=globalDict['DB_FLAVOR']
+       XA_DB_FLAVOR=''
+       while XA_DB_FLAVOR == "":
+               log("Enter db flavour{MYSQL|ORACLE|POSTGRES|SQLSERVER} 
:","info")
+               XA_DB_FLAVOR=raw_input()
+       AUDIT_DB_FLAVOR = XA_DB_FLAVOR
+       XA_DB_FLAVOR = XA_DB_FLAVOR.upper()
+       AUDIT_DB_FLAVOR = AUDIT_DB_FLAVOR.upper()
+
+       CONNECTOR_JAR=''
+       if XA_DB_FLAVOR == "MYSQL" or XA_DB_FLAVOR == "ORACLE" or XA_DB_FLAVOR 
== "POSTGRES" or XA_DB_FLAVOR == "SQLSERVER":
+               log("Enter JDBC connector file for :"+XA_DB_FLAVOR,"info")
+               CONNECTOR_JAR=raw_input()
+               while os.path.isfile(CONNECTOR_JAR) == False:
+                       log("JDBC connector file "+CONNECTOR_JAR+" does not 
exist, Please enter connector path :","error")
+                       CONNECTOR_JAR=raw_input()
+       else:
+               log("[E] --------- NO SUCH SUPPORTED DB FLAVOUR!! ---------", 
"error")
+               sys.exit(1)
+
+       #xa_db_host = globalDict['db_host']
+       #audit_db_host = globalDict['db_host']
+       xa_db_host=''
+       while xa_db_host == "":
+               log("Enter DB Host :","info")
+               xa_db_host=raw_input()
+       audit_db_host=xa_db_host
+
+       mysql_dbversion_catalog = 'db/mysql/create_dbversion_catalog.sql'
+       #mysql_core_file = globalDict['mysql_core_file']
+       mysql_core_file = 'db/mysql/xa_core_db.sql'
+       #mysql_audit_file = globalDict['mysql_audit_file']
+       mysql_audit_file = 'db/mysql/xa_audit_db.sql'
+       mysql_patches = 'db/mysql/patches'
+
+       oracle_dbversion_catalog = 'db/oracle/create_dbversion_catalog.sql'
+       #oracle_core_file = globalDict['oracle_core_file'] 
+       oracle_core_file = 'db/oracle/xa_core_db_oracle.sql'
+       #oracle_audit_file = globalDict['oracle_audit_file'] 
+       oracle_audit_file = 'db/oracle/xa_audit_db_oracle.sql' 
+       oracle_patches = 'db/oracle/patches'
+
+       postgres_dbversion_catalog = 'db/postgres/create_dbversion_catalog.sql'
+       #postgres_core_file = globalDict['postgres_core_file']
+       postgres_core_file = 'db/postgres/xa_core_db_postgres.sql'
+       #postgres_audit_file = globalDict['postgres_audit_file']
+       postgres_audit_file = 'db/postgres/xa_audit_db_postgres.sql'
+       postgres_patches = 'db/postgres/patches'
+
+       sqlserver_dbversion_catalog = 
'db/sqlserver/create_dbversion_catalog.sql'
+       #sqlserver_core_file = globalDict['sqlserver_core_file']
+       sqlserver_core_file = 'db/sqlserver/xa_core_db_sqlserver.sql'
+       #sqlserver_audit_file = globalDict['sqlserver_audit_file']
+       sqlserver_audit_file = 'db/sqlserver/xa_audit_db_sqlserver.sql'
+       sqlserver_patches = 'db/sqlserver/patches'
+
+       #db_name = globalDict['db_name']
+       #db_user = globalDict['db_user']
+       #db_password = globalDict['db_password']
+       #xa_db_root_user = globalDict['db_root_user']
+       #xa_db_root_password = globalDict['db_root_password']
+
+       xa_db_root_user=''
+       while xa_db_root_user == "":
+               log("Enter db root user:","info")
+               xa_db_root_user=raw_input()
+       
+       log("Enter db root password:","info")
+       xa_db_root_password = getpass.getpass("Enter db root password:")
+
+       db_name = ''
+       while db_name == "":
+               log("Enter DB Name :","info")
+               db_name=raw_input()
+
+       db_user=''
+       while db_user == "":
+               log("Enter db user name:","info")
+               db_user=raw_input()
+
+       db_password=''
+       while db_password == "":
+               log("Enter db user password:","info")
+               db_password = getpass.getpass("Enter db user password:")
+
+
+       x_db_version = 'x_db_version_h'
+       xa_access_audit = 'xa_access_audit'
+       x_user = 'x_portal_user'
+
+       #audit_db_name = globalDict['audit_db_name']
+       #audit_db_user = globalDict['audit_db_user']
+       #audit_db_password = globalDict['audit_db_password']
+       #audit_db_root_user = globalDict['db_root_user'] 
+       #audit_db_root_password = globalDict['db_root_password']
+       #print "Enter audit_db_root_password :"
+       audit_db_name=''
+       while audit_db_name == "":
+               log("Enter audit db name:","info")
+               audit_db_name = raw_input()
+
+       audit_db_user=''
+       while audit_db_user == "":
+               log("Enter audit user name:","info")
+               audit_db_user = raw_input()
+
+       audit_db_password=''
+       while audit_db_password == "":          
+               log("Enter audit db user password:","info")             
+               audit_db_password = getpass.getpass("Enter audit db user 
password:")
+
+       audit_db_root_user = xa_db_root_user    
+       audit_db_root_password = xa_db_root_password
+#      log("Enter audit db root user:","info")
+#      audit_db_root_user = raw_input()
+#      log("Enter db root password:","info")
+#      xa_db_root_password = raw_input()
+
+       if XA_DB_FLAVOR == "MYSQL":
+               #MYSQL_CONNECTOR_JAR=globalDict['SQL_CONNECTOR_JAR']
+               #MYSQL_CONNECTOR_JAR='/usr/share/java/mysql-connector-java.jar'
+               MYSQL_CONNECTOR_JAR=CONNECTOR_JAR
+               xa_sqlObj = MysqlConf(xa_db_host, MYSQL_CONNECTOR_JAR, JAVA_BIN)
+               xa_db_version_file = 
os.path.join(os.getcwd(),mysql_dbversion_catalog)
+               xa_db_core_file = os.path.join(os.getcwd(),mysql_core_file)
+               xa_patch_file = os.path.join(os.getcwd(),mysql_patches)
+               
+       elif XA_DB_FLAVOR == "ORACLE":
+#              ORACLE_CONNECTOR_JAR=globalDict['SQL_CONNECTOR_JAR']
+               #ORACLE_CONNECTOR_JAR='/usr/share/java/ojdbc6.jar'
+               ORACLE_CONNECTOR_JAR=CONNECTOR_JAR
+               xa_db_root_user = xa_db_root_user+" AS SYSDBA"
+               xa_sqlObj = OracleConf(xa_db_host, ORACLE_CONNECTOR_JAR, 
JAVA_BIN)
+               xa_db_version_file = 
os.path.join(os.getcwd(),oracle_dbversion_catalog)
+               xa_db_core_file = os.path.join(os.getcwd(),oracle_core_file)
+               xa_patch_file = os.path.join(os.getcwd(),oracle_patches)
+
+       elif XA_DB_FLAVOR == "POSTGRES":
+#              POSTGRES_CONNECTOR_JAR = globalDict['SQL_CONNECTOR_JAR']
+               #POSTGRES_CONNECTOR_JAR='/usr/share/java/postgresql.jar'
+               POSTGRES_CONNECTOR_JAR=CONNECTOR_JAR
+               xa_sqlObj = PostgresConf(xa_db_host, POSTGRES_CONNECTOR_JAR, 
JAVA_BIN)
+               xa_db_version_file = 
os.path.join(os.getcwd(),postgres_dbversion_catalog)
+               xa_db_core_file = os.path.join(os.getcwd(),postgres_core_file)
+               xa_patch_file = os.path.join(os.getcwd(),postgres_patches)
+
+       elif XA_DB_FLAVOR == "SQLSERVER":
+#              SQLSERVER_CONNECTOR_JAR = globalDict['SQL_CONNECTOR_JAR']
+               #SQLSERVER_CONNECTOR_JAR='/usr/share/java/sqljdbc4-2.0.jar'
+               SQLSERVER_CONNECTOR_JAR=CONNECTOR_JAR
+               xa_sqlObj = SqlServerConf(xa_db_host, SQLSERVER_CONNECTOR_JAR, 
JAVA_BIN)
+               xa_db_version_file = 
os.path.join(os.getcwd(),sqlserver_dbversion_catalog)
+               xa_db_core_file = os.path.join(os.getcwd(),sqlserver_core_file)
+               xa_patch_file = os.path.join(os.getcwd(),sqlserver_patches)
+       else:
+               log("[E] --------- NO SUCH SUPPORTED DB FLAVOUR!! ---------", 
"error")
+               sys.exit(1)
+
+       if AUDIT_DB_FLAVOR == "MYSQL":
+#              MYSQL_CONNECTOR_JAR=globalDict['SQL_CONNECTOR_JAR']
+               #MYSQL_CONNECTOR_JAR='/usr/share/java/mysql-connector-java.jar'
+               MYSQL_CONNECTOR_JAR=CONNECTOR_JAR
+               audit_sqlObj = 
MysqlConf(audit_db_host,MYSQL_CONNECTOR_JAR,JAVA_BIN)
+               audit_db_file = os.path.join(os.getcwd(),mysql_audit_file)
+
+       elif AUDIT_DB_FLAVOR == "ORACLE":
+               #ORACLE_CONNECTOR_JAR=globalDict['SQL_CONNECTOR_JAR']
+               #ORACLE_CONNECTOR_JAR='/usr/share/java/ojdbc6.jar'
+               ORACLE_CONNECTOR_JAR=CONNECTOR_JAR
+               audit_db_root_user = audit_db_root_user+" AS SYSDBA"
+               audit_sqlObj = OracleConf(audit_db_host, ORACLE_CONNECTOR_JAR, 
JAVA_BIN)
+               audit_db_file = os.path.join(os.getcwd(),oracle_audit_file)
+
+       elif AUDIT_DB_FLAVOR == "POSTGRES":
+               #POSTGRES_CONNECTOR_JAR = globalDict['SQL_CONNECTOR_JAR']
+               #POSTGRES_CONNECTOR_JAR='/usr/share/java/postgresql.jar'
+               POSTGRES_CONNECTOR_JAR=CONNECTOR_JAR
+               audit_sqlObj = PostgresConf(audit_db_host, 
POSTGRES_CONNECTOR_JAR, JAVA_BIN)
+               audit_db_file = os.path.join(os.getcwd(),postgres_audit_file)
+
+       elif AUDIT_DB_FLAVOR == "SQLSERVER":
+               #SQLSERVER_CONNECTOR_JAR = globalDict['SQL_CONNECTOR_JAR']
+               #SQLSERVER_CONNECTOR_JAR='/usr/share/java/sqljdbc4-2.0.jar'
+               SQLSERVER_CONNECTOR_JAR=CONNECTOR_JAR
+               audit_sqlObj = SqlServerConf(audit_db_host, 
SQLSERVER_CONNECTOR_JAR, JAVA_BIN)
+               audit_db_file = os.path.join(os.getcwd(),sqlserver_audit_file)
+       else:
+               log("[E] --------- NO SUCH SUPPORTED DB FLAVOUR!! ---------", 
"error")
+               sys.exit(1)
+
+       # Methods Begin
+       if DBA_MODE == "TRUE" :
+               log("[I] --------- Creating Ranger Admin db user --------- 
","info")
+               xa_sqlObj.create_rangerdb_user(xa_db_root_user, db_user, 
db_password, xa_db_root_password)
+               log("[I] --------- Creating Ranger Admin database 
---------","info")
+               xa_sqlObj.create_db(xa_db_root_user, xa_db_root_password, 
db_name, db_user, db_password)
+               log("[I] --------- Granting permission to Ranger Admin db user 
---------","info")
+               xa_sqlObj.grant_xa_db_user(xa_db_root_user, db_name, db_user, 
db_password, xa_db_root_password, True)
+
+               # Ranger Admin DB Host AND Ranger Audit DB Host are Different 
OR Same
+               log("[I] --------- Verifying/Creating audit user --------- 
","info")
+               audit_sqlObj.create_auditdb_user(xa_db_host, audit_db_host, 
db_name, audit_db_name, xa_db_root_user, audit_db_root_user, db_user, 
audit_db_user, xa_db_root_password, audit_db_root_password, db_password, 
audit_db_password, DBA_MODE)
+               log("[I] --------- Ranger Policy Manager DB and User Creation 
Process Completed..  --------- ","info")
+main()

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/03d1dec3/security-admin/scripts/install.properties
----------------------------------------------------------------------
diff --git a/security-admin/scripts/install.properties 
b/security-admin/scripts/install.properties
index b9bcb20..03d09eb 100644
--- a/security-admin/scripts/install.properties
+++ b/security-admin/scripts/install.properties
@@ -18,10 +18,9 @@
 #
 
 #------------------------- DB CONFIG - BEGIN ----------------------------------
-PYTHON_COMMAND_INVOKER='python'
+PYTHON_COMMAND_INVOKER=python
 
-#DB_FLAVOR=ORACLE
-#DB_FLAVOR=MYSQL
+#DB_FLAVOR=MYSQL|ORACLE|POSTGRES|SQLSERVER
 DB_FLAVOR=MYSQL
 #
 # The executable path to be used to invoke command-line MYSQL 
@@ -35,6 +34,8 @@ SQL_COMMAND_INVOKER='mysql'
 #
 #SQL_CONNECTOR_JAR=/usr/share/java/ojdbc6.jar
 #SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
+#SQL_CONNECTOR_JAR=/usr/share/java/postgresql.jar
+#SQL_CONNECTOR_JAR=/usr/share/java/sqljdbc4.jar
 SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
 
 
@@ -45,14 +46,13 @@ SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
 # ** it will be prompted to enter the password during installation process 
 # **************************************************************************
 #
-#db_root_user=root
-#db_root_user=SYS
+#db_root_user=root|SYS|postgres|sa
 db_root_user=root
 db_root_password=
 db_host=localhost
 
 #
-# DB UserId used for the XASecure schema
+# DB UserId used for the Ranger schema
 #
 db_name=ranger
 db_user=rangeradmin
@@ -61,8 +61,8 @@ db_password=
 #
 # DB UserId for storing auditlog infromation
 # 
-# * audit_db can be same as the XASecure schema db
-# * audit_db must exists in the same ${db_host} as xaserver database 
${db_name} 
+# * audit_db can be same as the Ranger schema db
+# * audit_db must exists in the same ${db_host} as Ranger database ${db_name} 
 # * audit_user must be a different user than db_user (as audit user has access 
to only audit tables)
 #
 audit_db_name=ranger_audit
@@ -97,10 +97,10 @@ unix_group=ranger
 # UNIX authentication service for Policy Manager
 #
 # PolicyManager can authenticate using UNIX username/password
-# The UNIX server specified here as authServiceHostName needs to be installed 
with xasecure-unix-ugsync package.
+# The UNIX server specified here as authServiceHostName needs to be installed 
with ranger-unix-ugsync package.
 # Once the service is installed on authServiceHostName, the UNIX 
username/password from the host <authServiceHostName> can be used to login into 
policy manager
 #
-# ** The installation of xasecure-unix-ugsync package can be installed after 
the policymanager installation is finished.
+# ** The installation of ranger-unix-ugsync package can be installed after the 
policymanager installation is finished.
 #
 #LDAP|ACTIVE_DIRECTORY|UNIX|NONE
 authentication_method=NONE
@@ -112,7 +112,7 @@ authServicePort=5151
 #
 # Sample Settings
 #
-#xa_ldap_url="ldap://71.127.43.33:389";
+#xa_ldap_url="ldap://127.0.0.1:389";
 #xa_ldap_userDNpattern="uid={0},ou=users,dc=xasecure,dc=net"
 #xa_ldap_groupSearchBase="ou=groups,dc=xasecure,dc=net"
 #xa_ldap_groupSearchFilter="(member=uid={0},ou=users,dc=xasecure,dc=net)"
@@ -129,7 +129,7 @@ xa_ldap_groupRoleAttribute=
 # Sample Settings
 #
 #xa_ldap_ad_domain="xasecure.net"
-#xa_ldap_ad_url="ldap://ad.xasecure.net:389";
+#xa_ldap_ad_url="ldap://127.0.0.1:389";
 
 xa_ldap_ad_domain=
 xa_ldap_ad_url=

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/03d1dec3/security-admin/scripts/setup.sh
----------------------------------------------------------------------
diff --git a/security-admin/scripts/setup.sh b/security-admin/scripts/setup.sh
index 85892ce..6c992f7 100755
--- a/security-admin/scripts/setup.sh
+++ b/security-admin/scripts/setup.sh
@@ -17,7 +17,7 @@
 #
 # Ranger Admin Setup Script
 #
-# This script will install policymanager webapplication under tomcat and also, 
initialize the database with xasecure users/tables.
+# This script will install policymanager webapplication under tomcat and also, 
initialize the database with ranger users/tables.
 
 PROPFILE=$PWD/install.properties
 propertyValue=''
@@ -419,7 +419,7 @@ check_db_user_password() {
                then
                        log "[E] Unable to continue as user, ${muser} does not 
have a non-empty password."
                fi
-               printf "Please enter password for the XASecure schema owner 
(${muser}): "
+               printf "Please enter password for the Ranger schema owner 
(${muser}): "
                trap 'stty echo; exit 1' 2 3 15
                stty -echo
                read db_password
@@ -444,7 +444,7 @@ check_audit_user_password() {
                then
                        log "[E] Unable to continue as user, ${muser} does not 
have a non-empty password."
                fi
-               printf "Please enter password for the XASecure Audit Table 
owner (${muser}): "
+               printf "Please enter password for the Ranger Audit Table owner 
(${muser}): "
                trap 'stty echo; exit 1' 2 3 15
                stty -echo
                read audit_db_password
@@ -1377,7 +1377,7 @@ execute_java_patches(){
        fi
 }
 init_logfiles
-log " --------- Running XASecure PolicyManager Web Application Install Script 
--------- "
+log " --------- Running Ranger PolicyManager Web Application Install Script 
--------- "
 log "[I] uname=`uname`"
 log "[I] hostname=`hostname`"
 init_variables
@@ -1396,8 +1396,12 @@ copy_db_connector
 #create_audit_db_user
 check_python_command
 $PYTHON_COMMAND_INVOKER db_setup.py
+if [ "$?" == "0" ]
+then
 update_properties
 do_authentication_setup
 execute_java_patches
-
-echo "Installation of XASecure PolicyManager Web Application is completed."
+else
+       exit 1
+fi
+echo "Installation of Ranger PolicyManager Web Application is completed."
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/03d1dec3/src/main/assembly/admin-web.xml
----------------------------------------------------------------------
diff --git a/src/main/assembly/admin-web.xml b/src/main/assembly/admin-web.xml
index 4a788e9..6988492 100644
--- a/src/main/assembly/admin-web.xml
+++ b/src/main/assembly/admin-web.xml
@@ -171,6 +171,7 @@
                        <include>setup_authentication.sh</include>
                        <include>set_globals.sh</include>
                        <include>db_setup.py</include>
+                       <include>dba_script.py</include>
                </includes>
                <fileMode>544</fileMode>
        </fileSet>

Reply via email to