diff --git a/src/apps/setup/Bongo.rules b/src/apps/setup/Bongo.rules deleted file mode 100644 index 59dd1f5..0000000 --- a/src/apps/setup/Bongo.rules +++ /dev/null @@ -1,30 +0,0 @@ -# -*- Makefile -*- -sbin_SCRIPTS += src/apps/setup/bongo-setup - -schemadir = $(XPL_DEFAULT_CONF_DIR) -dist_schema_DATA = \ - src/apps/setup/bongo-setup.xml \ - src/apps/setup/base-schema.xml \ - src/apps/setup/bongo-schema.xml - -nodist_schema_DATA = \ - src/apps/setup/bongo-setup.xml - -dist_noinst_DATA += src/apps/setup/bongo-setup.xml.in - -src/apps/setup/bongo-setup: $(top_builddir)/src/libs/python/bongo-python-wrapper - $(INSTALL) -m 755 $< $@ - -dist_pkglibexec_SCRIPTS += src/apps/setup/bongo-setup.py - -CLEANFILES += \ - src/apps/setup/bongo-setup \ - src/apps/setup/*.pyc - -src/apps/setup/all: -src/apps/setup/clean: clean -src/apps/setup/install: - @cd $(top_builddir) && $(MAKE) $(MFLAGS) \ - sbin_SCRIPTS=src/apps/setup/bongo-setup \ - dist_pkglibexec_SCRIPTS=src/apps/setup/bongo-setup.py \ - install-dist_sbinSCRIPTS install-dist_schemaDATA diff --git a/src/apps/setup/Makefile.am b/src/apps/setup/Makefile.am deleted file mode 100644 index 8830401..0000000 --- a/src/apps/setup/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -# -*- Makefile -*- -# -# Do not edit! -# -# (unless this is Makefile.am.subdir) -# -# This file is a copy of the toplevel Makefile.am.subdir. If changes -# need to be made, edit that file, and make update-makefiles, and -# check the new files in. -# -# This is a skeletal automake file. The real automake fules for -# building the targets for this directory can be found in the -# Bongo.rules file. This file is simply here so that 'make all' can -# work in each subdirectory. - -all clean install: - @cd $(top_builddir) && $(MAKE) $(MFLAGS) $(subdir)/$@ diff --git a/src/apps/setup/base-schema.xml b/src/apps/setup/base-schema.xml deleted file mode 100644 index 8225824..0000000 --- a/src/apps/setup/base-schema.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/setup/bongo-schema.xml b/src/apps/setup/bongo-schema.xml deleted file mode 100644 index 19fa1e8..0000000 --- a/src/apps/setup/bongo-schema.xml +++ /dev/null @@ -1,1891 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/setup/bongo-setup.py b/src/apps/setup/bongo-setup.py deleted file mode 100755 index b4f1326..0000000 --- a/src/apps/setup/bongo-setup.py +++ /dev/null @@ -1,692 +0,0 @@ -#!/usr/bin/env python -############################################################################# -# -# Copyright (c) 2006 Novell, Inc. -# All Rights Reserved. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of version 2.1 of the GNU Lesser General Public -# License as published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program; if not, contact Novell, Inc. -# -# To contact Novell about this file by physical or electronic mail, -# you may find current contact information at www.novell.com -# -############################################################################# - -import os, random, signal, socket, string, sys - -from bongo import Xpl, BongoError, Privs -from bongo.admin import ManagedSlapd, Util -from libbongo.bootstrap import msgapi - -from bongo.Console import wrap - -import re, optparse - -import logging -formatter = logging.Formatter("%(levelname)s: %(message)s") -console = logging.StreamHandler() -console.setFormatter(formatter) -logging.root.addHandler(console) - -log = logging.getLogger("bongo-setup") - -# the managed slapd configuration is global, so we can shut it down on -# failure -slapdConfig = None - -def BongoSetupOptions(): - parser = optparse.OptionParser() - parser.add_option("-n", "--noprompt", action="store_true", help="run non-interactively") - parser.add_option("-H", "--hostname", type="string", help="hostname of this Bongo server") - parser.add_option("-M", "--maildomain", type="string", help="domain we accept mail for") - parser.add_option("-f", "--file", type="string", - default=os.path.join(Xpl.DEFAULT_CONF_DIR, "bongo-setup.xml"), - help="import objects from XML file FILE") - - group = optparse.OptionGroup(parser, "SSL options") - group.add_option("-r", "--cert", type="string", metavar="FILE", help="use certificate file FILE") - group.add_option("-k", "--key", type="string", metavar="FILE", help="use private key file FILE") - parser.add_option_group(group) - - group = optparse.OptionGroup(parser, "LDAP options", description="options for --mdb-driver=ldap") - group.add_option("-u", "--authuser", type="string", help="user for directory authentication") - group.add_option("-p", "--authpass", type="string", help="password for directory authentication") - parser.add_option_group(group) - - schemas = "ad edir mdb openldap".split() - parser.add_option("-S", "--gen-schema", choices=schemas, metavar="TARGET", help="generate schema for TARGET (" + ", ".join(schemas) + ")") - parser.add_option("-a", "--noacl", type="string", help="don't set up ACLs") - - dirs = "file ldap managed-slapd".split() - parser.add_option("-m", "--mdb-driver", choices=dirs, default="managed-slapd", help="specify directory driver (" + ", ".join(dirs) + ") [default %default]") - parser.add_option("-b", "--base", type="string", default="\\Tree", help="base in directory for Bongo") - - parser.add_option("", "--managed-slapd-path", type="string", metavar="PATH", - default=Xpl.DEFAULT_SLAPD_PATH, - help="path to your slapd binary [default %default]") - parser.add_option("", "--managed-slapd-port", type="int", metavar="PORT", - default=8983, help="port for managed slapd [default %default]") - - admintool = os.path.join(Xpl.DEFAULT_BIN_DIR, "bongo-admin") - - binpath = os.path.abspath(os.path.dirname(sys.argv[0])) - - if not binpath.startswith(Xpl.DEFAULT_BIN_DIR): - adminpath = os.path.abspath(os.path.join(binpath, "..", "bongoadmin", - "bongo-admin")) - if os.path.exists(adminpath): - admintool = adminpath - - parser.add_option("", "--bongo-admin", action="store_const", default=admintool, help=optparse.SUPPRESS_HELP) - parser.add_option("", "--debug", action="store_true", help=optparse.SUPPRESS_HELP) - - return parser - -def main(): - parser = BongoSetupOptions() - (options, args) = parser.parse_args() - - if options.debug: - logging.root.setLevel(logging.DEBUG) - - log.debug("bongo-setup options: " + str(options)) - - if len(args) > 0: - log.error("Unexpected arguments after script flags") - sys.stderr.write(parser.get_usage()) - sys.stderr.write("\n") - sys.exit(1) - - if os.getegid() != 0: - log.error("%s must be run as root" % os.path.basename(sys.argv[0])) - sys.exit(1) - - if not options.noprompt: - print wrap(""" -Welcome to Bongo! - -You will be guided through the setup of a new Bongo installation. - -This tool makes use of %(bongo_admin)s, which you can also use to tweak the system later, or (for experts) to set up Bongo manually. - -See \"%(bongo_setup)s --help\" for command-line options to further automate the setup process. -""" % {'bongo_admin' : options.bongo_admin, 'bongo_setup' : sys.argv[0]}) - - Input('Press Enter to continue', options=options) - - # make sure our various directories are in good shape permissions-wise - for path in [Xpl.DEFAULT_CONF_DIR, - Xpl.DEFAULT_STATE_DIR, - Xpl.DEFAULT_CACHE_DIR, - Xpl.DEFAULT_DBF_DIR, - Xpl.DEFAULT_WORK_DIR]: - if not os.path.exists(path): - os.makedirs(path) - Privs.Chown(path) - - pidfile = os.path.join(Xpl.DEFAULT_WORK_DIR, "bongomanager.pid") - if os.path.exists(pidfile): - fd = open(pidfile, "r") - pid = fd.readline().strip() - fd.close() - - # see if the bongomanager pid is still running - try: - pid = long(pid) - r = os.kill(pid, 0) - raise BongoError("""A possibly stale bongomanager pid file has been found. Either kill process %d (if it is bongomanager) or remove %s""" % (pid, pidfile)) - except OSError, e: - os.remove(pidfile) - - mdbfile = os.path.join(Xpl.DEFAULT_CONF_DIR, "mdb.conf") - - mdbconf = InspectMDB(mdbfile, options) - if mdbconf is None: - mdbconf = SetupMDB(mdbfile, options) - - if mdbconf.get("driver") in ("file", "managed-slapd"): - if not UpdateSchema(mdbconf, options): - raise BongoError(wrap("""Updating the MDB schema has failed.""")) - - if ImportObjects(mdbconf, options): - raise BongoError("""Importing objects failed, possibly because the directory's schema needs to be updated. When you are done updating the schema in your directory, run %s again to complete Bongo's configuration.""" % sys.argv[0]) - - print 'Imported objects from \"%s\".' % options.file - SetupACL(mdbconf, options) - GeneratePasswords(options) - - print 'Configuring final settings...' - from bongo import MDB - mdb = MDB.MDB(options.authuser, options.authpass) - context = mdb.baseDn - - # include other directory options here once they're supported - if mdbconf.get("driver") == "ldap" and not mdbconf.has_key("slapdConfig"): - context = Input('Enter default directory context for Bongo users', - {}, mdb.baseDn, options) - - while not mdb.IsObject(context): - print 'Context does not exist. Please enter a valid context.' - context = Input('Enter default directory context for Bongo users', - {}, mdb.baseDn, options) - - confprops = {msgapi.DEFAULT_CONTEXT : context} - Util.ModifyConfProperties(confprops) - - msgserver = msgapi.GetConfigProperty(msgapi.MESSAGING_SERVER) - mdb.SetAttribute(msgserver, msgapi.A_CONTEXT, [context]) - - #getting hostname for certificate - if options.hostname: - hostname = options.hostname - else: - hostname = Input('Enter the hostname for the mail server hosting Bongo', - {}, socket.getfqdn(), options) - - try: - mdb.SetAttribute(msgserver, msgapi.A_OFFICIAL_NAME, [hostname]) - except BongoError: - if not hostname in ['localhost', 'localhost.localdomain']: - raise - - #getting domain name bongo will accept mail for - if options.maildomain: - maildomain = options.maildomain - else: - maildomain = Input('Enter domain name that Bongo will host', - {}, socket.getfqdn(), options) - - try: - mdb.SetAttribute(msgserver, msgapi.A_OFFICIAL_NAME, [maildomain]) - except BongoError: - if not maildomain in ['localhost', 'localhost.localdomain']: - raise - - # Add hosted domain to the smtp agent - smtpserver = msgserver + '\\' + msgapi.AGENT_SMTP - if(mdb.IsObject(smtpserver)): - try: - mdb.AddAttribute(smtpserver, msgapi.A_DOMAIN, maildomain) - except: - print "Couldn't set attribute A_DOMAIN to " + maildomain - try: - default = socket.gethostbyname(maildomain) - except: - default = '127.0.0.1' - - ip = Input('Enter IP address on which to run Bongo', - {}, default, options) - try: - mdb.SetAttribute(msgserver, msgapi.A_IP_ADDRESS, [ip]) - except: - print "Couldn't set attribute A_IP_ADDRESS to " + ip - - - options.hostname = hostname - options.ip = ip - - # now we have the hostname and ip, we can setup a sensible cert. - SetupCerts(options) - - # shut down the temporary slapd - if mdbconf.has_key("slapdConfig"): - slapdConfig = mdbconf["slapdConfig"] - slapdConfig.killSlapd() - - print - print 'Bongo setup is complete!' - print 'Now run "bongo-config install" to complete the installation' - return - -def ReadMdbConf(mdbfile): - fd = open(mdbfile) - confstr = fd.readline().strip() - fd.close() - - if not re.match("^Driver=", confstr): - return None - - arr = confstr.split(" ", 2) - driver = arr[0].split("=", 2) - - conf = {"driver" : driver[1].lower()} - if len(arr) > 1: - for key, val in re.findall("(.*?)=\"(.*?)\"(?:[ |,])?", arr[1]): - conf[key.lower()] = val - - return conf - -def WriteMdbConf(mdbfile, mdbconf): - mcfile = open(mdbfile, "w") - - drivers = {"managed-slapd" : "ldap"} - - driver = mdbconf.get("driver") - if drivers.has_key(driver): - driver = drivers[driver] - - confstr = "Driver=MDB" + driver.upper() - - opts = [] - for optname in ["basedn", "binddn", "password", "port", "host", "tls"]: - if not mdbconf.has_key(optname): - continue - - opts.append('%s="%s"' % (optname, mdbconf[optname])) - - if len(opts) > 0: - confstr = confstr + " " + ",".join(opts) - - mcfile.write(confstr) - mcfile.write("\n") - mcfile.close() - Privs.Chown(mdbfile) - -def LdapToMdb(dn): - parts = re.findall("=([^,]+)", dn) - parts.reverse() - - return '\\' + '\\'.join(parts) - -def InspectMDB(mdbfile, options): - if not os.path.exists(mdbfile): - return None - - log.debug("inspecting existing MDB install") - - conf = ReadMdbConf(mdbfile) - - if conf is None: - return None - - olddriver = conf["driver"] - - print 'Found an existing %s MDB configuration.' % olddriver - choices = {'keep': 'Use the existing \"%s\" configuration' % olddriver, - 'change': 'Set up MDB differently'} - choice = 'keep' - if options.noprompt: - choice = 'change' - - choice = Input('Enter your choice for MDB', choices, choice, options) - - if choice == 'change': - return None - - # at this point, the user wants to reuse the old mdb configuration - drivers = {'mdbfile': 'file', 'mdbldap': 'ldap'} - - # if no driver has been specified on the command line, reuse - # the old driver - if options.mdb_driver is None: - conf["driver"] = drivers.get(conf["olddriver"], conf["olddriver"]) - - if options.authuser and options.authpass: - print 'Using command line credentials...' - elif olddriver == 'mdbfile': - print 'Using no credentials (for mdbfile)...' - else: - authuser = conf.get('binddn') - authpass = conf.get('password') - - if not authuser and not authpass: - print 'Could not determine directory credentials from old MDB configuration.' - authuser = Input('Enter the directory admin dn') - authpass = Input('Enter the directory admin password') - - if authuser and not options.authuser: - # turn the ldap user into an mdb user - options.authuser = LdapToMdb(authuser) - - if authpass and not options.authpass: - options.authpass = authpass - - return conf - -def GetRandomPassword(): - pw = "" - chars = string.ascii_letters + string.digits - for i in range(1, 20): - pw = pw + random.choice(chars) - return pw - -def DiscoverMDBDriverCB(drivers, parent, children): - for child in children: - if os.path.isdir(os.path.join(parent, child)): - children.remove(child) - if (child[:6].lower() == 'libmdb') and (child[-3:].lower() == '.so'): - drivers[child[6:-3]] = child.lower() - -def DiscoverMDBDrivers(): - mdblibpath = "%s/bongomdb/" % Xpl.DEFAULT_LIB_DIR - if not os.path.exists(mdblibpath): - raise BongoError(wrap("""MDB Driver directory can not be found!""")) - drivers = {} - os.path.walk(mdblibpath, DiscoverMDBDriverCB, drivers) - return drivers - -def SetupMDB(mdbfile, options): - drivers = DiscoverMDBDrivers() - mdbOptions = {} - if drivers.has_key('file'): - mdbOptions['file'] = 'use the filesystem as a directory (test systems only)' - if drivers.has_key('ldap'): - mdbOptions['managed-slapd'] = 'Bongo-managed standalone LDAP server' - mdbOptions['ldap'] = 'connect to any LDAP-speaking directory' - if drivers.has_key('edir'): - mdbOptions['edir'] = 'use native calls to speak to eDirectory' - if len(mdbOptions) == 0: - raise BongoError(wrap("""No MDB Driver has been found!""")) - print 'Which driver would you like to use for the directory?' - mdbSelection = Input('Enter your driver selection', mdbOptions, options.mdb_driver, options) - - mdbconf = {} - mdbconf["driver"] = mdbSelection - - confprops = {"ManagedSlapd" : 0} - - if mdbSelection == 'file': - mdbpath = os.path.join(Xpl.DEFAULT_STATE_DIR, "mdb") - if not os.path.exists(mdbpath): - os.makedirs(mdbpath) - Privs.Chown(mdbpath) - options.authpass = "bongo" - elif mdbSelection == 'ldap': - host = ShellCmd('hostname --long') - if host: - default = 'dc=' + ',dc='.join(host.split('.')) - else: - default = 'dc=example,dc=com' - - ldaphost = Input('Enter the hostname or the IP address of the ldap server', default='localhost', - options=options) - mdbconf["host"] = ldaphost - ldapport = Input('Enter the port of the ldap server', default='389', - options=options) - mdbconf["port"] = ldapport - - basedn = Input('Enter LDAP base for Bongo', default=default, - options=options) - mdbconf["basedn"] = basedn - - binddn = Input('Enter LDAP admin object', default='cn=admin,'+basedn, - options=options) - mdbconf["binddn"] = options.authuser = binddn - - bindpw = Input('Enter LDAP admin password', default='bongo', - options=options) - mdbconf["password"] = options.authpass = bindpw - enableTLS = Input('Use TLS on LDAP connections', default='true', - options=options) - if enableTLS[0:1].lower() == 't': - mdbconf["tls"] = '1' - elif mdbSelection == 'managed-slapd': - ofile = os.path.join(Xpl.DEFAULT_CONF_DIR, "bongo.schema") - - bongoRootpw = GetRandomPassword() - - global slapdConfig - slapdConfig = \ - ManagedSlapd.ConfigSlapd(ofile, - options.managed_slapd_path, - options.managed_slapd_port, - bongoRootpw) - - mdbconf["port"] = options.managed_slapd_port - mdbconf["basedn"] = slapdConfig.suffix - mdbconf["binddn"] = slapdConfig.rootdn - mdbconf["password"] = slapdConfig.password - - slapdConfigFile = os.path.join(Xpl.DEFAULT_CONF_DIR, "bongo-slapd.conf") - slapdConfig.writeSlapdConf(slapdConfigFile) - - options.authuser = LdapToMdb(slapdConfig.rootdn) - options.authpass = slapdConfig.password - - mdbconf["slapdConfig"] = slapdConfig - mdbconf["slapdConfigFile"] = slapdConfigFile - - base = '\\com\\example' - confprops = {'BongoServices': '%s\\%s' % (base, msgapi.ROOT), - 'MessagingServer': '%s\\%s\\%s' % (base, - msgapi.ROOT, - 'Bongo Messaging Server'), - 'ManagedSlapd': '1', - 'ManagedSlapdPath': options.managed_slapd_path, - 'ManagedSlapdPort': str(options.managed_slapd_port)} - elif mdbSelection == 'edir': - edirhost = Input('Enter the hostname or the IP address of the edirectory (ncp) server', default='localhost', - options=options) - mdbconf["host"] = edirhost - edirport = Input('Enter the port of the edirectory (ncp) server', default='524', - options=options) - mdbconf["port"] = edirport - else: - raise BongoError('Invalid driver selection: %s' % mdbSelection) - Util.WriteConfProperties(confprops) - - print 'Configured MDB with \"%s\" option.' % mdbSelection - WriteMdbConf(mdbfile, mdbconf) - return mdbconf - -def ImportObjects(mdbconf, options): - print 'Directory setup - importing objects...' - - pid = None - if mdbconf.has_key("slapdConfig"): - slapdConfig = mdbconf["slapdConfig"] - - log.debug("starting temporary managed slapd process") - pid = slapdConfig.startSlapd(mdbconf["slapdConfigFile"]) - if pid is None: - raise BongoError('Error starting temporary slapd process. Check syslog for information about the failure.') - - log.debug("initializing slapd with the base Bongo container") - slapdConfig.initSlapd() - - options.file = Input('Enter file for importing objects', - default=options.file, options=options) - - authops = GetAdminCmdAuth(options) - return AdminCmd(options, authops + ['import', '-f', options.file]) - -def UpdateSchema(mdbconf, options): - print 'Updating the directory\'s schema...' - - authops = GetAdminCmdAuth(options) - - dirnames = {"file" : "MDB File", - "edir" : "Novell eDirectory", - "openldap" : "OpenLDAP", - "managed-slapd" : "Managed Slapd"} - - driver = mdbconf["driver"] - - print 'Generating schema for %s...' % dirnames.get(driver) - - if driver == 'file' or driver == 'edir': - if AdminCmd(options, authops + ['setup-mdb']): - return False - return True - - elif driver == 'ldap': - dirtypes = {'openldap': 'OpenLDAP standalone server', - 'edir': 'Novell eDirectory', - 'ad': 'Microsoft Active Directory'} - dirtype = Input('Enter your directory selection', dirtypes, - 'openldap', options) - if dirtype == 'openldap': - ofile = 'bongo.schema' - elif dirtype == 'edir': - ofile = 'bongo.sch' - elif dirtype == 'ad': - ofile = 'bongo.ldf' - else: - raise BongoError('Invalid directory type') - - print 'A schema file will now be generated, which you will have to' - print 'import into your directory manually.' - ofile = Input('Enter filename for schema', {}, ofile, options) - if AdminCmd(options, authops + ["setup-genschema", - "-t", dirtype, - "-o", ofile]): - return False - - return True - - elif driver == 'managed-slapd': - ofile = os.path.join(Xpl.DEFAULT_CONF_DIR, 'bongo.schema') - if AdminCmd(options, authops + ["setup-genschema", - "-t", "openldap", - "-o", ofile]): - return False - - return True - -def GetAdminCmdAuth(options): - authops = [] - if options.authuser: - authops.extend(["-U", options.authuser]) - if options.authpass: - authops.extend(["-P", options.authpass]) - return authops - -def GetAdminCmdBase(options): - if not options.base: - return [] - return ["--base", options.base] - -def SetupACL(mdbconf, options): - noacl_drivers = ("managed-slapd") - - if options.noacl or mdbconf["driver"] in noacl_drivers: - print 'Skipping access control setup.' - return - - print 'Setting up access control...' - - authops = GetAdminCmdAuth(options) - baseops = GetAdminCmdBase(options) - - ret = AdminCmd(options, authops + ['setup-rights'] + baseops) - if ret != 0: - print 'Rights could not be automatically set in the directory.' - print 'You will manually have to grant privileges on the base' - print 'to the Bongo Messaging Server object.' - Input('Press Enter to continue') - else: - print 'Access control installed.' - -def GeneratePasswords(options): - print 'Generating server credentials...' - - authops = GetAdminCmdAuth(options) - - if AdminCmd(options, authops + ['setup-system-credential']) != 0: - raise BongoError('Server credential generation failed.') - - print 'Server credentials installed.' - -#TODO: ask for files interactively -def SetupCerts(options): - authops = GetAdminCmdAuth(options) - - certops = [] - if options.cert and options.key: - print 'Installing provided certificate + key...' - certops.append('--cert=\"%s\"' % options.cert) - certops.append('--key=\"%s\"' % options.key) - - if not certops: - print 'Generating certificate + key...' - certops.append('--ip=\"%s\"' % options.ip) - certops.append('--domain=\"%s\"' % options.hostname) - - if AdminCmd(options, authops + ['setup-ssl'] + certops) != 0: - raise BongoError('Certificate + key installation failed.') - - print 'Certificate + key installed.' - -def AdminCmd(options, args): - if not args: - raise BongoError('No command specified') - - if options.debug: - args = ["--debug"] + args - - log.debug("running %s %s", options.bongo_admin, ' '.join(args)) - ret = os.spawnv(os.P_WAIT, options.bongo_admin, [options.bongo_admin] + args) - - if ret != 0: - log.debug("command failed") - - return ret - -def ShellCmd(cmd): - log.debug("running shell command: " + cmd) - return os.popen(cmd).read().strip() - -def Input(prompt, choices={}, default=None, options=None): - if options and options.noprompt: - return default - - nums = [] - length = 0 - for key, val in choices.iteritems(): - nums.append(key) - nums.sort() - for key in choices.keys(): - if length < len(key): - length = len(key) - - entry = None - while entry is None: - i = 0 - for val in nums: - i += 1 - print ' %d: %s - %s' % (i, val.ljust(length), choices[val]) - if default is None: - pstr = prompt + ': ' - else: - pstr = '%s [%s]: ' % (prompt, default) - entry = raw_input(pstr) - if entry.lower().strip() in choices.keys(): - entry = entry.lower().strip() - elif entry.strip().isdigit() and int(entry.strip()) <= len(nums): - entry = nums[int(entry.strip()) - 1] - elif not entry.strip(): - entry = default - if default is None: - break - elif entry and not choices: - entry = entry - else: - entry = None - - return entry - -def Shutdown(): - if slapdConfig is not None: - slapdConfig.killSlapd() - -if __name__ == "__main__": - try: - main() - Shutdown() - except BongoError, e: - Shutdown() - print wrap("ERROR: " + str(e)) - sys.exit(1) - except KeyboardInterrupt: - Shutdown() - print - sys.exit(1) diff --git a/src/apps/setup/bongo-setup.xml.in b/src/apps/setup/bongo-setup.xml.in deleted file mode 100644 index 9fac631..0000000 --- a/src/apps/setup/bongo-setup.xml.in +++ /dev/null @@ -1,150 +0,0 @@ - - - - \ - \ - localhost.localdomain - - 1 - 0 - @XPL_DEFAULT_WORK_DIR@ - @XPL_DEFAULT_DBF_DIR@ - @XPL_DEFAULT_NLS_DIR@ - Bongo Messaging Server\Connection Manager - - BONGOSTORE.NLM - 1 - 2048 - 5 - 5 - @XPL_DEFAULT_MAIL_DIR@ - @XPL_DEFAULT_SCMS_DIR@ - - Address Book Agent - - - - BONGOQUEUE.NLM - 1 - - - - - Proxy Agent - SMTP Agent - AntiSpam Agent - - - The user to whom this message was addressed has exceeded the allowed mailbox quota. Please resend the message at a later time. - - 30 - 5 - 2048 - 1 - 0 - @XPL_DEFAULT_SPOOL_DIR@ - - - BONGOMAILPROX.NLM - 1 - 3 - 3 - Queue Agent - Queue Agent - Store Agent - - - BONGOSMTP.NLM - 1 - 25 - 465 - Queue Agent - Queue Agent - - localhost.localdomain - localhost - - 0 - 0 - 0 - 1 - 1 - 1 - - - BONGOCONNMGR.NLM - 1 - 15 - - BONGOCMUSER.NLM - 1 - - - BONGOCMLISTS.NLM - 1 - - - BONGOCMRBL.NLM - 1 - - - BONGOCMRDNS.NLM - 1 - 1 - - - - BONGOMSGLDAP.NLM - 1 - Queue Agent - 389 - 1 - 1 - - - BONGOANTISPAM.NLM - 1 - Queue Agent - - - - BONGOCALCMD.NLM - 1 - - - - - BONGOIMAP.NLM - 1 - Queue Agent - 143 - 993 - - - BONGOPOP3.NLM - 1 - Queue Agent - 110 - 995 - - - - diff --git a/src/apps/setup/bongo/__init__.py b/src/apps/setup/bongo/__init__.py deleted file mode 100644 index 71521a4..0000000 --- a/src/apps/setup/bongo/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# THIS FILE SHOULD NOT BE INSTALLED! - -# It exists only to merge the src/[...]/bongosetup/bongo and src/libs/python/bongo -# directories in the Bongo source tree together. In an installed -# system, they're going to be in the same place. - -__path__.append(__path__[0] + "/../../../libs/python/bongo") diff --git a/src/apps/setup/legacy-extra.xml b/src/apps/setup/legacy-extra.xml deleted file mode 100644 index 8847c2a..0000000 --- a/src/apps/setup/legacy-extra.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/setup/legacy-schema.xml b/src/apps/setup/legacy-schema.xml deleted file mode 100644 index 79c8ed5..0000000 --- a/src/apps/setup/legacy-schema.xml +++ /dev/null @@ -1,1571 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -