84
86
r.out.user_handle = &user_handle;
86
status = dcerpc_samr_OpenUser(p, mem_ctx, &r);
88
status = dcerpc_samr_OpenUser_r(b, mem_ctx, &r);
87
89
if (!NT_STATUS_IS_OK(status)) {
88
90
printf("OpenUser(%s) failed - %s\n", name, nt_errstr(status));
93
if (!NT_STATUS_IS_OK(r.out.result)) {
94
printf("OpenUser(%s) failed - %s\n", name, nt_errstr(r.out.result));
92
98
d.in.user_handle = &user_handle;
93
99
d.out.user_handle = &user_handle;
94
status = dcerpc_samr_DeleteUser(p, mem_ctx, &d);
100
status = dcerpc_samr_DeleteUser_r(b, mem_ctx, &d);
95
101
if (!NT_STATUS_IS_OK(status)) {
104
if (!NT_STATUS_IS_OK(d.out.result)) {
99
108
return NT_STATUS_OK;
157
168
if (!NT_STATUS_IS_OK(status)) {
171
b = join->p->binding_handle;
161
173
c.in.system_name = NULL;
162
174
c.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
163
175
c.out.connect_handle = &handle;
165
status = dcerpc_samr_Connect(join->p, join, &c);
177
status = dcerpc_samr_Connect_r(b, join, &c);
166
178
if (!NT_STATUS_IS_OK(status)) {
167
179
const char *errstr = nt_errstr(status);
168
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
169
errstr = dcerpc_errstr(join, join->p->last_fault_code);
171
printf("samr_Connect failed - %s\n", errstr);
175
printf("Opening domain %s\n", domain);
177
name.string = domain;
178
l.in.connect_handle = &handle;
179
l.in.domain_name = &name;
182
status = dcerpc_samr_LookupDomain(join->p, join, &l);
183
if (!NT_STATUS_IS_OK(status)) {
184
printf("LookupDomain failed - %s\n", nt_errstr(status));
180
printf("samr_Connect failed - %s\n", errstr);
183
if (!NT_STATUS_IS_OK(c.out.result)) {
184
const char *errstr = nt_errstr(c.out.result);
185
printf("samr_Connect failed - %s\n", errstr);
190
printf("Opening domain %s\n", domain);
192
name.string = domain;
193
l.in.connect_handle = &handle;
194
l.in.domain_name = &name;
197
status = dcerpc_samr_LookupDomain_r(b, join, &l);
198
if (!NT_STATUS_IS_OK(status)) {
199
printf("LookupDomain failed - %s\n", nt_errstr(status));
202
if (!NT_STATUS_IS_OK(l.out.result)) {
203
printf("LookupDomain failed - %s\n", nt_errstr(l.out.result));
207
struct samr_EnumDomains e;
208
uint32_t resume_handle = 0, num_entries;
209
struct samr_SamArray *sam;
212
e.in.connect_handle = &handle;
213
e.in.buf_size = (uint32_t)-1;
214
e.in.resume_handle = &resume_handle;
216
e.out.num_entries = &num_entries;
217
e.out.resume_handle = &resume_handle;
219
status = dcerpc_samr_EnumDomains_r(b, join, &e);
220
if (!NT_STATUS_IS_OK(status)) {
221
printf("EnumDomains failed - %s\n", nt_errstr(status));
224
if (!NT_STATUS_IS_OK(e.out.result)) {
225
printf("EnumDomains failed - %s\n", nt_errstr(e.out.result));
228
if ((num_entries != 2) || (sam && sam->count != 2)) {
229
printf("unexpected number of domains\n");
232
for (i=0; i < 2; i++) {
233
if (!strequal(sam->entries[i].name.string, "builtin")) {
234
domain = sam->entries[i].name.string;
239
printf("Opening domain %s\n", domain);
241
name.string = domain;
242
l.in.connect_handle = &handle;
243
l.in.domain_name = &name;
246
status = dcerpc_samr_LookupDomain_r(b, join, &l);
247
if (!NT_STATUS_IS_OK(status)) {
248
printf("LookupDomain failed - %s\n", nt_errstr(status));
251
if (!NT_STATUS_IS_OK(l.out.result)) {
252
printf("LookupDomain failed - %s\n", nt_errstr(l.out.result));
256
printf("cannot proceed without domain name\n");
188
261
talloc_steal(join, *l.out.sid);
195
268
o.in.sid = *l.out.sid;
196
269
o.out.domain_handle = &domain_handle;
198
status = dcerpc_samr_OpenDomain(join->p, join, &o);
271
status = dcerpc_samr_OpenDomain_r(b, join, &o);
199
272
if (!NT_STATUS_IS_OK(status)) {
200
273
printf("OpenDomain failed - %s\n", nt_errstr(status));
276
if (!NT_STATUS_IS_OK(o.out.result)) {
277
printf("OpenDomain failed - %s\n", nt_errstr(o.out.result));
204
281
printf("Creating account %s\n", username);
213
290
r.out.access_granted = &access_granted;
214
291
r.out.rid = &rid;
216
status = dcerpc_samr_CreateUser2(join->p, join, &r);
293
status = dcerpc_samr_CreateUser2_r(b, join, &r);
294
if (!NT_STATUS_IS_OK(status)) {
295
printf("CreateUser2 failed - %s\n", nt_errstr(status));
218
if (NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) {
219
status = DeleteUser_byname(join->p, join, &domain_handle, name.string);
299
if (NT_STATUS_EQUAL(r.out.result, NT_STATUS_USER_EXISTS)) {
300
status = DeleteUser_byname(b, join, &domain_handle, name.string);
220
301
if (NT_STATUS_IS_OK(status)) {
225
if (!NT_STATUS_IS_OK(status)) {
226
printf("CreateUser2 failed - %s\n", nt_errstr(status));
306
if (!NT_STATUS_IS_OK(r.out.result)) {
307
printf("CreateUser2 failed - %s\n", nt_errstr(r.out.result));
232
313
pwp.in.user_handle = &join->user_handle;
233
314
pwp.out.info = &info;
235
status = dcerpc_samr_GetUserPwInfo(join->p, join, &pwp);
236
if (NT_STATUS_IS_OK(status)) {
316
status = dcerpc_samr_GetUserPwInfo_r(b, join, &pwp);
317
if (NT_STATUS_IS_OK(status) && NT_STATUS_IS_OK(pwp.out.result)) {
237
318
policy_min_pw_len = pwp.out.info->min_password_length;
240
random_pw = generate_random_str(join, MAX(8, policy_min_pw_len));
321
random_pw = generate_random_password(join, MAX(8, policy_min_pw_len), max_pw_len);
242
323
printf("Setting account password '%s'\n", random_pw);
260
341
arcfour_crypt_blob(u.info24.password.data, 516, &session_key);
262
status = dcerpc_samr_SetUserInfo(join->p, join, &s);
343
status = dcerpc_samr_SetUserInfo_r(b, join, &s);
263
344
if (!NT_STATUS_IS_OK(status)) {
264
345
printf("SetUserInfo failed - %s\n", nt_errstr(status));
348
if (!NT_STATUS_IS_OK(s.out.result)) {
349
printf("SetUserInfo failed - %s\n", nt_errstr(s.out.result));
269
354
s.in.user_handle = &join->user_handle;
284
369
u.info21.description.string = talloc_asprintf(join,
285
370
"Samba4 torture account created by host %s: %s",
286
lp_netbios_name(torture->lp_ctx),
371
lpcfg_netbios_name(torture->lp_ctx),
287
372
timestring(join, time(NULL)));
289
374
printf("Resetting ACB flags, force pw change time\n");
291
status = dcerpc_samr_SetUserInfo(join->p, join, &s);
376
status = dcerpc_samr_SetUserInfo_r(b, join, &s);
292
377
if (!NT_STATUS_IS_OK(status)) {
293
378
printf("SetUserInfo failed - %s\n", nt_errstr(status));
381
if (!NT_STATUS_IS_OK(s.out.result)) {
382
printf("SetUserInfo failed - %s\n", nt_errstr(s.out.result));
297
386
if (random_password) {
298
387
*random_password = random_pw;
392
490
u.info21.description.string = talloc_asprintf(tj,
393
491
"Samba4 torture account created by host %s: %s",
394
lp_netbios_name(tctx->lp_ctx), timestring(tj, time(NULL)));
492
lpcfg_netbios_name(tctx->lp_ctx), timestring(tj, time(NULL)));
396
status = dcerpc_samr_SetUserInfo(tj->p, tj, &s);
494
status = dcerpc_samr_SetUserInfo_r(tj->p->binding_handle, tj, &s);
397
495
if (!NT_STATUS_IS_OK(status)) {
398
496
printf("SetUserInfo (non-critical) failed - %s\n", nt_errstr(status));
498
if (!NT_STATUS_IS_OK(s.out.result)) {
499
printf("SetUserInfo (non-critical) failed - %s\n", nt_errstr(s.out.result));
401
502
*machine_credentials = cli_credentials_init(tj);
402
503
cli_credentials_set_conf(*machine_credentials, tctx->lp_ctx);