Exemple #1
0
	void HandleIdentOrPass(LocalUser* user, const std::string& newip, bool was_pass)
	{
		cmd.realhost.set(user, user->host);
		cmd.realip.set(user, user->GetIPString());
		ChangeIP(user, newip);
		user->host = user->dhost = user->GetIPString();
		user->InvalidateCache();
		RecheckClass(user);

		// Don't create the resolver if the core couldn't put the user in a connect class or when dns is disabled
		if (user->quitting || !DNS || user->MyClass->nouserdns)
			return;

		CGIResolver* r = new CGIResolver(*this->DNS, this, cmd.notify, newip, user, (was_pass ? "PASS" : "IDENT"), waiting);
		try
		{
			waiting.set(user, waiting.get(user) + 1);
			this->DNS->Process(r);
		}
		catch (DNS::Exception &ex)
		{
			int count = waiting.get(user);
			if (count)
				waiting.set(user, count - 1);
			delete r;
			if (cmd.notify)
				 ServerInstance->SNO->WriteToSnoMask('a', "Connecting user %s detected as using CGI:IRC (%s), but I could not resolve their hostname; %s", user->nick.c_str(), user->host.c_str(), ex.GetReason());
		}
	}
Exemple #2
0
		CmdResult Handle(const std::vector<std::string> &parameters, User *user)
		{
			if(user->registered == REG_ALL)
				return CMD_FAILURE;

			for(CGIHostlist::iterator iter = Hosts.begin(); iter != Hosts.end(); iter++)
			{
				if(InspIRCd::Match(user->host, iter->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(user->GetIPString(), iter->hostmask, ascii_case_insensitive_map))
				{
					if(iter->type == WEBIRC && parameters[0] == iter->password)
					{
						realhost.set(user, user->host);
						realip.set(user, user->GetIPString());

						// Check if we're happy with the provided hostname. If it's problematic then make sure we won't set a host later, just the IP
						bool host_ok = (parameters[2].length() <= ServerInstance->Config->Limits.MaxHost);
						const std::string& newhost = (host_ok ? parameters[2] : parameters[3]);

						if (notify)
							ServerInstance->SNO->WriteGlobalSno('w', "Connecting user %s detected as using CGI:IRC (%s), changing real host to %s from %s", user->nick.c_str(), user->host.c_str(), newhost.c_str(), user->host.c_str());

						// Where the magic happens - change their IP
						ChangeIP(user, parameters[3]);
						// And follow this up by changing their host
						user->host = user->dhost = newhost;
						user->InvalidateCache();

						return CMD_SUCCESS;
					}
				}
			}

			ServerInstance->SNO->WriteGlobalSno('w', "Connecting user %s tried to use WEBIRC, but didn't match any configured webirc blocks.", user->GetFullRealHost().c_str());
			return CMD_FAILURE;
		}
// -----------------------------------------------------------------------------
// CNATFWUNSAFChangeRequestAttribute::EncodeValueL
// -----------------------------------------------------------------------------
//
HBufC8* CNATFWUNSAFChangeRequestAttribute::EncodeValueL() const
    {
    HBufC8* encodedValue = HBufC8::NewLC(EAttributeValueSize);

    TPtr8 ptr = encodedValue->Des();
    ptr.FillZ(EAttributeValueSize);

    TUint32 value(0);
    if (ChangeIP())
        {
        value = value | EChangeIPMask;
        }
    if (ChangePort())
        {
        value = value | EChangePortMask;
        }

    NATFWUNSAFUtils::WriteNetworkOrder32L(ptr, 0, value);

    CleanupStack::Pop(encodedValue);
    return encodedValue;
    }