e9a610eea57f2229cd8d41079b2debf0523e3ea8
[ira/wip.git] / testprogs / ejs / samba3sam
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
5  */
6
7 libinclude("base.js");
8 var mypath = substr(ARGV[0], 0, -strlen("samba3sam"));
9
10 var sys = sys_init();
11 var s3url;
12 var s3 = ldb_init();
13 var ok;
14
15 if (ARGV.length == 2) {
16         s3url = ARGV[1];
17         ok = s3.connect(s3url);
18         assert(ok);
19 } else {
20         s3url = "tdb://samba3.ldb";
21         sys.unlink("samba3.ldb");
22         println("Adding samba3 LDIF...");
23         var s3 = ldb_init();
24         ok = s3.connect(s3url);
25         assert(ok);
26         var ldif = sys.file_load(mypath + "../../testdata/samba3/samba3.ldif");
27         assert(ldif != undefined);
28         ok = s3.add(ldif);
29         assert(ok);
30 }
31
32 println("Initial samba4 LDIF...");
33 var s4 = ldb_init();
34 sys.unlink("samba4.ldb");
35 ok = s4.connect("tdb://samba4.ldb");
36 assert(ok);
37
38 var ldif = sys.file_load(mypath + "../../source/setup/provision_init.ldif");
39 assert(ldif != undefined);
40 ok = s4.add(ldif);
41 assert(ok);
42
43 var ldif = sys.file_load(mypath + "../../source/setup/provision_templates.ldif");
44 var subobj = new Object();
45 subobj.BASEDN = "dc=vernstok,dc=nl";
46 ldif = substitute_var(ldif, subobj);
47 assert(ldif != undefined);
48 ok = s4.add(ldif);
49 assert(ok);
50
51
52
53 ok = s4.add(sprintf("dn: @MAP=samba3sam
54 @MAP_URL: %s", s3url));
55 assert(ok);
56
57 ok = s4.modify("
58 dn: @MODULES
59 replace: @LIST
60 @LIST: samldb,timestamps,objectguid,rdn_name,samba3sam");
61 assert(ok);
62
63 println("Reconnecting to LDB database");
64 s4 = ldb_init();
65 ok = s4.connect("tdb://samba4.ldb");
66 assert(ok);
67
68 msg = s4.search("(ou=Users)");
69 assert(msg.length == 1);
70
71 println("Looking up by non-mapped attribute");
72 msg = s4.search("(cn=Administrator)");
73 assert(msg[0].cn == "Administrator");
74 assert(msg.length == 1);
75
76 println("Looking up by mapped attribute");
77 msg = s4.search("(name=Backup Operators)");
78 assert(msg[0].name == "Backup Operators");
79 assert(msg.length == 1);
80
81 println("Looking up by old name of renamed attribute");
82 msg = s4.search("(displayName=Backup Operators)");
83 assert(msg.length == 0);
84
85 println("Looking up mapped entry containing SID");
86 msg = s4.search("(cn=Replicator)");
87 assert(msg.length == 1);
88 assert(msg[0].dn == "cn=Replicator,ou=Groups,sambaDomainName=TESTS,dc=vernstok,dc=nl");
89 assert(msg[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
90
91 println("Checking mapping of objectclass");
92 var oc = msg[0].objectclass;
93 for (var i in oc) {
94         assert(oc[i] == "posixGroup" || oc[i] == "group");
95 }
96
97 println("Adding a record that will be fallbacked");
98 ok = s4.add("
99 dn: cn=Foo,dc=idealx,dc=org
100 foo: bar
101 blah: Blie
102 cn: Foo
103 showInAdvancedViewOnly: TRUE
104 ");
105 assert(ok);
106
107 println("Checking for existance of record");
108 msg = s4.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly'));
109 assert(msg.length == 1);
110 assert(msg[0].showInAdvancedViewOnly == "TRUE");
111 assert(msg[0].foo == "bar");
112 assert(msg[0].blah == "Blie");
113
114 println("Adding record that will be mapped");
115 ok = s4.add("
116 dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl
117 objectClass: user
118 unixName: bin
119 unicodePwd: geheim
120 cn: Niemand
121 ");
122 assert(ok);
123
124 println("Checking for existance of record (mapped)");
125 msg = s4.search("(unixName=bin)", new Array('unixName','cn','dn'));
126 assert(msg.length == 1);
127 assert(msg[0].cn == "Niemand");
128
129 println("Checking for data in destination database");
130 msg = s3.search("(cn=Niemand)");
131 assert(msg.length >= 1);
132 assert(msg[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001");
133 assert(msg[0].displayName == "Niemand");
134
135 println("Adding attribute...");
136 ok = s4.modify("
137 dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl
138 changetype: modify
139 add: description
140 description: Blah
141 ");
142 assert(ok);
143
144 println("Checking whether changes are still there...");
145 msg = s4.search("(cn=Niemand)");
146 assert(msg.length >= 1);
147 assert(msg[0].cn == "Niemand");
148 assert(msg[0].description == "Blah");
149
150 println("Modifying attribute...");
151 ok = s4.modify("
152 dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl
153 changetype: modify
154 replace: description
155 description: Blie
156 ");
157 assert(ok);
158
159 println("Checking whether changes are still there...");
160 msg = s4.search("(cn=Niemand)");
161 assert(msg.length >= 1);
162 assert(msg[0].description == "Blie");
163
164 println("Deleting attribute...");
165 ok = s4.modify("
166 dn: cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl
167 changetype: modify
168 delete: description
169 ");
170 assert(ok);
171
172 println("Checking whether changes are no longer there...");
173 msg = s4.search("(cn=Niemand)");
174 assert(msg.length >= 1);
175 assert(msg[0].description == undefined);
176
177 println("Renaming record...");
178 ok = s4.rename("cn=Niemand,sambaDomainName=TESTS,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl");
179
180 println("Checking whether DN has changed...");
181 msg = s4.search("(cn=Niemand)");
182 assert(msg.length == 1);
183 assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl");
184
185 println("Deleting record...");
186 ok = s4.del("cn=Niemand,dc=vernstok,dc=nl");
187 assert(ok);
188
189 println("Checking whether record is gone...");
190 msg = s4.search("(cn=Niemand)");
191 assert(msg.length == 0);
192
193 return 0;