#!/usr/bin/env python # # Upgrade from Samba3 # Copyright Jelmer Vernooij 2005-2007 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging import optparse import os, sys # Find right directory when running from source tree sys.path.insert(0, "bin/python") import samba import samba.getopt as options from samba.auth import system_session from samba.upgrade import upgrade_from_samba3 from samba.samba3 import Samba3 from samba.samba3 import param as s3param def get_testparm_var(testparm, varname): cmd = "%s -s -l --parameter-name='%s' 2>/dev/null" % (testparm, varname) output = os.popen(cmd, 'r').readline() return output.strip() cmd_help = """upgrade_from_s3 [options] Input arguments are: - path to existing smb.conf - directory in which samba4 database will be created In addition, specify either samba3 database directory (with --libdir) or samba3 testparm utility (with --testparm). """ parser = optparse.OptionParser(cmd_help) parser.add_option_group(options.VersionOptions(parser)) parser.add_option("--quiet", help="Be quiet") parser.add_option("--libdir", type="string", metavar="DIR", help="samba3 database directory") parser.add_option("--testparm", type="string", metavar="PATH", help="samba3 testparm utility") opts, args = parser.parse_args() if len(args) < 2: parser.print_usage() sys.exit(1) smbconf = args[0] if not os.path.exists(smbconf): print("error: %s does not exist" % smbconf) sys.exit(1) targetdir = args[1] if not os.path.isdir(targetdir): print("error: %s is not a directory" % targetdir) sys.exit(1) libdir = opts.libdir testparm = opts.testparm if not libdir and not testparm: print("error: please specify either libdir or testparm") sys.exit(1) if libdir and testparm: print("warning: both libdir and testparm specified, libdir will be ignored.") libdir = None logger = logging.getLogger("upgrade") logger.addHandler(logging.StreamHandler(sys.stdout)) if opts.quiet: logger.setLevel(logging.WARNING) else: logger.setLevel(logging.INFO) s3conf = s3param.get_context() # Set correct default values from libdir or testparm paths = {} if libdir: paths["state directory"] = libdir paths["private dir"] = libdir paths["lock directory"] = libdir else: paths["state directory"] = get_testparm_var(testparm, "state directory") paths["private dir"] = get_testparm_var(testparm, "private dir") paths["lock directory"] = get_testparm_var(testparm, "lock directory") for p in paths: s3conf.set(p, paths[p]) # load smb.conf parameters logger.info("Reading smb.conf") s3conf.load(smbconf) samba3 = Samba3(smbconf, s3conf) logger.info("Provisioning") upgrade_from_samba3(samba3, logger, targetdir, session_info=system_session())