|
|
b6b438 |
From bcbc9eca11583426d9b0e7ce4d4e51b16bda32f0 Mon Sep 17 00:00:00 2001
|
|
|
b6b438 |
From: Andreas Schneider <asn@samba.org>
|
|
|
b6b438 |
Date: Wed, 29 May 2019 16:22:11 +0200
|
|
|
b6b438 |
Subject: [PATCH 008/187] s3:rpc_client: Return NTSTATUS for
|
|
|
b6b438 |
init_samr_CryptPassword()
|
|
|
b6b438 |
|
|
|
b6b438 |
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14031
|
|
|
b6b438 |
|
|
|
b6b438 |
Signed-off-by: Andreas Schneider <asn@samba.org>
|
|
|
b6b438 |
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
|
|
|
b6b438 |
(cherry picked from commit 4b9b1dbe9c8c988a39b1318a4f7aac031bc1ea8b)
|
|
|
b6b438 |
---
|
|
|
b6b438 |
source3/lib/netapi/user.c | 9 ++++++---
|
|
|
b6b438 |
source3/libnet/libnet_join.c | 10 +++++++---
|
|
|
b6b438 |
source3/rpc_client/init_samr.c | 14 ++++++++++----
|
|
|
b6b438 |
source3/rpc_client/init_samr.h | 6 +++---
|
|
|
b6b438 |
source3/rpcclient/cmd_samr.c | 5 ++++-
|
|
|
b6b438 |
source3/utils/net_rpc.c | 9 ++++++---
|
|
|
b6b438 |
6 files changed, 36 insertions(+), 17 deletions(-)
|
|
|
b6b438 |
|
|
|
b6b438 |
diff --git a/source3/lib/netapi/user.c b/source3/lib/netapi/user.c
|
|
|
b6b438 |
index 4b66dab2f99..2136ef47ee6 100644
|
|
|
b6b438 |
--- a/source3/lib/netapi/user.c
|
|
|
b6b438 |
+++ b/source3/lib/netapi/user.c
|
|
|
b6b438 |
@@ -326,9 +326,12 @@ static NTSTATUS set_user_info_USER_INFO_X(TALLOC_CTX *ctx,
|
|
|
b6b438 |
|
|
|
b6b438 |
user_info.info23.info = info21;
|
|
|
b6b438 |
|
|
|
b6b438 |
- init_samr_CryptPassword(uX->usriX_password,
|
|
|
b6b438 |
- session_key,
|
|
|
b6b438 |
- &user_info.info23.password);
|
|
|
b6b438 |
+ status = init_samr_CryptPassword(uX->usriX_password,
|
|
|
b6b438 |
+ session_key,
|
|
|
b6b438 |
+ &user_info.info23.password);
|
|
|
b6b438 |
+ if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
+ return status;
|
|
|
b6b438 |
+ }
|
|
|
b6b438 |
|
|
|
b6b438 |
status = dcerpc_samr_SetUserInfo2(b, talloc_tos(),
|
|
|
b6b438 |
user_handle,
|
|
|
b6b438 |
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c
|
|
|
b6b438 |
index 9d4f656ffec..abf8672d050 100644
|
|
|
b6b438 |
--- a/source3/libnet/libnet_join.c
|
|
|
b6b438 |
+++ b/source3/libnet/libnet_join.c
|
|
|
b6b438 |
@@ -1570,9 +1570,12 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
|
|
|
b6b438 |
|
|
|
b6b438 |
/* retry with level 24 */
|
|
|
b6b438 |
|
|
|
b6b438 |
- init_samr_CryptPassword(r->in.machine_password,
|
|
|
b6b438 |
- &session_key,
|
|
|
b6b438 |
- &crypt_pwd);
|
|
|
b6b438 |
+ status = init_samr_CryptPassword(r->in.machine_password,
|
|
|
b6b438 |
+ &session_key,
|
|
|
b6b438 |
+ &crypt_pwd);
|
|
|
b6b438 |
+ if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
+ goto error;
|
|
|
b6b438 |
+ }
|
|
|
b6b438 |
|
|
|
b6b438 |
user_info.info24.password = crypt_pwd;
|
|
|
b6b438 |
user_info.info24.password_expired = PASS_DONT_CHANGE_AT_NEXT_LOGON;
|
|
|
b6b438 |
@@ -1584,6 +1587,7 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX *mem_ctx,
|
|
|
b6b438 |
&result);
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
+error:
|
|
|
b6b438 |
old_timeout = rpccli_set_timeout(pipe_hnd, old_timeout);
|
|
|
b6b438 |
|
|
|
b6b438 |
if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
diff --git a/source3/rpc_client/init_samr.c b/source3/rpc_client/init_samr.c
|
|
|
b6b438 |
index d116ece576f..8b41ec2f10f 100644
|
|
|
b6b438 |
--- a/source3/rpc_client/init_samr.c
|
|
|
b6b438 |
+++ b/source3/rpc_client/init_samr.c
|
|
|
b6b438 |
@@ -81,12 +81,18 @@ out:
|
|
|
b6b438 |
inits a samr_CryptPassword structure
|
|
|
b6b438 |
*************************************************************************/
|
|
|
b6b438 |
|
|
|
b6b438 |
-void init_samr_CryptPassword(const char *pwd,
|
|
|
b6b438 |
- DATA_BLOB *session_key,
|
|
|
b6b438 |
- struct samr_CryptPassword *pwd_buf)
|
|
|
b6b438 |
+NTSTATUS init_samr_CryptPassword(const char *pwd,
|
|
|
b6b438 |
+ DATA_BLOB *session_key,
|
|
|
b6b438 |
+ struct samr_CryptPassword *pwd_buf)
|
|
|
b6b438 |
{
|
|
|
b6b438 |
/* samr_CryptPassword */
|
|
|
b6b438 |
+ bool ok;
|
|
|
b6b438 |
|
|
|
b6b438 |
- encode_pw_buffer(pwd_buf->data, pwd, STR_UNICODE);
|
|
|
b6b438 |
+ ok = encode_pw_buffer(pwd_buf->data, pwd, STR_UNICODE);
|
|
|
b6b438 |
+ if (!ok) {
|
|
|
b6b438 |
+ return NT_STATUS_INTERNAL_ERROR;
|
|
|
b6b438 |
+ }
|
|
|
b6b438 |
arcfour_crypt_blob(pwd_buf->data, 516, session_key);
|
|
|
b6b438 |
+
|
|
|
b6b438 |
+ return NT_STATUS_OK;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
diff --git a/source3/rpc_client/init_samr.h b/source3/rpc_client/init_samr.h
|
|
|
b6b438 |
index 223fa91e3d9..4214ab55a04 100644
|
|
|
b6b438 |
--- a/source3/rpc_client/init_samr.h
|
|
|
b6b438 |
+++ b/source3/rpc_client/init_samr.h
|
|
|
b6b438 |
@@ -25,8 +25,8 @@
|
|
|
b6b438 |
void init_samr_CryptPasswordEx(const char *pwd,
|
|
|
b6b438 |
DATA_BLOB *session_key,
|
|
|
b6b438 |
struct samr_CryptPasswordEx *pwd_buf);
|
|
|
b6b438 |
-void init_samr_CryptPassword(const char *pwd,
|
|
|
b6b438 |
- DATA_BLOB *session_key,
|
|
|
b6b438 |
- struct samr_CryptPassword *pwd_buf);
|
|
|
b6b438 |
+NTSTATUS init_samr_CryptPassword(const char *pwd,
|
|
|
b6b438 |
+ DATA_BLOB *session_key,
|
|
|
b6b438 |
+ struct samr_CryptPassword *pwd_buf);
|
|
|
b6b438 |
|
|
|
b6b438 |
#endif /* _RPC_CLIENT_INIT_SAMR_H_ */
|
|
|
b6b438 |
diff --git a/source3/rpcclient/cmd_samr.c b/source3/rpcclient/cmd_samr.c
|
|
|
b6b438 |
index 8cbf8ab24bd..ccaec1ada40 100644
|
|
|
b6b438 |
--- a/source3/rpcclient/cmd_samr.c
|
|
|
b6b438 |
+++ b/source3/rpcclient/cmd_samr.c
|
|
|
b6b438 |
@@ -3063,7 +3063,10 @@ static NTSTATUS cmd_samr_setuserinfo_int(struct rpc_pipe_client *cli,
|
|
|
b6b438 |
return status;
|
|
|
b6b438 |
}
|
|
|
b6b438 |
|
|
|
b6b438 |
- init_samr_CryptPassword(param, &session_key, &pwd_buf);
|
|
|
b6b438 |
+ status = init_samr_CryptPassword(param, &session_key, &pwd_buf);
|
|
|
b6b438 |
+ if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
+ return status;
|
|
|
b6b438 |
+ }
|
|
|
b6b438 |
init_samr_CryptPasswordEx(param, &session_key, &pwd_buf_ex);
|
|
|
b6b438 |
nt_lm_owf_gen(param, nt_hash, lm_hash);
|
|
|
b6b438 |
|
|
|
b6b438 |
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
|
|
|
b6b438 |
index a56190f7be5..f6fb892a2d9 100644
|
|
|
b6b438 |
--- a/source3/utils/net_rpc.c
|
|
|
b6b438 |
+++ b/source3/utils/net_rpc.c
|
|
|
b6b438 |
@@ -6195,9 +6195,12 @@ static NTSTATUS rpc_trustdom_add_internals(struct net_context *c,
|
|
|
b6b438 |
|
|
|
b6b438 |
ZERO_STRUCT(info.info23);
|
|
|
b6b438 |
|
|
|
b6b438 |
- init_samr_CryptPassword(argv[1],
|
|
|
b6b438 |
- &session_key,
|
|
|
b6b438 |
- &crypt_pwd);
|
|
|
b6b438 |
+ status = init_samr_CryptPassword(argv[1],
|
|
|
b6b438 |
+ &session_key,
|
|
|
b6b438 |
+ &crypt_pwd);
|
|
|
b6b438 |
+ if (!NT_STATUS_IS_OK(status)) {
|
|
|
b6b438 |
+ goto done;
|
|
|
b6b438 |
+ }
|
|
|
b6b438 |
|
|
|
b6b438 |
info.info23.info.fields_present = SAMR_FIELD_ACCT_FLAGS |
|
|
|
b6b438 |
SAMR_FIELD_NT_PASSWORD_PRESENT;
|
|
|
b6b438 |
--
|
|
|
b6b438 |
2.23.0
|
|
|
b6b438 |
|