1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00
samba-mirror/source4/scripting/libjs/samr.js
Andrew Tridgell bab1eb1e34 r8822: fixed number of arguments in samr lib
(This used to be commit 8eee26bb85)
2007-10-10 13:30:08 -05:00

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);
}
}