#!/bin/sh exec smbscript "$0" ${1+"$@"} /* Upgrade from Samba3 Copyright Jelmer Vernooij 2005 Released under the GNU GPL v2 or later */ options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_VERSION", 'ldif', 'dn=s', 'quiet', 'blank'); if (options == undefined) { println("Failed to parse options"); return -1; } libinclude("base.js"); libinclude("provision.js"); libinclude("upgrade.js"); /* print a message if quiet is not set */ function message() { if (options["quiet"] == undefined) { print(vsprintf(arguments)); } } function ldifprint(data) { if (options["ldif"] != undefined) { print data; } } /* show some help */ function ShowHelp() { print(" Samba4 import tool provision [options] --ldif Dump LDIF --quiet Be quiet --blank do not add users or groups, just the structure You must provide at least a realm and domain "); exit(1); } if (options.ARGV.length != 2) { ShowHelp(); exit(1); } if (options.dn == undefined) { options.dn = "dc=example,dc=org"; } message("Reading Samba3 databases and smb.conf\n"); var samba3 = samba3_read(options.ARGV[0], options.ARGV[1]); if (samba3 == undefined) { println("Error reading Samba3 data"); exit(1); } message("Writing smb.conf\n"); var smbconf = upgrade_smbconf(samba3); // FIXME: Write! message("Provisioning\n"); var subobj = upgrade_provision(samba3); provision(subobj, message, blank); var samdb = ldb_init(); samdb.connect(lp.get("setup directory") + "/samdb.ldb"); message("Importing account policies\n"); var ldif = upgrade_policy(samba3); ldifprint(ldif); samdb.modify(ldif); // FIXME: Enable samba3sam module if original passdb backend was ldap message("Importing users\n"); for (var i in samba3.samaccounts) { message("Importing user '" + samba3.samaccounts[i].username + "'"); var ldif = upgrade_sam_account(samba3.samaccounts[i]); ldifprint(ldif); samdb.add(ldif); } message("Importing groups\n"); for (var i in samba3.groupmappings) { message("Importing group '" + samba3.groupmappings[i].username + "'"); var ldif = upgrade_sam_group(samba3.groupmappings[i]); ldifprint(ldif); samdb.add(ldif); } message("Importing WINS data\n"); var ldif = upgrade_wins(samba3) ldifprint(ldif); setup_ldb(ldif, "wins", Object()); message("Importing registry data\n"); var hives = ["hkcr","hkcu","hklm","hkpd"]; for (var i in hives) { var regdb = ldb_init(); regdb.connect(lp.get("setup directory") + "/" + hives[i] + ".ldb"); var ldif = upgrade_registry(samba3, hives[i]); ldifprint(ldif); ldb.add(ldif); } message("All OK\n"); return 0;