summaryrefslogtreecommitdiff
path: root/source4/scripting
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting')
-rw-r--r--source4/scripting/libjs/base.js53
-rw-r--r--source4/scripting/libjs/samr.js170
2 files changed, 223 insertions, 0 deletions
diff --git a/source4/scripting/libjs/base.js b/source4/scripting/libjs/base.js
new file mode 100644
index 0000000000..504cd82259
--- /dev/null
+++ b/source4/scripting/libjs/base.js
@@ -0,0 +1,53 @@
+/*
+ base js library functions
+ Copyright Andrew Tridgell 2005
+ released under the GNU GPL v2 or later
+*/
+
+if (global["HAVE_BASE_JS"] != undefined) {
+ return;
+}
+HAVE_BASE_JS=1
+
+/*
+ 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);
+}
+
+/*
+ check that two arrays are equal
+*/
+function check_array_equal(a1, a2)
+{
+ assert(a1.length == a2.length);
+ for (i=0; i<a1.length; i++) {
+ assert(a1[i] == a2[i]);
+ }
+}
+
+/*
+ check that an array is all zeros
+*/
+function check_array_zero(a)
+{
+ for (i=0; i<a.length; i++) {
+ assert(a[i] == 0);
+ }
+}
+
diff --git a/source4/scripting/libjs/samr.js b/source4/scripting/libjs/samr.js
new file mode 100644
index 0000000000..a1f79b541a
--- /dev/null
+++ b/source4/scripting/libjs/samr.js
@@ -0,0 +1,170 @@
+/*
+ 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 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)
+{
+ var io = irpcObj();
+ 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;
+}
+
+/*
+ close a handle
+*/
+function samrClose(conn, handle)
+{
+ var io = irpcObj();
+ io.input.handle = handle;
+ status = dcerpc_samr_Close(conn, 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;
+ status = dcerpc_samr_LookupDomain(conn, 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 = SEC_FLAG_MAXIMUM_ALLOWED;
+ io.input.sid = sid;
+ status = dcerpc_samr_OpenDomain(conn, 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 = SEC_FLAG_MAXIMUM_ALLOWED;
+ io.input.rid = rid;
+ status = dcerpc_samr_OpenUser(conn, 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;
+ status = dcerpc_samr_EnumDomainUsers(conn, 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;
+ status = dcerpc_samr_EnumDomainGroups(conn, 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;
+ status = dcerpc_samr_EnumDomains(conn, 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;
+ status = dcerpc_samr_QueryUserInfo(conn, 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);
+ }
+}
+
+