Skip to content

Commit

Permalink
<hostname:charmap> defines the valid characters in a hostmask (this i…
Browse files Browse the repository at this point in the history
…s for you webs to obsolete your patch :p)

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6186 e03df62e-2008-0410-955e-edbf42e46eb7
  • Loading branch information
braindigitalis committed Dec 31, 2006
1 parent 8982ea4 commit 6e76127
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 28 deletions.
40 changes: 26 additions & 14 deletions src/modules/m_chghost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,25 @@
*/
class cmd_chghost : public command_t
{
private:
char*& hostmap;
public:
cmd_chghost (InspIRCd* Instance) : command_t(Instance,"CHGHOST",'o',2)
cmd_chghost (InspIRCd* Instance, char* &hmap) : command_t(Instance,"CHGHOST",'o',2), hostmap(hmap)
{
this->source = "m_chghost.so";
syntax = "<nick> <newhost>";
}

CmdResult Handle(const char** parameters, int pcnt, userrec *user)
{
const char * x = parameters[1];

for (; *x; x++)
{
if (((tolower(*x) < 'a') || (tolower(*x) > 'z')) && (*x != '.'))
if (!strchr(hostmap, *x))
{
if (((*x < '0') || (*x > '9')) && (*x != '-'))
{
user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Invalid characters in hostname");
return CMD_FAILURE;
}
user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Invalid characters in hostname");
return CMD_FAILURE;
}
}
if ((parameters[1] - x) > 63)
Expand All @@ -71,31 +70,44 @@ class cmd_chghost : public command_t
class ModuleChgHost : public Module
{
cmd_chghost* mycommand;
char* hostmap;
std::string hmap;
public:
ModuleChgHost(InspIRCd* Me)
: Module::Module(Me)
{

mycommand = new cmd_chghost(ServerInstance);
OnRehash("");
mycommand = new cmd_chghost(ServerInstance, hostmap);
ServerInstance->AddCommand(mycommand);
}

void Implements(char* List)
{
List[I_OnRehash] = 1;
}

virtual ~ModuleChgHost()
void OnRehash(const std::string &parameter)
{
ConfigReader Conf(ServerInstance);
hmap = Conf.ReadValue("hostname", "charmap", 0);

if (hmap.empty())
hostmap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_/0123456789";
else
hostmap = (char*)hmap.c_str();
}

~ModuleChgHost()
{
}

virtual Version GetVersion()
Version GetVersion()
{
return Version(1,1,0,0,VF_VENDOR,API_VERSION);
return Version(1, 1, 0, 0, VF_VENDOR, API_VERSION);
}

};

// stuff down here is the module-factory stuff. For basic modules you can ignore this.

class ModuleChgHostFactory : public ModuleFactory
{
Expand Down
43 changes: 29 additions & 14 deletions src/modules/m_sethost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@
*/
class cmd_sethost : public command_t
{
private:
char*& hostmap;
public:
cmd_sethost (InspIRCd* Instance) : command_t(Instance,"SETHOST",'o',1)
cmd_sethost (InspIRCd* Instance, char*& hmap) : command_t(Instance,"SETHOST",'o',1), hostmap(hmap)
{
this->source = "m_sethost.so";
syntax = "<new-hostname>";
Expand All @@ -37,13 +39,10 @@ class cmd_sethost : public command_t
size_t len = 0;
for (const char* x = parameters[0]; *x; x++, len++)
{
if (((tolower(*x) < 'a') || (tolower(*x) > 'z')) && (*x != '.'))
if (!strchr(hostmap, *x))
{
if (((*x < '0') || (*x> '9')) && (*x != '-'))
{
user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Invalid characters in hostname");
return CMD_FAILURE;
}
user->WriteServ("NOTICE "+std::string(user->nick)+" :*** Invalid characters in hostname");
return CMD_FAILURE;
}
}
if (len > 64)
Expand All @@ -64,16 +63,34 @@ class cmd_sethost : public command_t

class ModuleSetHost : public Module
{
cmd_sethost* mycommand;
cmd_sethost* mycommand;
char* hostmap;
std::string hmap;
public:
ModuleSetHost(InspIRCd* Me)
: Module::Module(Me)
{

mycommand = new cmd_sethost(ServerInstance);
{
OnRehash("");
mycommand = new cmd_sethost(ServerInstance, hostmap);
ServerInstance->AddCommand(mycommand);
}


void Implements(char* List)
{
List[I_OnRehash] = 1;
}

void OnRehash(const std::string &parameter)
{
ConfigReader Conf(ServerInstance);
hmap = Conf.ReadValue("hostname", "charmap", 0);

if (hmap.empty())
hostmap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_/0123456789";
else
hostmap = (char*)hmap.c_str();
}

virtual ~ModuleSetHost()
{
}
Expand All @@ -85,8 +102,6 @@ class ModuleSetHost : public Module

};

// stuff down here is the module-factory stuff. For basic modules you can ignore this.

class ModuleSetHostFactory : public ModuleFactory
{
public:
Expand Down

0 comments on commit 6e76127

Please sign in to comment.