r9754: Upgrading with the command line utility now works, at least partially (-:
[kai/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 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;
26         }
27         return list;
28 }
29
30 /*
31         connect to the sam database
32 */
33 function samrConnect(conn)
34 {
35         security_init(conn);
36         var io = irpcObj();
37         io.input.system_name = NULL;
38         io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED;
39         var status = conn.samr_Connect2(io);
40         check_status_ok(status);
41         return io.output.connect_handle;
42 }
43
44 /*
45         close a handle
46 */
47 function samrClose(conn, handle)
48 {
49         var io = irpcObj();
50         io.input.handle = handle;
51         var status = conn.samr_Close(io);
52         check_status_ok(status);
53 }
54
55 /*
56    get the sid for a domain
57 */
58 function samrLookupDomain(conn, handle, domain)
59 {
60         var io = irpcObj();
61         io.input.connect_handle = handle;
62         io.input.domain_name = domain;
63         var status = conn.samr_LookupDomain(io);
64         check_status_ok(status);
65         return io.output.sid;
66 }
67
68 /*
69   open a domain by sid
70 */
71 function samrOpenDomain(conn, handle, sid)
72 {
73         var io = irpcObj();
74         io.input.connect_handle = handle;
75         io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED;
76         io.input.sid = sid;
77         var status = conn.samr_OpenDomain(io);
78         check_status_ok(status);
79         return io.output.domain_handle;
80 }
81
82 /*
83   open a user by rid
84 */
85 function samrOpenUser(conn, handle, rid)
86 {
87         var io = irpcObj();
88         io.input.domain_handle = handle;
89         io.input.access_mask = conn.SEC_FLAG_MAXIMUM_ALLOWED;
90         io.input.rid = rid;
91         var status = conn.samr_OpenUser(io);
92         check_status_ok(status);
93         return io.output.user_handle;
94 }
95
96 /*
97   return a list of all users
98 */
99 function samrEnumDomainUsers(conn, dom_handle)
100 {
101         var io = irpcObj();
102         io.input.domain_handle = dom_handle;
103         io.input.resume_handle = 0;
104         io.input.acct_flags = 0;
105         io.input.max_size = -1;
106         var status = conn.samr_EnumDomainUsers(io);
107         check_status_ok(status);
108         return samArray(io.output);
109 }
110
111 /*
112   return a list of all groups
113 */
114 function samrEnumDomainGroups(conn, dom_handle)
115 {
116         var io = irpcObj();
117         io.input.domain_handle = dom_handle;
118         io.input.resume_handle = 0;
119         io.input.acct_flags = 0;
120         io.input.max_size = -1;
121         var status = conn.samr_EnumDomainGroups(io);
122         check_status_ok(status);
123         return samArray(io.output);
124 }
125
126 /*
127   return a list of domains
128 */
129 function samrEnumDomains(conn, handle)
130 {
131         var io = irpcObj();
132         io.input.connect_handle = handle;
133         io.input.resume_handle = 0;
134         io.input.buf_size = -1;
135         var status = conn.samr_EnumDomains(io);
136         check_status_ok(status);
137         return samArray(io.output);
138 }
139
140 /*
141   return information about a user
142 */
143 function samrQueryUserInfo(conn, user_handle, level)
144 {
145         var r, io = irpcObj();
146         io.input.user_handle = user_handle;
147         io.input.level = level;
148         var status = conn.samr_QueryUserInfo(io);
149         check_status_ok(status);
150         return io.output.info.info3;
151 }
152
153
154 /*
155   fill a user array with user information from samrQueryUserInfo
156 */
157 function samrFillUserInfo(conn, dom_handle, users, level)
158 {
159         var i;
160         for (i=0;i<users.length;i++) {
161                 var r, user_handle, info;
162                 user_handle = samrOpenUser(conn, dom_handle, users[i].idx);
163                 info = samrQueryUserInfo(conn, user_handle, level);
164                 info.name = users[i].name;
165                 info.idx  = users[i].idx;
166                 users[i] = info;
167                 samrClose(conn, user_handle);
168         }
169 }
170