X-Git-Url: http://git.samba.org/samba.git/?a=blobdiff_plain;f=source4%2Fscripting%2Flibjs%2Fprovision.js;h=dc9eae8e7286ddf1de24fe8de2dfa5af8c40c12e;hb=e4165448d778db1721b1c7670b25ae3e40917d86;hp=e020cc41bde861e85b01e9973c50b0a02a378f42;hpb=151e30e18aea131291bc53f167378192165bb89c;p=ira%2Fwip.git diff --git a/source4/scripting/libjs/provision.js b/source4/scripting/libjs/provision.js index e020cc41bde..dc9eae8e728 100644 --- a/source4/scripting/libjs/provision.js +++ b/source4/scripting/libjs/provision.js @@ -23,7 +23,7 @@ function install_ok(session_info, credentials) return false; } var res = ldb.search("(cn=Administrator)"); - if (res.length != 1) { + if (res.error != 0 || res.msgs.length != 1) { return false; } return true; @@ -57,7 +57,7 @@ objectClass: top objectClass: foreignSecurityPrincipal description: %s ", - sid, subobj.BASEDN, desc); + sid, subobj.DOMAINDN, desc); /* deliberately ignore errors from this, as the records may already exist */ ldb.add(add); @@ -71,8 +71,8 @@ function setup_name_mapping(info, ldb, sid, unixname) { var attrs = new Array("dn"); var res = ldb.search(sprintf("objectSid=%s", sid), - info.subobj.BASEDN, ldb.SCOPE_SUBTREE, attrs); - if (res.length != 1) { + info.subobj.DOMAINDN, ldb.SCOPE_SUBTREE, attrs); + if (res.error != 0 || res.msgs.length != 1) { info.message("Failed to find record for objectSid %s\n", sid); return false; } @@ -82,9 +82,9 @@ changetype: modify replace: unixName unixName: %s ", - res[0].dn, unixname); + res.msgs[0].dn, unixname); var ok = ldb.modify(mod); - if (!ok) { + if (ok.error != 0) { info.message("name mapping for %s failed - %s\n", sid, ldb.errstring()); return false; @@ -140,9 +140,9 @@ function hostname() /* the ldb is in bad shape, possibly due to being built from an incompatible previous version of the code, so delete it completely */ -function ldb_delete(ldb) +function ldb_delete(info, ldb) { - println("Deleting " + ldb.filename); + info.message("Deleting " + ldb.filename + "\n"); var lp = loadparm_init(); sys.unlink(sprintf("%s/%s", lp.get("private dir"), ldb.filename)); ldb.transaction_cancel(); @@ -155,31 +155,14 @@ function ldb_delete(ldb) /* erase an ldb, removing all records */ -function ldb_erase(ldb) +function ldb_erase(info, ldb) { - var attrs = new Array("namingContexts"); var res; - /* delete within each naming context - this copes with existing partitions */ - res = ldb.search("objectClass=*", "", ldb.SCOPE_BASE, attrs); - if (typeof(res) != "undefined") { - if (res.length > 0) { - var names = res[0].namingContexts; - for (i=0;i cn=rootdse + // - objectclass must be before password_hash, because password_hash checks + // that the objectclass is of type person (filled in by the objectclass + // module when expanding the objectclass list) + // - partition must be last + // - each partition has its own module list then + var modules_list = new Array("rootdse", + "paged_results", + "ranged_results", + "anr", + "server_sort", + "extended_dn", + "asq", + "samldb", + "rdn_name", + "objectclass", + "kludge_acl", + "operational"); + var tdb_modules_list = new Array("subtree_rename", + "subtree_delete", + "linked_attributes"); + var modules_list2 = new Array("show_deleted", + "partition"); + subobj.MODULES_LIST = join(",", modules_list); + subobj.TDB_MODULES_LIST = "," + join(",", tdb_modules_list); + subobj.MODULES_LIST2 = join(",", modules_list2); + subobj.DOMAINDN_LDB = "users.ldb"; + subobj.CONFIGDN_LDB = "configuration.ldb"; + subobj.SCHEMADN_LDB = "schema.ldb"; + subobj.DOMAINDN_MOD = "pdc_fsmo,password_hash,instancetype"; + subobj.CONFIGDN_MOD = "naming_fsmo,instancetype"; + subobj.SCHEMADN_MOD = "schema_fsmo,instancetype"; + + subobj.ACI = "# no aci for local ldb"; + return subobj; } @@ -656,11 +1051,12 @@ function searchone(ldb, basedn, expression, attribute) { var attrs = new Array(attribute); res = ldb.search(expression, basedn, ldb.SCOPE_SUBTREE, attrs); - if (res.length != 1 || - res[0][attribute] == undefined) { + if (res.error != 0 || + res.msgs.length != 1 || + res.msgs[0][attribute] == undefined) { return undefined; } - return res[0][attribute]; + return res.msgs[0][attribute]; } /* @@ -670,8 +1066,9 @@ function enable_account(ldb, user_dn) { var attrs = new Array("userAccountControl"); var res = ldb.search(NULL, user_dn, ldb.SCOPE_ONELEVEL, attrs); - assert(res.length == 1); - var userAccountControl = res[0].userAccountControl; + assert(res.error == 0); + assert(res.msgs.length == 1); + var userAccountControl = res.msgs[0].userAccountControl; userAccountControl = userAccountControl - 2; /* remove disabled bit */ var mod = sprintf(" dn: %s @@ -681,7 +1078,7 @@ userAccountControl: %u ", user_dn, userAccountControl); var ok = ldb.modify(mod); - return ok; + return (ok.error == 0); } @@ -706,8 +1103,9 @@ function newuser(username, unixname, password, message, session_info, credential /* find the DNs for the domain and the domain users group */ var attrs = new Array("defaultNamingContext"); res = ldb.search("defaultNamingContext=*", "", ldb.SCOPE_BASE, attrs); - assert(res.length == 1 && res[0].defaultNamingContext != undefined); - var domain_dn = res[0].defaultNamingContext; + assert(res.error == 0); + assert(res.msgs.length == 1 && res.msgs[0].defaultNamingContext != undefined); + var domain_dn = res.msgs[0].defaultNamingContext; assert(domain_dn != undefined); var dom_users = searchone(ldb, domain_dn, "name=Domain Users", "dn"); assert(dom_users != undefined); @@ -722,12 +1120,11 @@ function newuser(username, unixname, password, message, session_info, credential var ldif = sprintf(" dn: %s sAMAccountName: %s -memberOf: %s unixName: %s sambaPassword: %s objectClass: user ", - user_dn, username, dom_users, + user_dn, username, unixname, password); /* add the user to the users group as well @@ -737,7 +1134,7 @@ dn: %s changetype: modify add: member member: %s -", +", dom_users, user_dn); @@ -746,15 +1143,15 @@ member: %s */ message("Adding user %s\n", user_dn); ok = ldb.add(ldif); - if (ok != true) { - message("Failed to add %s - %s\n", user_dn, ldb.errstring()); + if (ok.error != 0) { + message("Failed to add %s - %s\n", user_dn, ok.errstr); return false; } message("Modifying group %s\n", dom_users); ok = ldb.modify(modgroup); - if (ok != true) { - message("Failed to modify %s - %s\n", dom_users, ldb.errstring()); + if (ok.error != 0) { + message("Failed to modify %s - %s\n", dom_users, ok.errstr); return false; } @@ -792,15 +1189,21 @@ function provision_validate(subobj, message) } - if (strupper(lp.get("workgroup")) != strupper(subobj.DOMAIN)) { + if (strupper(lp.get("workgroup")) != strupper(subobj.DOMAIN_CONF)) { message("workgroup '%s' in smb.conf must match chosen domain '%s'\n", - lp.get("workgroup"), subobj.DOMAIN); + lp.get("workgroup"), subobj.DOMAIN_CONF); return false; } - if (strupper(lp.get("realm")) != strupper(subobj.REALM)) { + if (strupper(lp.get("realm")) != strupper(subobj.REALM_CONF)) { message("realm '%s' in smb.conf must match chosen realm '%s'\n", - lp.get("realm"), subobj.REALM); + lp.get("realm"), subobj.REALM_CONF); + return false; + } + + if (strlower(lp.get("server role")) != strlower(subobj.SERVERROLE)) { + message("server role '%s' in smb.conf must match chosen role '%s'\n", + lp.get("server role"), subobj.SERVERROLE); return false; }