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