X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fwildcard.cpp;h=161bb81a6c3df0964555aab26203ea3e3bf5e658;hb=b43fc66c17c2bef6dca66a966676b8128d5774ee;hp=63a28b8cb797fe2e25bb9e4d8e94847c530752ec;hpb=b8e537eba7a77bc8cbcdd30e2ff1ba79fb7b0569;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/wildcard.cpp b/src/wildcard.cpp index 63a28b8cb..161bb81a6 100644 --- a/src/wildcard.cpp +++ b/src/wildcard.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -19,54 +19,51 @@ static bool match_internal(const unsigned char *str, const unsigned char *mask, unsigned const char *map) { - unsigned char *cp = NULL, *mp = NULL; - unsigned char* string = (unsigned char*)str; - unsigned char* wild = (unsigned char*)mask; - - if (!map) - map = rfc_case_insensitive_map; - - while ((*string) && (*wild != '*')) - { - if ((map[*wild] != map[*string]) && (*wild != '?')) - { - return 0; - } - wild++; - string++; - } - - while (*string) - { - if (*wild == '*') - { - if (!*++wild) - { - return 1; - } - mp = wild; - cp = string+1; - } - else - if ((map[*wild] == map[*string]) || (*wild == '?')) - { - wild++; - string++; - } - else - { - wild = mp; - string = cp++; - } - - } - - while (*wild == '*') - { - wild++; - } - - return !*wild; + unsigned char *cp = NULL, *mp = NULL; + unsigned char* string = (unsigned char*)str; + unsigned char* wild = (unsigned char*)mask; + + while ((*string) && (*wild != '*')) + { + if ((map[*wild] != map[*string]) && (*wild != '?')) + { + return 0; + } + wild++; + string++; + } + + while (*string) + { + if (*wild == '*') + { + if (!*++wild) + { + return 1; + } + mp = wild; + cp = string+1; + } + else + if ((map[*wild] == map[*string]) || (*wild == '?')) + { + wild++; + string++; + } + else + { + wild = mp; + string = cp++; + } + + } + + while (*wild == '*') + { + wild++; + } + + return !*wild; } /******************************************************************** @@ -75,11 +72,16 @@ static bool match_internal(const unsigned char *str, const unsigned char *mask, CoreExport bool InspIRCd::Match(const std::string &str, const std::string &mask, unsigned const char *map) { + if (!map) + map = national_case_insensitive_map; + return match_internal((const unsigned char *)str.c_str(), (const unsigned char *)mask.c_str(), map); } CoreExport bool InspIRCd::Match(const char *str, const char *mask, unsigned const char *map) { + if (!map) + map = national_case_insensitive_map; return match_internal((const unsigned char *)str, (const unsigned char *)mask, map); } @@ -88,8 +90,11 @@ CoreExport bool InspIRCd::MatchCIDR(const std::string &str, const std::string &m if (irc::sockets::MatchCIDR(str, mask, true)) return true; + if (!map) + map = national_case_insensitive_map; + // Fall back to regular match - return InspIRCd::Match(str, mask, NULL); + return InspIRCd::Match(str, mask, map); } CoreExport bool InspIRCd::MatchCIDR(const char *str, const char *mask, unsigned const char *map) @@ -97,7 +102,10 @@ CoreExport bool InspIRCd::MatchCIDR(const char *str, const char *mask, unsigned if (irc::sockets::MatchCIDR(str, mask, true)) return true; + if (!map) + map = national_case_insensitive_map; + // Fall back to regular match - return InspIRCd::Match(str, mask, NULL); + return InspIRCd::Match(str, mask, map); }