/* samr rpc utility functions Copyright Andrew Tridgell 2005 released under the GNU GPL v2 or later */ if (global["HAVE_SAMR_JS"] != undefined) { return; } HAVE_SAMR_JS=1 /* return a list of names and indexes from a samArray */ function samArray(output) { var list = new Array(output.num_entries); if (output.sam == NULL) { return list; } var i, entries = output.sam.entries; for (i=0;i<output.num_entries;i++) { list[i] = new Object(); list[i].name = entries[i].name; list[i].idx = entries[i].idx; } return list; } /* connect to the sam database */ function samrConnect(conn) { security_init(conn); var io = irpcObj(); io.input.system_name = NULL; io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED; var status = conn.samr_Connect2(io); check_status_ok(status); return io.output.connect_handle; } /* close a handle */ function samrClose(conn, handle) { var io = irpcObj(); io.input.handle = handle; var status = conn.samr_Close(io); check_status_ok(status); } /* get the sid for a domain */ function samrLookupDomain(conn, handle, domain) { var io = irpcObj(); io.input.connect_handle = handle; io.input.domain_name = domain; var status = conn.samr_LookupDomain(io); check_status_ok(status); return io.output.sid; } /* open a domain by sid */ function samrOpenDomain(conn, handle, sid) { var io = irpcObj(); io.input.connect_handle = handle; io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED; io.input.sid = sid; var status = conn.samr_OpenDomain(io); check_status_ok(status); return io.output.domain_handle; } /* open a user by rid */ function samrOpenUser(conn, handle, rid) { var io = irpcObj(); io.input.domain_handle = handle; io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED; io.input.rid = rid; var status = conn.samr_OpenUser(io); check_status_ok(status); return io.output.user_handle; } /* return a list of all users */ function samrEnumDomainUsers(conn, dom_handle) { var io = irpcObj(); io.input.domain_handle = dom_handle; io.input.resume_handle = 0; io.input.acct_flags = 0; io.input.max_size = -1; var status = conn.samr_EnumDomainUsers(io); check_status_ok(status); return samArray(io.output); } /* return a list of all groups */ function samrEnumDomainGroups(conn, dom_handle) { var io = irpcObj(); io.input.domain_handle = dom_handle; io.input.resume_handle = 0; io.input.acct_flags = 0; io.input.max_size = -1; var status = conn.samr_EnumDomainGroups(io); check_status_ok(status); return samArray(io.output); } /* return a list of domains */ function samrEnumDomains(conn, handle) { var io = irpcObj(); io.input.connect_handle = handle; io.input.resume_handle = 0; io.input.buf_size = -1; var status = conn.samr_EnumDomains(io); check_status_ok(status); return samArray(io.output); } /* return information about a user */ function samrQueryUserInfo(conn, user_handle, level) { var r, io = irpcObj(); io.input.user_handle = user_handle; io.input.level = level; var status = conn.samr_QueryUserInfo(io); check_status_ok(status); return io.output.info.info3; } /* fill a user array with user information from samrQueryUserInfo */ function samrFillUserInfo(conn, dom_handle, users, level) { var i; for (i=0;i<users.length;i++) { var r, user_handle, info; user_handle = samrOpenUser(conn, dom_handle, users[i].idx); info = samrQueryUserInfo(conn, user_handle, level); info.name = users[i].name; info.idx = users[i].idx; users[i] = info; samrClose(conn, user_handle); } }