Files
@ 5002dce4a922
Branch filter:
Location: libtransport.git/src/userregistry.cpp - annotation
5002dce4a922
4.1 KiB
text/x-c++hdr
Prevent python plugin from crashing with InvalidWireType exception
Too much data was passed to wrapper.parseFromString resulting in it
trying to read another tag even after the WrapperMessage has ended
Too much data was passed to wrapper.parseFromString resulting in it
trying to read another tag even after the WrapperMessage has ended
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 7c93aee6f49a 0785badb98b0 0785badb98b0 0785badb98b0 7c93aee6f49a 0785badb98b0 24d25a6f406b 0785badb98b0 24d25a6f406b 24d25a6f406b 0785badb98b0 0785badb98b0 24d25a6f406b 0785badb98b0 0785badb98b0 996a48005b0d 996a48005b0d 996a48005b0d c44d57135100 996a48005b0d 996a48005b0d c44d57135100 996a48005b0d 996a48005b0d 996a48005b0d 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 24d25a6f406b 6189401158ef 6189401158ef 24d25a6f406b 24d25a6f406b 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 b1e4aae55b26 0785badb98b0 0785badb98b0 58f50c754489 b1e4aae55b26 0785badb98b0 0785badb98b0 0785badb98b0 0785badb98b0 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b 24d25a6f406b ddb797fdf23b 87c8752bc175 87c8752bc175 ddb797fdf23b 0785badb98b0 0785badb98b0 0785badb98b0 | /**
* libtransport -- C++ library for easy XMPP Transports development
*
* Copyright (C) 2011, Jan Kaluza <hanzz.k@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#include <string>
#include <map>
#include "Swiften/Server/UserRegistry.h"
#include "transport/userregistry.h"
#include "transport/logging.h"
namespace Transport {
DEFINE_LOGGER(logger, "UserRegistry");
UserRegistry::UserRegistry(Config *cfg, Swift::NetworkFactories *factories) {
config = cfg;
m_removeTimer = factories->getTimerFactory()->createTimer(1);
m_inRemoveLater = false;
}
UserRegistry::~UserRegistry() { m_removeTimer->stop(); }
void UserRegistry::isValidUserPassword(const Swift::JID& user, Swift::ServerFromClientSession *session, const Swift::SafeByteArray& password) {
std::vector<std::string> const &x = CONFIG_VECTOR(config,"service.admin_jid");
if (std::find(x.begin(), x.end(), user.toBare().toString()) != x.end()) {
if (Swift::safeByteArrayToString(password) == CONFIG_STRING(config, "service.admin_password")) {
session->handlePasswordValid();
}
else {
session->handlePasswordInvalid();
}
return;
}
std::string key = user.toBare().toString();
// Users try to connect twice
if (users.find(key) != users.end()) {
// Kill the first session
LOG4CXX_INFO(logger, key << ": Removing previous session and making this one active");
Swift::ServerFromClientSession *tmp = users[key].session;
users[key].session = session;
tmp->handlePasswordInvalid();
}
LOG4CXX_INFO(logger, key << ": Connecting this user to find if password is valid");
users[key].password = Swift::safeByteArrayToString(password);
users[key].session = session;
onConnectUser(user);
return;
}
void UserRegistry::stopLogin(const Swift::JID& user, Swift::ServerFromClientSession *session) {
std::string key = user.toBare().toString();
if (users.find(key) != users.end()) {
if (users[key].session == session) {
LOG4CXX_INFO(logger, key << ": Stopping login process (user probably disconnected while logging in)");
users.erase(key);
}
else {
LOG4CXX_WARN(logger, key << ": Stopping login process (user probably disconnected while logging in), but this is not active session");
}
}
// ::removeLater can be called only by libtransport, not by Swift and libtransport
// takes care about user disconnecting itself, so don't call our signal.
if (!m_inRemoveLater)
onDisconnectUser(user);
}
void UserRegistry::onPasswordValid(const Swift::JID &user) {
std::string key = user.toBare().toString();
if (users.find(key) != users.end()) {
LOG4CXX_INFO(logger, key << ": Password is valid");
users[key].session->handlePasswordValid();
users.erase(key);
}
}
void UserRegistry::onPasswordInvalid(const Swift::JID &user, const std::string &error) {
std::string key = user.toBare().toString();
if (users.find(key) != users.end()) {
LOG4CXX_INFO(logger, key << ": Password is invalid or there was an error when connecting the legacy network");
users[key].session->handlePasswordInvalid(error);
users.erase(key);
}
}
void UserRegistry::handleRemoveTimeout(const Swift::JID &user) {
m_inRemoveLater = true;
onPasswordInvalid(user);
m_inRemoveLater = false;
}
void UserRegistry::removeLater(const Swift::JID &user) {
m_removeTimer->onTick.connect(boost::bind(&UserRegistry::handleRemoveTimeout, this, user));
m_removeTimer->start();
}
const std::string UserRegistry::getUserPassword(const std::string &barejid) {
if (users.find(barejid) != users.end())
return users[barejid].password;
return "";
}
}
|