1 | <% page_header("columns", "Windows to Samba Migration", "install");
|
---|
2 |
|
---|
3 | include("/scripting/forms.js");
|
---|
4 | libinclude("base.js");
|
---|
5 | libinclude("provision.js");
|
---|
6 |
|
---|
7 | var misc = misc_init();
|
---|
8 | %>
|
---|
9 |
|
---|
10 | <h1>Windows to Samba4 domain migration</h1>
|
---|
11 |
|
---|
12 | <%
|
---|
13 | var f = FormObj("Provisioning", 0, 2);
|
---|
14 | var i;
|
---|
15 | var lp = loadparm_init();
|
---|
16 |
|
---|
17 | if ((session.authinfo.user_class == "ADMINISTRATOR")
|
---|
18 | || (session.authinfo.user_class == "SYSTEM")) {
|
---|
19 |
|
---|
20 | if (lp.get("realm") == "") {
|
---|
21 | lp.set("realm", lp.get("workgroup") + ".example.com");
|
---|
22 | }
|
---|
23 |
|
---|
24 |
|
---|
25 | var subobj = provision_guess();
|
---|
26 | /* Don't supply default password for web interface */
|
---|
27 | subobj.ADMINPASS = "";
|
---|
28 |
|
---|
29 | f.add("REALM", "DNS Domain Name");
|
---|
30 | f.add("DOMAIN", "NetBIOS Domain Name");
|
---|
31 | f.add("ADMIN", "Administrator Username");
|
---|
32 | f.add("ADMINPASS", "Administrator Password", "password");
|
---|
33 | f.add("HOSTNAME", "My Hostname");
|
---|
34 | f.add("HOSTIP", "My Host's IP");
|
---|
35 | f.add("DEFAULTSITE", "Default Site");
|
---|
36 | f.submit[0] = "Migrate";
|
---|
37 | f.submit[1] = "Cancel";
|
---|
38 |
|
---|
39 | if (form['submit'] == "Cancel") {
|
---|
40 | redirect("/");
|
---|
41 | }
|
---|
42 |
|
---|
43 | if (form['submit'] == "Migrate") {
|
---|
44 | for (r in form) {
|
---|
45 | subobj[r] = form[r];
|
---|
46 | }
|
---|
47 | }
|
---|
48 |
|
---|
49 | for (i=0;i<f.element.length;i++) {
|
---|
50 | f.element[i].value = subobj[f.element[i].name];
|
---|
51 | }
|
---|
52 |
|
---|
53 | if (form['submit'] == "Migrate") {
|
---|
54 | /* overcome an initially blank smb.conf */
|
---|
55 | lp.set("realm", subobj.REALM);
|
---|
56 | lp.set("workgroup", subobj.DOMAIN);
|
---|
57 | lp.reload();
|
---|
58 |
|
---|
59 | if (subobj.ADMINPASS == "") {
|
---|
60 | write("<h3>We need the administrator password for the " + subobj.DOMAIN + " domain to proceed. Please try again.</h3>");
|
---|
61 | f.display();
|
---|
62 | } else if (!provision_validate(subobj, writefln)) {
|
---|
63 | f.display();
|
---|
64 | } else if (strupper(lp.get("server role")) == "domain controller") {
|
---|
65 | writefln("You need to set 'server role' to 'member server' before starting the migration process");
|
---|
66 | } else {
|
---|
67 | var creds = credentials_init();
|
---|
68 | var samdb;
|
---|
69 | creds.set_username(form.ADMIN);
|
---|
70 | creds.set_password(form.ADMINPASS);
|
---|
71 | creds.set_domain(form.DOMAIN);
|
---|
72 | creds.set_realm(form.REALM);
|
---|
73 |
|
---|
74 | var info = new Object();
|
---|
75 | var paths = provision_default_paths(subobj);
|
---|
76 | var session_info = session.authinfo.session_info;
|
---|
77 | var credentials = session.authinfo.credentials;
|
---|
78 |
|
---|
79 | provision_fix_subobj(subobj, paths);
|
---|
80 |
|
---|
81 | info.session_info = session_info;
|
---|
82 | info.message = writefln;
|
---|
83 | info.subobj = subobj;
|
---|
84 |
|
---|
85 | /* Setup a basic database structure, but don't setup any users */
|
---|
86 | if (!provision(subobj, writefln, true, paths,
|
---|
87 | session_info, credentials, false)) {
|
---|
88 | writefln("Provision failed!");
|
---|
89 |
|
---|
90 | /* Join domain */
|
---|
91 | } else if (!join_domain(form.DOMAIN, form.HOSTNAME, misc.SEC_CHAN_BDC, creds, writefln)) {
|
---|
92 | writefln("Domain Join failed!");
|
---|
93 |
|
---|
94 | /* Vampire */
|
---|
95 | } else if (!vampire(form.DOMAIN, session.authinfo.session_info,
|
---|
96 | session.authinfo.credentials, writefln)) {
|
---|
97 | writefln("Failed to syncronsise remote domain into local database!");
|
---|
98 | } else if (!provision_dns(subobj, writefln, paths,
|
---|
99 | session.authinfo.session_info, session.authinfo.credentials)) {
|
---|
100 | writefln("DNS Provision failed!");
|
---|
101 | } else if (!(samdb = open_ldb(info, paths.samdb, false))) {
|
---|
102 | writefln("Opening " + paths.samdb + " failed!");
|
---|
103 | info.samdb = samdb;
|
---|
104 | } else if (!setup_name_mappings(info, samdb)) {
|
---|
105 | writefln("Setup of name mappings failed!");
|
---|
106 | } else {
|
---|
107 | var zonepath = paths.dns;
|
---|
108 | %>
|
---|
109 | <h3>Database migrated!</h3>
|
---|
110 | You need to do the following to complete the process:
|
---|
111 | <ul>
|
---|
112 | <li>Install the <b>@@zonepath</b> zone file into your bind install, and restart bind
|
---|
113 | <li>Change your smb.conf to set "server role = domain controller"
|
---|
114 | <li>Shutdown your existing PDC and any other DCs
|
---|
115 | <li>Restart smbd
|
---|
116 | </ul>
|
---|
117 | <%
|
---|
118 | }
|
---|
119 | }
|
---|
120 | } else {
|
---|
121 | f.display();
|
---|
122 | }
|
---|
123 | } else {
|
---|
124 | redirect("/");
|
---|
125 | }
|
---|
126 |
|
---|
127 | %>
|
---|
128 |
|
---|
129 |
|
---|
130 | <% page_footer(); %>
|
---|