summaryrefslogtreecommitdiffstats
path: root/base/deploy/src
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2013-02-21 19:47:35 -0500
committerEndi Sukma Dewata <edewata@redhat.com>2013-03-07 17:51:32 -0500
commitc87a65024177ed67cd4ec0f7d533d973f8e1f971 (patch)
treedcceb0a14d514c62773ee07a1fcb09e787dae6e4 /base/deploy/src
parentb18a44db98f19c4d9b9d8d586d2bd1772a5d9f41 (diff)
Added security domain info validation.
The installer script has been modified to validate security domain info in both interactive and silent installation. A basic Python API has been added to access the REST interface. Ticket #473
Diffstat (limited to 'base/deploy/src')
-rwxr-xr-xbase/deploy/src/pkispawn73
-rw-r--r--base/deploy/src/scriptlets/pkilogging.py40
-rw-r--r--base/deploy/src/scriptlets/pkiparser.py23
3 files changed, 94 insertions, 42 deletions
diff --git a/base/deploy/src/pkispawn b/base/deploy/src/pkispawn
index bca496e1d..65bbaa4a8 100755
--- a/base/deploy/src/pkispawn
+++ b/base/deploy/src/pkispawn
@@ -30,10 +30,12 @@ try:
import ldap
import logging
import os
+ import requests
import socket
import struct
import subprocess
import time
+ import urllib2
from time import strftime as date
from pki.deployment import pkiconfig as config
from pki.deployment.pkiparser import PKIConfigParser
@@ -225,15 +227,33 @@ def main(argv):
print
print "Security Domain:"
- parser.read_text('Name', config.pki_subsystem, 'pki_security_domain_name')
- if config.pki_subsystem != "CA":
- parser.read_text('Hostname', config.pki_subsystem, 'pki_security_domain_hostname')
- parser.read_text('Secure HTTP port', config.pki_subsystem, 'pki_security_domain_https_port')
- parser.read_text('Username', config.pki_subsystem, 'pki_security_domain_user')
- parser.read_password(
- 'Password', config.pki_subsystem, 'pki_security_domain_password',
- verifyMessage='Verify password')
+ if config.pki_subsystem == "CA":
+ parser.read_text('Name', config.pki_subsystem, 'pki_security_domain_name')
+
+ else:
+ while True:
+ parser.read_text('Hostname', config.pki_subsystem, 'pki_security_domain_hostname')
+ parser.read_text('Secure HTTP port', config.pki_subsystem, 'pki_security_domain_https_port')
+
+ try:
+ parser.sd_connect()
+ info = parser.sd_get_info()
+ parser.print_text('Name: ' + info.name)
+ parser.set_property(config.pki_subsystem, 'pki_security_domain_name', info.name)
+ break
+ except requests.exceptions.ConnectionError as e:
+ parser.print_text('ERROR: ' + str(e))
+
+ while True:
+ parser.read_text('Username', config.pki_subsystem, 'pki_security_domain_user')
+ parser.read_password('Password', config.pki_subsystem, 'pki_security_domain_password')
+
+ try:
+ parser.sd_authenticate()
+ break
+ except requests.exceptions.HTTPError as e:
+ parser.print_text('ERROR: ' + str(e))
print
@@ -321,23 +341,40 @@ def main(argv):
config.pki_log.debug(pkilogging.format(config.pki_master_dict),
extra=config.PKI_INDENTATION_LEVEL_0)
- if not interactive:
+ if not interactive and\
+ not config.str2bool(config.pki_master_dict['pki_skip_configuration']):
try:
- if not config.str2bool(config.pki_master_dict['pki_skip_configuration']):
- parser.ds_connect()
- parser.ds_bind()
+ parser.ds_connect()
+ parser.ds_bind()
- if parser.ds_base_dn_exists() and\
- not config.str2bool(config.pki_master_dict['pki_ds_remove_data']):
- print 'ERROR: Base DN already exists.'
- sys.exit(1)
+ if parser.ds_base_dn_exists() and\
+ not config.str2bool(config.pki_master_dict['pki_ds_remove_data']):
+ print 'ERROR: Base DN already exists.'
+ sys.exit(1)
- parser.ds_close()
+ parser.ds_close()
except ldap.LDAPError as e:
- print 'ERROR: ' + e.message['desc']
+ print 'ERROR: Unable to access directory server: ' + e.message['desc']
sys.exit(1)
+ if config.pki_subsystem != "CA" or\
+ config.str2bool(config.pki_master_dict['pki_clone']) or\
+ config.str2bool(config.pki_master_dict['pki_subordinate']):
+ try:
+ parser.sd_connect()
+ info = parser.sd_get_info()
+ parser.set_property(config.pki_subsystem, 'pki_security_domain_name', info.name)
+ parser.sd_authenticate()
+
+ except requests.exceptions.ConnectionError as e:
+ print('ERROR: Unable to access security domain: ' + str(e))
+ sys.exit(1)
+
+ except requests.exceptions.HTTPError as e:
+ print('ERROR: Unable to access security domain: ' + str(e))
+ sys.exit(1)
+
print "Installing " + config.pki_subsystem + " into " + config.pki_master_dict['pki_instance_path'] + "."
# Process the various "scriptlets" to create the specified PKI subsystem.
diff --git a/base/deploy/src/scriptlets/pkilogging.py b/base/deploy/src/scriptlets/pkilogging.py
index 3c146a12c..319616145 100644
--- a/base/deploy/src/scriptlets/pkilogging.py
+++ b/base/deploy/src/scriptlets/pkilogging.py
@@ -43,42 +43,34 @@ def format(dict):
return pp.pformat(new_dict)
# PKI Deployment Logging Functions
-def enable_pki_logger(log_dir, log_name, log_level, console_log_level, logger):
+def enable_pki_logger(log_dir, log_name, log_level, console_log_level, name):
if not os.path.isdir(log_dir):
try:
os.makedirs(log_dir)
except OSError:
return OSError
- # Establish 'file' logger using 'basicConfig()'
- logging.LoggerAdapter(logging.getLogger(''), {'indent' : ''})
- logging.basicConfig(level=log_level,
- format='%(asctime)s %(name)-12s ' +\
- '%(levelname)-8s ' +\
- '%(indent)s%(message)s',
- datefmt='%Y-%m-%d %H:%M:%S',
- filename=log_dir + "/" + log_name,
- filemode='w')
+ # Configure logger
+ logger = logging.getLogger(name)
+ logger.setLevel(log_level)
- # Establish 'console' logger
+ # Configure console handler
console = logging.StreamHandler()
- logging.LoggerAdapter(console, {'indent' : ''})
console.setLevel(console_log_level)
console_format = logging.Formatter('%(name)-12s: ' +\
'%(levelname)-8s ' +\
'%(indent)s%(message)s')
console.setFormatter(console_format)
- logging.getLogger('').addHandler(console)
+ logger.addHandler(console)
- # Establish 'file' logger
-# file = logging.FileHandler(log_dir + "/" + log_name, 'w')
-# logging.LoggerAdapter(file, {'indent' : ''})
-# file.setLevel(log_level)
-# file_format = logging.Formatter('%(asctime)s %(name)-12s: ' +\
-# '%(levelname)-8s ' +\
-# '%(indent)s%(message)s',
-# '%Y-%m-%d %H:%M:%S')
-# file.setFormatter(file_format)
-# logging.getLogger('').addHandler(file)
+ # Configure file handler
+ file = logging.FileHandler(log_dir + "/" + log_name, 'w')
+ file.setLevel(log_level)
+ file_format = logging.Formatter('%(asctime)s %(name)-12s: ' +\
+ '%(levelname)-8s ' +\
+ '%(indent)s%(message)s',
+ '%Y-%m-%d %H:%M:%S')
+ file.setFormatter(file_format)
+ logger.addHandler(file)
- return logging.getLogger(logger)
+ return logger
diff --git a/base/deploy/src/scriptlets/pkiparser.py b/base/deploy/src/scriptlets/pkiparser.py
index eee56ca3e..32a3da154 100644
--- a/base/deploy/src/scriptlets/pkiparser.py
+++ b/base/deploy/src/scriptlets/pkiparser.py
@@ -38,6 +38,9 @@ import pkilogging
import pkiconfig as config
import pkimessages as log
+import pki.account
+import pki.client
+import pki.system
class PKIConfigParser:
@@ -391,6 +394,26 @@ class PKIConfigParser:
def ds_close(self):
self.ds_connection.unbind_s()
+ def sd_connect(self):
+ self.sd_connection = pki.client.PKIConnection(
+ protocol='https',
+ hostname=config.pki_master_dict['pki_security_domain_hostname'],
+ port=config.pki_master_dict['pki_security_domain_https_port'],
+ subsystem='ca')
+
+ def sd_get_info(self):
+ sd = pki.system.SecurityDomainClient(self.sd_connection)
+ return sd.getSecurityDomainInfo()
+
+ def sd_authenticate(self):
+ self.sd_connection.authenticate(
+ config.pki_master_dict['pki_security_domain_user'],
+ config.pki_master_dict['pki_security_domain_password'])
+
+ account = pki.account.AccountClient(self.sd_connection)
+ account.login()
+ account.logout()
+
def compose_pki_master_dictionary(self):
"Create a single master PKI dictionary from the sectional dictionaries"
try: