First step of expiry of +p crap.

This commit is contained in:
JD Horelick 2010-03-02 20:33:58 -05:00
parent eccd1c58d2
commit 9ace21a74d
7 changed files with 27 additions and 0 deletions

View File

@ -529,6 +529,7 @@ general {
reject_duration = 5 minutes;
throttle_duration = 60;
throttle_count = 4;
expire_override_time = 5 minutes;
};
modules {

View File

@ -1334,6 +1334,11 @@ general {
/* throttle_count: Number of connections within throttle_duration that it takes
* for throttling to take effect */
throttle_count = 4;
/* expire_override_time: User mode +p will be automatically unset
* this long after it is set. 0 disables this. Default is 5 minutes.
*/
expire_override_time = 5 minutes;
};
modules {

View File

@ -218,6 +218,7 @@ struct config_file_entry
int global_snotices;
int operspy_dont_care_user_info;
int secret_channels_in_whois;
int expire_override_time;
};
struct config_channel_entry

View File

@ -181,6 +181,12 @@ static struct InfoStruct info_table[] = {
&ConfigFileEntry.dots_in_ident,
"Number of permissable dots in an ident"
},
{
"expire_override_time",
OUTPUT_DECIMAL,
&ConfigFileEntry.expire_override_time,
"Period of time after which to unset user mode +p"
},
{
"failed_oper_notice",
OUTPUT_BOOLEAN,

View File

@ -2213,6 +2213,7 @@ static struct ConfEntry conf_general_table[] =
{ "ts_warn_delta", CF_TIME, NULL, 0, &ConfigFileEntry.ts_warn_delta },
{ "use_whois_actually", CF_YESNO, NULL, 0, &ConfigFileEntry.use_whois_actually },
{ "warn_no_nline", CF_YESNO, NULL, 0, &ConfigFileEntry.warn_no_nline },
{ "expire_override_time", CF_TIME, NULL, 0, &ConfigFileEntry.expire_override_time},
{ "\0", 0, NULL, 0, NULL }
};

View File

@ -798,6 +798,7 @@ set_default_conf(void)
ConfigFileEntry.reject_duration = 120;
ConfigFileEntry.throttle_count = 4;
ConfigFileEntry.throttle_duration = 60;
ConfigFileEntry.expire_override_time = 300;
ServerInfo.default_max_clients = MAXCONNECTIONS;

View File

@ -905,6 +905,14 @@ show_other_user_mode(struct Client *source_p, struct Client *target_p)
target_p->name, buf);
}
static void
expire_umode_p(void *data)
{
struct Client *source_p = data;
char *parv[4] = {source_p->name, source_p->name, "-p", NULL};
user_mode(source_p, source_p, 3, parv);
}
/*
* user_mode - set get current users mode
*
@ -979,6 +987,10 @@ user_mode(struct Client *client_p, struct Client *source_p, int parc, const char
sendto_one_numeric(source_p, RPL_SNOMASK, form_str(RPL_SNOMASK),
construct_snobuf(source_p->snomask));
/* If we're setting +p, expire it */
if(ConfigFileEntry.expire_override_time && (source_p->umodes & ~setflags) & UMODE_OVERRIDE)
rb_event_addonce("expire_override", expire_umode_p, source_p, ConfigFileEntry.expire_override_time);
return 0;
}