diff options
author | George Hazan <george.hazan@gmail.com> | 2023-12-23 16:28:16 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-12-23 16:28:16 +0300 |
commit | cbdf4e985f31329a131e2b5cd1ba10051373bf2a (patch) | |
tree | d22112ca5991fab6cb743b1cfcd52223af7f8b86 /protocols/JabberG | |
parent | 7d792ed6fb393548f886d30c2fa69f0a8555d01b (diff) |
fixes #3793 (XEP-0440: SASL Channel-Binding Type Capability support)
Diffstat (limited to 'protocols/JabberG')
-rw-r--r-- | protocols/JabberG/src/jabber_caps.h | 1 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_opt.cpp | 1 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_proto.cpp | 1 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_proto.h | 2 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_secur.cpp | 2 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_thread.cpp | 11 |
6 files changed, 14 insertions, 4 deletions
diff --git a/protocols/JabberG/src/jabber_caps.h b/protocols/JabberG/src/jabber_caps.h index 0e6bcc5f89..6eb7e50f67 100644 --- a/protocols/JabberG/src/jabber_caps.h +++ b/protocols/JabberG/src/jabber_caps.h @@ -206,6 +206,7 @@ typedef unsigned __int64 JabberCapsBits; #define JABBER_FEAT_SOFTWARE_INFO "urn:xmpp:dataforms:softwareinfo"
#define JABBER_FEAT_UPLOAD "urn:xmpp:http:upload"
#define JABBER_FEAT_UPLOAD0 "urn:xmpp:http:upload:0"
+#define JABBER_FEAT_CHANNEL_BINDING "urn:xmpp:sasl-cb:0"
#define JABBER_FEAT_PUBSUB_EVENT "http://jabber.org/protocol/pubsub#event"
#define JABBER_FEAT_PUBSUB_NODE_CONFIG "http://jabber.org/protocol/pubsub#node_config"
diff --git a/protocols/JabberG/src/jabber_opt.cpp b/protocols/JabberG/src/jabber_opt.cpp index 15e4d48fef..a1302d713a 100644 --- a/protocols/JabberG/src/jabber_opt.cpp +++ b/protocols/JabberG/src/jabber_opt.cpp @@ -713,7 +713,6 @@ public: m_options.AddOption(LPGENW("Server options"), LPGENW("Use Stream Management (XEP-0198)"), proto->m_bEnableStreamMgmt);
m_options.AddOption(LPGENW("Server options"), LPGENW("Disable SASL authentication (for old servers)"), proto->m_bDisable3920auth);
m_options.AddOption(LPGENW("Server options"), LPGENW("Enable stream compression"), proto->m_bEnableZlib);
- m_options.AddOption(LPGENW("Server options"), LPGENW("Use TLS 1.3 bindings"), proto->m_bUseTlsExport);
m_options.AddOption(LPGENW("Other"), LPGENW("Enable remote controlling (from another resource of same JID only)"), proto->m_bEnableRemoteControl);
m_options.AddOption(LPGENW("Other"), LPGENW("Show transport agents on contact list"), proto->m_bShowTransport);
diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp index e43d1b2ee3..63009c39fc 100644 --- a/protocols/JabberG/src/jabber_proto.cpp +++ b/protocols/JabberG/src/jabber_proto.cpp @@ -134,7 +134,6 @@ CJabberProto::CJabberProto(const char *aProtoName, const wchar_t *aUserName) : m_bUsePopups(this, "UsePopups", true),
m_bUseSSL(this, "UseSSL", false),
m_bUseTLS(this, "UseTLS", true),
- m_bUseTlsExport(this, "UseTlsExport", false),
m_iMamMode(this, "MamMode", 0),
m_iConnectionKeepAliveInterval(this, "ConnectionKeepAliveInterval", 60000),
diff --git a/protocols/JabberG/src/jabber_proto.h b/protocols/JabberG/src/jabber_proto.h index dcd6f753f2..54359d8d8c 100644 --- a/protocols/JabberG/src/jabber_proto.h +++ b/protocols/JabberG/src/jabber_proto.h @@ -239,7 +239,6 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface CMOption<bool> m_bUsePopups;
CMOption<bool> m_bUseSSL;
CMOption<bool> m_bUseTLS;
- CMOption<bool> m_bUseTlsExport;
CMOption<int> m_iMamMode;
CMOption<uint32_t> m_iConnectionKeepAliveInterval;
@@ -267,6 +266,7 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface bool m_bStreamSent;
bool m_bMamPrefsAvailable;
bool m_bMamDisableMessages, m_bMamCreateRead;
+ bool m_bTlsExporter, m_bTlsServerEndpoint;
HWND m_hwndJabberChangePassword;
HWND m_hwndPrivacyRule;
diff --git a/protocols/JabberG/src/jabber_secur.cpp b/protocols/JabberG/src/jabber_secur.cpp index 853016823d..263574c448 100644 --- a/protocols/JabberG/src/jabber_secur.cpp +++ b/protocols/JabberG/src/jabber_secur.cpp @@ -211,7 +211,7 @@ TScramAuth::TScramAuth(ThreadData *info, const char *pszMech, const EVP_MD *pMet priority = iPriority;
if ((iPriority % 10) == 1) {
- int cbLen, tlsVer = info->proto->m_bUseTlsExport;
+ int cbLen, tlsVer = info->proto->m_bTlsExporter;
void *pData = Netlib_GetTlsUnique(info->s, cbLen, tlsVer);
if (pData == nullptr)
bIsValid = false;
diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index 24864a0116..a7461785a3 100644 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -632,6 +632,7 @@ void CJabberProto::OnProcessFeatures(const TiXmlElement *node, ThreadData *info) bool isRegisterAvailable = false;
bool areMechanismsDefined = false;
+ m_bTlsExporter = m_bTlsServerEndpoint = false;
for (auto *n : TiXmlEnum(node)) {
auto *pszName = n->Name();
@@ -729,6 +730,16 @@ void CJabberProto::OnProcessFeatures(const TiXmlElement *node, ThreadData *info) }
else info->jabberServerCaps |= pCaps->GetCaps();
}
+ else if (!mir_strcmp(pszName, "sasl-channel-binding") && !mir_strcmp(n->Attribute("xmlns"), JABBER_FEAT_CHANNEL_BINDING)) {
+ for (auto *it : TiXmlFilter(n, "channel-binding")) {
+ if (auto *pszType = it->Attribute("type")) {
+ if (!mir_strcmp(pszType, "tls-exporter"))
+ m_bTlsExporter = true;
+ else if (!mir_strcmp(pszType, "tls-server-end-point"))
+ m_bTlsServerEndpoint = true;
+ }
+ }
+ }
}
if (areMechanismsDefined) {
|