diff options
-rw-r--r-- | include/modules.h | 3 | ||||
-rw-r--r-- | src/modules.cpp | 28 |
2 files changed, 31 insertions, 0 deletions
diff --git a/include/modules.h b/include/modules.h index 0e8a6a865..a7a42991e 100644 --- a/include/modules.h +++ b/include/modules.h @@ -774,6 +774,9 @@ class Server : public classbase */ virtual long CalcDuration(std::string duration); + /** Returns true if a nick!ident@host string is correctly formatted, false if otherwise. + */ + virtual bool IsValidMask(std::string mask); }; #define CONF_NOT_A_NUMBER 0x000010 diff --git a/src/modules.cpp b/src/modules.cpp index 1bed5bd18..3d4972a2d 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -671,6 +671,34 @@ long Server::CalcDuration(std::string delta) return duration(delta.c_str()); } +bool Server::IsValidMask(std::string mask) +{ + const char* dest = mask.c_str(); + if (strchr(dest,'!')==0) + return false; + if (strchr(dest,'@')==0) + return false; + for (int i = 0; i < strlen(dest); i++) + if (dest[i] < 32) + return false; + for (int i = 0; i < strlen(dest); i++) + if (dest[i] > 126) + return false; + int c = 0; + for (int i = 0; i < strlen(dest); i++) + if (dest[i] == '!') + c++; + if (c>1) + return false; + c = 0; + for (int i = 0; i < strlen(dest); i++) + if (dest[i] == '@') + c++; + if (c>1) + return false; + + return true; +} ConfigReader::ConfigReader() { |