mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
bab1eb1e34
(This used to be commit 8eee26bb85
)
171 lines
3.5 KiB
JavaScript
171 lines
3.5 KiB
JavaScript
/*
|
|
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);
|
|
}
|
|
}
|
|
|