2 samr rpc utility functions
3 Copyright Andrew Tridgell 2005
4 released under the GNU GPL v2 or later
7 if (global["HAVE_SAMR_JS"] != undefined) {
13 return a list of names and indexes from a samArray
15 function samArray(output)
17 var list = new Array(output.num_entries);
18 if (output.sam == NULL) {
21 var i, 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;
31 connect to the sam database
33 function samrConnect(conn)
35 conn.samr = samr_init();
36 conn.sec = security_init();
38 io.input.system_name = NULL;
39 io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
40 var status = conn.samr.samr_Connect2(conn, io);
41 check_status_ok(status);
42 return io.output.connect_handle;
48 function samrClose(conn, handle)
51 io.input.handle = handle;
52 var status = conn.samr.samr_Close(conn, io);
53 check_status_ok(status);
57 get the sid for a domain
59 function samrLookupDomain(conn, handle, domain)
62 io.input.connect_handle = handle;
63 io.input.domain_name = domain;
64 var status = conn.samr.samr_LookupDomain(conn, io);
65 check_status_ok(status);
72 function samrOpenDomain(conn, handle, sid)
75 io.input.connect_handle = handle;
76 io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
78 var status = conn.samr.samr_OpenDomain(conn, io);
79 check_status_ok(status);
80 return io.output.domain_handle;
86 function samrOpenUser(conn, handle, rid)
89 io.input.domain_handle = handle;
90 io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
92 var status = conn.samr.samr_OpenUser(conn, io);
93 check_status_ok(status);
94 return io.output.user_handle;
98 return a list of all users
100 function samrEnumDomainUsers(conn, dom_handle)
103 io.input.domain_handle = dom_handle;
104 io.input.resume_handle = 0;
105 io.input.acct_flags = 0;
106 io.input.max_size = -1;
107 var status = conn.samr.samr_EnumDomainUsers(conn, io);
108 check_status_ok(status);
109 return samArray(io.output);
113 return a list of all groups
115 function samrEnumDomainGroups(conn, dom_handle)
118 io.input.domain_handle = dom_handle;
119 io.input.resume_handle = 0;
120 io.input.acct_flags = 0;
121 io.input.max_size = -1;
122 var status = conn.samr.samr_EnumDomainGroups(conn, io);
123 check_status_ok(status);
124 return samArray(io.output);
128 return a list of domains
130 function samrEnumDomains(conn, handle)
133 io.input.connect_handle = handle;
134 io.input.resume_handle = 0;
135 io.input.buf_size = -1;
136 var status = conn.samr.samr_EnumDomains(conn, io);
137 check_status_ok(status);
138 return samArray(io.output);
142 return information about a user
144 function samrQueryUserInfo(conn, user_handle, level)
146 var r, io = irpcObj();
147 io.input.user_handle = user_handle;
148 io.input.level = level;
149 var status = conn.samr.samr_QueryUserInfo(conn, io);
150 check_status_ok(status);
151 return io.output.info.info3;
156 fill a user array with user information from samrQueryUserInfo
158 function samrFillUserInfo(conn, dom_handle, users, level)
161 for (i=0;i<users.length;i++) {
162 var r, user_handle, info;
163 user_handle = samrOpenUser(conn, dom_handle, users[i].idx);
164 info = samrQueryUserInfo(conn, user_handle, level);
165 info.name = users[i].name;
166 info.idx = users[i].idx;
168 samrClose(conn, user_handle);