summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/libnet/libnet_join.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c
index dd3d2254d8..f787a2d632 100644
--- a/source3/libnet/libnet_join.c
+++ b/source3/libnet/libnet_join.c
@@ -22,15 +22,14 @@
#include "libnet/libnet_join.h"
#include "libnet/libnet_proto.h"
-static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
- struct libnet_JoinCtx *r)
+static NTSTATUS do_DomainJoin(TALLOC_CTX *mem_ctx,
+ struct libnet_JoinCtx *r)
{
struct cli_state *cli = NULL;
struct rpc_pipe_client *pipe_hnd = NULL;
const char *password = NULL;
POLICY_HND sam_pol, domain_pol, user_pol, lsa_pol;
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
- WERROR werr;
char *acct_name;
const char *const_acct_name;
uint32 user_rid;
@@ -49,7 +48,7 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
password = talloc_strdup(mem_ctx,
generate_random_str(DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH));
- W_ERROR_HAVE_NO_MEMORY(password);
+ NT_STATUS_HAVE_NO_MEMORY(password);
status = cli_full_connection(&cli, NULL, r->in.server_name,
NULL, 0,
@@ -60,20 +59,17 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
0, Undefined, NULL);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_LSARPC, &status);
if (!pipe_hnd) {
- werr = ntstatus_to_werror(status);
goto done;
}
status = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True,
SEC_RIGHTS_MAXIMUM_ALLOWED, &lsa_pol);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -82,7 +78,6 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
&r->out.netbios_domain_name,
&r->out.domain_sid);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -99,14 +94,12 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SAMR, &status);
if (!pipe_hnd) {
- werr = ntstatus_to_werror(status);
goto done;
}
status = rpccli_samr_connect(pipe_hnd, mem_ctx,
SEC_RIGHTS_MAXIMUM_ALLOWED, &sam_pol);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -115,7 +108,6 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
r->out.domain_sid,
&domain_pol);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -128,7 +120,6 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
0xe005000b, &user_pol, &user_rid);
if (NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) {
if (!(r->in.join_flags & WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED)) {
- werr = WERR_SETUP_ALREADY_JOINED;
goto done;
}
}
@@ -142,12 +133,11 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
&const_acct_name,
&num_rids, &user_rids, &name_types);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
if (name_types[0] != SID_NAME_USER) {
- werr = ntstatus_to_werror(NT_STATUS_INVALID_WORKSTATION);
+ status = NT_STATUS_INVALID_WORKSTATION;
goto done;
}
@@ -157,7 +147,6 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid,
&user_pol);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -197,7 +186,6 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
infolevel, &cli->user_session_key,
&ctr);
if (!NT_STATUS_IS_OK(status)) {
- werr = ntstatus_to_werror(status);
goto done;
}
@@ -207,7 +195,7 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
if (!secrets_store_domain_sid(r->out.netbios_domain_name,
r->out.domain_sid))
{
- werr = WERR_GENERAL_FAILURE;
+ status = NT_STATUS_INTERNAL_DB_ERROR;
goto done;
}
@@ -215,17 +203,17 @@ static WERROR do_DomainJoin(TALLOC_CTX *mem_ctx,
r->out.netbios_domain_name,
SEC_CHAN_WKSTA))
{
- werr = WERR_GENERAL_FAILURE;
+ status = NT_STATUS_INTERNAL_DB_ERROR;
goto done;
}
- werr = WERR_OK;
+ status = NT_STATUS_OK;
done:
if (cli) {
cli_shutdown(cli);
}
- return werr;
+ return status;
}
static WERROR do_modify_val_config(struct registry_key *key,
@@ -343,6 +331,7 @@ WERROR libnet_Join(TALLOC_CTX *mem_ctx,
struct libnet_JoinCtx *r)
{
WERROR werr;
+ NTSTATUS status;
if (!r->in.domain_name) {
return WERR_INVALID_PARAM;
@@ -354,9 +343,12 @@ WERROR libnet_Join(TALLOC_CTX *mem_ctx,
if (r->in.join_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
- werr = do_DomainJoin(mem_ctx, r);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
+ status = do_DomainJoin(mem_ctx, r);
+ if (!NT_STATUS_IS_OK(status)) {
+ if (NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) {
+ return WERR_SETUP_ALREADY_JOINED;
+ }
+ return ntstatus_to_werror(status);
}
}