]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4-torture: flesh out ntlmssp_AUTHENTICATE_MESSAGE_check().
authorGünther Deschner <gd@samba.org>
Tue, 17 Nov 2015 17:35:29 +0000 (18:35 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 4 Feb 2016 08:29:17 +0000 (09:29 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source4/torture/ndr/ntlmssp.c

index f00c26e0b3627d448e1896c335b4db43c1ccc747..5b879c6b4d646e85e2fc1bd8a7aa32edd83bfb21 100644 (file)
@@ -166,6 +166,113 @@ static const uint8_t ntlmssp_AUTHENTICATE_MESSAGE_data[] = {
 static bool ntlmssp_AUTHENTICATE_MESSAGE_check(struct torture_context *tctx,
                                               struct AUTHENTICATE_MESSAGE *r)
 {
+       uint8_t lm_challenge_response[24] = { 0 };
+       struct NTLMv2_RESPONSE v2;
+       struct AV_PAIR_LIST AvPairs;
+       uint8_t Response[16] = {
+               0x38, 0xcf, 0xfb, 0x39, 0x5a, 0xb3, 0x4c, 0x58,
+               0x86, 0x35, 0xa3, 0xe7, 0x1e, 0x00, 0x98, 0x43
+       };
+       uint8_t ChallengeFromClient[8] = {
+               0x3c, 0x21, 0x0a, 0xe9, 0xde, 0x61, 0xc0, 0x7e
+       };
+       uint8_t MachineId[32] = {
+               0x0a, 0xfd, 0x3b, 0x2c, 0xad, 0x43, 0x46, 0x8b,
+               0x49, 0x01, 0x6c, 0xa5, 0xf3, 0xbc, 0xd2, 0x13,
+               0xbb, 0x70, 0xe2, 0x65, 0x96, 0xba, 0x0d, 0x8d,
+               0x5d, 0x31, 0xe6, 0x47, 0x94, 0x61, 0xed, 0x28
+       };
+       uint8_t EncryptedRandomSessionKey[16] = {
+               0xA4, 0x23, 0xD4, 0x5C, 0x16, 0x52, 0x8D, 0x56,
+               0x34, 0x2D, 0x1C, 0xFF, 0x86, 0x17, 0xC9, 0x4F
+       };
+
+       torture_assert_str_equal(tctx, r->Signature, "NTLMSSP", "Signature");
+       torture_assert_int_equal(tctx, r->MessageType, NtLmAuthenticate, "MessageType");
+       torture_assert_int_equal(tctx, r->LmChallengeResponseLen, 24, "LmChallengeResponseLen");
+       torture_assert_int_equal(tctx, r->LmChallengeResponseMaxLen, 24, "LmChallengeResponseMaxLen");
+       torture_assert_mem_equal(tctx, r->LmChallengeResponse->v1.Response, lm_challenge_response, 24, "LmChallengeResponse");
+
+       torture_assert_int_equal(tctx, r->NtChallengeResponseLen, 270, "NtChallengeResponseLen");
+       torture_assert_int_equal(tctx, r->NtChallengeResponseMaxLen, 270, "NtChallengeResponseMaxLen");
+
+       v2 = r->NtChallengeResponse->v2;
+
+       torture_assert_mem_equal(tctx, v2.Response, Response, 16, "v2.Response");
+       torture_assert_int_equal(tctx, v2.Challenge.RespType, 1, "RespType");
+       torture_assert_int_equal(tctx, v2.Challenge.HiRespType, 1, "HiRespType");
+       torture_assert_int_equal(tctx, v2.Challenge.Reserved1, 0, "Reserved1");
+       torture_assert_int_equal(tctx, v2.Challenge.Reserved2, 0, "Reserved2");
+       /*      TimeStamp                : Tue Sep 14 17:06:53 2010 CEST */
+       torture_assert_mem_equal(tctx, v2.Challenge.ChallengeFromClient, ChallengeFromClient, 8, "v2.Challenge.ChallengeFromClient");
+       torture_assert_int_equal(tctx, v2.Challenge.Reserved3, 0, "Reserved3");
+
+       AvPairs = v2.Challenge.AvPairs;
+
+       torture_assert_int_equal(tctx, AvPairs.count, 8, "AvPairs.count");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[0].AvId, MsvAvNbDomainName, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[0].AvLen, 10, "AvLen");
+       torture_assert_str_equal(tctx, AvPairs.pair[0].Value.AvNbDomainName, "SAMBA", "Value.AvNbDomainName");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[1].AvId, MsvAvNbComputerName, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[1].AvLen, 16, "AvLen");
+       torture_assert_str_equal(tctx, AvPairs.pair[1].Value.AvNbComputerName, "MTHELENA", "Value.AvNbComputerName");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[2].AvId, MsvAvDnsDomainName, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[2].AvLen, 28, "AvLen");
+       torture_assert_str_equal(tctx, AvPairs.pair[2].Value.AvDnsDomainName, "ber.redhat.com", "Value.AvDnsDomainName");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[3].AvId, MsvAvDnsComputerName, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[3].AvLen, 46, "AvLen");
+       torture_assert_str_equal(tctx, AvPairs.pair[3].Value.AvDnsComputerName, "mthelena.ber.redhat.com", "Value.AvDnsComputerName");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[4].AvId, MsAvRestrictions, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[4].AvLen, 48, "AvLen");
+       torture_assert_int_equal(tctx, AvPairs.pair[4].Value.AvRestrictions.Size, 48, "Value.AvRestrictions.Size");
+       torture_assert_int_equal(tctx, AvPairs.pair[4].Value.AvRestrictions.Z4, 0, "Value.AvRestrictions.Z4");
+       torture_assert_int_equal(tctx, AvPairs.pair[4].Value.AvRestrictions.IntegrityLevel, 0, "Value.AvRestrictions.IntegrityLevel");
+       torture_assert_int_equal(tctx, AvPairs.pair[4].Value.AvRestrictions.SubjectIntegrityLevel, 0x00003000, "Value.AvRestrictions.SubjectIntegrityLevel");
+       torture_assert_mem_equal(tctx, AvPairs.pair[4].Value.AvRestrictions.MachineId, MachineId, 32, "Value.AvRestrictions.MachineId");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[5].AvId, MsvChannelBindings, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[5].AvLen, 16, "AvLen");
+       torture_assert_mem_equal(tctx, AvPairs.pair[5].Value.ChannelBindings, lm_challenge_response, 16, "Value.ChannelBindings");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[6].AvId, MsvAvTargetName, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[6].AvLen, 26, "AvLen");
+       torture_assert_str_equal(tctx, AvPairs.pair[6].Value.AvTargetName, "cifs/mthelena", "Value.AvTargetName");
+
+       torture_assert_int_equal(tctx, AvPairs.pair[7].AvId, MsvAvEOL, "AvId");
+       torture_assert_int_equal(tctx, AvPairs.pair[7].AvLen, 0, "AvLen");
+
+       torture_assert_int_equal(tctx, r->DomainNameLen, 14, "DomainNameLen");
+       torture_assert_int_equal(tctx, r->DomainNameMaxLen, 14, "DomainNameMaxLen");
+       torture_assert_str_equal(tctx, r->DomainName, "W2K8DOM", "DomainName");
+
+       torture_assert_int_equal(tctx, r->UserNameLen, 26, "UserNameLen");
+       torture_assert_int_equal(tctx, r->UserNameMaxLen, 26, "UserNameMaxLen");
+       torture_assert_str_equal(tctx, r->UserName, "Administrator", "UserName");
+
+       torture_assert_int_equal(tctx, r->WorkstationLen, 12, "WorkstationLen");
+       torture_assert_int_equal(tctx, r->WorkstationMaxLen, 12, "WorkstationMaxLen");
+       torture_assert_str_equal(tctx, r->Workstation, "W2K8R2", "Workstation");
+
+       torture_assert_int_equal(tctx, r->EncryptedRandomSessionKeyLen, 16, "EncryptedRandomSessionKeyLen");
+       torture_assert_int_equal(tctx, r->EncryptedRandomSessionKeyMaxLen, 16, "EncryptedRandomSessionKeyMaxLen");
+       torture_assert_mem_equal(tctx, r->EncryptedRandomSessionKey->data, EncryptedRandomSessionKey, 16, "EncryptedRandomSessionKeyMaxLen");
+
+       torture_assert_int_equal(tctx, r->NegotiateFlags, 0xe2888215, "NegotiateFlags");
+
+       torture_assert_int_equal(tctx, r->Version.version.ProductMajorVersion, NTLMSSP_WINDOWS_MAJOR_VERSION_6, "ProductMajorVersion");
+       torture_assert_int_equal(tctx, r->Version.version.ProductMinorVersion, NTLMSSP_WINDOWS_MINOR_VERSION_1, "ProductMinorVersion");
+       torture_assert_int_equal(tctx, r->Version.version.ProductBuild, 0x1db0, "ProductBuild");
+       torture_assert_int_equal(tctx, r->Version.version.Reserved[0], 0x00, "Reserved");
+       torture_assert_int_equal(tctx, r->Version.version.Reserved[1], 0x00, "Reserved");
+       torture_assert_int_equal(tctx, r->Version.version.Reserved[2], 0x00, "Reserved");
+       torture_assert_int_equal(tctx, r->Version.version.Reserved[3], 0x00, "Reserved");
+       torture_assert_int_equal(tctx, r->Version.version.NTLMRevisionCurrent, NTLMSSP_REVISION_W2K3, "NTLMRevisionCurrent");
+
        return true;
 }