diff options
-rw-r--r-- | source4/torture/libnet/libnet_user.c | 134 |
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; |