⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samba3sam.js

📁 samba最新软件
💻 JS
📖 第 1 页 / 共 3 页
字号:
#!/usr/bin/env smbscript/*  (C) Jelmer Vernooij <jelmer@samba.org> 2005  (C) Martin Kuehl <mkhl@samba.org> 2006  Published under the GNU GPL  Sponsored by Google Summer of Code */var sys;var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA");if (options == undefined) {	println("Failed to parse options");	return -1;}libinclude("base.js");if (options.ARGV.length != 2) {	println("Usage: samba3sam.js <TESTDIR> <DATADIR>");	return -1;}var prefix = options.ARGV[0];var datadir = options.ARGV[1];function setup_data(obj, ldif){	assert(ldif != undefined);	ldif = substitute_var(ldif, obj);	assert(ldif != undefined);	var ok = obj.db.add(ldif);	assert(ok.error == 0);}function setup_modules(ldb, s3, s4, ldif){	assert(ldif != undefined);	ldif = substitute_var(ldif, s4);	assert(ldif != undefined);	var ok = ldb.add(ldif);	assert(ok.error == 0);	var ldif = "dn: @MAP=samba3sam@FROM: " + s4.BASEDN + "@TO: sambaDomainName=TESTS," + s3.BASEDN + "dn: @MODULES@LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partitiondn: @PARTITIONpartition: " + s4.BASEDN + ":" + s4.url + "partition: " + s3.BASEDN + ":" + s3.url + "replicateEntries: @SUBCLASSESreplicateEntries: @ATTRIBUTESreplicateEntries: @INDEXLIST";	var ok = ldb.add(ldif);	assert(ok.error == 0);}function test_s3sam_search(ldb){	println("Looking up by non-mapped attribute");	var msg = ldb.search("(cn=Administrator)");	assert(msg.error == 0);	assert(msg.msgs.length == 1);	assert(msg.msgs[0].cn == "Administrator");	println("Looking up by mapped attribute");	var msg = ldb.search("(name=Backup Operators)");	assert(msg.error == 0);	assert(msg.msgs.length == 1);	assert(msg.msgs[0].name == "Backup Operators");	println("Looking up by old name of renamed attribute");	var msg = ldb.search("(displayName=Backup Operators)");	assert(msg.msgs.length == 0);	println("Looking up mapped entry containing SID");	var msg = ldb.search("(cn=Replicator)");	assert(msg.error == 0);	assert(msg.msgs.length == 1);	println(msg.msgs[0].dn);	assert(msg.msgs[0].dn == "cn=Replicator,ou=Groups,dc=vernstok,dc=nl");	assert(msg.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");	println("Checking mapping of objectClass");	var oc = msg.msgs[0].objectClass;	assert(oc != undefined);	for (var i in oc) {		assert(oc[i] == "posixGroup" || oc[i] == "group");	}	println("Looking up by objectClass");	var msg = ldb.search("(|(objectClass=user)(cn=Administrator))");	assert(msg.error == 0);	assert(msg.msgs.length == 2);	for (var i = 0; i < msg.msgs.length; i++) {		assert((msg.msgs[i].dn == "unixName=Administrator,ou=Users,dc=vernstok,dc=nl") ||		       (msg.msgs[i].dn == "unixName=nobody,ou=Users,dc=vernstok,dc=nl"));	}}function test_s3sam_modify(ldb, s3){	var msg, ok;	println("Adding a record that will be fallbacked");	ok = ldb.add("dn: cn=Foofoo: barblah: Bliecn: FooshowInAdvancedViewOnly: TRUE");	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	println("Checking for existence of record (local)");	/* TODO: This record must be searched in the local database, which is currently only supported for base searches	 * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly'));	 * TODO: Actually, this version should work as well but doesn't...	 * 	 */	var attrs =  new Array('foo','blah','cn','showInAdvancedViewOnly');	msg = ldb.search("(cn=Foo)", "cn=Foo", ldb.LDB_SCOPE_BASE, attrs);	assert(msg.error == 0);	assert(msg.msgs.length == 1);	assert(msg.msgs[0].showInAdvancedViewOnly == "TRUE");	assert(msg.msgs[0].foo == "bar");	assert(msg.msgs[0].blah == "Blie");	println("Adding record that will be mapped");	ok = ldb.add("dn: cn=Niemand,cn=Users,dc=vernstok,dc=nlobjectClass: userunixName: binsambaUnicodePwd: geheimcn: Niemand");	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	assert(ok.error == 0);	println("Checking for existence of record (remote)");	msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'sambaUnicodePwd'));	assert(msg.error == 0);	assert(msg.msgs.length == 1);	assert(msg.msgs[0].cn == "Niemand"); 	assert(msg.msgs[0].sambaUnicodePwd == "geheim");	println("Checking for existence of record (local && remote)");	msg = ldb.search("(&(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd'));	assert(msg.error == 0);	assert(msg.msgs.length == 1);		// TODO: should check with more records	assert(msg.msgs[0].cn == "Niemand");	assert(msg.msgs[0].unixName == "bin");	assert(msg.msgs[0].sambaUnicodePwd == "geheim");	println("Checking for existence of record (local || remote)");	msg = ldb.search("(|(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd'));	println("got " + msg.msgs.length + " replies");	assert(msg.error == 0);	assert(msg.msgs.length == 1);		// TODO: should check with more records	assert(msg.msgs[0].cn == "Niemand");	assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].sambaUnicodePwd == "geheim");	println("Checking for data in destination database");	msg = s3.db.search("(cn=Niemand)");	assert(msg.error == 0);	assert(msg.msgs.length >= 1);	assert(msg.msgs[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001");	assert(msg.msgs[0].displayName == "Niemand");	println("Adding attribute...");	ok = ldb.modify("dn: cn=Niemand,cn=Users,dc=vernstok,dc=nlchangetype: modifyadd: descriptiondescription: Blah");	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	assert(ok.error == 0);	println("Checking whether changes are still there...");	msg = ldb.search("(cn=Niemand)");	assert(msg.error == 0);	assert(msg.msgs.length >= 1);	assert(msg.msgs[0].cn == "Niemand");	assert(msg.msgs[0].description == "Blah");	println("Modifying attribute...");	ok = ldb.modify("dn: cn=Niemand,cn=Users,dc=vernstok,dc=nlchangetype: modifyreplace: descriptiondescription: Blie");		if (ok.error != 0) {			println(ok.errstr);			assert(ok.error == 0);		}	assert(ok.error == 0);	println("Checking whether changes are still there...");	msg = ldb.search("(cn=Niemand)");	assert(msg.error == 0);	assert(msg.msgs.length >= 1);	assert(msg.msgs[0].description == "Blie");	println("Deleting attribute...");	ok = ldb.modify("dn: cn=Niemand,cn=Users,dc=vernstok,dc=nlchangetype: modifydelete: description");	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	assert(ok.error == 0);	println("Checking whether changes are no longer there...");	msg = ldb.search("(cn=Niemand)");	assert(msg.error == 0);	assert(msg.msgs.length >= 1);	assert(msg.msgs[0].description == undefined);	println("Renaming record...");	ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl");	assert(ok.error == 0);	println("Checking whether DN has changed...");	msg = ldb.search("(cn=Niemand2)");	assert(msg.error == 0);	assert(msg.msgs.length == 1);	assert(msg.msgs[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl");	println("Deleting record...");	ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl");	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	println("Checking whether record is gone...");	msg = ldb.search("(cn=Niemand2)");	assert(msg.error == 0);	assert(msg.msgs.length == 0);}function test_map_search(ldb, s3, s4){	println("Running search tests on mapped data");	var res;	var dn;	var attrs;	var ldif = "dn: " + "sambaDomainName=TESTS," + s3.BASEDN + "objectclass: sambaDomainobjectclass: topsambaSID: S-1-5-21-4231626423-2410014848-2360679739sambaNextRid: 2000sambaDomainName: TESTS"	ldif = substitute_var(ldif, s3);	assert(ldif != undefined);	var ok = s3.db.add(ldif);	assert(ok.error == 0);	printf("Add a set of split records");	var ldif = "dn: " + s4.dn("cn=X") + "objectClass: usercn: XcodePage: xrevision: xdnsHostName: xnextRid: ylastLogon: xdescription: xobjectSid: S-1-5-21-4231626423-2410014848-2360679739-552primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512dn: " + s4.dn("cn=Y") + "objectClass: topcn: YcodePage: xrevision: xdnsHostName: ynextRid: ylastLogon: ydescription: xdn: " + s4.dn("cn=Z") + "objectClass: topcn: ZcodePage: xrevision: ydnsHostName: znextRid: ylastLogon: zdescription: y";	ldif = substitute_var(ldif, s4);	assert(ldif != undefined);	var ok = ldb.add(ldif);	if (ok.error != 0) {		println(ok.errstr);		assert(ok.error == 0);	}	println("Add a set of remote records");	var ldif = "dn: " + s3.dn("cn=A") + "objectClass: posixAccountcn: AsambaNextRid: xsambaBadPasswordCount: xsambaLogonTime: xdescription: xsambaSID: S-1-5-21-4231626423-2410014848-2360679739-552sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512dn: " + s3.dn("cn=B") + "objectClass: topcn:BsambaNextRid: xsambaBadPasswordCount: xsambaLogonTime: ydescription: xdn: " + s3.dn("cn=C") + "objectClass: topcn: CsambaNextRid: xsambaBadPasswordCount: ysambaLogonTime: zdescription: y";	ldif = substitute_var(ldif, s3);	assert(ldif != undefined);	var ok = s3.db.add(ldif);	assert(ok.error == 0);	println("Testing search by DN");	/* Search remote record by local DN */	dn = s4.dn("cn=A");	attrs = new Array("dnsHostName", "lastLogon");	res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);	assert(res.error == 0);	assert(res.msgs.length == 1);	assert(res.msgs[0].dn == dn);	assert(res.msgs[0].dnsHostName == undefined);	assert(res.msgs[0].lastLogon == "x");	/* Search remote record by remote DN */	dn = s3.dn("cn=A");	attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime");	res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);	assert(res.error == 0);	assert(res.msgs.length == 1);	assert(res.msgs[0].dn == dn);	assert(res.msgs[0].dnsHostName == undefined);	assert(res.msgs[0].lastLogon == undefined);	assert(res.msgs[0].sambaLogonTime == "x");	/* Search split record by local DN */	dn = s4.dn("cn=X");	attrs = new Array("dnsHostName", "lastLogon");	res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);	assert(res.error == 0);	assert(res.msgs.length == 1);	assert(res.msgs[0].dn == dn);	assert(res.msgs[0].dnsHostName == "x");	assert(res.msgs[0].lastLogon == "x");	/* Search split record by remote DN */	dn = s3.dn("cn=X");	attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime");	res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);	assert(res.error == 0);	assert(res.msgs.length == 1);	assert(res.msgs[0].dn == dn);	assert(res.msgs[0].dnsHostName == undefined);	assert(res.msgs[0].lastLogon == undefined);	assert(res.msgs[0].sambaLogonTime == "x");	println("Testing search by attribute");	/* Search by ignored attribute */	attrs = new Array("dnsHostName", "lastLogon");	res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs);	assert(res.error == 0);	assert(res.msgs.length == 2);	assert(res.msgs[0].dn == s4.dn("cn=Y"));	assert(res.msgs[0].dnsHostName == "y");	assert(res.msgs[0].lastLogon == "y");	assert(res.msgs[1].dn == s4.dn("cn=X"));	assert(res.msgs[1].dnsHostName == "x");	assert(res.msgs[1].lastLogon == "x");	/* Search by kept attribute */	attrs = new Array("dnsHostName", "lastLogon");	res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs);	assert(res.error == 0);	assert(res.msgs.length == 2);	assert(res.msgs[0].dn == s4.dn("cn=Z"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -