summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/libnet/libnet_user.c134
1 files changed, 5 insertions, 129 deletions
diff --git a/source4/torture/libnet/libnet_user.c b/source4/torture/libnet/libnet_user.c
index 587676a767..9837a88e36 100644
--- a/source4/torture/libnet/libnet_user.c
+++ b/source4/torture/libnet/libnet_user.c
@@ -28,133 +28,7 @@
#include "torture/libnet/usertest.h"
#include "torture/libnet/proto.h"
#include "param/param.h"
-#include "lib/ldb_wrap.h"
-
-
-/**
- * Find out user's samAccountName for given
- * user RDN. We need samAccountName value
- * when deleting users.
- */
-static bool _get_account_name_for_user_rdn(struct torture_context *tctx,
- struct dcerpc_binding_handle *b,
- const char *user_rdn,
- TALLOC_CTX *mem_ctx,
- const char **_account_name)
-{
- const char *url;
- struct ldb_context *ldb;
- TALLOC_CTX *tmp_ctx;
- bool test_res = true;
- struct dcerpc_pipe *p = talloc_get_type_abort(b->private_data, struct dcerpc_pipe);
- int ldb_ret;
- struct ldb_result *ldb_res;
- const char *account_name = NULL;
- static const char *attrs[] = {
- "samAccountName",
- NULL
- };
-
- tmp_ctx = talloc_new(tctx);
- torture_assert(tctx, tmp_ctx != NULL, "Failed to create temporary mem context");
-
- url = talloc_asprintf(tmp_ctx, "ldap://%s/", p->binding->target_hostname);
- torture_assert_goto(tctx, url != NULL, test_res, done, "Failed to allocate URL for ldb");
-
- ldb = ldb_wrap_connect(tmp_ctx,
- tctx->ev, tctx->lp_ctx,
- url, NULL, cmdline_credentials, 0);
- torture_assert_goto(tctx, ldb != NULL, test_res, done, "Failed to make LDB connection");
-
- ldb_ret = ldb_search(ldb, tmp_ctx, &ldb_res,
- ldb_get_default_basedn(ldb), LDB_SCOPE_SUBTREE,
- attrs,
- "(&(objectClass=user)(name=%s))", user_rdn);
- if (LDB_SUCCESS == ldb_ret && 1 == ldb_res->count) {
- account_name = ldb_msg_find_attr_as_string(ldb_res->msgs[0], "samAccountName", NULL);
- }
-
- /* return user_rdn by default */
- if (!account_name) {
- account_name = user_rdn;
- }
-
- /* duplicate memory in parent context */
- *_account_name = talloc_strdup(mem_ctx, account_name);
-
-done:
- talloc_free(tmp_ctx);
- return test_res;
-}
-
-/**
- * Deletes a user account when given user RDN name
- *
- * @param username RDN for the user to be deleted
- */
-static bool test_cleanup(struct torture_context *tctx,
- struct dcerpc_binding_handle *b, TALLOC_CTX *mem_ctx,
- struct policy_handle *domain_handle, const char *username)
-{
- struct samr_LookupNames r1;
- struct samr_OpenUser r2;
- struct samr_DeleteUser r3;
- struct lsa_String names[2];
- uint32_t rid;
- struct policy_handle user_handle;
- struct samr_Ids rids, types;
- const char *account_name;
-
- if (!_get_account_name_for_user_rdn(tctx, b, username, mem_ctx, &account_name)) {
- torture_result(tctx, TORTURE_FAIL,
- __location__": Failed to find samAccountName for %s", username);
- return false;
- }
-
- names[0].string = account_name;
-
- r1.in.domain_handle = domain_handle;
- r1.in.num_names = 1;
- r1.in.names = names;
- r1.out.rids = &rids;
- r1.out.types = &types;
- torture_comment(tctx, "user account lookup '%s'\n", account_name);
-
- torture_assert_ntstatus_ok(tctx,
- dcerpc_samr_LookupNames_r(b, mem_ctx, &r1),
- "LookupNames failed");
- torture_assert_ntstatus_ok(tctx, r1.out.result,
- "LookupNames failed");
-
- rid = r1.out.rids->ids[0];
-
- r2.in.domain_handle = domain_handle;
- r2.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
- r2.in.rid = rid;
- r2.out.user_handle = &user_handle;
-
- torture_comment(tctx, "opening user account\n");
-
- torture_assert_ntstatus_ok(tctx,
- dcerpc_samr_OpenUser_r(b, mem_ctx, &r2),
- "OpenUser failed");
- torture_assert_ntstatus_ok(tctx, r2.out.result,
- "OpenUser failed");
-
- r3.in.user_handle = &user_handle;
- r3.out.user_handle = &user_handle;
-
- torture_comment(tctx, "deleting user account\n");
-
- torture_assert_ntstatus_ok(tctx,
- dcerpc_samr_DeleteUser_r(b, mem_ctx, &r3),
- "DeleteUser failed");
- torture_assert_ntstatus_ok(tctx, r3.out.result,
- "DeleteUser failed");
-
- return true;
-}
static bool test_lsa_close(struct torture_context *tctx,
@@ -200,7 +74,8 @@ bool torture_createuser(struct torture_context *torture)
goto done;
}
- if (!test_cleanup(torture, ctx->samr.pipe->binding_handle, mem_ctx, &ctx->samr.handle, TEST_USERNAME)) {
+ if (!test_user_cleanup(torture, ctx->samr.pipe->binding_handle,
+ mem_ctx, &ctx->samr.handle, TEST_USERNAME)) {
torture_comment(torture, "cleanup failed\n");
ret = false;
goto done;
@@ -538,7 +413,7 @@ bool torture_modifyuser(struct torture_context *torture)
}
cleanup:
- if (!test_cleanup(torture, ctx->samr.pipe->binding_handle,
+ if (!test_user_cleanup(torture, ctx->samr.pipe->binding_handle,
torture, &ctx->samr.handle, TEST_USERNAME)) {
torture_comment(torture, "cleanup failed\n");
ret = false;
@@ -610,7 +485,8 @@ bool torture_userinfo_api(struct torture_context *torture)
goto done;
}
- if (!test_cleanup(torture, ctx->samr.pipe->binding_handle, mem_ctx, &ctx->samr.handle, TEST_USERNAME)) {
+ if (!test_user_cleanup(torture, ctx->samr.pipe->binding_handle,
+ mem_ctx, &ctx->samr.handle, TEST_USERNAME)) {
torture_comment(torture, "cleanup failed\n");
ret = false;
goto done;