1 #!/usr/bin/env smbscript
2 /* (C) Jelmer Vernooij <jelmer@samba.org> 2005
3 Published under the GNU GPL
4 Sponsored by Google Summer of Code
8 var mypath = substr(ARGV[0], 0, -strlen("samba3sam"));
15 if (ARGV.length == 2) {
17 ok = s3.connect(s3url);
20 s3url = "tdb://samba3.ldb";
21 sys.unlink("samba3.ldb");
22 println("Adding samba3 LDIF...");
24 ok = s3.connect(s3url);
26 var ldif = sys.file_load(mypath + "../../testdata/samba3/samba3.ldif");
27 assert(ldif != undefined);
32 println("Initial samba4 LDIF...");
34 sys.unlink("samba4.ldb");
35 ok = s4.connect("tdb://samba4.ldb");
38 var ldif = sys.file_load(mypath + "../../source/setup/provision_init.ldif");
39 assert(ldif != undefined);
43 ok = s4.add(sprintf("dn: @MAP=samba3sam
44 @MAP_URL: %s", s3url));
50 @LIST: samldb,timestamps,objectguid,rdn_name,samba3sam");
53 println("Reconnecting to LDB database");
55 ok = s4.connect("tdb://samba4.ldb");
58 msg = s4.search("(ou=Users)");
59 assert(msg.length == 1);
60 assert(msg['mappedFromDn'] == msg['dn']);
62 println("Looking up by non-mapped attribute");
63 msg = s4.search("(cn=Administrator)");
64 assert(msg[0].cn == "Administrator");
65 assert(msg.length == 1);
67 println("Looking up by mapped attribute");
68 msg = s4.search("(name=Backup Operators)");
69 assert(msg[0].name == "Backup Operators");
70 assert(msg.length == 1);
72 println("Looking up by old name of renamed attribute");
73 msg = s4.search("(displayName=Backup Operators)");
74 assert(msg.length == 0);
76 println("Looking up mapped entry containing SID");
77 msg = s4.search("(cn=Replicator)");
78 assert(msg.length == 1);
79 assert(msg[0].dn == "cn=Replicator,ou=Groups,ou=Tests,dc=vernstok,dc=nl");
80 assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
81 assert(msg[0].mappedFromDn == msg[0].dn);
83 println("Checking mapping of objectclass");
84 var oc = msg[0].objectclass;
86 assert(oc[i] == "posixGroup" || oc[i] == "group");
89 println("Adding a record that will be fallbacked");
91 dn: cn=Foo,dc=idealx,dc=org
95 showInAdvancedViewOnly: TRUE
99 println("Checking for existance of record");
100 msg = s4.search("(cn=Foo)", new Array('unixName','lastLogon','cn','showInAdvancedViewOnly'));
101 assert(msg.length == 1);
102 assert(msg[0].showInAdvancedViewOnly == "TRUE");
103 assert(msg[0].cn == "Foo");
104 assert(msg[0].unixName == "root");
105 assert(msg[0].lastLogon == 20000);
107 println("Adding record that will be mapped");
109 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
116 println("Checking for existance of record (mapped)");
117 msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn'));
118 assert(msg.length == 1);
120 println("Checking for data in destination database");
121 msg = s3.search("(cn=Niemand)");
122 assert(msg.length >= 1);
123 assert(msg[0].displayName == "Niemand");
125 println("Adding attribute...");
127 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
134 println("Checking whether changes are still there...");
135 msg = s4.search("(cn=Niemand)");
136 assert(msg.length >= 1);
137 assert(msg[0].description == "Blah");
139 println("Modifying attribute...");
141 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
148 println("Checking whether changes are still there...");
149 msg = s4.search("(cn=Niemand)");
150 assert(msg.length >= 1);
151 assert(msg[0].description == "Blie");
153 println("Deleting attribute...");
155 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
161 println("Checking whether changes are no longer there...");
162 msg = s4.search("(cn=Niemand)");
163 assert(msg.length >= 1);
164 assert(msg[0].description == undefined);
166 println("Renaming record...");
167 ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl");
169 println("Checking whether DN has changed...");
170 msg = s4.search("(cn=Niemand)");
171 assert(msg.length == 1);
172 assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl");
174 println("Deleting record...");
175 ok = s4.del("cn=Niemand,dc=vernstok,dc=nl");
178 println("Checking whether record is gone...");
179 msg = s4.search("(cn=Niemand)");
180 assert(msg.length == 0);