From 1c570b1ce97827875c117b94cccd5dbc093ff518 Mon Sep 17 00:00:00 2001 From: prozacx Date: Mon, 20 Mar 2006 02:44:22 +0000 Subject: [PATCH] Added UserFormat string for auto appending a specific domain to given username git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@705 726aef4b-f618-498e-8847-2d620e286838 --- modules/imapauth.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/modules/imapauth.cpp b/modules/imapauth.cpp index 2fa27c50..220c96cf 100644 --- a/modules/imapauth.cpp +++ b/modules/imapauth.cpp @@ -60,6 +60,7 @@ public: m_sServer = sArgs.Token(0); CString sPort = sArgs.Token(1); + m_sUserFormat = sArgs.Token(2); if (sPort.Left(1) == "+") { m_bSSL = true; @@ -78,6 +79,11 @@ public: virtual EModRet OnLoginAttempt(CSmartPtr Auth) { CUser* pUser = CZNC::Get().FindUser(Auth->GetUsername()); + if (!pUser) { // @todo Will want to do some sort of && !m_bAllowCreate in the future + Auth->RefuseLogin("Invalid User - Halting IMAP Lookup"); + return HALT; + } + if (pUser && m_Cache.HasItem(CString(Auth->GetUsername() + ":" + Auth->GetPassword()).MD5())) { DEBUG_ONLY(cerr << "+++ Found in cache" << endl); Auth->AcceptLogin(*pUser); @@ -97,11 +103,16 @@ public: void CacheLogin(const CString& sLogin) { m_Cache.AddItem(sLogin); } + + // Getters + const CString& GetUserFormat() const { return m_sUserFormat; } + // !Getters private: // Settings CString m_sServer; unsigned short m_uPort; bool m_bSSL; + CString m_sUserFormat; // !Settings TCacheMap m_Cache; @@ -109,9 +120,20 @@ private: void CIMAPSock::ReadLine(const CString& sLine) { if (!m_bSentLogin) { + CString sUsername = m_spAuth->GetUsername(); m_bSentLogin = true; - Write("AUTH LOGIN " + m_spAuth->GetUsername() + " " + m_spAuth->GetPassword() + "\r\n"); + const CString& sFormat = m_pIMAPMod->GetUserFormat(); + + if (!sFormat.empty()) { + if (sFormat.find('%') != CString::npos) { + sUsername = sFormat.Replace_n("%", sUsername); + } else { + sUsername += sFormat; + } + } + + Write("AUTH LOGIN " + sUsername + " " + m_spAuth->GetPassword() + "\r\n"); } else { CUser* pUser = CZNC::Get().FindUser(m_spAuth->GetUsername());