[SCM] Samba Shared Repository - branch v3-6-test updated
Andreas Schneider
asn at samba.org
Fri Jan 21 07:21:55 MST 2011
The branch, v3-6-test has been updated
via a1f5754 s3-rpc_client: Added dcerpc_try_samr_connects.
via 68afebf s3-rpc_client: Rename get_query_dispinfo_params. (cherry picked from commit 089c25cbbb44547bbb03d54ec4e2c1f5ebd10f86)
via 7e6fcf8 s3-rpc_client: Added dcerpc_samr_chgpasswd_user3. (cherry picked from commit e6475f2151eb94b2e9010f9e0f4d3d8c2c315b81)
via cf21b02 s3-rpc_client: Added dcerpc_samr_chng_pswd_auth_crap. (cherry picked from commit 200772653ae295b4c5142d943faf7a2c878121a9)
via ab1ea9a s3-rpc_client: Added dcerpc_samr_chgpasswd_user2. (cherry picked from commit 3de564b9b6559690578ca649f8acf52d82bc592e)
via 5bbabae s3-rpc_client: Added dcerpc_samr_chgpasswd_user. (cherry picked from commit 78c4f72c311fb23ab37ed892fe67b75421736803)
via ef46a0f s3-rpc_client: Added header information to cli_samr.h. (cherry picked from commit 8b1ffc770c50b789ce923f585b20a74d9b42f2ee)
via ba7dcd0 s3-rpc_client: Added header information to cli_lsarpc.h. (cherry picked from commit 1efa9b1cbd5576e1985a909afa43d24cc3fa2bb0)
from 3f8b53e s3:printing: use dcerpc_spoolss_X() functions
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit a1f5754ce6b33c80d73fdbf3408bd258a88bfb6a
Author: Andreas Schneider <asn at samba.org>
Date: Wed Jan 12 15:51:49 2011 +0100
s3-rpc_client: Added dcerpc_try_samr_connects.
Autobuild-User: Andreas Schneider <asn at samba.org>
Autobuild-Date: Fri Jan 21 15:19:01 CET 2011 on sn-devel-104
(cherry picked from commit 5db115a3041faee7c924cf26c1635f6028ae7df8)
commit 68afebf217797188fab785afc2d08d66ce073b93
Author: Andreas Schneider <asn at samba.org>
Date: Wed Jan 12 15:36:19 2011 +0100
s3-rpc_client: Rename get_query_dispinfo_params.
(cherry picked from commit 089c25cbbb44547bbb03d54ec4e2c1f5ebd10f86)
commit 7e6fcf81e2ef8c4bb1163dedbeb6b56913d2a6e3
Author: Andreas Schneider <asn at samba.org>
Date: Wed Jan 12 15:14:35 2011 +0100
s3-rpc_client: Added dcerpc_samr_chgpasswd_user3.
(cherry picked from commit e6475f2151eb94b2e9010f9e0f4d3d8c2c315b81)
commit cf21b02ee5f53351a6e8825f4841ed61e4d8c90b
Author: Andreas Schneider <asn at samba.org>
Date: Wed Jan 12 09:04:19 2011 +0100
s3-rpc_client: Added dcerpc_samr_chng_pswd_auth_crap.
(cherry picked from commit 200772653ae295b4c5142d943faf7a2c878121a9)
commit ab1ea9ac59edf53f6baf9ad6519cba59915c6b7f
Author: Andreas Schneider <asn at samba.org>
Date: Wed Jan 12 08:46:28 2011 +0100
s3-rpc_client: Added dcerpc_samr_chgpasswd_user2.
(cherry picked from commit 3de564b9b6559690578ca649f8acf52d82bc592e)
commit 5bbabae6f74b18c82d56c79606ae980a3e635e31
Author: Andreas Schneider <asn at samba.org>
Date: Tue Jan 11 13:07:02 2011 +0100
s3-rpc_client: Added dcerpc_samr_chgpasswd_user.
(cherry picked from commit 78c4f72c311fb23ab37ed892fe67b75421736803)
commit ef46a0f61901983196ba74c0141639232a6c8128
Author: Andreas Schneider <asn at samba.org>
Date: Tue Jan 11 12:56:44 2011 +0100
s3-rpc_client: Added header information to cli_samr.h.
(cherry picked from commit 8b1ffc770c50b789ce923f585b20a74d9b42f2ee)
commit ba7dcd0aab61d5937951e9a3c4c04a622cd98b62
Author: Andreas Schneider <asn at samba.org>
Date: Tue Jan 11 12:56:08 2011 +0100
s3-rpc_client: Added header information to cli_lsarpc.h.
(cherry picked from commit 1efa9b1cbd5576e1985a909afa43d24cc3fa2bb0)
-----------------------------------------------------------------------
Summary of changes:
source3/rpc_client/cli_lsarpc.h | 30 +++++
source3/rpc_client/cli_samr.c | 236 +++++++++++++++++++++++++++++++--------
source3/rpc_client/cli_samr.h | 197 ++++++++++++++++++++++++++++++++-
source3/rpcclient/cmd_samr.c | 2 +-
source3/utils/net_rpc.c | 4 +-
source3/winbindd/winbindd_rpc.c | 6 +-
6 files changed, 422 insertions(+), 53 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/rpc_client/cli_lsarpc.h b/source3/rpc_client/cli_lsarpc.h
index 26fcb75..a26193e 100644
--- a/source3/rpc_client/cli_lsarpc.h
+++ b/source3/rpc_client/cli_lsarpc.h
@@ -1,3 +1,32 @@
+/*
+ * Unix SMB/CIFS implementation.
+ *
+ * LSARPC client routines
+ *
+ * Copyright (c) 2000-2001 Tim Potter
+ * Copyright (c) 1992-2000 Andrew Tridgell
+ * Copyright (c) 2002 Rafal Szczesniak
+ * Copyright (c) 2005 Jeremy Allison
+ * Copyright (c) 2007 Michael Adam
+ * Copyright (c) 2008 Guenther Deschner
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _CLI_LSARPC_H
+#define _CLI_LSARPC_H
+
/* The following definitions come from rpc_client/cli_lsarpc.c */
/**
@@ -178,3 +207,4 @@ NTSTATUS rpccli_lsa_lookup_names4(struct rpc_pipe_client *cli,
bool fetch_domain_sid( char *domain, char *remote_machine, struct dom_sid *psid);
+#endif /* _CLI_LSARPC_H */
diff --git a/source3/rpc_client/cli_samr.c b/source3/rpc_client/cli_samr.c
index 7f5e6fc..2716a74 100644
--- a/source3/rpc_client/cli_samr.c
+++ b/source3/rpc_client/cli_samr.c
@@ -30,13 +30,14 @@
/* User change password */
-NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
+NTSTATUS dcerpc_samr_chgpasswd_user(struct dcerpc_binding_handle *h,
TALLOC_CTX *mem_ctx,
struct policy_handle *user_handle,
const char *newpassword,
- const char *oldpassword)
+ const char *oldpassword,
+ NTSTATUS *presult)
{
- NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+ NTSTATUS status;
struct samr_Password hash1, hash2, hash3, hash4, hash5, hash6;
uchar old_nt_hash[16];
@@ -64,7 +65,8 @@ NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
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,
+ status = dcerpc_samr_ChangePasswordUser(h,
+ mem_ctx,
user_handle,
true,
&hash1,
@@ -75,35 +77,59 @@ NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
true,
&hash5,
true,
- &hash6);
+ &hash6,
+ presult);
- return result;
+ return status;
}
+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 status;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+ status = dcerpc_samr_chgpasswd_user(cli->binding_handle,
+ mem_ctx,
+ user_handle,
+ newpassword,
+ oldpassword,
+ &result);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return result;
+}
/* User change password */
-NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli,
+NTSTATUS dcerpc_samr_chgpasswd_user2(struct dcerpc_binding_handle *h,
TALLOC_CTX *mem_ctx,
+ const char *srv_name_slash,
const char *username,
const char *newpassword,
- const char *oldpassword)
+ const char *oldpassword,
+ 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;
struct samr_Password old_lanman_hash_enc;
- uchar old_nt_hash[16];
- uchar old_lanman_hash[16];
- uchar new_nt_hash[16];
- uchar new_lanman_hash[16];
+ uint8_t old_nt_hash[16];
+ uint8_t old_lanman_hash[16];
+ uint8_t new_nt_hash[16];
+ uint8_t new_lanman_hash[16];
struct lsa_String server, account;
DEBUG(10,("rpccli_samr_chgpasswd_user2\n"));
- init_lsa_String(&server, cli->srv_name_slash);
+ init_lsa_String(&server, srv_name_slash);
init_lsa_String(&account, username);
/* Calculate the MD4 hash (NT compatible) of the password */
@@ -132,29 +158,56 @@ NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli,
arcfour_crypt(new_nt_password.data, old_nt_hash, 516);
E_old_pw_hash(new_nt_hash, old_nt_hash, old_nt_hash_enc.hash);
- 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_lanman_hash_enc);
+ &old_lanman_hash_enc,
+ presult);
+
+ return status;
+}
+
+NTSTATUS rpccli_samr_chgpasswd_user2(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ const char *username,
+ const char *newpassword,
+ const char *oldpassword)
+{
+ NTSTATUS status;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+ status = dcerpc_samr_chgpasswd_user2(cli->binding_handle,
+ mem_ctx,
+ cli->srv_name_slash,
+ username,
+ newpassword,
+ oldpassword,
+ &result);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
return result;
}
/* 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;
@@ -163,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) {
@@ -190,27 +243,58 @@ 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 */
-NTSTATUS rpccli_samr_chgpasswd_user3(struct rpc_pipe_client *cli,
+NTSTATUS dcerpc_samr_chgpasswd_user3(struct dcerpc_binding_handle *h,
TALLOC_CTX *mem_ctx,
+ const char *srv_name_slash,
const char *username,
const char *newpassword,
const char *oldpassword,
struct samr_DomInfo1 **dominfo1,
- struct userPwdChangeFailureInformation **reject)
+ struct userPwdChangeFailureInformation **reject,
+ NTSTATUS *presult)
{
NTSTATUS status;
@@ -219,16 +303,16 @@ NTSTATUS rpccli_samr_chgpasswd_user3(struct rpc_pipe_client *cli,
struct samr_Password old_nt_hash_enc;
struct samr_Password old_lanman_hash_enc;
- uchar old_nt_hash[16];
- uchar old_lanman_hash[16];
- uchar new_nt_hash[16];
- uchar new_lanman_hash[16];
+ uint8_t old_nt_hash[16];
+ uint8_t old_lanman_hash[16];
+ uint8_t new_nt_hash[16];
+ uint8_t new_lanman_hash[16];
struct lsa_String server, account;
DEBUG(10,("rpccli_samr_chgpasswd_user3\n"));
- init_lsa_String(&server, cli->srv_name_slash);
+ init_lsa_String(&server, srv_name_slash);
init_lsa_String(&account, username);
/* Calculate the MD4 hash (NT compatible) of the password */
@@ -257,7 +341,8 @@ NTSTATUS rpccli_samr_chgpasswd_user3(struct rpc_pipe_client *cli,
arcfour_crypt(new_nt_password.data, old_nt_hash, 516);
E_old_pw_hash(new_nt_hash, old_nt_hash, old_nt_hash_enc.hash);
- status = rpccli_samr_ChangePasswordUser3(cli, mem_ctx,
+ status = dcerpc_samr_ChangePasswordUser3(h,
+ mem_ctx,
&server,
&account,
&new_nt_password,
@@ -267,17 +352,47 @@ NTSTATUS rpccli_samr_chgpasswd_user3(struct rpc_pipe_client *cli,
&old_lanman_hash_enc,
NULL,
dominfo1,
- reject);
+ reject,
+ presult);
+
return status;
}
+NTSTATUS rpccli_samr_chgpasswd_user3(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ const char *username,
+ const char *newpassword,
+ const char *oldpassword,
+ struct samr_DomInfo1 **dominfo1,
+ struct userPwdChangeFailureInformation **reject)
+{
+ NTSTATUS status;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+ status = dcerpc_samr_chgpasswd_user3(cli->binding_handle,
+ mem_ctx,
+ cli->srv_name_slash,
+ username,
+ newpassword,
+ oldpassword,
+ dominfo1,
+ reject,
+ &result);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return result;
+}
+
/* This function returns the bizzare set of (max_entries, max_size) required
for the QueryDisplayInfo RPC to actually work against a domain controller
with large (10k and higher) numbers of users. These values were
obtained by inspection using ethereal and NT4 running User Manager. */
-void get_query_dispinfo_params(int loop_count, uint32 *max_entries,
- uint32 *max_size)
+void dcerpc_get_query_dispinfo_params(int loop_count,
+ uint32_t *max_entries,
+ uint32_t *max_size)
{
switch(loop_count) {
case 0:
@@ -303,10 +418,12 @@ void get_query_dispinfo_params(int loop_count, uint32 *max_entries,
}
}
-NTSTATUS rpccli_try_samr_connects(struct rpc_pipe_client *cli,
+NTSTATUS dcerpc_try_samr_connects(struct dcerpc_binding_handle *h,
TALLOC_CTX *mem_ctx,
+ const char *srv_name_slash,
uint32_t access_mask,
- struct policy_handle *connect_pol)
+ struct policy_handle *connect_pol,
+ NTSTATUS *presult)
{
NTSTATUS status;
union samr_ConnectInfo info_in, info_out;
@@ -318,31 +435,60 @@ NTSTATUS rpccli_try_samr_connects(struct rpc_pipe_client *cli,
info1.client_version = SAMR_CONNECT_W2K;
info_in.info1 = info1;
- status = rpccli_samr_Connect5(cli, mem_ctx,
- cli->srv_name_slash,
+ status = dcerpc_samr_Connect5(h,
+ mem_ctx,
+ srv_name_slash,
access_mask,
1,
&info_in,
&lvl_out,
&info_out,
- connect_pol);
+ connect_pol,
+ presult);
if (NT_STATUS_IS_OK(status)) {
return status;
}
- status = rpccli_samr_Connect4(cli, mem_ctx,
- cli->srv_name_slash,
+ status = dcerpc_samr_Connect4(h,
+ mem_ctx,
+ srv_name_slash,
SAMR_CONNECT_W2K,
access_mask,
- connect_pol);
+ connect_pol,
+ presult);
if (NT_STATUS_IS_OK(status)) {
return status;
}
- status = rpccli_samr_Connect2(cli, mem_ctx,
- cli->srv_name_slash,
+ status = dcerpc_samr_Connect2(h,
+ mem_ctx,
+ srv_name_slash,
access_mask,
- connect_pol);
+ connect_pol,
+ presult);
+
return status;
}
+NTSTATUS rpccli_try_samr_connects(struct rpc_pipe_client *cli,
+ TALLOC_CTX *mem_ctx,
+ uint32_t access_mask,
+ struct policy_handle *connect_pol)
+{
+ NTSTATUS status;
+ NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+ status = dcerpc_try_samr_connects(cli->binding_handle,
+ mem_ctx,
+ cli->srv_name_slash,
+ access_mask,
+ connect_pol,
+ &result);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ return result;
+}
+
+/* vim: set ts=8 sw=8 noet cindent: */
diff --git a/source3/rpc_client/cli_samr.h b/source3/rpc_client/cli_samr.h
index da0be18..76993fb 100644
--- a/source3/rpc_client/cli_samr.h
+++ b/source3/rpc_client/cli_samr.h
@@ -1,15 +1,131 @@
+/*
+ * Unix SMB/CIFS implementation.
+ *
+ * SAMR client routines
+ *
+ * Copyright (c) 2000-2001 Tim Potter
+ * Copyright (c) 1992-2000 Andrew Tridgell
+ * Copyright (c) 2002 Rafal Szczesniak
+ * Copyright (c) 2005 Jeremy Allison
+ * Copyright (c) 2007 Michael Adam
+ * Copyright (c) 2008 Guenther Deschner
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _CLI_SAMR_H
+#define _CLI_SAMR_H
+
/* The following definitions come from rpc_client/cli_samr.c */
+/**
+ * @brief Change the password of a user.
+ *
+ * @param[in] h The dcerpc binding hanlde to use.
+ *
+ * @param[in] mem_ctx The memory context to use.
+ *
+ * @param[in] user_handle The password of the user to chang the handle
+ *
+ * @param[in] newpassword The new password to set.
+ *
+ * @param[in] oldpassword The old password for verification
+ *
+ * @param[out] presult A pointer for the NDR NTSTATUS error code.
+ *
+ * @return A corresponding NTSTATUS error code for the connection.
+ */
--
Samba Shared Repository
More information about the samba-cvs
mailing list