X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/ef07b59ac8b60bec3cb532137921b7703494766d..4859b814a5d8e99a85a951c21360c6b4922920a6:/src/s_conf.c diff --git a/src/s_conf.c b/src/s_conf.c index c1d6234..e04941f 100644 --- a/src/s_conf.c +++ b/src/s_conf.c @@ -21,7 +21,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: s_conf.c 3550 2007-08-09 06:47:26Z nenolod $ */ #include "stdinc.h" @@ -52,6 +51,7 @@ #include "sslproc.h" #include "bandbi.h" #include "operhash.h" +#include "chmode.h" struct config_server_hide ConfigServerHide; @@ -86,6 +86,8 @@ extern char yytext[]; static int verify_access(struct Client *client_p, const char *username); static int attach_iline(struct Client *, struct ConfItem *); +int startup = 1; + void init_s_conf(void) { @@ -484,14 +486,13 @@ attach_iline(struct Client *client_p, struct ConfItem *aconf) int local_count = 0; int global_count = 0; int ident_count = 0; - int unidented = 0; + int unidented; if(IsConfExemptLimits(aconf)) return (attach_conf(client_p, aconf)); - if(*client_p->username == '~') - unidented = 1; - + unidented = !IsGotId(client_p) && !IsNoTilde(aconf) && + (!IsConfDoSpoofIp(aconf) || !strchr(aconf->info.name, '@')); /* find_hostname() returns the head of the list to search */ RB_DLINK_FOREACH(ptr, find_hostname(client_p->host)) @@ -700,6 +701,7 @@ set_default_conf(void) ConfigFileEntry.failed_oper_notice = YES; ConfigFileEntry.anti_nick_flood = NO; ConfigFileEntry.disable_fake_channels = NO; + ConfigFileEntry.hide_channel_below_users = 3; ConfigFileEntry.max_nick_time = 20; ConfigFileEntry.max_nick_changes = 5; ConfigFileEntry.max_accept = 20; @@ -765,6 +767,8 @@ set_default_conf(void) ConfigChannel.autochanmodes = rb_strdup("nt"); ConfigChannel.exemptchanops = rb_strdup(""); + ConfigChannel.disabledmodes = rb_strdup(""); + ConfigChannel.admin_on_channel_create = NO; ConfigChannel.use_halfop = YES; ConfigChannel.use_admin = YES; ConfigChannel.use_except = YES; @@ -788,7 +792,7 @@ set_default_conf(void) ConfigChannel.no_join_on_split = NO; ConfigChannel.no_create_on_split = YES; ConfigChannel.resv_forcepart = YES; - ConfigChannel.kick_no_rejoin_time = 30; + ConfigChannel.channel_target_change = YES; ConfigChannel.exempt_cmode_c = NO; ConfigChannel.exempt_cmode_C = NO; @@ -806,6 +810,7 @@ set_default_conf(void) ConfigFileEntry.min_nonwildcard = 4; ConfigFileEntry.min_nonwildcard_simple = 3; ConfigFileEntry.default_floodcount = 8; + ConfigFileEntry.default_ident_timeout = 5; ConfigFileEntry.client_flood = CLIENT_FLOOD_DEFAULT; ConfigFileEntry.tkline_expire_notices = 0; @@ -894,7 +899,7 @@ validate_conf(void) splitchecking = 0; } - if(!valid_hostname(ConfigFileEntry.default_operhost)) + if(!valid_hostname(ConfigFileEntry.default_operhost) && !EmptyString(ConfigFileEntry.default_operhost)) { conf_report_error("Warning -- invalid default_operhost specified, ignoring."); ConfigFileEntry.default_operhost = rb_strdup(""); @@ -939,6 +944,131 @@ validate_conf(void) if(*ech == 'K') ConfigChannel.exempt_cmode_K = 1; } + + /* orphan any modes specified in channel::disabledmodes */ + char * dm; + + if(startup && !EmptyString(ConfigChannel.disabledmodes)) + { + for(dm = ConfigChannel.disabledmodes; *dm; dm++) + { + if(*dm == 'C') + { + cflag_orphan('C'); + continue; + } + if(*dm == 'r') + { + cflag_orphan('r'); + continue; + } + if(*dm == 'c') + { + cflag_orphan('c'); + continue; + } + if(*dm == 'L') + { + cflag_orphan('L'); + continue; + } + if(*dm == 'P') + { + cflag_orphan('P'); + continue; + } + if(*dm == 'z') + { + cflag_orphan('z'); + continue; + } + if(*dm == 'g') + { + cflag_orphan('g'); + continue; + } + if(*dm == 'F') + { + cflag_orphan('F'); + continue; + } + if(*dm == 'Q') + { + cflag_orphan('Q'); + continue; + } + if(*dm == 'q') + { + cflag_orphan('q'); + continue; + } + if(*dm == 'I') + { + cflag_orphan('I'); + ConfigChannel.use_invex = 0; + continue; + } + if(*dm == 'e') + { + cflag_orphan('e'); + ConfigChannel.use_except = 0; + continue; + } + if(*dm == 'f') + { + cflag_orphan('f'); + ConfigChannel.use_forward = 0; + continue; + } + if(*dm == 'j') + { + cflag_orphan('j'); + continue; + } + if(*dm == 'T') + { + cflag_orphan('T'); + continue; + } + if(*dm == 'D') + { + cflag_orphan('D'); + continue; + } + if(*dm == 'E') + { + cflag_orphan('E'); + continue; + } + if(*dm == 'N') + { + cflag_orphan('N'); + continue; + } + if(*dm == 'G') + { + cflag_orphan('G'); + continue; + } + if(*dm == 'J') + { + cflag_orphan('J'); + continue; + } + if(*dm == 'K') + { + cflag_orphan('K'); + continue; + } + if(*dm == 'M') + { + cflag_orphan('M'); + continue; + } + } + } + construct_cflag_param_string(); + startup = 0; } /* add_temp_kline() @@ -1636,9 +1766,7 @@ yyerror(const char *msg) int conf_fgets(char *lbuf, int max_size, FILE * fb) { - char *buff; - - if((buff = fgets(lbuf, max_size, fb)) == NULL) + if(fgets(lbuf, max_size, fb) == NULL) return (0); return (strlen(lbuf));