[SCM] Samba Shared Repository - branch master updated
Matthias Dieter Wallnöfer
mdw at samba.org
Mon Jun 28 06:51:39 MDT 2010
The branch, master has been updated
via 4fc51ad... s4:repl_meta_data LDB module - fix counter type
via fc2d8fc... s4:acl LDB module - fix counter type
via e5c5d37... s4:dcesrv_drsuapi.c - fix a counter variable
via 666b611... s4:selftest - also "rpc.samr.users.privileges" does work now
via 4826fdf... s4:lsa RPC server - Fix up "dcesrv_lsa_DeleteObject"
via d01e36e... s4:knownfail - "pwdLastSet" test does work now
via 5606173... s4:torture/rpc/samr.c - test_SetPassword_LastSet - introduce the delays also for s4
via c0160d0... s4:torture - SAMR password tests - activate support for password sets on level "18" and "21"
via b200d8a... s4:selftest - activate the lanman password changes
via d6098de... s4:dcesrv_samr_SetUserInfo - implement right "pwdLastSet" behaviour
via 3c1a9fb... s4:dcesrv_samr_SetUserInfo - deny operations when "fields_present" is 0
via ea83d21... s4:dcesrv_samr_SetUserInfo - port the "SAMR_FIELD_LAST_PWD_CHANGE" check from s3 to s4
via 4c63bb3... s4:dcesrv_samr_SetUserInfo - implement password set level 21
via b705026... s4:dcesrv_samr_SetUserInfo - implement case 18 which allows to reset the user password
via 8feda76... s4:OemChangePasswordUser2 - return "NT_STATUS_WRONG_PASSWORD" when we haven't activated the the lanman auth
via 8f20a55... s4:samr_password.c - add a function which sets the password through encrypted password hashes
from 427c953... s4-smbtorture: fix typo.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 4fc51ad07a1787241a4065d35c0d2783661e3a6a
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 11:25:43 2010 +0200
s4:repl_meta_data LDB module - fix counter type
commit fc2d8fcb83909845e4b4676ba37143dcb778d5ff
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 11:25:43 2010 +0200
s4:acl LDB module - fix counter type
commit e5c5d371d144847ce1fbb8daa634d6bfbc1af1ac
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 11:21:56 2010 +0200
s4:dcesrv_drsuapi.c - fix a counter variable
commit 666b611182562ad787d349f3a29c07c61339eee0
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 11:08:19 2010 +0200
s4:selftest - also "rpc.samr.users.privileges" does work now
commit 4826fdf95f68b63e5d35e13f8d033db0d0949587
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 11:05:59 2010 +0200
s4:lsa RPC server - Fix up "dcesrv_lsa_DeleteObject"
- Return always "NT_STATUS_OK" on success
- Remove "talloc_free"s on handles since the frees are automatically performed by
the DCE/RPC server code
commit d01e36e64716d8184eb225e1feb84ab464333139
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 10:45:26 2010 +0200
s4:knownfail - "pwdLastSet" test does work now
commit 560617399745cd04ddbe8ebe02662d631add9a05
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 28 10:43:11 2010 +0200
s4:torture/rpc/samr.c - test_SetPassword_LastSet - introduce the delays also for s4
commit c0160d0614ad74be275d4008559a45da3d79d2e7
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 12 15:47:14 2010 +0200
s4:torture - SAMR password tests - activate support for password sets on level "18" and "21"
commit b200d8a5ca2d58f5351b6963c864aa52db925f65
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Tue Jun 22 22:11:00 2010 +0200
s4:selftest - activate the lanman password changes
This is needed for a working "OemChangePasswordUser2" operation.
commit d6098de507ed46750ecd8063c075c5b1b2b3d32d
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 21 22:26:31 2010 +0200
s4:dcesrv_samr_SetUserInfo - implement right "pwdLastSet" behaviour
Behaviour as the torture SAMR passwords tests show.
commit 3c1a9fb87fe165485abaa694e9d9616e46c8cf6e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sun Jun 27 23:13:14 2010 +0200
s4:dcesrv_samr_SetUserInfo - deny operations when "fields_present" is 0
Taken from s3
commit ea83d21341306dfab1f14c9491856a9414a29669
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 21 14:54:19 2010 +0200
s4:dcesrv_samr_SetUserInfo - port the "SAMR_FIELD_LAST_PWD_CHANGE" check from s3 to s4
commit 4c63bb312fa33f6188e543a62282012edb651bbb
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 21 14:41:27 2010 +0200
s4:dcesrv_samr_SetUserInfo - implement password set level 21
commit b7050267717d7fba0ee4c6bf375e3cc9d2864717
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Sat Jun 12 14:40:11 2010 +0200
s4:dcesrv_samr_SetUserInfo - implement case 18 which allows to reset the user password
commit 8feda76d4fb4dac680b13e3234925802fb32e7f1
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 21 22:59:11 2010 +0200
s4:OemChangePasswordUser2 - return "NT_STATUS_WRONG_PASSWORD" when we haven't activated the the lanman auth
This is what s3 does.
commit 8f20a5512a91cb9c6e2e50040cd0b61d39521d69
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Mon Jun 21 21:16:20 2010 +0200
s4:samr_password.c - add a function which sets the password through encrypted password hashes
Used for password sets on "samr_SetUserInfo" level 18 and 21.
-----------------------------------------------------------------------
Summary of changes:
selftest/target/Samba4.pm | 1 +
source4/dsdb/samdb/ldb_modules/acl.c | 3 +-
source4/dsdb/samdb/ldb_modules/repl_meta_data.c | 2 +-
source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 3 +-
source4/rpc_server/lsa/dcesrv_lsa.c | 9 +-
source4/rpc_server/samr/dcesrv_samr.c | 133 ++++++++++++++++++++++-
source4/rpc_server/samr/samr_password.c | 50 +++++++++-
source4/selftest/knownfail | 2 -
source4/torture/rpc/samr.c | 42 ++++----
9 files changed, 211 insertions(+), 34 deletions(-)
Changeset truncated at 500 lines:
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index f3eebf1..b574623 100644
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -744,6 +744,7 @@ sub provision($$$$$$$$$)
server max protocol = SMB2
$extra_smbconf_options
host msdfs = $msdfs
+ lanman auth = yes
[tmp]
path = $ctx->{tmpdir}
diff --git a/source4/dsdb/samdb/ldb_modules/acl.c b/source4/dsdb/samdb/ldb_modules/acl.c
index b2aeb2a..bd788d4 100644
--- a/source4/dsdb/samdb/ldb_modules/acl.c
+++ b/source4/dsdb/samdb/ldb_modules/acl.c
@@ -704,7 +704,8 @@ static int acl_check_self_membership(struct ldb_module *module,
const struct GUID *oc_guid,
const struct dsdb_attribute *attr)
{
- int ret, i;
+ int ret;
+ unsigned int i;
TALLOC_CTX *tmp_ctx = talloc_new(req);
struct ldb_context *ldb = ldb_module_get_ctx(module);
struct ldb_dn *user_dn;
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
index 0a5655a..98a3c16 100644
--- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
+++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
@@ -2831,7 +2831,7 @@ static struct replPropertyMetaData1 *
replmd_replPropertyMetaData1_find_attid(struct replPropertyMetaDataBlob *md_blob,
enum drsuapi_DsAttributeId attid)
{
- int i;
+ uint32_t i;
struct replPropertyMetaDataCtr1 *rpmd_ctr = &md_blob->ctr.ctr1;
for (i = 0; i < rpmd_ctr->count; i++) {
diff --git a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
index 5d3c513..0f49a73 100644
--- a/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
+++ b/source4/rpc_server/drsuapi/dcesrv_drsuapi.c
@@ -352,8 +352,7 @@ static WERROR dcesrv_drsuapi_DsCrackNames(struct dcesrv_call_state *dce_call, TA
case 1: {
struct drsuapi_DsNameCtr1 *ctr1;
struct drsuapi_DsNameInfo1 *names;
- int count;
- int i;
+ uint32_t i, count;
ctr1 = talloc(mem_ctx, struct drsuapi_DsNameCtr1);
W_ERROR_HAVE_NO_MEMORY(ctr1);
diff --git a/source4/rpc_server/lsa/dcesrv_lsa.c b/source4/rpc_server/lsa/dcesrv_lsa.c
index 57c73e4..85fddf7 100644
--- a/source4/rpc_server/lsa/dcesrv_lsa.c
+++ b/source4/rpc_server/lsa/dcesrv_lsa.c
@@ -186,13 +186,12 @@ static NTSTATUS dcesrv_lsa_DeleteObject(struct dcesrv_call_state *dce_call, TALL
case SECURITY_ADMINISTRATOR:
break;
default:
- /* Users and annonymous are not allowed delete things */
+ /* Users and anonymous are not allowed to delete things */
return NT_STATUS_ACCESS_DENIED;
}
ret = ldb_delete(secret_state->sam_ldb,
secret_state->secret_dn);
- talloc_free(h);
if (ret != LDB_SUCCESS) {
return NT_STATUS_INVALID_HANDLE;
}
@@ -200,6 +199,7 @@ static NTSTATUS dcesrv_lsa_DeleteObject(struct dcesrv_call_state *dce_call, TALL
ZERO_STRUCTP(r->out.handle);
return NT_STATUS_OK;
+
} else if (h->wire_handle.handle_type == LSA_HANDLE_TRUSTED_DOMAIN) {
struct lsa_trusted_domain_state *trusted_domain_state =
talloc_get_type(h->data, struct lsa_trusted_domain_state);
@@ -228,10 +228,11 @@ static NTSTATUS dcesrv_lsa_DeleteObject(struct dcesrv_call_state *dce_call, TALL
if (ret != LDB_SUCCESS) {
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- talloc_free(h);
+
ZERO_STRUCTP(r->out.handle);
return NT_STATUS_OK;
+
} else if (h->wire_handle.handle_type == LSA_HANDLE_ACCOUNT) {
struct lsa_RightSet *rights;
struct lsa_account_state *astate;
@@ -272,6 +273,8 @@ static NTSTATUS dcesrv_lsa_DeleteObject(struct dcesrv_call_state *dce_call, TALL
}
ZERO_STRUCTP(r->out.handle);
+
+ return NT_STATUS_OK;
}
return NT_STATUS_INVALID_HANDLE;
diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c
index 67098f6..9200d37 100644
--- a/source4/rpc_server/samr/dcesrv_samr.c
+++ b/source4/rpc_server/samr/dcesrv_samr.c
@@ -3168,11 +3168,36 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
SET_UINT64(msg, info17.acct_expiry, "accountExpires");
break;
+ case 18:
+ status = samr_set_password_buffers(dce_call,
+ a_state->sam_ctx,
+ a_state->account_dn,
+ a_state->domain_state->domain_dn,
+ mem_ctx,
+ r->in.info->info18.lm_pwd_active ? r->in.info->info18.lm_pwd.hash : NULL,
+ r->in.info->info18.nt_pwd_active ? r->in.info->info18.nt_pwd.hash : NULL);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ if (r->in.info->info18.password_expired > 0) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
+ break;
+
case 20:
SET_PARAMETERS(msg, info20.parameters, "userParameters");
break;
case 21:
+ if (r->in.info->info21.fields_present == 0)
+ return NT_STATUS_INVALID_PARAMETER;
+
#define IFSET(bit) if (bit & r->in.info->info21.fields_present)
IFSET(SAMR_FIELD_ACCT_EXPIRY)
SET_UINT64(msg, info21.acct_expiry, "accountExpires");
@@ -3206,10 +3231,58 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
SET_UINT (msg, info21.country_code, "countryCode");
IFSET(SAMR_FIELD_CODE_PAGE)
SET_UINT (msg, info21.code_page, "codePage");
+
+ /* password change fields */
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
+ return NT_STATUS_ACCESS_DENIED;
+
+ IFSET((SAMR_FIELD_LM_PASSWORD_PRESENT
+ | SAMR_FIELD_NT_PASSWORD_PRESENT)) {
+ uint8_t *lm_pwd_hash = NULL, *nt_pwd_hash = NULL;
+
+ if (r->in.info->info21.lm_password_set) {
+ if ((r->in.info->info21.lm_owf_password.length != 16)
+ || (r->in.info->info21.lm_owf_password.size != 16)) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ lm_pwd_hash = (uint8_t *) r->in.info->info21.lm_owf_password.array;
+ }
+ if (r->in.info->info21.nt_password_set) {
+ if ((r->in.info->info21.nt_owf_password.length != 16)
+ || (r->in.info->info21.nt_owf_password.size != 16)) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ nt_pwd_hash = (uint8_t *) r->in.info->info21.nt_owf_password.array;
+ }
+ status = samr_set_password_buffers(dce_call,
+ a_state->sam_ctx,
+ a_state->account_dn,
+ a_state->domain_state->domain_dn,
+ mem_ctx,
+ lm_pwd_hash,
+ nt_pwd_hash);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
+ IFSET(SAMR_FIELD_EXPIRED_FLAG) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
#undef IFSET
break;
case 23:
+ if (r->in.info->info23.info.fields_present == 0)
+ return NT_STATUS_INVALID_PARAMETER;
+
#define IFSET(bit) if (bit & r->in.info->info23.info.fields_present)
IFSET(SAMR_FIELD_ACCT_EXPIRY)
SET_UINT64(msg, info23.info.acct_expiry, "accountExpires");
@@ -3244,6 +3317,10 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
IFSET(SAMR_FIELD_CODE_PAGE)
SET_UINT (msg, info23.info.code_page, "codePage");
+ /* password change fields */
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
+ return NT_STATUS_ACCESS_DENIED;
+
IFSET(SAMR_FIELD_NT_PASSWORD_PRESENT) {
status = samr_set_password(dce_call,
a_state->sam_ctx,
@@ -3259,6 +3336,18 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
mem_ctx,
&r->in.info->info23.password);
}
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ IFSET(SAMR_FIELD_EXPIRED_FLAG) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
#undef IFSET
break;
@@ -3270,9 +3359,24 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
a_state->domain_state->domain_dn,
mem_ctx,
&r->in.info->info24.password);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ if (r->in.info->info24.password_expired > 0) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
break;
case 25:
+ if (r->in.info->info25.info.fields_present == 0)
+ return NT_STATUS_INVALID_PARAMETER;
+
#define IFSET(bit) if (bit & r->in.info->info25.info.fields_present)
IFSET(SAMR_FIELD_ACCT_EXPIRY)
SET_UINT64(msg, info25.info.acct_expiry, "accountExpires");
@@ -3307,6 +3411,10 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
IFSET(SAMR_FIELD_CODE_PAGE)
SET_UINT (msg, info25.info.code_page, "codePage");
+ /* password change fields */
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
+ return NT_STATUS_ACCESS_DENIED;
+
IFSET(SAMR_FIELD_NT_PASSWORD_PRESENT) {
status = samr_set_password_ex(dce_call,
a_state->sam_ctx,
@@ -3322,6 +3430,18 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
mem_ctx,
&r->in.info->info25.password);
}
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ IFSET(SAMR_FIELD_EXPIRED_FLAG) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
#undef IFSET
break;
@@ -3333,8 +3453,19 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
a_state->domain_state->domain_dn,
mem_ctx,
&r->in.info->info26.password);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ if (r->in.info->info26.password_expired > 0) {
+ struct ldb_message_element *set_el;
+ if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ set_el = ldb_msg_find_element(msg, "pwdLastSet");
+ set_el->flags = LDB_FLAG_MOD_REPLACE;
+ }
break;
-
default:
/* many info classes are not valid for SetUserInfo */
diff --git a/source4/rpc_server/samr/samr_password.c b/source4/rpc_server/samr/samr_password.c
index 288df91..ff24781 100644
--- a/source4/rpc_server/samr/samr_password.c
+++ b/source4/rpc_server/samr/samr_password.c
@@ -184,7 +184,7 @@ NTSTATUS dcesrv_samr_OemChangePasswordUser2(struct dcesrv_call_state *dce_call,
/* this call can only work with lanman auth */
if (!lp_lanman_auth(dce_call->conn->dce_ctx->lp_ctx)) {
- return NT_STATUS_NOT_SUPPORTED;
+ return NT_STATUS_WRONG_PASSWORD;
}
/* To change a password we need to open as system */
@@ -554,3 +554,51 @@ NTSTATUS samr_set_password_ex(struct dcesrv_call_state *dce_call,
NULL, NULL);
}
+/*
+ set password via encrypted NT and LM hash buffers
+*/
+NTSTATUS samr_set_password_buffers(struct dcesrv_call_state *dce_call,
+ struct ldb_context *sam_ctx,
+ struct ldb_dn *account_dn,
+ struct ldb_dn *domain_dn,
+ TALLOC_CTX *mem_ctx,
+ const uint8_t *lm_pwd_hash,
+ const uint8_t *nt_pwd_hash)
+{
+ struct samr_Password *d_lm_pwd_hash = NULL, *d_nt_pwd_hash = NULL;
+ DATA_BLOB session_key = data_blob(NULL, 0);
+ DATA_BLOB in, out;
+ NTSTATUS nt_status = NT_STATUS_OK;
+
+ nt_status = dcesrv_fetch_session_key(dce_call->conn, &session_key);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ return nt_status;
+ }
+
+ if (lm_pwd_hash != NULL) {
+ in = data_blob_const(lm_pwd_hash, 16);
+ out = data_blob_talloc_zero(mem_ctx, 16);
+
+ sess_crypt_blob(&out, &in, &session_key, false);
+
+ d_lm_pwd_hash = (struct samr_Password *) out.data;
+ }
+ if (nt_pwd_hash != NULL) {
+ in = data_blob_const(nt_pwd_hash, 16);
+ out = data_blob_talloc_zero(mem_ctx, 16);
+
+ sess_crypt_blob(&out, &in, &session_key, false);
+
+ d_nt_pwd_hash = (struct samr_Password *) out.data;
+ }
+
+ if ((d_lm_pwd_hash != NULL) || (d_nt_pwd_hash != NULL)) {
+ nt_status = samdb_set_password(sam_ctx, mem_ctx, account_dn,
+ domain_dn, NULL,
+ d_lm_pwd_hash, d_nt_pwd_hash,
+ false, /* this is a password set */
+ NULL, NULL);
+ }
+
+ return nt_status;
+}
diff --git a/source4/selftest/knownfail b/source4/selftest/knownfail
index cec71b1..a1f383e 100644
--- a/source4/selftest/knownfail
+++ b/source4/selftest/knownfail
@@ -34,10 +34,8 @@ samba4.rpc.netlogon.*.GetPassword
samba4.rpc.netlogon.*.GetTrustPasswords
samba4.rpc.netlogon.*.DatabaseRedo
samba4.rpc.netlogon.*.ServerGetTrustInfo
-samba4.rpc.samr.passwords.pwdlastset # Not provided by Samba 4 yet
samba4.rpc.samr.passwords.badpwdcount # Not provided by Samba 4 yet
samba4.rpc.samr.passwords.lockout
-samba4.rpc.samr.users.privileges
samba4.rpc.spoolss # Not provided by Samba 4 yet
samba4.base.charset.*.Testing partial surrogate
.*net.api.delshare.* # DelShare isn't implemented yet
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
index c514ed6..59f020d 100644
--- a/source4/torture/rpc/samr.c
+++ b/source4/torture/rpc/samr.c
@@ -3111,7 +3111,8 @@ static bool test_SetPassword_pwdlastset(struct dcerpc_pipe *p,
};
struct dcerpc_pipe *np = NULL;
- if (torture_setting_bool(tctx, "samba3", false)) {
+ if (torture_setting_bool(tctx, "samba3", false) ||
+ torture_setting_bool(tctx, "samba4", false)) {
delay = 999999;
torture_comment(tctx, "Samba3 has second granularity, setting delay to: %d\n",
delay);
@@ -4684,34 +4685,29 @@ static bool test_user_ops(struct dcerpc_pipe *p,
ret = false;
}
- if (torture_setting_bool(tctx, "samba4", false)) {
- torture_comment(tctx, "skipping Set Password level 18 and 21 against Samba4\n");
- } else {
+ if (!test_SetUserPass_18(p, tctx, user_handle, &password)) {
+ ret = false;
+ }
- if (!test_SetUserPass_18(p, tctx, user_handle, &password)) {
- ret = false;
+ if (!test_ChangePasswordUser3(p, tctx, base_acct_name, 0, &password, NULL, 0, false)) {
+ ret = false;
+ }
+
+ for (i = 0; password_fields[i]; i++) {
+
+ if (password_fields[i] == SAMR_FIELD_LM_PASSWORD_PRESENT) {
+ /* we need to skip as that would break
+ * the ChangePasswordUser3 verify */
+ continue;
}
- if (!test_ChangePasswordUser3(p, tctx, base_acct_name, 0, &password, NULL, 0, false)) {
+ if (!test_SetUserPass_21(p, tctx, user_handle, password_fields[i], &password)) {
ret = false;
}
- for (i = 0; password_fields[i]; i++) {
-
- if (password_fields[i] == SAMR_FIELD_LM_PASSWORD_PRESENT) {
- /* we need to skip as that would break
- * the ChangePasswordUser3 verify */
- continue;
- }
-
- if (!test_SetUserPass_21(p, tctx, user_handle, password_fields[i], &password)) {
- ret = false;
- }
-
- /* check it was set right */
- if (!test_ChangePasswordUser3(p, tctx, base_acct_name, 0, &password, NULL, 0, false)) {
- ret = false;
- }
+ /* check it was set right */
+ if (!test_ChangePasswordUser3(p, tctx, base_acct_name, 0, &password, NULL, 0, false)) {
+ ret = false;
}
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list