summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinstall/tools/ipa-adtrust-install34
-rwxr-xr-xinstall/tools/ipa-ca-install65
-rwxr-xr-xinstall/tools/ipa-compat-manage23
-rwxr-xr-xinstall/tools/ipa-dns-install34
-rwxr-xr-xinstall/tools/ipa-managed-entries19
-rwxr-xr-xinstall/tools/ipa-nis-manage23
-rwxr-xr-xinstall/tools/ipa-replica-install64
-rwxr-xr-xinstall/tools/ipa-server-certinstall17
-rwxr-xr-xinstall/tools/ipa-server-install57
-rw-r--r--install/tools/ipa-upgradeconfig9
-rwxr-xr-xinstall/tools/ipactl30
-rw-r--r--ipaserver/install/installutils.py130
-rw-r--r--ipaserver/install/ldapupdate.py5
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)