X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_codepage.cpp;h=45fdb3d834ae02e2b312c2c5b68403cdba7a3dbd;hb=80e81e3b81b779901fd9d67f8ae030ee30c0bcec;hp=5858acd977bde4802e72a86fe633afe8e5aa6f59;hpb=aa692dc1039b63deef7886e914ec499abe7facaf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_codepage.cpp b/src/modules/m_codepage.cpp index 5858acd97..45fdb3d83 100644 --- a/src/modules/m_codepage.cpp +++ b/src/modules/m_codepage.cpp @@ -76,6 +76,21 @@ class ModuleCodepage hashmap.swap(newhash); } + void CheckDuplicateNick() + { + insp::flat_set duplicates; + const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers(); + for (UserManager::LocalList::const_iterator iter = list.begin(); iter != list.end(); ++iter) + { + LocalUser* user = *iter; + if (user->nick != user->uuid && !duplicates.insert(user->nick).second) + { + user->WriteNumeric(RPL_SAVENICK, user->uuid, "Your nickname is no longer available."); + user->ChangeNick(user->uuid); + } + } + } + void CheckInvalidNick() { const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers(); @@ -83,7 +98,10 @@ class ModuleCodepage { LocalUser* user = *iter; if (user->nick != user->uuid && !ServerInstance->IsNick(user->nick)) + { + user->WriteNumeric(RPL_SAVENICK, user->uuid, "Your nickname is no longer valid."); user->ChangeNick(user->uuid); + } } } @@ -112,6 +130,7 @@ class ModuleCodepage ServerInstance->Config->CaseMapping = origcasemapname; national_case_insensitive_map = origcasemap; + CheckDuplicateNick(); CheckRehash(casemap); ServerInstance->ISupport.Build(); @@ -133,7 +152,7 @@ class ModuleCodepage unsigned char begin = tag->getUInt("begin", tag->getUInt("index", 0), 1, UCHAR_MAX); if (!begin) throw ModuleException(" tag without index or begin specified at " + tag->getTagLocation()); - + unsigned char end = tag->getUInt("end", begin, 1, UCHAR_MAX); if (begin > end) throw ModuleException(" must be lower than at " + tag->getTagLocation()); @@ -214,7 +233,7 @@ class ModuleCodepage if (casemap[i] != i) linkdata << static_cast(i) << casemap[i] << ','; - return Version("Provides support for custom 8-bit codepages", VF_COMMON | VF_VENDOR, linkdata.str()); + return Version("Allows the server administrator to define what characters are allowed in nicknames and how characters should be compared in a case insensitive way.", VF_COMMON | VF_VENDOR, linkdata.str()); } }; MODULE_INIT(ModuleCodepage)