/* test samr calls from ejs */ /* helper function to setup a rpc io object, ready for input */ function irpcObj() { var o = new Object(); o.input = new Object(); return o; } /* check that a status result is OK */ function check_status_ok(status) { if (status.is_ok != true) { printVars(status); } assert(status.is_ok == true); } /* test the samr_Connect interface */ function test_Connect(conn) { var io = irpcObj(); print("Testing samr_Connect\n"); io.input.system_name = NULL; io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; status = dcerpc_samr_Connect(conn, io); check_status_ok(status); return io.output.connect_handle; } /* test the samr_Close interface */ function test_Close(conn, handle) { var io = irpcObj(); io.input.handle = handle; status = dcerpc_samr_Close(conn, io); check_status_ok(status); } /* test the samr_LookupDomain interface */ function test_LookupDomain(conn, handle, domain) { var io = irpcObj(); print("Testing samr_LookupDomain\n"); io.input.connect_handle = handle; io.input.domain_name = domain; status = dcerpc_samr_LookupDomain(conn, io); check_status_ok(status); return io.output.sid; } /* test the samr_OpenDomain interface */ function test_OpenDomain(conn, handle, sid) { var io = irpcObj(); print("Testing samr_OpenDomain\n"); io.input.connect_handle = handle; io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; io.input.sid = sid; status = dcerpc_samr_OpenDomain(conn, io); check_status_ok(status); return io.output.domain_handle; } /* test the samr_EnumDomainUsers interface */ function test_EnumDomainUsers(conn, dom_handle) { var i, io = irpcObj(); print("Testing samr_EnumDomainUsers\n"); io.input.domain_handle = dom_handle; io.input.resume_handle = 0; io.input.acct_flags = 0; io.input.max_size = -1; status = dcerpc_samr_EnumDomainUsers(conn, io); check_status_ok(status); print("Found " + io.output.num_entries + " users\n"); if (io.output.sam == NULL) { return; } var entries = io.output.sam.entries; for (i=0;i\n"); exit(0); } var binding = ARGV[0]; var conn = new Object(); print("Connecting to " + binding + "\n"); status = rpc_connect(conn, binding, "samr"); if (status.is_ok != true) { print("Failed to connect to " + binding + " - " + status.errstr + "\n"); return -1; } handle = test_Connect(conn); test_EnumDomains(conn, handle); test_Close(conn, handle); print("All OK\n"); return 0;