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
|
#!/usr/bin/env smbscript
/* (C) Jelmer Vernooij <jelmer@samba.org> 2005
Published under the GNU GPL
Sponsored by Google Summer of Code
*/
libinclude("base.js");
var mypath = substr(ARGV[0], 0, -strlen("samba3sam"));
var sys = sys_init();
var s3url;
var s3 = ldb_init();
var ok;
if (ARGV.length == 2) {
s3url = ARGV[1];
ok = s3.connect(s3url);
assert(ok);
} else {
s3url = "tdb://samba3.ldb";
sys.unlink("samba3.ldb");
println("Adding samba3 LDIF...");
var s3 = ldb_init();
ok = s3.connect(s3url);
assert(ok);
var ldif = sys.file_load(mypath + "../../testdata/samba3/samba3.ldif");
assert(ldif != undefined);
ok = s3.add(ldif);
assert(ok);
}
println("Initial samba4 LDIF...");
var s4 = ldb_init();
sys.unlink("samba4.ldb");
ok = s4.connect("tdb://samba4.ldb");
assert(ok);
var ldif = sys.file_load(mypath + "../../source/setup/provision_init.ldif");
assert(ldif != undefined);
ok = s4.add(ldif);
assert(ok);
ok = s4.add(sprintf("dn: @MAP=samba3sam
@MAP_URL: %s", s3url));
assert(ok);
ok = s4.modify("
dn: @MODULES
replace: @LIST
@LIST: samldb,timestamps,objectguid,rdn_name,samba3sam");
assert(ok);
println("Reconnecting to LDB database");
s4 = ldb_init();
ok = s4.connect("tdb://samba4.ldb");
assert(ok);
msg = s4.search("(ou=Users)");
assert(msg.length == 1);
assert(msg['mappedFromDn'] == msg['dn']);
println("Looking up by non-mapped attribute");
msg = s4.search("(cn=Administrator)");
assert(msg[0].cn == "Administrator");
assert(msg.length == 1);
println("Looking up by mapped attribute");
msg = s4.search("(name=Backup Operators)");
assert(msg[0].name == "Backup Operators");
assert(msg.length == 1);
println("Looking up by old name of renamed attribute");
msg = s4.search("(displayName=Backup Operators)");
assert(msg.length == 0);
println("Looking up mapped entry containing SID");
msg = s4.search("(cn=Replicator)");
assert(msg.length == 1);
assert(msg[0].dn == "cn=Replicator,ou=Groups,ou=Tests,dc=vernstok,dc=nl");
assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
assert(msg[0].mappedFromDn == msg[0].dn);
println("Checking mapping of objectclass");
var oc = msg[0].objectclass;
for (var i in oc) {
assert(oc[i] == "posixGroup" || oc[i] == "group");
}
println("Adding a record that will be fallbacked");
ok = s4.add("
dn: cn=Foo,dc=idealx,dc=org
unixName: root
lastLogon: 20000
cn: Foo
showInAdvancedViewOnly: TRUE
");
assert(ok);
println("Checking for existance of record");
msg = s4.search("(cn=Foo)", new Array('unixName','lastLogon','cn','showInAdvancedViewOnly'));
assert(msg.length == 1);
assert(msg[0].showInAdvancedViewOnly == "TRUE");
assert(msg[0].cn == "Foo");
assert(msg[0].unixName == "root");
assert(msg[0].lastLogon == 20000);
println("Adding record that will be mapped");
ok = s4.add("
dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
objectClass: user
unixName: blah
cn: Niemand
");
assert(ok);
println("Checking for existance of record (mapped)");
msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn'));
assert(msg.length == 1);
println("Checking for data in destination database");
msg = s3.search("(cn=Niemand)");
assert(msg.length >= 1);
assert(msg[0].displayName == "Niemand");
|