aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Alexey Sokolov2025-03-17 09:37:30 +0000
committerGravatar GitHub2025-03-17 09:37:30 +0000
commit6f23368f138c84815465e76c478cf918f32f9b7d (patch)
treeccae4c0b7241f1d13b5e22556a4259b9c90f491d /src
parentFix window activation on trayicon click under KDE (#2696) (diff)
downloadKVIrc-6f23368f138c84815465e76c478cf918f32f9b7d.tar.gz
KVIrc-6f23368f138c84815465e76c478cf918f32f9b7d.tar.bz2
KVIrc-6f23368f138c84815465e76c478cf918f32f9b7d.zip
Support sending authorization ID in SASL EXTERNAL (#2700)
The use case is provide network name and client ID to ZNC See https://github.com/znc/znc/pull/1936
Diffstat (limited to 'src')
-rw-r--r--src/kvilib/net/KviSASL.cpp11
-rw-r--r--src/kvilib/net/KviSASL.h3
-rw-r--r--src/kvirc/kernel/KviIrcConnection.cpp2
3 files changed, 12 insertions, 4 deletions
diff --git a/src/kvilib/net/KviSASL.cpp b/src/kvilib/net/KviSASL.cpp
index b6b88eeb4..bce89a857 100644
--- a/src/kvilib/net/KviSASL.cpp
+++ b/src/kvilib/net/KviSASL.cpp
@@ -68,11 +68,18 @@ namespace KviSASL
return false;
}
- bool externalMethod(const KviCString & szIn, KviCString & szOut)
+ bool externalMethod(const KviCString & szIn, KviCString & szOut, const QByteArray & baNick)
{
if(szIn == "+")
{
- szOut = szIn;
+ if(baNick.isEmpty())
+ {
+ szOut = szIn;
+ }
+ else
+ {
+ szOut.bufferToBase64(baNick.data(), baNick.size());
+ }
return true;
}
diff --git a/src/kvilib/net/KviSASL.h b/src/kvilib/net/KviSASL.h
index c39b7072c..5ee030a2b 100644
--- a/src/kvilib/net/KviSASL.h
+++ b/src/kvilib/net/KviSASL.h
@@ -59,9 +59,10 @@ namespace KviSASL
* \brief Create the auth message for EXTERNAL authentication
* \param szIn The server-provided token
* \param szOut A KviCString that will be filled with the authentication message
+ * \param baNick The username, may be empty
* \return bool
*/
- extern KVILIB_API bool externalMethod(const KviCString & szIn, KviCString & szOut);
+ extern KVILIB_API bool externalMethod(const KviCString & szIn, KviCString & szOut, const QByteArray & baNick);
};
#endif //_KVI_SASL_H_
diff --git a/src/kvirc/kernel/KviIrcConnection.cpp b/src/kvirc/kernel/KviIrcConnection.cpp
index 6dc069034..99fe4c711 100644
--- a/src/kvirc/kernel/KviIrcConnection.cpp
+++ b/src/kvirc/kernel/KviIrcConnection.cpp
@@ -501,7 +501,7 @@ void KviIrcConnection::handleAuthenticate(KviCString & szAuth)
KviCString szOut;
bool bSendString = false;
if(m_pStateData->sentSaslMethod() == QStringLiteral("EXTERNAL"))
- bSendString = KviSASL::externalMethod(szAuth, szOut);
+ bSendString = KviSASL::externalMethod(szAuth, szOut, szNick);
else // Assume PLAIN
bSendString = KviSASL::plainMethod(szAuth, szOut, szNick, szPass);