14ddd011e98692882fd45126f5e9f635146b28a5
[jra/samba/.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 ok = s4.add(sprintf("dn: @MAP=samba3sam
44 @MAP_URL: %s", s3url));
45 assert(ok);
46
47 ok = s4.modify("
48 dn: @MODULES
49 replace: @LIST
50 @LIST: samldb,timestamps,objectguid,rdn_name,samba3sam");
51 assert(ok);
52
53 println("Reconnecting to LDB database");
54 s4 = ldb_init();
55 ok = s4.connect("tdb://samba4.ldb");
56 assert(ok);
57
58 msg = s4.search("(ou=Users)");
59 assert(msg.length == 1);
60 assert(msg['mappedFromDn'] == msg['dn']);
61
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);
66
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);
71
72 println("Looking up by old name of renamed attribute");
73 msg = s4.search("(displayName=Backup Operators)");
74 assert(msg.length == 0);
75
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);
82
83 println("Checking mapping of objectclass");
84 var oc = msg[0].objectclass;
85 for (var i in oc) {
86         assert(oc[i] == "posixGroup" || oc[i] == "group");
87 }
88
89 println("Adding a record that will be fallbacked");
90 ok = s4.add("
91 dn: cn=Foo,dc=idealx,dc=org
92 unixName: root
93 lastLogon: 20000
94 cn: Foo
95 showInAdvancedViewOnly: TRUE
96 ");
97 assert(ok);
98
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);
106
107 println("Adding record that will be mapped");
108 ok = s4.add("
109 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
110 objectClass: user
111 unixName: blah
112 cn: Niemand
113 ");
114 assert(ok);
115
116 println("Checking for existance of record (mapped)");
117 msg = s4.search("(unixName=blah)", new Array('unixName','cn','dn'));
118 assert(msg.length == 1);
119
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");
124
125 println("Adding attribute...");
126 ok = s4.modify("
127 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
128 changetype: modify
129 add: description
130 description: Blah
131 ");
132 assert(ok);
133
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");
138
139 println("Modifying attribute...");
140 ok = s4.modify("
141 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
142 changetype: modify
143 replace: description
144 description: Blie
145 ");
146 assert(ok);
147
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");
152
153 println("Deleting attribute...");
154 ok = s4.modify("
155 dn: cn=Niemand,ou=Tests,dc=vernstok,dc=nl
156 changetype: modify
157 delete: description
158 ");
159 assert(ok);
160
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);
165
166 println("Renaming record...");
167 ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl");
168
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");
173
174 println("Deleting record...");
175 ok = s4.del("cn=Niemand,dc=vernstok,dc=nl");
176 assert(ok);
177
178 println("Checking whether record is gone...");
179 msg = s4.search("(cn=Niemand)");
180 assert(msg.length == 0);
181