summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2008-06-25 11:50:17 +0200
committerGünther Deschner <gd@samba.org>2008-06-25 23:58:50 +0200
commit402733b518dada3ffd3a9cb622a8f994ed35a9ac (patch)
treeed774a9acf1c68d49158d2bcb36b57b0bdf83875
parent14d500c0e7e4261fa8d9dbc12e14d79a424059c3 (diff)
downloadsamba-402733b518dada3ffd3a9cb622a8f994ed35a9ac.tar.gz
samba-402733b518dada3ffd3a9cb622a8f994ed35a9ac.tar.bz2
samba-402733b518dada3ffd3a9cb622a8f994ed35a9ac.zip
rpc_client: add rpccli_samr_chgpasswd_user() call.
Guenther (This used to be commit 10fd2baa8320f96286d53b677cf38f3ca3aa88a7)
-rw-r--r--source3/include/proto.h5
-rw-r--r--source3/rpc_client/cli_samr.c53
2 files changed, 58 insertions, 0 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 42277277b0..1eb5fbda03 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -7144,6 +7144,11 @@ uint32 reg_init_regval_buffer( REGVAL_BUFFER *buf2, REGISTRY_VALUE *val );
/* The following definitions come from rpc_client/cli_samr.c */
+NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ struct policy_handle *user_handle,
+ const char *newpassword,
+ const char *oldpassword);
NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *username,
diff --git a/source3/rpc_client/cli_samr.c b/source3/rpc_client/cli_samr.c
index d0c71c5bb1..ed42d56a02 100644
--- a/source3/rpc_client/cli_samr.c
+++ b/source3/rpc_client/cli_samr.c
@@ -25,6 +25,59 @@
/* User change password */
+NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ struct policy_handle *user_handle,
+ const char *newpassword,
+ const char *oldpassword)
+{
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+ struct samr_Password hash1, hash2, hash3, hash4, hash5, hash6;
+
+ uchar old_nt_hash[16];
+ uchar old_lm_hash[16];
+ uchar new_nt_hash[16];
+ uchar new_lm_hash[16];
+
+ ZERO_STRUCT(old_nt_hash);
+ ZERO_STRUCT(old_lm_hash);
+ ZERO_STRUCT(new_nt_hash);
+ ZERO_STRUCT(new_lm_hash);
+
+ DEBUG(10,("rpccli_samr_chgpasswd_user\n"));
+
+ E_md4hash(oldpassword, old_nt_hash);
+ E_md4hash(newpassword, new_nt_hash);
+
+ E_deshash(oldpassword, old_lm_hash);
+ E_deshash(newpassword, new_lm_hash);
+
+ E_old_pw_hash(new_lm_hash, old_lm_hash, hash1.hash);
+ E_old_pw_hash(old_lm_hash, new_lm_hash, hash2.hash);
+ E_old_pw_hash(new_nt_hash, old_nt_hash, hash3.hash);
+ E_old_pw_hash(old_nt_hash, new_nt_hash, hash4.hash);
+ E_old_pw_hash(old_lm_hash, new_nt_hash, hash5.hash);
+ E_old_pw_hash(old_nt_hash, new_lm_hash, hash6.hash);
+
+ result = rpccli_samr_ChangePasswordUser(cli, mem_ctx,
+ user_handle,
+ true,
+ &hash1,
+ &hash2,
+ true,
+ &hash3,
+ &hash4,
+ true,
+ &hash5,
+ true,
+ &hash6);
+
+ return result;
+}
+
+
+/* User change password */
+
NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx,
const char *username,