*/
unsigned int registration_timeout;
- /** Host mask for this line
- */
+ /** Hosts that this user can connect from as a string. */
std::string host;
+ /** Hosts that this user can connect from as a vector. */
+ std::vector<std::string> hosts;
+
/** Number of seconds between pings for this line
*/
unsigned int pingtime;
/** Update the settings in this block to match the given block */
void Update(const ConnectClass* newSettings);
- const std::string& GetName() { return name; }
- const std::string& GetHost() { return host; }
+ const std::string& GetName() const { return name; }
+ const std::string& GetHost() const { return host; }
+ const std::vector<std::string>& GetHosts() const { return hosts; }
/** Returns the registration timeout
*/
std::string mask;
char type;
- if (tag->readString("allow", mask, false))
+ if (tag->readString("allow", mask, false) && !mask.empty())
type = CC_ALLOW;
- else if (tag->readString("deny", mask, false))
+ else if (tag->readString("deny", mask, false) && !mask.empty())
type = CC_DENY;
else if (!name.empty())
{
continue;
}
- /* check if host matches.. */
- if (!InspIRCd::MatchCIDR(this->GetIPString(), c->GetHost(), NULL) &&
- !InspIRCd::MatchCIDR(this->GetRealHost(), c->GetHost(), NULL))
+ bool hostmatches = false;
+ for (std::vector<std::string>::const_iterator host = c->GetHosts().begin(); host != c->GetHosts().end(); ++host)
+ {
+ if (InspIRCd::MatchCIDR(this->GetIPString(), *host) || InspIRCd::MatchCIDR(this->GetRealHost(), *host))
+ {
+ hostmatches = true;
+ break;
+ }
+ }
+ if (!hostmatches)
{
ServerInstance->Logs->Log("CONNECTCLASS", LOG_DEBUG, "The %s connect class is not suitable as neither the host (%s) nor the IP (%s) matches %s",
c->GetName().c_str(), this->GetRealHost().c_str(), this->GetIPString().c_str(), c->GetHost().c_str());
, limit(0)
, resolvehostnames(true)
{
+ irc::spacesepstream hoststream(host);
+ for (std::string hostentry; hoststream.GetToken(hostentry); )
+ hosts.push_back(hostentry);
}
ConnectClass::ConnectClass(ConfigTag* tag, char t, const std::string& mask, const ConnectClass& parent)
name = src->name;
registration_timeout = src->registration_timeout;
host = src->host;
+ hosts = src->hosts;
pingtime = src->pingtime;
softsendqmax = src->softsendqmax;
hardsendqmax = src->hardsendqmax;