diff options
| author | 2010-02-13 11:21:16 +0000 | |
|---|---|---|
| committer | 2010-02-13 11:21:16 +0000 | |
| commit | 87bfbefebab8bf25cfcbfd0b4935d8e6822f4508 (patch) | |
| tree | a6cf3552c0a626845cc81a3a4f842438dbef83fb /src/kvilib | |
| parent | Try to check server extended capabilities using CAP LS and use STARTTLS if en... (diff) | |
| download | KVIrc-87bfbefebab8bf25cfcbfd0b4935d8e6822f4508.tar.gz KVIrc-87bfbefebab8bf25cfcbfd0b4935d8e6822f4508.tar.bz2 KVIrc-87bfbefebab8bf25cfcbfd0b4935d8e6822f4508.zip | |
server config: changed "supportsSTARTTLS" to "enabledSTARTTLS" and enabled by default; this option is now meaningful only as a way to force STARTTLS disabled on a server that supports it;
server config: added "enabledSASL", "SaslNick", "SaslPass" options
main config: added global "enable SASL" option
sparser: handle CAP LS, REQ, ACK, NAK, END
ircconnection: added SASL support (only PLAIN method is supported by now)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3958 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/kvilib')
| -rw-r--r-- | src/kvilib/irc/kvi_ircserver.cpp | 37 | ||||
| -rw-r--r-- | src/kvilib/irc/kvi_ircserver.h | 60 | ||||
| -rw-r--r-- | src/kvilib/irc/kvi_ircserverdb.cpp | 4 |
3 files changed, 87 insertions, 14 deletions
diff --git a/src/kvilib/irc/kvi_ircserver.cpp b/src/kvilib/irc/kvi_ircserver.cpp index ff81d171a..598fe99fc 100644 --- a/src/kvilib/irc/kvi_ircserver.cpp +++ b/src/kvilib/irc/kvi_ircserver.cpp @@ -87,6 +87,8 @@ KviServer::KviServer(const KviServer & serv) m_iProxy = serv.m_iProxy; m_szUserIdentityId = serv.m_szUserIdentityId; m_bAutoConnect = serv.m_bAutoConnect; + m_szSaslNick = serv.m_szSaslNick; + m_szSaslPass = serv.m_szSaslPass; if(serv.m_pAutoJoinChannelList) m_pAutoJoinChannelList = new QStringList(*(serv.m_pAutoJoinChannelList)); @@ -118,6 +120,8 @@ void KviServer::operator=(const KviServer & serv) m_szUserIdentityId = serv.m_szUserIdentityId; m_iProxy = serv.m_iProxy; m_bAutoConnect = serv.m_bAutoConnect; + m_szSaslNick = serv.m_szSaslNick; + m_szSaslPass = serv.m_szSaslPass; if(m_pAutoJoinChannelList) delete m_pAutoJoinChannelList; if(serv.m_pAutoJoinChannelList) @@ -154,7 +158,7 @@ void KviServer::generateUniqueId() QString KviServer::ircUri() { QString szUri("irc"); - if(useSSL() || supportsSTARTTLS()) szUri += "s"; + if(useSSL()) szUri += "s"; if(isIPv6()) szUri += "6"; szUri += "://"; szUri += m_szHostname; @@ -192,6 +196,10 @@ bool KviServer::load(KviConfig * cfg, const QString & szPrefix) m_szPass = cfg->readQStringEntry(szTmp); KviQString::sprintf(szTmp,"%QNick",&szPrefix); m_szNick = cfg->readQStringEntry(szTmp); + KviQString::sprintf(szTmp,"%QSaslPass",&szPrefix); + m_szSaslPass = cfg->readQStringEntry(szTmp); + KviQString::sprintf(szTmp,"%QSaslNick",&szPrefix); + m_szSaslNick = cfg->readQStringEntry(szTmp); KviQString::sprintf(szTmp,"%QRealName",&szPrefix); m_szRealName = cfg->readQStringEntry(szTmp); KviQString::sprintf(szTmp,"%QInitUmode",&szPrefix); @@ -224,8 +232,10 @@ bool KviServer::load(KviConfig * cfg, const QString & szPrefix) setCacheIp(cfg->readBoolEntry(szTmp,false)); // true ? KviQString::sprintf(szTmp,"%QSSL",&szPrefix); setUseSSL(cfg->readBoolEntry(szTmp,false)); - KviQString::sprintf(szTmp,"%QSupportsSTARTTLS",&szPrefix); - setSupportsSTARTTLS(cfg->readBoolEntry(szTmp,false)); + KviQString::sprintf(szTmp,"%QEnabledSTARTTLS",&szPrefix); + setEnabledSTARTTLS(cfg->readBoolEntry(szTmp,true)); + KviQString::sprintf(szTmp,"%QEnabledSASL",&szPrefix); + setEnabledSASL(cfg->readBoolEntry(szTmp,false)); KviQString::sprintf(szTmp,"%QProxy",&szPrefix); setProxy(cfg->readIntEntry(szTmp,-2)); KviQString::sprintf(szTmp,"%QUserIdentityId",&szPrefix); @@ -265,6 +275,16 @@ void KviServer::save(KviConfig * cfg, const QString & szPrefix) KviQString::sprintf(szTmp,"%QNick",&szPrefix); cfg->writeEntry(szTmp,m_szNick); } + if(!m_szSaslPass.isEmpty()) + { + KviQString::sprintf(szTmp,"%QSaslPass",&szPrefix); + cfg->writeEntry(szTmp,m_szSaslPass); + } + if(!m_szSaslNick.isEmpty()) + { + KviQString::sprintf(szTmp,"%QSaslNick",&szPrefix); + cfg->writeEntry(szTmp,m_szSaslNick); + } if(!m_szRealName.isEmpty()) { KviQString::sprintf(szTmp,"%QRealName",&szPrefix); @@ -330,10 +350,15 @@ void KviServer::save(KviConfig * cfg, const QString & szPrefix) KviQString::sprintf(szTmp,"%QSSL",&szPrefix); cfg->writeEntry(szTmp,useSSL()); } - if(supportsSTARTTLS()) + if(!enabledSTARTTLS()) + { + KviQString::sprintf(szTmp,"%QEnabledSTARTTLS",&szPrefix); + cfg->writeEntry(szTmp,enabledSTARTTLS()); + } + if(enabledSASL()) { - KviQString::sprintf(szTmp,"%QSupportsSTARTTLS",&szPrefix); - cfg->writeEntry(szTmp,supportsSTARTTLS()); + KviQString::sprintf(szTmp,"%QEnabledSASL",&szPrefix); + cfg->writeEntry(szTmp,enabledSASL()); } if(proxy()!=-2) { diff --git a/src/kvilib/irc/kvi_ircserver.h b/src/kvilib/irc/kvi_ircserver.h index abadae0f6..cbfe24f24 100644 --- a/src/kvilib/irc/kvi_ircserver.h +++ b/src/kvilib/irc/kvi_ircserver.h @@ -32,7 +32,8 @@ * \def KVI_IRCSERVER_FLAG_IPV6 Defines if the server uses IPv6 * \def KVI_IRCSERVER_FLAG_CACHEIP Defines if the server caches the IP * \def KVI_IRCSERVER_FLAG_SSL Defines if the server uses SSL -* \def KVI_IRCSERVER_FLAG_STARTTLS Defines if the server uses STARTTLS +* \def KVI_IRCSERVER_FLAG_STARTTLS Defines if the server can use STARTTLS +* \def KVI_IRCSERVER_FLAG_SASL Defines if the server can use SASL */ #include "kvi_settings.h" @@ -52,6 +53,7 @@ class KviServer; #define KVI_IRCSERVER_FLAG_CACHEIP 2 #define KVI_IRCSERVER_FLAG_SSL 4 #define KVI_IRCSERVER_FLAG_STARTTLS 8 +#define KVI_IRCSERVER_FLAG_SASL 16 /** * \class KviServerReconnectInfo @@ -135,6 +137,9 @@ public: bool m_bAutoConnect; // autoconnect QString m_szId; // the server's may-be-unique id, may be auto-generated int m_iProxy; // proxy server's id + QString m_szSaslNick; // nickname for sasl auth + QString m_szSaslPass; // password for sasl auth + public: /** * \brief Returns the proxy server's id @@ -162,6 +167,18 @@ public: inline const QString & password() const { return m_szPass; }; /** + * \brief Returns the nickname used for sasl auth + * \return const QString & + */ + inline const QString & saslNick() const { return m_szSaslNick; }; + + /** + * \brief Returns the password used for sasl auth + * \return const QString & + */ + inline const QString & saslPass() const { return m_szSaslPass; }; + + /** * \brief Returns the nickname of the user associated to the server * \return const QString & */ @@ -273,10 +290,16 @@ public: inline bool useSSL() const { return (m_uFlags & KVI_IRCSERVER_FLAG_SSL); }; /** - * \brief Returns true if the server supports the STARTTLS protocol + * \brief Returns true if the STARTTLS protocol is enabled for this server * \return bool */ - inline bool supportsSTARTTLS() const { return (m_uFlags & KVI_IRCSERVER_FLAG_STARTTLS); }; + inline bool enabledSTARTTLS() const { return (m_uFlags & KVI_IRCSERVER_FLAG_STARTTLS); }; + + /** + * \brief Returns true if the SASL protocol is enabled for this server + * \return bool + */ + inline bool enabledSASL() const { return (m_uFlags & KVI_IRCSERVER_FLAG_SASL); }; /** * \brief Returns true if the server caches the IP @@ -348,6 +371,20 @@ public: inline void setNickName(const QString & szNick){ m_szNick = szNick; }; /** + * \brief Sets the password used for sasl auth + * \param szPass The password of the user + * \return void + */ + inline void setSaslPass(const QString & szPass){ m_szSaslPass = szPass; }; + + /** + * \brief Sets the nickname used for sasl auth + * \param szNick The nick name of the user + * \return void + */ + inline void setSaslNick(const QString & szNick){ m_szSaslNick = szNick; }; + + /** * \brief Sets the realname of the user associated to the server * \param szReal The real name of the user * \return void @@ -445,17 +482,28 @@ public: }; /** - * \brief Sets if the server supports the STARTTLS protocol - * \param bSet Whether to set the support for STARTTLS + * \brief Sets if STARTTLS support is enabled/disabled for this server + * \param bSet Whether to enable the support for STARTTLS * \return void */ - inline void setSupportsSTARTTLS(bool bSet) + inline void setEnabledSTARTTLS(bool bSet) { if(bSet)m_uFlags |= KVI_IRCSERVER_FLAG_STARTTLS; else m_uFlags &= ((unsigned short)~KVI_IRCSERVER_FLAG_STARTTLS); }; /** + * \brief Sets if SASL support is enabled/disabled for this server + * \param bSet Whether to enable the support for SASL + * \return void + */ + inline void setEnabledSASL(bool bSet) + { + if(bSet)m_uFlags |= KVI_IRCSERVER_FLAG_SASL; + else m_uFlags &= ((unsigned short)~KVI_IRCSERVER_FLAG_SASL); + }; + + /** * \brief Sets if the server caches the IP * \param bSet Whether to set the cache for the IP * \return void diff --git a/src/kvilib/irc/kvi_ircserverdb.cpp b/src/kvilib/irc/kvi_ircserverdb.cpp index e2f839f2f..8819fe854 100644 --- a/src/kvilib/irc/kvi_ircserverdb.cpp +++ b/src/kvilib/irc/kvi_ircserverdb.cpp @@ -201,7 +201,7 @@ bool KviServerDataBase::makeCurrentServer(KviServerDefinition * d, QString & szE { if(d->bIPv6 == srv->isIPv6()) { - if((d->bSSL == srv->useSSL()) || (d->bSTARTTLS == srv->supportsSTARTTLS())) + if(d->bSSL == srv->useSSL()) { if(d->bPortIsValid) { @@ -319,7 +319,7 @@ search_finished: s->m_szInitUMode = d->szInitUMode; s->setIPv6(d->bIPv6); s->setUseSSL(d->bSSL); - s->setSupportsSTARTTLS(d->bSTARTTLS); + s->setEnabledSTARTTLS(d->bSTARTTLS); r->insertServer(s); m_szCurrentNetwork = r->name(); r->setCurrentServer(s); |
