abf505e919ca7e35b91fb06ae3456f8710b9e7eb
[gd/samba-autobuild/.git] / source4 / scripting / swig / torture / samr.py
1 #!/usr/bin/python
2
3 import dcerpc
4 from optparse import OptionParser
5
6 def test_Connect(handle):
7
8     print 'testing samr_Connect'
9
10     r = {}
11     r['system_name'] = 0;
12     r['access_mask'] = 0x02000000
13
14     result = dcerpc.samr_Connect(pipe, r)
15     dcerpc.samr_Close(pipe, result)
16
17     print 'testing samr_Connect2'
18
19     r = {}
20     r['system_name'] = None
21     r['access_mask'] = 0x02000000
22
23     result = dcerpc.samr_Connect2(pipe, r)
24     dcerpc.samr_Close(pipe, result)
25     
26     print 'testing samr_Connect3'
27
28     r = {}
29     r['system_name'] = None
30     r['unknown'] = 0
31     r['access_mask'] = 0x02000000
32
33     result = dcerpc.samr_Connect3(pipe, r)
34     dcerpc.samr_Close(pipe, result)
35
36     print 'testing samr_Connect4'
37
38     r = {}
39     r['system_name'] = None
40     r['unknown'] = 0
41     r['access_mask'] = 0x02000000
42
43     result = dcerpc.samr_Connect4(pipe, r)
44     dcerpc.samr_Close(pipe, result)
45
46     print 'testing samr_Connect5'
47
48     r = {}
49     r['system_name'] = None
50     r['access_mask'] = 0x02000000
51     r['level'] = 1
52     r['info'] = {}
53     r['info']['info1'] = {}
54     r['info']['info1']['unknown1'] = 0
55     r['info']['info1']['unknown2'] = 0
56
57     result = dcerpc.samr_Connect5(pipe, r)
58
59     return result['handle']
60     
61 def test_QuerySecurity(pipe, handle):
62
63     print 'testing samr_QuerySecurity'
64
65     r = {}
66     r['handle'] = handle
67     r['sec_info'] = 7
68
69     result = dcerpc.samr_QuerySecurity(pipe, r)
70
71     s = {}
72     s['handle'] = handle
73     s['sec_info'] = 7
74     s['sdbuf'] = result['sdbuf']
75
76     result = dcerpc.samr_SetSecurity(pipe, s)
77
78     result = dcerpc.samr_QuerySecurity(pipe, r)
79
80 def test_GetDomPwInfo(pipe, domain):
81
82     print 'testing samr_GetDomPwInfo'
83
84     r = {}
85     r['handle'] = handle
86     r['name'] = {}
87     r['name']['name_len'] = 0
88     r['name']['name_size'] = 0
89     r['name']['name'] = domain
90
91     result = dcerpc.samr_GetDomPwInfo(pipe, r)
92
93     r['name']['name'] = '\\\\%s' % domain
94
95     result = dcerpc.samr_GetDomPwInfo(pipe, r)
96
97     r['name']['name'] = '\\\\__NONAME__'
98
99     result = dcerpc.samr_GetDomPwInfo(pipe, r)
100
101     r['name']['name'] = '\\\\Builtin'
102
103     result = dcerpc.samr_GetDomPwInfo(pipe, r)
104
105 def test_RemoveMemberFromForeignDomain(pipe, domain_handle):
106
107     r = {}
108     r['handle'] = domain_handle
109     r['sid'] = {}
110     r['sid']['sid_rev_num'] = 1
111     r['sid']['id_auth'] = [1, 2, 3, 4, 5, 6]
112     r['sid']['num_auths'] = 4
113     r['sid']['sub_auths'] = [7, 8, 9, 10]
114
115     result = dcerpc.samr_RemoveMemberFromForeignDomain(pipe, r)
116
117 def test_CreateUser2(pipe, domain_handle):
118     pass
119
120 def test_LookupName(pipe, domain_handle, name):
121
122     r = {}
123     r['handle'] = domain_handle
124     r['num_names'] = 1
125     r['names'] = []
126     r['names'].append({'name_len': 0, 'name_size': 0, 'name': name})
127
128     result = dcerpc.samr_LookupNames(pipe, r)
129
130     rid = result['rids']['ids'][0]
131
132     r['num_names'] = 2
133     r['names'].append({'name_len': 0, 'name_size': 0, 'name': 'xxNONAMExx'})
134
135
136     try:
137         result = dcerpc.samr_LookupNames(pipe, r)
138     except dcerpc.NTSTATUS, arg:
139         if arg[0] != 0x00000107:
140             raise dcerpc.NTSTATUS(arg)
141
142     r['num_names'] = 0
143
144     result = dcerpc.samr_LookupNames(pipe, r)
145
146     return rid
147
148 def test_OpenUser_byname(pipe, domain_handle, name):
149
150     rid = test_LookupName(pipe, domain_handle, name)
151
152     r = {}
153     r['handle'] = domain_handle
154     r['access_mask'] = 0x02000000
155     r['rid'] = rid
156
157     result = dcerpc.samr_OpenUser(pipe, r)
158
159     return result['acct_handle']
160
161 def test_DeleteUser_byname(pipe, domain_handle, name):
162
163     user_handle = test_OpenUser_byname(pipe, domain_handle, name)
164     
165     r = {}
166     r['handle'] = user_handle
167
168     dcerpc.samr_DeleteUser(pipe, r)
169
170 def test_CreateUser(pipe, domain_handle):
171
172     r = {}
173     r['handle'] = domain_handle
174     r['account_name'] = {}
175     r['account_name']['name_len'] = 0
176     r['account_name']['name_size'] = 0
177     r['account_name']['name'] = 'samrtorturetest'
178     r['access_mask'] = 0x02000000
179
180     try:
181         result = dcerpc.samr_CreateUser(pipe, r)
182     except dcerpc.NTSTATUS, arg:
183         if arg[0] == 0xc0000022:
184             return
185         elif arg[0] == 0xc0000063:
186             test_DeleteUser_byname(pipe, domain_handle, 'samrtorturetest')
187             result = dcerpc.samr_CreateUser(pipe, r)
188         else:
189             raise dcerpc.NTSTATUS(arg)
190
191     user_handle = result['acct_handle']
192
193     # samr_QueryUserInfo(), etc
194
195 def test_OpenDomain(pipe, handle, domain_sid):
196
197     print 'testing samr_OpenDomain'
198
199     r = {}
200     r['handle'] = handle
201     r['access_mask'] = 0x02000000
202     r['sid'] = domain_sid
203
204     result = dcerpc.samr_OpenDomain(pipe, r)
205
206     domain_handle = result['domain_handle']
207
208     test_QuerySecurity(pipe, domain_handle)
209
210     test_RemoveMemberFromForeignDomain(pipe, domain_handle)
211
212     test_CreateUser2(pipe, domain_handle)
213
214     test_CreateUser(pipe, domain_handle)
215     
216 def test_LookupDomain(pipe, handle, domain):
217
218     print 'testing samr_LookupDomain'
219
220     r = {}
221     r['handle'] = handle
222     r['domain'] = {}
223     r['domain']['name_len'] = 0
224     r['domain']['name_size'] = 0
225     r['domain']['name'] = None
226
227     try:
228         result = dcerpc.samr_LookupDomain(pipe, r)
229     except dcerpc.NTSTATUS, arg:
230         if arg[0] != 0xc000000d:
231             raise dcerpc.NTSTATUS(arg)
232
233     r['domain']['name'] = 'xxNODOMAINxx'
234
235     try:
236         result = dcerpc.samr_LookupDomain(pipe, r)
237     except dcerpc.NTSTATUS, arg:
238         if arg[0] != 0xc00000df:
239             raise dcerpc.NTSTATUS(arg)
240
241     r['domain']['name'] = domain
242
243     result = dcerpc.samr_LookupDomain(pipe, r)
244
245     test_GetDomPwInfo(pipe, domain)
246
247     test_OpenDomain(pipe, handle, result['sid'])
248     
249 def test_EnumDomains(pipe, handle):
250
251     print 'testing samr_EnumDomains'
252
253     r = {}
254     r['handle'] = handle
255     r['resume_handle'] = 0
256     r['buf_size'] = -1
257
258     result = dcerpc.samr_EnumDomains(pipe, r)
259
260     for domain in result['sam']['entries']:
261         test_LookupDomain(pipe, handle, domain['name']['name'])
262
263 # Parse command line
264
265 parser = OptionParser()
266
267 parser.add_option("-b", "--binding", action="store", type="string",
268                   dest="binding")
269
270 parser.add_option("-d", "--domain", action="store", type="string",
271                   dest="domain")
272
273 parser.add_option("-u", "--username", action="store", type="string",
274                   dest="username")
275
276 parser.add_option("-p", "--password", action="store", type="string",
277                   dest="password")
278
279 (options, args) = parser.parse_args()
280
281 if not options.binding:
282    parser.error('You must supply a binding string')
283
284 if not options.username or not options.password or not options.domain:
285    parser.error('You must supply a domain, username and password')
286
287
288 binding = options.binding
289 domain = options.domain
290 username = options.username
291 password = options.password
292
293 print 'Connecting...'
294
295 pipe = dcerpc.pipe_connect(binding,
296         dcerpc.DCERPC_SAMR_UUID, dcerpc.DCERPC_SAMR_VERSION,
297         domain, username, password)
298
299 handle = test_Connect(pipe)
300
301 test_QuerySecurity(pipe, handle)
302
303 test_EnumDomains(pipe, handle)
304
305 print 'Done'