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:
parent
91730ecf3b
commit
3758321282
@ -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'@')) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user