import os
import pwd
import grp
-import uuid
-from socket import gethostname
+import uuid, sid, misc
+from socket import gethostname, gethostbyname
import param
+class InvalidNetbiosName(Exception):
+ def __init__(self, name):
+ super(InvalidNetbiosName, self).__init__("The name '%r' is not a valid NetBIOS name" % name)
+
+class ProvisionSettings(object):
+ def __init__(self):
+ self.realm = None
+ self.domain = None
+ self.hostname = None
+ self.hostip = None
+ self.domainsid = None
+ self.invocationid = None
+ self.krbtgtpass = None
+ self.machinepass = None
+ self.adminpass = None
+ self.defaultsite = None
+ self.newguid = None
+ self.nttime = None
+ self.ldaptime = None
+ self.datestring = None
+ self.root = None
+ self.nobody = None
+ self.nogroup = None
+ self.wheel = None
+ self.backup = None
+ self.users = None
+ self.dnsdomain = None
+ self.dnsname = None
+ self.domaindn = None
+ self.domaindn_ldb = None
+ self.rootdn = None
+ self.configdn = None
+ self.configdn_ldb = None
+ self.schemedn = None
+ self.schemedn_ldb = None
+
+ def fix(self, paths):
+ self.realm = self.realm.upper()
+ self.hostname = self.hostname.lower()
+ self.domain = self.domain.upper()
+ if not valid_netbios_name(self.domain):
+ raise InvalidNetbiosName(self.domain)
+ self.netbiosname = self.hostname.upper()
+ if not valid_netbios_name(self.netbiosname):
+ raise InvalidNetbiosName(self.netbiosname)
+ rdns = self.domaindn.split(",")
+ self.rdn_dc = rdns[0][len("DC="):]
+
+ self.sam_ldb = paths.samdb
+ self.secrets_ldb = paths.secrets
+ self.secrets_keytab = paths.keytab
+
#
# return True if the current install seems to be OK
#
# setup a mapping between a sam name and a unix name
#
def setup_name_mapping(info, ldb, sid, unixname):
- attrs = ["dn"]
res = ldb.search("objectSid=%s" % sid,
- info.subobj.DOMAINDN, ldb.SCOPE_SUBTREE, attrs)
+ info.subobj.domaindn, ldb.SCOPE_SUBTREE, ["dn"])
if len(res) != 1:
info.message("Failed to find record for objectSid %s\n" % sid)
return False
# return first host IP
#
def hostip():
- list = sys.interfaces()
- return list[0]
+ return gethostbyname(hostname())
#
# return first part of hostname
ldb.delete("@KLUDGEACL")
# and the rest
- attrs = ["dn"]
basedn = ""
try:
for msg in ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", \
- basedn, ldb.SCOPE_SUBTREE, attrs):
+ basedn, ldb.SCOPE_SUBTREE, ["dn"]):
ldb.delete(msg.dn)
except LdbError:
ldb_delete(ldb)
try:
- res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", basedn, ldb.SCOPE_SUBTREE, attrs)
+ res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", basedn, ldb.SCOPE_SUBTREE, ["dn"])
except LdbError:
ldb_delete(ldb)
return
#
# erase an ldb, removing all records
#
-def ldb_erase_partitions(info, ldb, ldapbackend):
- rootDSE_attrs = ["namingContexts"]
- lp = loadparm_init()
-
- res = ldb.search("(objectClass=*)", "", ldb.SCOPE_BASE, rootDSE_attrs)
+def ldb_erase_partitions(lp, info, ldb, ldapbackend):
+ res = ldb.search("(objectClass=*)", "", ldb.SCOPE_BASE, ["namingContexts"])
assert len(res) == 1
if res[0].namingContexts is None:
return
for basedn in res[0].namingContexts:
anything = "(|(objectclass=*)(dn=*))"
- attrs = ["dn"]
previous_remaining = 1
current_remaining = 0
while ++k < 10 and (previous_remaining != current_remaining):
# and the rest
try:
- res2 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, attrs)
+ res2 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, ["dn"])
except LdbError, e:
info.message("ldb search failed: " + e + "\n")
continue
ldb.delete(msg.dn)
try:
- res3 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, attrs)
+ res3 = ldb.search(anything, basedn, ldb.SCOPE_SUBTREE, ["dn"])
except LdbError, e:
info.message("ldb search failed: " + e + "\n")
continue
#
# setup a ldb in the private dir
#
-def setup_add_ldif(ldif, info, ldb, failok):
- lp = loadparm_init()
+def setup_add_ldif(lp, ldif, info, ldb, failok):
src = lp.get("setup directory") + "/" + ldif
data = open(src, 'r').read()
def setup_ldb(ldif, info, dbname, erase=True, failok=False):
ldb = open_ldb(info, dbname, erase)
- if setup_add_ldif(ldif, info, ldb, failok):
+ if setup_add_ldif(lp, ldif, info, ldb, failok):
ldb.transaction_commit()
#
#
def setup_name_mappings(info, ldb):
lp = loadparm_init()
- attrs = ["objectSid"]
subobj = info.subobj
- res = ldb.search("objectSid=*", subobj.DOMAINDN, ldb.SCOPE_BASE, attrs)
+ res = ldb.search("objectSid=*", subobj.domaindn, ldb.SCOPE_BASE,
+ ["objectSid"])
assert(len(res) == 1 and res[0].objectSid is not None)
sid = res[0].objectSid
return True
-def provision_fix_subobj(subobj, message, paths):
- subobj.REALM = strupper(subobj.REALM)
- subobj.HOSTNAME = strlower(subobj.HOSTNAME)
- subobj.DOMAIN = strupper(subobj.DOMAIN)
- assert valid_netbios_name(subobj.DOMAIN)
- subobj.NETBIOSNAME = strupper(subobj.HOSTNAME)
- assert valid_netbios_name(subobj.NETBIOSNAME)
- rdns = subobj.DOMAINDN.split(",")
- subobj.RDN_DC = rdns[0][len("DC="):]
-
- subobj.SAM_LDB = paths.samdb
- subobj.SECRETS_LDB = paths.secrets
- subobj.SECRETS_KEYTAB = paths.keytab
- return True
def provision_become_dc(subobj, message, paths, session_info):
lp = loadparm_init()
info = Object()
- provision_fix_subobj(subobj, message, paths)
+ subobj.fix(paths)
info.subobj = subobj
info.message = message
info.session_info = session_info
# Also wipes the database
- message("Setting up " + paths.samdb + " partitions\n")
+ message("Setting up %s partitions\n" % paths.samdb)
setup_ldb("provision_partitions.ldif", info, paths.samdb)
samdb = open_ldb(info, paths.samdb, False)
- message("Setting up " + paths.samdb + " attributes\n")
- setup_add_ldif("provision_init.ldif", info, samdb, False)
+ message("Setting up %s attributes\n" % paths.samdb)
+ setup_add_ldif(lp, "provision_init.ldif", info, samdb, False)
- message("Setting up " + paths.samdb + " rootDSE\n")
- setup_add_ldif("provision_rootdse_add.ldif", info, samdb, False)
+ message("Setting up %s rootDSE\n" % paths.samdb)
+ setup_add_ldif(lp, "provision_rootdse_add.ldif", info, samdb, False)
message("Erasing data from partitions\n")
- ldb_erase_partitions(info, samdb, undefined)
+ ldb_erase_partitions(lp, info, samdb, undefined)
- message("Setting up " + paths.samdb + " indexes\n")
- setup_add_ldif("provision_index.ldif", info, samdb, False)
+ message("Setting up %s indexes\n" % paths.samdb)
+ setup_add_ldif(lp, "provision_index.ldif", info, samdb, False)
- message("Setting up " + paths.samdb + " templates\n")
- setup_add_ldif("provision_templates.ldif", info, samdb, False)
+ message("Setting up %s templates\n" % paths.samdb)
+ setup_add_ldif(lp, "provision_templates.ldif", info, samdb, False)
samdb.transaction_commit()
- message("Setting up " + paths.secrets + "\n")
+ message("Setting up %s\n" % paths.secrets)
setup_ldb("secrets_init.ldif", info, paths.secrets)
setup_ldb("secrets.ldif", info, paths.secrets, False)
- return True
-
#
# provision samba4 - caution, this wipes all existing data!
#
lp = loadparm_init()
info = Object()
- provision_fix_subobj(subobj, message, paths)
+ subobj.fix(paths)
- if subobj.DOMAINGUID is not None:
- subobj.DOMAINGUID_MOD = "replace: objectGUID\nobjectGUID: %s\n-" % subobj.DOMAINGUID
+ if subobj.domainguid is not None:
+ subobj.domainguid_mod = "replace: objectGUID\nobjectGUID: %s\n-" % subobj.domainguid
else:
- subobj.DOMAINGUID_MOD = ""
+ subobj.domainguid_mod = ""
- if subobj.HOSTGUID is not None:
- subobj.HOSTGUID_ADD = "objectGUID: %s" % subobj.HOSTGUID
+ if subobj.hostguid is not None:
+ subobj.hostguid_add = "objectGUID: %s" % subobj.hostguid
else:
- subobj.HOSTGUID_ADD = ""
+ subobj.hostguid_add = ""
info.subobj = subobj
info.message = message
samdb = open_ldb(info, paths.samdb, False)
message("Setting up sam.ldb attributes\n")
- setup_add_ldif("provision_init.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_init.ldif", info, samdb, False)
message("Setting up sam.ldb rootDSE\n")
- setup_add_ldif("provision_rootdse_add.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_rootdse_add.ldif", info, samdb, False)
message("Erasing data from partitions\n")
- ldb_erase_partitions(info, samdb, ldapbackend)
+ ldb_erase_partitions(lp, info, samdb, ldapbackend)
- message("Adding DomainDN: " + subobj.DOMAINDN + " (permitted to fail)\n")
- setup_add_ldif("provision_basedn.ldif", info, samdb, True)
- message("Modifying DomainDN: " + subobj.DOMAINDN + "\n")
+ message("Adding DomainDN: " + subobj.domaindn + " (permitted to fail)\n")
+ setup_add_ldif(lp, "provision_basedn.ldif", info, samdb, True)
+ message("Modifying DomainDN: " + subobj.domaindn + "\n")
setup_ldb_modify("provision_basedn_modify.ldif", info, samdb)
if not modify_ok:
if not add_ok:
- message("Failed to both add and modify " + subobj.DOMAINDN + " in target " + subobj.DOMAINDN_LDB + "\n")
+ message("Failed to both add and modify " + subobj.domaindn + " in target " + subobj.domaindn_ldb + "\n")
message("Perhaps you need to run the provision script with the --ldap-base-dn option, and add this record to the backend manually\n");
assert(modify_ok)
message("Adding configuration container (permitted to fail)\n")
- add_ok = setup_add_ldif("provision_configuration_basedn.ldif", info, samdb, True)
+ add_ok = setup_add_ldif(lp, "provision_configuration_basedn.ldif", info, samdb, True)
message("Modifying configuration container\n")
modify_ok = setup_ldb_modify("provision_configuration_basedn_modify.ldif", info, samdb)
if not modify_ok:
assert(modify_ok)
message("Adding schema container (permitted to fail)\n")
- add_ok = setup_add_ldif("provision_schema_basedn.ldif", info, samdb, True)
+ add_ok = setup_add_ldif(lp, "provision_schema_basedn.ldif", info, samdb, True)
message("Modifying schema container\n")
modify_ok = setup_ldb_modify("provision_schema_basedn_modify.ldif", info, samdb)
if not modify_ok:
assert(modify_ok)
message("Setting up sam.ldb Samba4 schema\n")
- setup_add_ldif("schema_samba4.ldif", info, samdb, False)
+ setup_add_ldif(lp, "schema_samba4.ldif", info, samdb, False)
message("Setting up sam.ldb AD schema\n")
- setup_add_ldif("schema.ldif", info, samdb, False)
+ setup_add_ldif(lp, "schema.ldif", info, samdb, False)
# (hack) Reload, now we have the schema loaded.
samdb.transaction_commit()
samdb = open_ldb(info, paths.samdb, False)
message("Setting up sam.ldb configuration data\n")
- setup_add_ldif("provision_configuration.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_configuration.ldif", info, samdb, False)
message("Setting up display specifiers\n")
- setup_add_ldif("display_specifiers.ldif", info, samdb, False)
+ setup_add_ldif(lp, "display_specifiers.ldif", info, samdb, False)
message("Setting up sam.ldb templates\n")
- setup_add_ldif("provision_templates.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_templates.ldif", info, samdb, False)
message("Adding users container (permitted to fail)\n")
- add_ok = setup_add_ldif("provision_users_add.ldif", info, samdb, True)
+ add_ok = setup_add_ldif(lp, "provision_users_add.ldif", info, samdb, True)
message("Modifying users container\n")
modify_ok = setup_ldb_modify("provision_users_modify.ldif", info, samdb)
if not modify_ok:
assert(modify_ok)
assert(modify_ok)
message("Adding computers container (permitted to fail)\n")
- add_ok = setup_add_ldif("provision_computers_add.ldif", info, samdb, True)
+ add_ok = setup_add_ldif(lp, "provision_computers_add.ldif", info, samdb, True)
message("Modifying computers container\n")
modify_ok = setup_ldb_modify("provision_computers_modify.ldif", info, samdb)
if not modify_ok:
assert(modify_ok)
message("Setting up sam.ldb data\n")
- setup_add_ldif("provision.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision.ldif", info, samdb, False)
if blank:
message("Setting up sam.ldb index\n")
- setup_add_ldif("provision_index.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_index.ldif", info, samdb, False)
message("Setting up sam.ldb rootDSE marking as syncronized\n")
setup_modify_ldif("provision_rootdse_modify.ldif", info, samdb, False)
# samdb = open_ldb(info, paths.samdb, False)
#
message("Setting up sam.ldb users and groups\n")
- setup_add_ldif("provision_users.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_users.ldif", info, samdb, False)
if not setup_name_mappings(info, samdb):
return False
message("Setting up sam.ldb index\n")
- setup_add_ldif("provision_index.ldif", info, samdb, False)
+ setup_add_ldif(lp, "provision_index.ldif", info, samdb, False)
message("Setting up sam.ldb rootDSE marking as syncronized\n")
setup_modify_ldif("provision_rootdse_modify.ldif", info, samdb, False)
# Write out a DNS zone file, from the info in the current database
def provision_dns(subobj, message, paths, session_info, credentials):
- message("Setting up DNS zone: " + subobj.DNSDOMAIN + " \n")
+ message("Setting up DNS zone: " + subobj.dnsdomain + " \n")
# connect to the sam
ldb = Ldb(paths.samdb, session_info=session_info, credentials=credentials)
# These values may have changed, due to an incoming SamSync,
# or may not have been specified, so fetch them from the database
- attrs = ["objectGUID"]
- res = ldb.search("objectGUID=*", subobj.DOMAINDN, ldb.SCOPE_BASE, attrs)
+ res = ldb.search("objectGUID=*", subobj.domaindn, ldb.SCOPE_BASE,
+ ["objectGUID"])
assert(len(res) == 1)
assert(res[0].objectGUID is not None)
- subobj.DOMAINGUID = res[0].objectGUID
+ subobj.domainguid = res[0].objectGUID
- subobj.HOSTGUID = searchone(ldb, subobj.DOMAINDN, "(&(objectClass=computer)(cn=" + subobj.NETBIOSNAME + "))", "objectGUID")
- assert(subobj.HOSTGUID is not None)
+ subobj.hostguid = searchone(ldb, subobj.domaindn, "(&(objectClass=computer)(cn=" + subobj.netbiosname + "))", "objectGUID")
+ assert(subobj.hostguid is not None)
setup_file("provision.zone",
message, paths.dns,
# Write out a DNS zone file, from the info in the current database
def provision_ldapbase(subobj, message, paths):
- message("Setting up LDAP base entry: " + subobj.DOMAINDN + " \n")
- rdns = subobj.DOMAINDN.split(",")
- subobj.EXTENSIBLEOBJECT = "objectClass: extensibleObject"
+ message("Setting up LDAP base entry: " + subobj.domaindn + " \n")
+ rdns = subobj.domaindn.split(",")
+ subobj.extensibleobject = "objectClass: extensibleObject"
- subobj.RDN_DC = rdns[0][len("DC="):]
+ subobj.rdn_dc = rdns[0][len("DC="):]
setup_file("provision_basedn.ldif",
message, paths.ldap_basedn_ldif,
#
# guess reasonably default options for provisioning
#
-def provision_guess():
- subobj = Object()
- nss = nss_init()
- lp = loadparm_init()
- rdn_list
- random_init(local)
+def provision_guess(lp):
+ subobj = ProvisionSettings()
- subobj.REALM = strupper(lp.get("realm"))
- subobj.DOMAIN = lp.get("workgroup")
- subobj.HOSTNAME = hostname()
+ subobj.realm = lp.get("realm").upper()
+ subobj.domain = lp.get("workgroup")
+ subobj.hostname = hostname()
- assert subobj.REALM is not None
- assert subobj.DOMAIN is not None
- assert subobj.HOSTNAME is not None
+ assert subobj.realm is not None
+ assert subobj.domain is not None
+ assert subobj.hostname is not None
- subobj.VERSION = version()
- subobj.HOSTIP = hostip()
- subobj.DOMAINSID = randsid()
- subobj.INVOCATIONID = uuid.random()
- subobj.KRBTGTPASS = randpass(12)
- subobj.MACHINEPASS = randpass(12)
- subobj.ADMINPASS = randpass(12)
- subobj.DEFAULTSITE = "Default-First-Site-Name"
- subobj.NEWGUID = uuid.random()
- subobj.NTTIME = sys.nttime()
- subobj.LDAPTIME = ldaptime
- subobj.DATESTRING = datestring
- subobj.ROOT = findnss(pwd.getpwnam, "root")[4]
- subobj.NOBODY = findnss(pwd.getpwnam, "nobody")[4]
- subobj.NOGROUP = findnss(grp.getgrnam, "nogroup", "nobody")[2]
- subobj.WHEEL = findnss(grp.getgrnam, "wheel", "root", "staff", "adm")[2]
- subobj.BACKUP = findnss(grp.getgrnam, "backup", "wheel", "root", "staff")[2]
- subobj.USERS = findnss(grp.getgrnam, "users", "guest", "other", "unknown", "usr")[2]
-
- subobj.DNSDOMAIN = strlower(subobj.REALM)
- subobj.DNSNAME = "%s.%s" % (subobj.HOSTNAME.lower(), subobj.DNSDOMAIN)
- rdn_list = split(".", subobj.DNSDOMAIN)
- subobj.DOMAINDN = "DC=" + ",DC=".join(rdn_list)
- subobj.DOMAINDN_LDB = "users.ldb"
- subobj.ROOTDN = subobj.DOMAINDN
- subobj.CONFIGDN = "CN=Configuration," + subobj.ROOTDN
- subobj.CONFIGDN_LDB = "configuration.ldb"
- subobj.SCHEMADN = "CN=Schema," + subobj.CONFIGDN
- subobj.SCHEMADN_LDB = "schema.ldb"
+ subobj.hostip = hostip()
+ subobj.domainsid = sid.random()
+ subobj.invocationid = uuid.random()
+ subobj.krbtgtpass = misc.random_password(12)
+ subobj.machinepass = misc.random_password(12)
+ subobj.adminpass = misc.random_password(12)
+ subobj.defaultsite = "Default-First-Site-Name"
+ subobj.newguid = uuid.random()
+ subobj.nttime = sys.nttime()
+ subobj.ldaptime = ldaptime
+ subobj.datestring = datestring
+ subobj.root = findnss(pwd.getpwnam, "root")[4]
+ subobj.nobody = findnss(pwd.getpwnam, "nobody")[4]
+ subobj.nogroup = findnss(grp.getgrnam, "nogroup", "nobody")[2]
+ subobj.wheel = findnss(grp.getgrnam, "wheel", "root", "staff", "adm")[2]
+ subobj.backup = findnss(grp.getgrnam, "backup", "wheel", "root", "staff")[2]
+ subobj.users = findnss(grp.getgrnam, "users", "guest", "other", "unknown", "usr")[2]
+
+ subobj.dnsdomain = subobj.realm.lower()
+ subobj.dnsname = "%s.%s" % (subobj.hostname.lower(), subobj.dnsdomain)
+ rdn_list = split(".", subobj.dnsdomain)
+ subobj.domaindn = "DC=" + ",DC=".join(rdn_list)
+ subobj.domaindn_ldb = "users.ldb"
+ subobj.rootdn = subobj.domaindn
+ subobj.configdn = "CN=Configuration," + subobj.rootdn
+ subobj.configdn_ldb = "configuration.ldb"
+ subobj.schemadn = "CN=Schema," + subobj.configdn
+ subobj.schemadn_ldb = "schema.ldb"
#:Add modules to the list to activate them by default
#beware often order is important
# that the objectclass is of type person (filled in by samldb)
# - partition must be last
# - each partition has its own module list then
- modules_list = ["rootdse",
+ subobj.modules_list = join(",", ["rootdse",
"kludge_acl",
"paged_results",
"server_sort",
"objectclass",
"rdn_name",
"show_deleted",
- "partition"]
- subobj.MODULES_LIST = join(",", modules_list)
- subobj.DOMAINDN_MOD = "objectguid"
- subobj.CONFIGDN_MOD = "objectguid"
- subobj.SCHEMADN_MOD = "objectguid"
-
- subobj.EXTENSIBLEOBJECT = "# no objectClass: extensibleObject for local ldb"
- subobj.ACI = "# no aci for local ldb"
+ "partition"])
+ subobj.domaindn_mod = "objectguid"
+ subobj.configdn_mod = "objectguid"
+ subobj.schemadn_mod = "objectguid"
+
+ subobj.extensibleobject = "# no objectClass: extensibleObject for local ldb"
+ subobj.aci = "# no aci for local ldb"
return subobj
#
# search for one attribute as a string
#
def searchone(ldb, basedn, expression, attribute):
- attrs = [attribute]
- res = ldb.search(expression, basedn, ldb.SCOPE_SUBTREE, attrs)
+ res = ldb.search(expression, basedn, ldb.SCOPE_SUBTREE, [attribute])
if len(res) != 1 or res[0][attribute] is None:
return None
return res[0][attribute]
# modify an account to remove the
#
def enable_account(ldb, user_dn):
- attrs = ["userAccountControl"]
- res = ldb.search(NULL, user_dn, ldb.SCOPE_ONELEVEL, attrs)
- assert(len(res) == 1)
+ res = ldb.search(NULL, user_dn, ldb.SCOPE_ONELEVEL, ["userAccountControl"])
+ assert len(res) == 1
userAccountControl = res[0].userAccountControl
userAccountControl = userAccountControl - 2 # remove disabled bit
mod = """
#
# add a new user record
#
-def newuser(username, unixname, password, message, session_info, credentials):
- lp = loadparm_init()
- random_init(local)
+def newuser(sam, username, unixname, password, message, session_info,
+ credentials):
# connect to the sam
- samdb = Ldb(lp.get("sam database"), session_info=session_info,
- credentials=credentials)
-
ldb.transaction_start()
# find the DNs for the domain and the domain users group
- attrs = ["defaultNamingContext"]
- res = ldb.search("defaultNamingContext=*", "", ldb.SCOPE_BASE, attrs)
+ res = ldb.search("defaultNamingContext=*", "", ldb.SCOPE_BASE,
+ ["defaultNamingContext"])
assert(len(res) == 1 and res[0].defaultNamingContext is not None)
domain_dn = res[0].defaultNamingContext
assert(domain_dn is not None)
#
# modify the userAccountControl to remove the disabled bit
#
- ok = enable_account(ldb, user_dn)
- if ok:
- ldb.transaction_commit()
- return ok
+ enable_account(ldb, user_dn)
+ ldb.transaction_commit()
# Check whether a name is valid as a NetBIOS name.
# FIXME: There are probably more constraints here.
return False
return True
-def provision_validate(subobj, message):
- lp = loadparm_init()
-
+def provision_validate(lp, subobj, message):
if not valid_netbios_name(subobj.DOMAIN):
message("Invalid NetBIOS name for domain\n")
return False
message("Invalid NetBIOS name for host\n")
return False
- if strupper(lp.get("workgroup")) != strupper(subobj.DOMAIN):
+ if lp.get("workgroup").upper() != subobj.DOMAIN.upper():
message("workgroup '%s' in smb.conf must match chosen domain '%s'\n",
lp.get("workgroup"), subobj.DOMAIN)
return False
- if strupper(lp.get("realm")) != strupper(subobj.REALM):
+ if lp.get("realm").upper() != subobj.REALM.upper():
message("realm '%s' in smb.conf must match chosen realm '%s'\n" %
(lp.get("realm"), subobj.REALM))
return False