Author: suokko
Date: Mon Sep 1 22:52:19 2008
New Revision: 29175
URL: http://svn.gna.org/viewcvs/wesnoth?rev=29175&view=rev
Log:
Fixed crash bug when overwriting existing ban which was permanent
Modified:
trunk/src/server/ban.cpp
trunk/src/server/ban.hpp
Modified: trunk/src/server/ban.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/server/ban.cpp?rev=29175&r1=29174&r2=29175&view=diff
==============================================================================
--- trunk/src/server/ban.cpp (original)
+++ trunk/src/server/ban.cpp Mon Sep 1 22:52:19 2008
@@ -31,6 +31,15 @@
#define ERR_SERVER LOG_STREAM(err, mp_server)
#define LOG_SERVER LOG_STREAM(info, mp_server)
#define DBG_SERVER LOG_STREAM(debug, mp_server)
+
+ std::ostream& operator<<(std::ostream& o, const banned& n)
+ {
+ return o << "IP: '" << n.get_ip() <<
+ "' end_time: '" <<
n.get_human_end_time() <<
+ "' reason: '" << n.get_reason() <<
+ "' issuer: "<< n.get_who_banned() <<
"\n";
+
+ }
bool banned_compare::operator()(const banned_ptr& a, const banned_ptr&
b) const
{
@@ -334,7 +343,8 @@
ret += time_itor->second;
else
{
- size_t multipler = 60; // default minutes
+ const size_t default_multipler = 60;
+ size_t multipler = default_multipler; // default minutes
std::string::iterator i = time_in.begin();
size_t number = 0;
for (; i != time_in.end(); ++i)
@@ -368,9 +378,13 @@
ret = number =
multipler = 0;
break;
}
- ret += number * multipler;
if (multipler == 0)
break;
+ if (number == 0)
+ number = 1;
+ ret += number * multipler;
+ multipler = default_multipler;
+ number = 0;
}
}
--i;
@@ -388,29 +402,31 @@
const
std::string& who_banned,
const
std::string& group)
{
- ban_set::iterator ban;
try {
+ ban_set::iterator ban;
if ((ban = bans_.find(banned::create_dummy(ip))) !=
bans_.end())
{
// Already exsiting ban for ip. We have to
first remove it
+ LOG_SERVER << "Overwriting ban: " <<
(*ban)->get_ip() << " reason was: " << (*ban)->get_reason() << "\n";
bans_.erase(ban);
- LOG_SERVER << "Overwriting ban: " <<
(*ban)->get_ip() << " reason was: " << (*ban)->get_reason() << "\n";
}
} catch (banned::error& e) {
ERR_SERVER << e.message << " while creating dummy ban
for finding existing ban\n";
return e.message;
}
+ std::ostringstream ret;
try {
banned_ptr new_ban(new banned(ip, end_time,
reason,who_banned, group));
bans_.insert(new_ban);
if (end_time != 0)
time_queue_.push(new_ban);
+ ret << *new_ban << "\n";
} catch (banned::error& e) {
ERR_SERVER << e.message << " while banning\n";
return e.message;
}
dirty_ = true;
- return std::string();
+ return ret.str();
}
void ban_manager::unban(std::ostringstream& os, const std::string& ip)
@@ -486,10 +502,7 @@
{
if ((*i)->get_group().empty())
{
- out << "IP: '" << (*i)->get_ip() <<
- "' end_time: '" <<
(*i)->get_human_end_time() <<
- "' reason: '" << (*i)->get_reason() <<
- "' issuer: "<< (*i)->get_who_banned()
<< "\n";
+ out << (**i) << "\n";
} else {
groups.insert((*i)->get_group());
}
@@ -522,7 +535,7 @@
void ban_manager::init_ban_help()
{
- ban_help_ = "ban <ip|nickname> [<time>] <reason>\nTime is give
in format â°d[â°s[â°dâ°s[...]]] (where â°s is s, m, h, D, M or Y).\nIf no
time modifier is given minutes are used.\n";
+ ban_help_ = "ban <ip|nickname> [<time>] <reason>\nTime is give
in format <number>[<letter>[<number><letter>[...]]]\n where <letter> is time
modifier and valid values are s (seconds), m (minutes), h (hours, default), D
(dayes), M (months) and Y (years).\nIf no time is given then ban is
permanent.\n";
default_ban_times::iterator itor = ban_times_.begin();
if (itor != ban_times_.end())
{
@@ -537,7 +550,7 @@
{
ban_help_ += " for standard ban times.\n";
}
- ban_help_ += "ban 127.0.0.1 2h20m flooded lobby\nban 127.0.0.2
medium flooded lobby again\n";
+ ban_help_ += "ban 127.0.0.1 2h20m flooded lobby\nkban suokko 5D
flooded again\nkban suokko Y One year ban for constant flooding\n";
}
void ban_manager::load_config(const config& cfg)
@@ -560,6 +573,7 @@
ban_manager::~ban_manager()
{
+ write();
}
ban_manager::ban_manager() : bans_(), time_queue_(), ban_times_(),
ban_help_(), filename_(), dirty_(false)
Modified: trunk/src/server/ban.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/server/ban.hpp?rev=29175&r1=29174&r2=29175&view=diff
==============================================================================
--- trunk/src/server/ban.hpp (original)
+++ trunk/src/server/ban.hpp Mon Sep 1 22:52:19 2008
@@ -28,6 +28,8 @@
namespace wesnothd {
class banned;
+
+ std::ostream& operator<<(std::ostream& o, const banned& n);
typedef boost::shared_ptr<banned> banned_ptr;
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits