r8298: - started building a library of js routines in scripting/libjs/
[samba.git] / source4 / scripting / libjs / samr.js
1 /*
2         samr rpc utility functions 
3         Copyright Andrew Tridgell 2005
4         released under the GNU GPL v2 or later
5 */      
6
7 if (global["HAVE_SAMR_JS"] != undefined) {
8    return;
9 }
10 HAVE_SAMR_JS=1
11
12 /*
13   return a list of names and indexes from a samArray
14 */
15 function samArray(output)
16 {
17         var list = new Array(output.num_entries);
18         if (output.sam == NULL) {
19                 return list;
20         }
21         var entries = output.sam.entries;
22         for (i=0;i<output.num_entries;i++) {
23                 list[i] = new Object();
24                 list[i].name = entries[i].name;
25                 list[i].idx  = entries[i].idx;
26         }
27         return list;
28 }
29
30 /*
31         connect to the sam database
32 */
33 function samrConnect(conn)
34 {
35         var io = irpcObj();
36         io.input.system_name = NULL;
37         io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
38         status = dcerpc_samr_Connect(conn, io);
39         check_status_ok(status);
40         return io.output.connect_handle;
41 }
42
43 /*
44         close a handle
45 */
46 function samrClose(conn, handle)
47 {
48         var io = irpcObj();
49         io.input.handle = handle;
50         status = dcerpc_samr_Close(conn, io);
51         check_status_ok(status);
52 }
53
54 /*
55    get the sid for a domain
56 */
57 function samrLookupDomain(conn, handle, domain)
58 {
59         var io = irpcObj();
60         io.input.connect_handle = handle;
61         io.input.domain_name = domain;
62         status = dcerpc_samr_LookupDomain(conn, io);
63         check_status_ok(status);
64         return io.output.sid;
65 }
66
67 /*
68   open a domain by sid
69 */
70 function samrOpenDomain(conn, handle, sid)
71 {
72         var io = irpcObj();
73         io.input.connect_handle = handle;
74         io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
75         io.input.sid = sid;
76         status = dcerpc_samr_OpenDomain(conn, io);
77         check_status_ok(status);
78         return io.output.domain_handle;
79 }
80
81 /*
82   open a user by rid
83 */
84 function samrOpenUser(conn, handle, rid)
85 {
86         var io = irpcObj();
87         io.input.domain_handle = handle;
88         io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
89         io.input.rid = rid;
90         status = dcerpc_samr_OpenUser(conn, io);
91         check_status_ok(status);
92         return io.output.user_handle;
93 }
94
95 /*
96   return a list of all users
97 */
98 function samrEnumDomainUsers(conn, dom_handle)
99 {
100         var io = irpcObj();
101         io.input.domain_handle = dom_handle;
102         io.input.resume_handle = 0;
103         io.input.acct_flags = 0;
104         io.input.max_size = -1;
105         status = dcerpc_samr_EnumDomainUsers(conn, io);
106         check_status_ok(status);
107         return samArray(io.output);
108 }
109
110 /*
111   return a list of all groups
112 */
113 function samrEnumDomainGroups(conn, dom_handle)
114 {
115         var io = irpcObj();
116         io.input.domain_handle = dom_handle;
117         io.input.resume_handle = 0;
118         io.input.acct_flags = 0;
119         io.input.max_size = -1;
120         status = dcerpc_samr_EnumDomainGroups(conn, io);
121         check_status_ok(status);
122         return samArray(io.output);
123 }
124
125 /*
126   return a list of domains
127 */
128 function samrEnumDomains(conn, handle)
129 {
130         var io = irpcObj();
131         io.input.connect_handle = handle;
132         io.input.resume_handle = 0;
133         io.input.buf_size = -1;
134         status = dcerpc_samr_EnumDomains(conn, io);
135         check_status_ok(status);
136         return samArray(io.output);
137 }
138
139 /*
140   return information about a user
141 */
142 function samrQueryUserInfo(conn, user_handle, level)
143 {
144         var r, io = irpcObj();
145         io.input.user_handle = user_handle;
146         io.input.level = level;
147         status = dcerpc_samr_QueryUserInfo(conn, io);
148         check_status_ok(status);
149         return io.output.info.info3;
150 }
151
152
153 /*
154   fill a user array with user information from samrQueryUserInfo
155 */
156 function samrFillUserInfo(conn, dom_handle, users, level)
157 {
158         var i;
159         for (i=0;i<users.length;i++) {
160                 var r, user_handle, info;
161                 user_handle = samrOpenUser(conn, dom_handle, users[i].idx);
162                 info = samrQueryUserInfo(conn, user_handle, level);
163                 info.name = users[i].name;
164                 info.idx  = users[i].idx;
165                 users[i] = info;
166                 samrClose(conn, user_handle);
167         }
168 }
169
170