diff options
Diffstat (limited to 'source4/libnet')
-rw-r--r-- | source4/libnet/libnet_user.c | 51 | ||||
-rw-r--r-- | source4/libnet/libnet_user.h | 18 |
2 files changed, 69 insertions, 0 deletions
diff --git a/source4/libnet/libnet_user.c b/source4/libnet/libnet_user.c index 50cb14d290..ba9fd0cc83 100644 --- a/source4/libnet/libnet_user.c +++ b/source4/libnet/libnet_user.c @@ -75,3 +75,54 @@ NTSTATUS libnet_CreateUser(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru return status; } + +NTSTATUS libnet_DeleteUser(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct libnet_DeleteUser *r) +{ + NTSTATUS status; + struct libnet_RpcConnect cn; + struct libnet_rpc_domain_open dom_io; + struct libnet_rpc_userdel user_io; + + /* connect rpc service of remote DC */ + cn.level = LIBNET_RPC_CONNECT_PDC; + cn.in.name = talloc_strdup(mem_ctx, r->in.domain_name); + cn.in.dcerpc_iface = &dcerpc_table_samr; + + status = libnet_RpcConnect(ctx, mem_ctx, &cn); + if (!NT_STATUS_IS_OK(status)) { + r->out.error_string = talloc_asprintf(mem_ctx, + "Connection to SAMR pipe domain '%s' PDC failed: %s\n", + r->in.domain_name, nt_errstr(status)); + return status; + } + + ctx->pipe = cn.out.dcerpc_pipe; + + /* open connected domain */ + dom_io.in.domain_name = r->in.domain_name; + dom_io.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; + + status = libnet_rpc_domain_open(ctx->pipe, mem_ctx, &dom_io); + if (!NT_STATUS_IS_OK(status)) { + r->out.error_string = talloc_asprintf(mem_ctx, + "Opening domain to delete user account failed: %s\n", + nt_errstr(status)); + return status; + } + + ctx->domain_handle = dom_io.out.domain_handle; + + /* create user */ + user_io.in.username = r->in.user_name; + user_io.in.domain_handle = dom_io.out.domain_handle; + + status = libnet_rpc_userdel(ctx->pipe, mem_ctx, &user_io); + if (!NT_STATUS_IS_OK(status)) { + r->out.error_string = talloc_asprintf(mem_ctx, + "Deleting user account failed: %s\n", + nt_errstr(status)); + return status; + } + + return status; +} diff --git a/source4/libnet/libnet_user.h b/source4/libnet/libnet_user.h index 358f0d0b0f..2182ccb4e4 100644 --- a/source4/libnet/libnet_user.h +++ b/source4/libnet/libnet_user.h @@ -36,3 +36,21 @@ struct libnet_CreateUser { const char *error_string; } out; }; + +enum libnet_DeleteUser_level { + LIBNET_DELETE_USER_GENERIC, + LIBNET_DELETE_USER_SAMR, +}; + + +struct libnet_DeleteUser { + enum libnet_DeleteUser_level level; + + struct { + const char *user_name; + const char *domain_name; + } in; + struct { + const char *error_string; + } out; +}; |