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 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)
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;
46 function samrClose(conn, handle)
49 io.input.handle = handle;
50 status = dcerpc_samr_Close(conn, io);
51 check_status_ok(status);
55 get the sid for a domain
57 function samrLookupDomain(conn, handle, domain)
60 io.input.connect_handle = handle;
61 io.input.domain_name = domain;
62 status = dcerpc_samr_LookupDomain(conn, io);
63 check_status_ok(status);
70 function samrOpenDomain(conn, handle, sid)
73 io.input.connect_handle = handle;
74 io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
76 status = dcerpc_samr_OpenDomain(conn, io);
77 check_status_ok(status);
78 return io.output.domain_handle;
84 function samrOpenUser(conn, handle, rid)
87 io.input.domain_handle = handle;
88 io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
90 status = dcerpc_samr_OpenUser(conn, io);
91 check_status_ok(status);
92 return io.output.user_handle;
96 return a list of all users
98 function samrEnumDomainUsers(conn, dom_handle)
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);
111 return a list of all groups
113 function samrEnumDomainGroups(conn, dom_handle)
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);
126 return a list of domains
128 function samrEnumDomains(conn, handle)
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);
140 return information about a user
142 function samrQueryUserInfo(conn, user_handle, level)
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;
154 fill a user array with user information from samrQueryUserInfo
156 function samrFillUserInfo(conn, dom_handle, users, level)
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;
166 samrClose(conn, user_handle);