From: Michael Poole Date: Thu, 6 Oct 2005 00:37:31 +0000 (+0000) Subject: Fix setting of FLAG_DOID and buglet from last commit. X-Git-Url: http://git.pk910.de/?a=commitdiff_plain;h=fdacc9ef39301ca514248cd4c410a803158f2f49;p=ircu2.10.12-pk.git Fix setting of FLAG_DOID and buglet from last commit. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1514 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index 914677f..8baae4b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-10-05 Michael Poole + + * ircd/class.c (do_find_class): Fix bug from previous commit. + + * ircd/ircd_parser.y (clientblock): Allow setting Client port. + + * ircd/s_conf.c (check_limit_and_attach): Merge into attach_iline. + (attach_iline): Only set FLAG_DOID when we are sure we will attach + this Client block to the client. [Credit: Jukka Ollila and others] + 2005-10-04 Michael Poole [Based on a patch by Jukka Ollila] diff --git a/ircd/class.c b/ircd/class.c index d4ddff9..2169605 100644 --- a/ircd/class.c +++ b/ircd/class.c @@ -238,7 +238,7 @@ struct ConnectionClass* do_find_class(const char *name, int extras) struct ConnectionClass *cltmp; for (cltmp = connClassList; cltmp; cltmp = cltmp->next) { - if (!cltmp->valid || !extras) + if (!cltmp->valid && !extras) continue; if (!ircd_strcmp(ConClass(cltmp), name)) return cltmp; diff --git a/ircd/ircd_parser.y b/ircd/ircd_parser.y index 934f923..c8a9048 100644 --- a/ircd/ircd_parser.y +++ b/ircd/ircd_parser.y @@ -665,6 +665,7 @@ porthidden: HIDDEN '=' YES ';' clientblock: CLIENT { maxlinks = 65535; + port = 0; } '{' clientitems '}' ';' { @@ -684,6 +685,7 @@ clientblock: CLIENT memcpy(&aconf->address.addr, &addr, sizeof(aconf->address.addr)); else memset(&aconf->address.addr, 0, sizeof(aconf->address.addr)); + aconf->address.port = port; aconf->addrbits = addrbits; aconf->name = ip; aconf->conn_class = c_class; @@ -701,9 +703,10 @@ clientblock: CLIENT c_class = NULL; ip = NULL; pass = NULL; + port = 0; }; clientitems: clientitem clientitems | clientitem; -clientitem: clienthost | clientip | clientusername | clientclass | clientpass | clientmaxlinks; +clientitem: clienthost | clientip | clientusername | clientclass | clientpass | clientmaxlinks | clientport; clienthost: HOST '=' QSTRING ';' { char *sep = strchr($3, '@'); @@ -752,6 +755,10 @@ clientmaxlinks: MAXLINKS '=' expr ';' { maxlinks = $3; }; +clientport: PORT '=' expr ';' +{ + port = $3; +}; killblock: KILL { diff --git a/ircd/s_conf.c b/ircd/s_conf.c index cc425ca..bd1704d 100644 --- a/ircd/s_conf.c +++ b/ircd/s_conf.c @@ -345,22 +345,6 @@ void det_confs_butmask(struct Client* cptr, int mask) } } -/** Check client limits and attach Client block. - * If there are more connections from the IP than \a aconf->maximum - * allows, return ACR_TOO_MANY_FROM_IP. Otherwise, attach \a aconf to - * \a cptr. - * @param cptr Client getting \a aconf. - * @param aconf Configuration item to attach. - * @return Authorization check result. - */ -static enum AuthorizationCheckResult -check_limit_and_attach(struct Client* cptr, struct ConfItem* aconf) -{ - if (IPcheck_nr(cptr) > aconf->maximum) - return ACR_TOO_MANY_FROM_IP; - return attach_conf(cptr, aconf); -} - /** Find the first (best) Client block to attach. * @param cptr Client for whom to check rules. * @return Authorization check result. @@ -379,17 +363,18 @@ enum AuthorizationCheckResult attach_iline(struct Client* cptr) */ if (aconf->address.port && aconf->address.port != cli_listener(cptr)->addr.port) continue; - if (aconf->username) { - SetFlag(cptr, FLAG_DOID); - if (match(aconf->username, cli_username(cptr))) - continue; - } + if (aconf->username && match(aconf->username, cli_username(cptr))) + continue; if (aconf->host && match(aconf->host, cli_sockhost(cptr))) continue; if ((aconf->addrbits >= 0) && !ipmask_check(&cli_ip(cptr), &aconf->address.addr, aconf->addrbits)) continue; - return check_limit_and_attach(cptr, aconf); + if (IPcheck_nr(cptr) > aconf->maximum) + return ACR_TOO_MANY_FROM_IP; + if (aconf->username) + SetFlag(cptr, FLAG_DOID); + return attach_conf(cptr, aconf); } return ACR_NO_AUTHORIZATION; }