This commit is contained in:
Darchigh 2013-01-22 10:42:29 +01:00
commit d0ead2e24c
4 changed files with 47 additions and 41 deletions

View file

@ -13,15 +13,15 @@ admin_password=test
#cert=server.pfx #patch to PKCS#12 certificate
#cert_password=test #password to that certificate if any
users_per_backend=10
backend=../..//backends/swiften/spectrum2_swiften_backend
#backend=../..//backends/swiften/spectrum2_swiften_backend
#backend=../../backends/twitter/spectrum2_twitter_backend
#backend=/home/hanzz/code/libtransport/backends/libcommuni/spectrum2_libcommuni_backend
backend=/home/hanzz/code/libtransport/backends/libcommuni/spectrum2_libcommuni_backend
protocol=prpl-jabber
#protocol=prpl-msn
#protocol=any
#protocol=prpl-icq
working_dir=./
portfile=$jid.port
portfile=./$jid.port
irc_server=irc.freenode.org
[backend]

View file

@ -138,6 +138,9 @@ int main(int argc, char **argv)
else if (command[0] == "list") {
std::vector<std::string> list = show_list(&config);
}
else if (command[0] == "restart") {
return restart_instances(&config);
}
else if (command[0] == "server") {
Server server(&config);
if (server.start() == false) {

View file

@ -91,8 +91,11 @@ static intercept_stream* intercepter_cout;
static intercept_stream* intercepter_cerr;
static void initLogging(Config *config, std::string key) {
static void initLogging(Config *config, std::string key, bool only_create_dir = false) {
if (CONFIG_STRING(config, key).empty()) {
if (only_create_dir) {
return;
}
root = log4cxx::Logger::getRootLogger();
#ifdef _MSC_VER
root->addAppender(new ConsoleAppender(new PatternLayout(L"%d %-5p %c: %m%n")));
@ -133,52 +136,60 @@ static void initLogging(Config *config, std::string key) {
p.setProperty("id", id);
#endif
std::string dir;
std::vector<std::string> dirs;
BOOST_FOREACH(const log4cxx::LogString &prop, p.propertyNames()) {
// if (boost::ends_with(prop, ".File")) {
if (boost::ends_with(prop, ".File")) {
std::string dir;
log4cxx::helpers::Transcoder::encode(p.get(prop), dir);
boost::replace_all(dir, "${jid}", jid);
boost::replace_all(dir, "${pid}", pid);
boost::replace_all(dir, "${id}", id);
break;
// }
dirs.push_back(dir);
}
}
mode_t old_cmask;
if (!dir.empty()) {
// create directories
// create directories
#ifndef WIN32
old_cmask = umask(0007);
old_cmask = umask(0007);
#endif
try {
Transport::Util::createDirectories(config, boost::filesystem::path(dir).parent_path());
}
catch (const boost::filesystem::filesystem_error &e) {
std::cerr << "Can't create logging directory directory " << boost::filesystem::path(dir).parent_path().string() << ": " << e.what() << ".\n";
BOOST_FOREACH(std::string &dir, dirs) {
if (!dir.empty()) {
try {
Transport::Util::createDirectories(config, boost::filesystem::path(dir).parent_path());
}
catch (const boost::filesystem::filesystem_error &e) {
std::cerr << "Can't create logging directory directory " << boost::filesystem::path(dir).parent_path().string() << ": " << e.what() << ".\n";
}
}
}
#ifndef WIN32
umask(old_cmask);
#endif
if (only_create_dir) {
return;
}
log4cxx::PropertyConfigurator::configure(p);
// Change owner of main log file
#ifndef WIN32
if (!CONFIG_STRING(config, "service.group").empty() && !CONFIG_STRING(config, "service.user").empty()) {
struct group *gr;
if ((gr = getgrnam(CONFIG_STRING(config, "service.group").c_str())) == NULL) {
std::cerr << "Invalid service.group name " << CONFIG_STRING(config, "service.group") << "\n";
BOOST_FOREACH(std::string &dir, dirs) {
if (!CONFIG_STRING(config, "service.group").empty() && !CONFIG_STRING(config, "service.user").empty()) {
struct group *gr;
if ((gr = getgrnam(CONFIG_STRING(config, "service.group").c_str())) == NULL) {
std::cerr << "Invalid service.group name " << CONFIG_STRING(config, "service.group") << "\n";
}
struct passwd *pw;
if ((pw = getpwnam(CONFIG_STRING(config, "service.user").c_str())) == NULL) {
std::cerr << "Invalid service.user name " << CONFIG_STRING(config, "service.user") << "\n";
}
chown(dir.c_str(), pw->pw_uid, gr->gr_gid);
}
struct passwd *pw;
if ((pw = getpwnam(CONFIG_STRING(config, "service.user").c_str())) == NULL) {
std::cerr << "Invalid service.user name " << CONFIG_STRING(config, "service.user") << "\n";
}
chown(dir.c_str(), pw->pw_uid, gr->gr_gid);
}
#endif
#ifndef WIN32
if (!dir.empty()) {
umask(old_cmask);
}
#endif
}
}
@ -190,6 +201,7 @@ void initBackendLogging(Config *config) {
void initMainLogging(Config *config) {
initLogging(config, "logging.config");
initLogging(config, "logging.backend_config", true);
}
void redirect_stderr() {

View file

@ -79,9 +79,6 @@ void UserRegistry::stopLogin(const Swift::JID& user, Swift::ServerFromClientSess
LOG4CXX_WARN(logger, key << ": Stopping login process (user probably disconnected while logging in), but this is not active session");
}
}
else {
LOG4CXX_WARN(logger, key << ": Stopping login process (user probably disconnected while logging in) for invalid user");
}
// ::removeLater can be called only by libtransport, not by Swift and libtransport
// takes care about user disconnecting itself, so don't call our signal.
@ -96,21 +93,15 @@ void UserRegistry::onPasswordValid(const Swift::JID &user) {
users[key].session->handlePasswordValid();
users.erase(key);
}
else {
LOG4CXX_INFO(logger, key << ": onPasswordValid called for invalid user");
}
}
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");
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);
}
else {
LOG4CXX_INFO(logger, key << ": onPasswordInvalid called for invalid user");
}
}
void UserRegistry::handleRemoveTimeout(const Swift::JID &user) {