r9744: - [upgrade.js] Start working on smb.conf conversion.
[samba.git] / source / setup / upgrade
1 #!/bin/sh
2 exec smbscript "$0" ${1+"$@"}
3 /*
4         Upgrade from Samba3
5         Copyright Jelmer Vernooij 2005
6         Released under the GNU GPL v2 or later
7 */
8
9 options = GetOptions(ARGV,
10                 "POPT_AUTOHELP",
11                 "POPT_COMMON_SAMBA",
12                 "POPT_COMMON_VERSION",
13                 'ldif',
14                 'dn=s',
15                 'quiet', 'blank');
16
17 if (options == undefined) {
18    println("Failed to parse options");
19    return -1;
20 }
21
22 libinclude("base.js");
23 libinclude("provision.js");
24 libinclude("upgrade.js");
25
26 /*
27   print a message if quiet is not set
28 */
29 function message() 
30 {
31         if (options["quiet"] == undefined) {
32                 print(vsprintf(arguments));
33         }
34 }
35
36 function ldifprint(data)
37 {
38         if (options["ldif"] != undefined) {
39                 print data;
40         }
41 }
42
43 /*
44  show some help
45 */
46 function ShowHelp()
47 {
48         print("
49 Samba4 import tool
50
51 provision [options] <libdir> <smbconf>
52  --ldif                         Dump LDIF
53  --quiet                        Be quiet
54  --blank                        do not add users or groups, just the structure
55
56 You must provide at least a realm and domain
57
58 ");
59         exit(1);
60 }
61
62 if (options.ARGV.length != 2) {
63         ShowHelp();
64         exit(1);
65 }
66
67 if (options.dn == undefined) {
68         options.dn = "dc=example,dc=org";
69 }
70
71 message("Reading Samba3 databases and smb.conf\n");
72 var samba3 = samba3_read(options.ARGV[0], options.ARGV[1]);
73
74 if (samba3 == undefined) {
75         println("Error reading Samba3 data");
76         exit(1);
77 }
78
79 message("Writing smb.conf\n");
80 var smbconf = upgrade_smbconf(samba3);
81 // FIXME: Write!
82
83 message("Provisioning\n");
84 var subobj = upgrade_provision(samba3);
85 provision(subobj, message, blank);
86
87 var samdb = ldb_init();
88 samdb.connect(lp.get("setup directory") + "/samdb.ldb");
89
90 message("Importing account policies\n");
91 var ldif = upgrade_policy(samba3);
92 ldifprint(ldif);
93 samdb.modify(ldif);
94
95 // FIXME: Enable samba3sam module if original passdb backend was ldap
96
97 message("Importing users\n");
98 for (var i in samba3.samaccounts) {
99         message("Importing user '" + samba3.samaccounts[i].username + "'");
100         var ldif = upgrade_sam_account(samba3.samaccounts[i]);
101         ldifprint(ldif);
102         samdb.add(ldif);
103 }
104
105 message("Importing groups\n");
106 for (var i in samba3.groupmappings) {
107         message("Importing group '" + samba3.groupmappings[i].username + "'");
108         var ldif = upgrade_sam_group(samba3.groupmappings[i]);
109         ldifprint(ldif);
110         samdb.add(ldif);
111 }
112
113 message("Importing WINS data\n");
114 var ldif = upgrade_wins(samba3)
115 ldifprint(ldif);
116 setup_ldb(ldif, "wins", Object());
117
118 message("Importing registry data\n");
119 var hives = ["hkcr","hkcu","hklm","hkpd"]; 
120 for (var i in hives) {
121         var regdb = ldb_init();
122         regdb.connect(lp.get("setup directory") + "/" + hives[i] + ".ldb");
123         var ldif = upgrade_registry(samba3, hives[i]);
124         ldifprint(ldif);
125         ldb.add(ldif);
126 }
127
128
129 message("All OK\n");
130 return 0;