diff options
Diffstat (limited to 'source3/rpc_client')
-rw-r--r-- | source3/rpc_client/cli_samr.c | 45 | ||||
-rw-r--r-- | source3/rpc_client/cli_samr.h | 35 |
2 files changed, 73 insertions, 7 deletions
diff --git a/source3/rpc_client/cli_samr.c b/source3/rpc_client/cli_samr.c index 236981a2f1..ae91c1c165 100644 --- a/source3/rpc_client/cli_samr.c +++ b/source3/rpc_client/cli_samr.c @@ -197,15 +197,17 @@ NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli, /* User change password given blobs */ -NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli, +NTSTATUS dcerpc_samr_chng_pswd_auth_crap(struct dcerpc_binding_handle *h, TALLOC_CTX *mem_ctx, + const char *srv_name_slash, const char *username, DATA_BLOB new_nt_password_blob, DATA_BLOB old_nt_hash_enc_blob, DATA_BLOB new_lm_password_blob, - DATA_BLOB old_lm_hash_enc_blob) + DATA_BLOB old_lm_hash_enc_blob, + NTSTATUS *presult) { - NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + NTSTATUS status; struct samr_CryptPassword new_nt_password; struct samr_CryptPassword new_lm_password; struct samr_Password old_nt_hash_enc; @@ -214,7 +216,7 @@ NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli, DEBUG(10,("rpccli_samr_chng_pswd_auth_crap\n")); - init_lsa_String(&server, cli->srv_name_slash); + init_lsa_String(&server, srv_name_slash); init_lsa_String(&account, username); if (new_nt_password_blob.length > 0) { @@ -241,17 +243,46 @@ NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli, ZERO_STRUCT(old_lm_hash_enc); } - result = rpccli_samr_ChangePasswordUser2(cli, mem_ctx, + status = dcerpc_samr_ChangePasswordUser2(h, + mem_ctx, &server, &account, &new_nt_password, &old_nt_hash_enc, true, &new_lm_password, - &old_lm_hash_enc); - return result; + &old_lm_hash_enc, + presult); + + return status; } +NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + const char *username, + DATA_BLOB new_nt_password_blob, + DATA_BLOB old_nt_hash_enc_blob, + DATA_BLOB new_lm_password_blob, + DATA_BLOB old_lm_hash_enc_blob) +{ + NTSTATUS status; + NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + + status = dcerpc_samr_chng_pswd_auth_crap(cli->binding_handle, + mem_ctx, + cli->srv_name_slash, + username, + new_nt_password_blob, + old_nt_hash_enc_blob, + new_lm_password_blob, + old_lm_hash_enc_blob, + &result); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + return result; +} /* change password 3 */ diff --git a/source3/rpc_client/cli_samr.h b/source3/rpc_client/cli_samr.h index d73171209b..14a3cd64d2 100644 --- a/source3/rpc_client/cli_samr.h +++ b/source3/rpc_client/cli_samr.h @@ -91,6 +91,41 @@ NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli, const char *username, const char *newpassword, const char *oldpassword); + +/** + * @brief Change the password of a user based on the user name given and using + * blobs. + * + * @param[in] h The dcerpc binding hanlde to use. + * + * @param[in] mem_ctx The memory context to use. + * + * @param[in] srv_name_slash The server name with leading slashes. + * + * @param[in] username The name of ther user. + * + * @param[in] new_nt_password_blob The new password as a crypted blob. + * + * @param[in] old_nt_hash_enc_blob The old password as a hash encoded blob. + * + * @param[in] new_lm_password_blob The new password as a lanman encoded blob. + * + * @param[in] old_lm_hash_enc_blob The old password as a lanman encoded blob. + * + * @param[out] presult A pointer for the NDR NTSTATUS error code. + * + * @return A corresponding NTSTATUS error code for the connection. + */ +NTSTATUS dcerpc_samr_chng_pswd_auth_crap(struct dcerpc_binding_handle *h, + TALLOC_CTX *mem_ctx, + const char *srv_name_slash, + const char *username, + DATA_BLOB new_nt_password_blob, + DATA_BLOB old_nt_hash_enc_blob, + DATA_BLOB new_lm_password_blob, + DATA_BLOB old_lm_hash_enc_blob, + NTSTATUS *presult); + NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *username, |