virtual EModRet OnLoginAttempt(CSmartPtr<CAuthBase> Auth) { CString sUser = Auth->GetUsername(); Csock *pSock = Auth->GetSocket(); CUser *pUser = CZNC::Get().FindUser(sUser); if (pSock == NULL || pUser == NULL) return CONTINUE; CString sPubKey = GetKey(pSock); DEBUG("User: "******" Key: " << sPubKey); if (sPubKey.empty()) { DEBUG("Peer got no public key, ignoring"); return CONTINUE; } MSCString::iterator it = m_PubKeys.find(sUser); if (it == m_PubKeys.end()) { DEBUG("No saved pubkeys for this client"); return CONTINUE; } SCString::iterator it2 = it->second.find(sPubKey); if (it2 == it->second.end()) { DEBUG("Invalid pubkey"); return CONTINUE; } // This client uses a valid pubkey for this user, let them in DEBUG("Accepted pubkey auth"); Auth->AcceptLogin(*pUser); return HALT; }