Author: abartlet Date: 2006-07-06 05:09:14 +0000 (Thu, 06 Jul 2006) New Revision: 16826
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16826 Log: Ensure we don't segfault if the remote server fails to set a password in RPC-SAMR test. Andrew Bartlett Modified: branches/SAMBA_4_0/source/torture/rpc/samr.c Changeset: Modified: branches/SAMBA_4_0/source/torture/rpc/samr.c =================================================================== --- branches/SAMBA_4_0/source/torture/rpc/samr.c 2006-07-06 05:08:30 UTC (rev 16825) +++ branches/SAMBA_4_0/source/torture/rpc/samr.c 2006-07-06 05:09:14 UTC (rev 16826) @@ -942,7 +942,7 @@ BOOL ret = True; struct samr_Password hash1, hash2, hash3, hash4, hash5, hash6; struct policy_handle user_handle; - char *oldpass = *password; + char *oldpass; uint8_t old_nt_hash[16], new_nt_hash[16]; uint8_t old_lm_hash[16], new_lm_hash[16]; @@ -964,6 +964,13 @@ printf("Testing ChangePasswordUser\n"); + if (!*password) { + printf("Failing ChangePasswordUser as old password was NULL. Previous test failed?\n"); + return False; + } + + oldpass = *password; + E_md4hash(oldpass, old_nt_hash); E_md4hash(newpass, new_nt_hash); E_deshash(oldpass, old_lm_hash); @@ -1015,7 +1022,7 @@ struct samr_Password lm_verifier; struct samr_CryptPassword lm_pass; struct lsa_AsciiString server, account, account_bad; - char *oldpass = *password; + char *oldpass; char *newpass; uint8_t old_lm_hash[16], new_lm_hash[16]; @@ -1023,11 +1030,19 @@ int policy_min_pw_len = 0; struct lsa_String domain_name; + domain_name.string = ""; dom_pw_info.in.domain_name = &domain_name; printf("Testing OemChangePasswordUser2\n"); + if (!*password) { + printf("Failing OemChangePasswordUser2 as old password was NULL. Previous test failed?\n"); + return False; + } + + oldpass = *password; + status = dcerpc_samr_GetDomPwInfo(p, mem_ctx, &dom_pw_info); if (NT_STATUS_IS_OK(status)) { policy_min_pw_len = dom_pw_info.out.info.min_password_length; @@ -1109,7 +1124,7 @@ struct lsa_String server, account; struct samr_CryptPassword nt_pass, lm_pass; struct samr_Password nt_verifier, lm_verifier; - char *oldpass = *password; + char *oldpass; char *newpass; uint8_t old_nt_hash[16], new_nt_hash[16]; uint8_t old_lm_hash[16], new_lm_hash[16]; @@ -1118,11 +1133,19 @@ int policy_min_pw_len = 0; struct lsa_String domain_name; + + domain_name.string = ""; dom_pw_info.in.domain_name = &domain_name; printf("Testing ChangePasswordUser2\n"); + if (!*password) { + printf("Failing ChangePasswordUser3 as old password was NULL. Previous test failed?\n"); + return False; + } + oldpass = *password; + status = dcerpc_samr_GetDomPwInfo(p, mem_ctx, &dom_pw_info); if (NT_STATUS_IS_OK(status)) { policy_min_pw_len = dom_pw_info.out.info.min_password_length; @@ -1180,13 +1203,19 @@ struct lsa_String server, account, account_bad; struct samr_CryptPassword nt_pass, lm_pass; struct samr_Password nt_verifier, lm_verifier; - char *oldpass = *password; + char *oldpass; char *newpass = samr_rand_pass(mem_ctx, policy_min_pw_len); uint8_t old_nt_hash[16], new_nt_hash[16]; uint8_t old_lm_hash[16], new_lm_hash[16]; printf("Testing ChangePasswordUser3\n"); + if (!*password) { + printf("Failing ChangePasswordUser3 as old password was NULL. Previous test failed?\n"); + return False; + } + + oldpass = *password; server.string = talloc_asprintf(mem_ctx, "\\\\%s", dcerpc_server_name(p)); init_lsa_String(&account, account_string); @@ -1776,7 +1805,7 @@ if (!test_SetUserPass(p, user_ctx, user_handle, &password)) { ret = False; - } + } for (i = 0; password_fields[i]; i++) { if (!test_SetUserPass_23(p, user_ctx, user_handle, password_fields[i], &password)) {
