Merge the block and blockbase classes in qauthenticator.cpp

The inheritance is probably unnecessary.

As a drive-by, initialize all the members to silence the original
Axivion warning.

Task-number: QTBUG-127539
Change-Id: Iba9d8f2cba246616dbb6e8e9b7b21e8589af84d9
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit de3dd3878c2305be81d539e768788e2713c81423)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mate Barany 2024-08-19 16:20:37 +02:00 committed by Qt Cherry-pick Bot
parent 91730ecf3b
commit 3758321282

View File

@ -1013,45 +1013,6 @@ public:
enum { Size = 8 }; enum { Size = 8 };
}; };
class QNtlmPhase1BlockBase
{
public:
char magic[8];
quint32 type;
quint32 flags;
QNtlmBuffer domain;
QNtlmBuffer workstation;
enum { Size = 32 };
};
// ################# check paddings
class QNtlmPhase2BlockBase
{
public:
char magic[8];
quint32 type;
QNtlmBuffer targetName;
quint32 flags;
unsigned char challenge[8];
quint32 context[2];
QNtlmBuffer targetInfo;
enum { Size = 48 };
};
class QNtlmPhase3BlockBase {
public:
char magic[8];
quint32 type;
QNtlmBuffer lmResponse;
QNtlmBuffer ntlmResponse;
QNtlmBuffer domain;
QNtlmBuffer user;
QNtlmBuffer workstation;
QNtlmBuffer sessionKey;
quint32 flags;
enum { Size = 64 };
};
static void qStreamNtlmBuffer(QDataStream& ds, const QByteArray& s) static void qStreamNtlmBuffer(QDataStream& ds, const QByteArray& s)
{ {
ds.writeRawData(s.constData(), s.size()); ds.writeRawData(s.constData(), s.size());
@ -1104,9 +1065,15 @@ static QDataStream& operator>>(QDataStream& s, QNtlmBuffer& b)
} }
class QNtlmPhase1Block : public QNtlmPhase1BlockBase class QNtlmPhase1Block
{ // request { // request
public: public:
char magic[8];
quint32 type;
quint32 flags;
QNtlmBuffer domain;
QNtlmBuffer workstation;
QNtlmPhase1Block() { QNtlmPhase1Block() {
qstrncpy(magic, "NTLMSSP", 8); qstrncpy(magic, "NTLMSSP", 8);
type = 1; type = 1;
@ -1118,9 +1085,18 @@ public:
}; };
class QNtlmPhase2Block : public QNtlmPhase2BlockBase class QNtlmPhase2Block
{ // challenge { // challenge
public: public:
char magic[8];
quint32 type;
QNtlmBuffer targetName;
quint32 flags = 0;
unsigned char challenge[8] = {'\0'};
quint32 context[2] = {0, 0};
QNtlmBuffer targetInfo;
enum { Size = 48 };
QNtlmPhase2Block() { QNtlmPhase2Block() {
magic[0] = 0; magic[0] = 0;
type = 0xffffffff; type = 0xffffffff;
@ -1133,8 +1109,20 @@ public:
class QNtlmPhase3Block : public QNtlmPhase3BlockBase { // response class QNtlmPhase3Block
{ // response
public: public:
char magic[8];
quint32 type;
QNtlmBuffer lmResponse;
QNtlmBuffer ntlmResponse;
QNtlmBuffer domain;
QNtlmBuffer user;
QNtlmBuffer workstation;
QNtlmBuffer sessionKey;
quint32 flags;
enum { Size = 64 };
QNtlmPhase3Block() { QNtlmPhase3Block() {
qstrncpy(magic, "NTLMSSP", 8); qstrncpy(magic, "NTLMSSP", 8);
type = 3; type = 3;
@ -1451,8 +1439,7 @@ static QByteArray qEncodeLmv2Response(const QAuthenticatorPrivate *ctx,
static bool qNtlmDecodePhase2(const QByteArray& data, QNtlmPhase2Block& ch) static bool qNtlmDecodePhase2(const QByteArray& data, QNtlmPhase2Block& ch)
{ {
Q_ASSERT(QNtlmPhase2BlockBase::Size == sizeof(QNtlmPhase2BlockBase)); if (data.size() < QNtlmPhase2Block::Size)
if (data.size() < QNtlmPhase2BlockBase::Size)
return false; return false;
@ -1519,8 +1506,7 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
pb.flags |= NTLMSSP_NEGOTIATE_OEM; pb.flags |= NTLMSSP_NEGOTIATE_OEM;
int offset = QNtlmPhase3BlockBase::Size; int offset = QNtlmPhase3Block::Size;
Q_ASSERT(QNtlmPhase3BlockBase::Size == sizeof(QNtlmPhase3BlockBase));
// for kerberos style user@domain logins, NTLM domain string should be left empty // for kerberos style user@domain logins, NTLM domain string should be left empty
if (ctx->userDomain.isEmpty() && !ctx->extractedUser.contains(u'@')) { if (ctx->userDomain.isEmpty() && !ctx->extractedUser.contains(u'@')) {