+/**
+ * Match string with pattern case-insensitive.
+ *
+ * @param Pattern Pattern to match with
+ * @param String Input string, at most COMMAND_LEN-1 characters long
+ * @return true if pattern matches
+ */
+GLOBAL bool
+MatchCaseInsensitive(const char *Pattern, const char *String)
+{
+ char haystack[COMMAND_LEN];
+
+ strlcpy(haystack, String, sizeof(haystack));
+ return Match(Pattern, ngt_LowerStr(haystack));
+} /* MatchCaseInsensitive */
+
+
+/**
+ * Match string with pattern case-insensitive.
+ *
+ * @param pattern Pattern to match with
+ * @param String Input string, at most COMMAND_LEN-1 characters long
+ * @param Separator Character separating the individual patterns in the list
+ * @return true if pattern matches
+ */
+GLOBAL bool
+MatchCaseInsensitiveList(const char *Pattern, const char *String,
+ const char *Separator)
+{
+ char tmp_pattern[COMMAND_LEN], haystack[COMMAND_LEN], *ptr;
+
+ strlcpy(tmp_pattern, Pattern, sizeof(tmp_pattern));
+ strlcpy(haystack, String, sizeof(haystack));
+ ngt_LowerStr(haystack);
+
+ ptr = strtok(tmp_pattern, Separator);
+ while (ptr) {
+ ngt_TrimStr(ptr);
+ if (Match(ptr, haystack))
+ return true;
+ ptr = strtok(NULL, Separator);
+ }
+ return false;
+} /* MatchCaseInsensitive */
+
+