diff options
-rwxr-xr-x | install/tools/ipa-adtrust-install | 34 | ||||
-rwxr-xr-x | install/tools/ipa-ca-install | 65 | ||||
-rwxr-xr-x | install/tools/ipa-compat-manage | 23 | ||||
-rwxr-xr-x | install/tools/ipa-dns-install | 34 | ||||
-rwxr-xr-x | install/tools/ipa-managed-entries | 19 | ||||
-rwxr-xr-x | install/tools/ipa-nis-manage | 23 | ||||
-rwxr-xr-x | install/tools/ipa-replica-install | 64 | ||||
-rwxr-xr-x | install/tools/ipa-server-certinstall | 17 | ||||
-rwxr-xr-x | install/tools/ipa-server-install | 57 | ||||
-rw-r--r-- | install/tools/ipa-upgradeconfig | 9 | ||||
-rwxr-xr-x | install/tools/ipactl | 30 | ||||
-rw-r--r-- | ipaserver/install/installutils.py | 130 | ||||
-rw-r--r-- | ipaserver/install/ldapupdate.py | 5 |
13 files changed, 243 insertions, 267 deletions
diff --git a/install/tools/ipa-adtrust-install b/install/tools/ipa-adtrust-install index 248ea35ea..0dfc6eba6 100755 --- a/install/tools/ipa-adtrust-install +++ b/install/tools/ipa-adtrust-install @@ -21,8 +21,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -import traceback - from ipaserver.plugins.ldap2 import ldap2 from ipaserver.install import adtrustinstance from ipaserver.install.installutils import * @@ -35,6 +33,8 @@ import krbV import ldap from ipapython.ipa_log_manager import * +log_file_name = "/var/log/ipaserver-install.log" + def parse_options(): parser = IPAOptionParser(version=version.VERSION) parser.add_option("-p", "--ds-password", dest="dm_password", @@ -86,8 +86,8 @@ def main(): if os.getegid() != 0: sys.exit("Must be root to setup AD trusts on server") - standard_logging_setup("/var/log/ipaserver-install.log", debug=options.debug, filemode='a') - print "\nThe log file for this installation can be found in /var/log/ipaserver-install.log" + standard_logging_setup(log_file_name, debug=options.debug, filemode='a') + print "\nThe log file for this installation can be found in %s" % log_file_name root_logger.debug('%s was invoked with options: %s' % (sys.argv[0], safe_options)) root_logger.debug("missing options might be asked for interactively later\n") @@ -227,26 +227,6 @@ def main(): return 0 -try: - sys.exit(main()) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt: - print "Installation cancelled." -except RuntimeError, e: - print str(e) -except HostnameLocalhost: - print "The hostname resolves to the localhost address (127.0.0.1/::1)" - print "Please change your /etc/hosts file so that the hostname" - print "resolves to the ip address of your network interface." - print "The KDC service does not listen on localhost" - print "" - print "Please fix your /etc/hosts file and restart the setup program" -except Exception, e: - message = "Unexpected error - see ipaserver-install.log for details:\n %s" % str(e) - print message - message = str(e) - for str in traceback.format_tb(sys.exc_info()[2]): - message = message + "\n" + str - root_logger.debug(message) - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, log_file_name=log_file_name, + operation_name='ipa-adtrust-install') diff --git a/install/tools/ipa-ca-install b/install/tools/ipa-ca-install index 55b4dbfb8..4d7be217d 100755 --- a/install/tools/ipa-ca-install +++ b/install/tools/ipa-ca-install @@ -21,7 +21,7 @@ import sys import socket -import os, traceback, shutil +import os, shutil from ipapython import ipautil from ipapython import services as ipaservices @@ -39,8 +39,9 @@ from ipapython.config import IPAOptionParser from ipapython import sysrestore from ipapython.ipa_log_manager import * -CACERT="/etc/ipa/ca.crt" -REPLICA_INFO_TOP_DIR=None +log_file_name = "/var/log/ipareplica-ca-install.log" +CACERT = "/etc/ipa/ca.crt" +REPLICA_INFO_TOP_DIR = None def parse_options(): usage = "%prog [options] REPLICA_FILE" @@ -72,7 +73,12 @@ def get_dirman_password(): def main(): safe_options, options, filename = parse_options() - standard_logging_setup("/var/log/ipareplica-ca-install.log", debug=options.debug) + + if os.geteuid() != 0: + sys.exit("\nYou must be root to run this script.\n") + + standard_logging_setup(log_file_name, debug=options.debug) + root_logger.debug('%s was invoked with argument "%s" and options: %s' % (sys.argv[0], filename, safe_options)) if not ipautil.file_exists(filename): @@ -150,41 +156,20 @@ def main(): # We need to restart apache as we drop a new config file in there ipaservices.knownservices.httpd.restart(capture_output=True) -try: - if not os.geteuid()==0: - sys.exit("\nYou must be root to run this script.\n") +fail_message = ''' +Your system may be partly configured. +Run /usr/sbin/ipa-server-install --uninstall to clean up. +''' - main() - sys.exit(0) -except SystemExit, e: - sys.exit(e) -except socket.error, (errno, errstr): - print errstr -except HostnameLocalhost: - print "The hostname resolves to the localhost address (127.0.0.1/::1)" - print "Please change your /etc/hosts file so that the hostname" - print "resolves to the ip address of your network interface." - print "" - print "Please fix your /etc/hosts file and restart the setup program" -except Exception, e: - print "creation of replica failed: %s" % str(e) - message = str(e) - for str in traceback.format_tb(sys.exc_info()[2]): - message = message + "\n" + str - root_logger.debug(message) -except KeyboardInterrupt: - print "Installation cancelled." -finally: - # always try to remove decrypted replica file +if __name__ == '__main__': try: - if REPLICA_INFO_TOP_DIR: - shutil.rmtree(REPLICA_INFO_TOP_DIR) - except OSError: - pass - -print "" -print "Your system may be partly configured." -print "Run /usr/sbin/ipa-server-install --uninstall to clean up." - -# the only way to get here is on error or ^C -sys.exit(1) + installutils.run_script(main, log_file_name=log_file_name, + operation_name='ipa-ca-install', + fail_message=fail_message) + finally: + # always try to remove decrypted replica file + try: + if REPLICA_INFO_TOP_DIR: + shutil.rmtree(REPLICA_INFO_TOP_DIR) + except OSError: + pass diff --git a/install/tools/ipa-compat-manage b/install/tools/ipa-compat-manage index 13a93cbed..f7564e0c5 100755 --- a/install/tools/ipa-compat-manage +++ b/install/tools/ipa-compat-manage @@ -196,24 +196,5 @@ def main(): return retval -try: - if __name__ == "__main__": - sys.exit(main()) -except BadSyntax, e: - print "There is a syntax error in this update file:" - print " %s" % e - sys.exit(1) -except RuntimeError, e: - print "%s" % e - sys.exit(1) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt, e: - sys.exit(1) -except config.IPAConfigError, e: - print "An IPA server to update cannot be found. Has one been configured yet?" - print "The error was: %s" % e - sys.exit(1) -except errors.LDAPError, e: - print "An error occurred while performing operations: %s" % e - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipa-compat-manage') diff --git a/install/tools/ipa-dns-install b/install/tools/ipa-dns-install index 10547c342..063cf5bf5 100755 --- a/install/tools/ipa-dns-install +++ b/install/tools/ipa-dns-install @@ -19,8 +19,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -import traceback - from ipaserver.plugins.ldap2 import ldap2 from ipaserver.install import service, bindinstance, ntpinstance, httpinstance from ipaserver.install.installutils import * @@ -34,6 +32,8 @@ import krbV import ldap from ipapython.ipa_log_manager import * +log_file_name = "/var/log/ipaserver-install.log" + def parse_options(): parser = IPAOptionParser(version=version.VERSION) parser.add_option("-p", "--ds-password", dest="dm_password", @@ -89,8 +89,8 @@ def main(): if os.getegid() != 0: sys.exit("Must be root to setup server") - standard_logging_setup("/var/log/ipaserver-install.log", debug=options.debug, filemode='a') - print "\nThe log file for this installation can be found in /var/log/ipaserver-install.log" + standard_logging_setup(log_file_name, debug=options.debug, filemode='a') + print "\nThe log file for this installation can be found in %s" % log_file_name root_logger.debug('%s was invoked with options: %s' % (sys.argv[0], safe_options)) root_logger.debug("missing options might be asked for interactively later\n") @@ -243,26 +243,6 @@ def main(): return 0 -try: - sys.exit(main()) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt: - print "Installation cancelled." -except RuntimeError, e: - print str(e) -except HostnameLocalhost: - print "The hostname resolves to the localhost address (127.0.0.1/::1)" - print "Please change your /etc/hosts file so that the hostname" - print "resolves to the ip address of your network interface." - print "The KDC service does not listen on localhost" - print "" - print "Please fix your /etc/hosts file and restart the setup program" -except Exception, e: - message = "Unexpected error - see ipaserver-install.log for details:\n %s" % str(e) - print message - message = str(e) - for str in traceback.format_tb(sys.exc_info()[2]): - message = message + "\n" + str - root_logger.debug(message) - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, log_file_name=log_file_name, + operation_name='ipa-dns-install') diff --git a/install/tools/ipa-managed-entries b/install/tools/ipa-managed-entries index 00bb56622..b9a492e48 100755 --- a/install/tools/ipa-managed-entries +++ b/install/tools/ipa-managed-entries @@ -237,20 +237,5 @@ def main(): return retval -try: - if __name__ == "__main__": - sys.exit(main()) -except RuntimeError, e: - print "%s" % e - sys.exit(1) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt, e: - sys.exit(1) -except config.IPAConfigError, e: - print "An IPA server to update cannot be found. Has one been configured yet?" - print "The error was: %s" % e - sys.exit(1) -except errors.LDAPError, e: - print "An error occurred while performing operations: %s" % e - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipa-managed-entries') diff --git a/install/tools/ipa-nis-manage b/install/tools/ipa-nis-manage index 5c5bbca8e..1c6de7b57 100755 --- a/install/tools/ipa-nis-manage +++ b/install/tools/ipa-nis-manage @@ -200,24 +200,5 @@ def main(): return retval -try: - if __name__ == "__main__": - sys.exit(main()) -except BadSyntax, e: - print "There is a syntax error in this update file:" - print " %s" % e - sys.exit(1) -except RuntimeError, e: - print "%s" % e - sys.exit(1) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt, e: - sys.exit(1) -except config.IPAConfigError, e: - print "An IPA server to update cannot be found. Has one been configured yet?" - print "The error was: %s" % e - sys.exit(1) -except errors.LDAPError, e: - print "An error occurred while performing operations: %s" % e - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipa-nis-manage') diff --git a/install/tools/ipa-replica-install b/install/tools/ipa-replica-install index f0c67e008..d162b01f2 100755 --- a/install/tools/ipa-replica-install +++ b/install/tools/ipa-replica-install @@ -21,7 +21,7 @@ import sys import socket -import os, pwd, traceback, shutil +import os, pwd, shutil import grp from optparse import OptionGroup @@ -43,8 +43,9 @@ from ipapython import sysrestore from ipapython import services as ipaservices from ipapython.ipa_log_manager import * -CACERT="/etc/ipa/ca.crt" -REPLICA_INFO_TOP_DIR=None +log_file_name = "/var/log/ipareplica-install.log" +CACERT = "/etc/ipa/ca.crt" +REPLICA_INFO_TOP_DIR = None def parse_options(): usage = "%prog [options] REPLICA_FILE" @@ -278,7 +279,11 @@ def check_bind(): def main(): ipaservices.check_selinux_status() safe_options, options, filename = parse_options() - standard_logging_setup("/var/log/ipareplica-install.log", debug=options.debug) + + if os.geteuid() != 0: + sys.exit("\nYou must be root to run this script.\n") + + standard_logging_setup(log_file_name, debug=options.debug) root_logger.debug('%s was invoked with argument "%s" and options: %s' % (sys.argv[0], filename, safe_options)) if not ipautil.file_exists(filename): @@ -502,41 +507,20 @@ def main(): #Everything installed properly, activate ipa service. ipaservices.knownservices.ipa.enable() -try: - if not os.geteuid()==0: - sys.exit("\nYou must be root to run this script.\n") +fail_message = ''' +Your system may be partly configured. +Run /usr/sbin/ipa-server-install --uninstall to clean up. +''' - main() - sys.exit(0) -except SystemExit, e: - sys.exit(e) -except socket.error, (errno, errstr): - print errstr -except HostnameLocalhost: - print "The hostname resolves to the localhost address (127.0.0.1/::1)" - print "Please change your /etc/hosts file so that the hostname" - print "resolves to the ip address of your network interface." - print "" - print "Please fix your /etc/hosts file and restart the setup program" -except Exception, e: - print "creation of replica failed: %s" % str(e) - message = str(e) - for str in traceback.format_tb(sys.exc_info()[2]): - message = message + "\n" + str - root_logger.debug(message) -except KeyboardInterrupt: - print "Installation cancelled." -finally: - # always try to remove decrypted replica file +if __name__ == '__main__': try: - if REPLICA_INFO_TOP_DIR: - shutil.rmtree(REPLICA_INFO_TOP_DIR) - except OSError: - pass - -print "" -print "Your system may be partly configured." -print "Run /usr/sbin/ipa-server-install --uninstall to clean up." - -# the only way to get here is on error or ^C -sys.exit(1) + installutils.run_script(main, log_file_name=log_file_name, + operation_name='ipa-replica-install', + fail_message=fail_message) + finally: + # always try to remove decrypted replica file + try: + if REPLICA_INFO_TOP_DIR: + shutil.rmtree(REPLICA_INFO_TOP_DIR) + except OSError: + pass diff --git a/install/tools/ipa-server-certinstall b/install/tools/ipa-server-certinstall index 901678b2e..3b19f0452 100755 --- a/install/tools/ipa-server-certinstall +++ b/install/tools/ipa-server-certinstall @@ -31,6 +31,7 @@ from ipapython.ipautil import user_input from ipaserver.install import certs, dsinstance, httpinstance, installutils from ipalib import api +from ipapython.ipa_log_manager import * from ipaserver.plugins.ldap2 import ldap2 def get_realm_name(): @@ -120,12 +121,17 @@ def import_cert(dirname, pkcs12_fname, pkcs12_passwd, db_password): return server_cert def main(): + if os.geteuid() != 0: + sys.exit("\nYou must be root to run this script.\n") + installutils.check_server_configuration() options, pkcs12_fname = parse_options() cfg = dict(in_server=True,) + standard_logging_setup("/var/log/ipa/default.log") + api.bootstrap(**cfg) api.finalize() @@ -165,12 +171,5 @@ def main(): return 0 -try: - if not os.geteuid()==0: - sys.exit("\nYou must be root to run this script.\n") - - main() -except SystemExit, e: - sys.exit(e) -except RuntimeError, e: - sys.exit(e) +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipa-server-certinstall') diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install index e7b82364a..871bfd52a 100755 --- a/install/tools/ipa-server-install +++ b/install/tools/ipa-server-install @@ -34,7 +34,6 @@ import subprocess import signal import shutil import glob -import traceback import pickle import random import tempfile @@ -50,7 +49,7 @@ from ipaserver.install import certs from ipaserver.install import cainstance from ipaserver.install import memcacheinstance -from ipaserver.install import service +from ipaserver.install import service, installutils from ipapython import version from ipaserver.install.installutils import * from ipaserver.plugins.ldap2 import ldap2 @@ -1110,37 +1109,29 @@ def main(): os.remove(ANSWER_CACHE) return 0 -try: - success = True +if __name__ == '__main__': + success = False try: - rval = main() - if rval != 0: - success = False - sys.exit(rval) - except SystemExit, e: - if e.code is not None or e.code != 0: - success = False - sys.exit(e) - except Exception, e: - success = False - if uninstalling: - message = "Unexpected error - see ipaserver-uninstall.log for details:\n %s" % unicode(e) + # FIXME: Common option parsing, logging setup, etc should be factored + # out from all install scripts + safe_options, options = parse_options() + if options.uninstall: + log_file_name = "/var/log/ipaserver-uninstall.log" else: - message = "Unexpected error - see ipaserver-install.log for details:\n %s" % unicode(e) - print message - message = str(e) - for str in traceback.format_tb(sys.exc_info()[2]): - message = message + "\n" + str - root_logger.debug(message) - sys.exit(1) -finally: - if pw_name and ipautil.file_exists(pw_name): - os.remove(pw_name) + log_file_name = "/var/log/ipaserver-install.log" - if not success and installation_cleanup: - # Do a cautious clean up as we don't know what failed and what is - # the state of the environment - try: - fstore.restore_file('/etc/hosts') - except: - pass + installutils.run_script(main, log_file_name=log_file_name, + operation_name='ipa-server-install') + success = True + + finally: + if pw_name and ipautil.file_exists(pw_name): + os.remove(pw_name) + + if not success and installation_cleanup: + # Do a cautious clean up as we don't know what failed and what is + # the state of the environment + try: + fstore.restore_file('/etc/hosts') + except: + pass diff --git a/install/tools/ipa-upgradeconfig b/install/tools/ipa-upgradeconfig index a2a302499..0cf59f293 100644 --- a/install/tools/ipa-upgradeconfig +++ b/install/tools/ipa-upgradeconfig @@ -305,10 +305,5 @@ def main(): cleanup_kdc(fstore) upgrade_ipa_profile(krbctx.default_realm) -try: - if __name__ == "__main__": - sys.exit(main()) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt, e: - sys.exit(1) +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipa-upgradeconfig') diff --git a/install/tools/ipactl b/install/tools/ipactl index 74ee38304..c4d26b8df 100755 --- a/install/tools/ipactl +++ b/install/tools/ipactl @@ -21,10 +21,10 @@ import sys try: import os - from ipaserver.install import service + from ipaserver.install import service, installutils from ipapython import services as ipaservices from ipaserver.install.dsinstance import config_dirname, realm_to_serverid - from ipaserver.install.installutils import is_ipa_configured, wait_for_open_ports, wait_for_open_socket + from ipaserver.install.installutils import is_ipa_configured, wait_for_open_ports, wait_for_open_socket, ScriptError from ipapython import sysrestore from ipapython import config from ipalib import api, errors @@ -44,13 +44,8 @@ error was: SASL_EXTERNAL = ldap.sasl.sasl({}, 'EXTERNAL') -class IpactlError(StandardError): - def __init__(self, msg = '', rval = 1): - self.msg = msg - self.rval = rval - - def __str__(self): - return self.msg +class IpactlError(ScriptError): + pass def check_IPA_configuration(): if not is_ipa_configured(): @@ -386,17 +381,6 @@ def main(): elif args[0].lower() == "status": ipa_status(options) -try: - if __name__ == "__main__": - sys.exit(main()) -except IpactlError, e: - if e.msg: - emit_err(e.msg) - sys.exit(e.rval) -except RuntimeError, e: - emit_err("%s" % e) - sys.exit(1) -except SystemExit, e: - sys.exit(e) -except KeyboardInterrupt, e: - sys.exit(1) + +if __name__ == '__main__': + installutils.run_script(main, operation_name='ipactl') diff --git a/ipaserver/install/installutils.py b/ipaserver/install/installutils.py index 362723614..313761777 100644 --- a/ipaserver/install/installutils.py +++ b/ipaserver/install/installutils.py @@ -30,13 +30,18 @@ import netaddr import time import tempfile import shutil +from ConfigParser import SafeConfigParser +import traceback + from dns import resolver, rdatatype from dns.exception import DNSException +import ldap -from ConfigParser import SafeConfigParser from ipapython import ipautil, sysrestore from ipapython.ipa_log_manager import * from ipalib.util import validate_hostname +from ipapython import config +from ipalib import errors # Used to determine install status IPA_MODULES = ['httpd', 'kadmin', 'dirsrv', 'pki-cad', 'pkids', 'install', 'krb5kdc', 'ntpd', 'named', 'ipa_memcached'] @@ -56,6 +61,18 @@ class HostReverseLookupError(HostLookupError): class HostnameLocalhost(HostLookupError): pass + +class ScriptError(StandardError): + """An exception that records an error message and a return value + """ + def __init__(self, msg = '', rval = 1): + self.msg = msg + self.rval = rval + + def __str__(self): + return self.msg + + class ReplicaConfig: def __init__(self): self.realm_name = "" @@ -655,3 +672,114 @@ def is_ipa_configured(): root_logger.debug('filestore is tracking no files') return installed + + +def run_script(main_function, operation_name, log_file_name=None, + fail_message=None): + """Run the given function as a command-line utility + + This function: + + - Runs the given function + - Formats any errors + - Exits with the appropriate code + + :param main_function: Function to call + :param log_file_name: Name of the log file (displayed on unexpected errors) + :param operation_name: Name of the script + :param fail_message: Optional message displayed on failure + """ + + root_logger.info('Starting script: %s', operation_name) + try: + try: + return_value = main_function() + except BaseException, e: + if isinstance(e, SystemExit) and (e.code is None or e.code == 0): + # Not an error after all + root_logger.info('The %s command was successful', + operation_name) + else: + # Log at the INFO level, which is not output to the console + # (unless in debug/verbose mode), but is written to a logfile + # if one is open. + tb = sys.exc_info()[2] + root_logger.info('\n'.join(traceback.format_tb(tb))) + root_logger.info('The %s command failed, exception: %s: %s', + operation_name, type(e).__name__, e) + exception = e + if fail_message and not isinstance(e, SystemExit): + print fail_message + raise + else: + if return_value: + root_logger.info('The %s command failed, return value %s', + operation_name, return_value) + else: + root_logger.info('The %s command was successful', + operation_name) + sys.exit(return_value) + + except BaseException, error: + handle_error(error, log_file_name) + + +def handle_error(error, log_file_name=None): + """Handle specific errors""" + + if isinstance(error, SystemExit): + sys.exit(error) + if isinstance(error, RuntimeError): + sys.exit(error) + if isinstance(error, KeyboardInterrupt): + print >> sys.stderr, "Cancelled." + sys.exit(1) + + if isinstance(error, ScriptError): + if error.msg: + print >> sys.stderr, error.msg + sys.exit(error.rval) + + if isinstance(error, socket.error): + print >> sys.stderr, error + sys.exit(1) + + if isinstance(error, ldap.INVALID_CREDENTIALS): + print >> sys.stderr, "Invalid password" + sys.exit(1) + if isinstance(error, ldap.INSUFFICIENT_ACCESS): + print >> sys.stderr, "Insufficient access" + sys.exit(1) + if isinstance(error, ldap.LOCAL_ERROR): + print >> sys.stderr, error.args[0]['info'] + sys.exit(1) + if isinstance(error, ldap.SERVER_DOWN): + print >> sys.stderr, error.args[0]['desc'] + sys.exit(1) + if isinstance(error, ldap.LDAPError): + print >> sys.stderr, 'LDAP error: %s' % type(error).__name__ + print >> sys.stderr, error.args[0]['info'] + sys.exit(1) + + if isinstance(error, config.IPAConfigError): + print >> sys.stderr, "An IPA server to update cannot be found. Has one been configured yet?" + print >> sys.stderr, "The error was: %s" % error + sys.exit(1) + if isinstance(error, errors.LDAPError): + print >> sys.stderr, "An error occurred while performing operations: %s" % error + sys.exit(1) + + if isinstance(error, HostnameLocalhost): + print >> sys.stderr, "The hostname resolves to the localhost address (127.0.0.1/::1)" + print >> sys.stderr, "Please change your /etc/hosts file so that the hostname" + print >> sys.stderr, "resolves to the ip address of your network interface." + print >> sys.stderr, "" + print >> sys.stderr, "Please fix your /etc/hosts file and restart the setup program" + sys.exit(1) + + if log_file_name: + print >> sys.stderr, "Unexpected error - see %s for details:" % log_file_name + else: + print >> sys.stderr, "Unexpected error" + print >> sys.stderr, '%s: %s' % (type(error).__name__, error) + sys.exit(1) diff --git a/ipaserver/install/ldapupdate.py b/ipaserver/install/ldapupdate.py index 61a2ae19f..e75ee804a 100644 --- a/ipaserver/install/ldapupdate.py +++ b/ipaserver/install/ldapupdate.py @@ -47,9 +47,12 @@ import inspect from ipaserver.install.plugins import PRE_UPDATE, POST_UPDATE from ipaserver.install.plugins import FIRST, MIDDLE, LAST -class BadSyntax(Exception): +class BadSyntax(installutils.ScriptError): def __init__(self, value): self.value = value + self.msg = "There is a syntax error in this update file: \n %s" % value + self.rval = 1 + def __str__(self): return repr(self.value) |