mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
94 lines
2.8 KiB
Diff
94 lines
2.8 KiB
Diff
|
--- /tmp/hosts_access.c 2003-08-03 22:18:00.000000000 +0000
|
||
|
+++ hosts_access.c 2003-08-03 22:39:44.000000000 +0000
|
||
|
@@ -289,6 +289,17 @@
|
||
|
{
|
||
|
int n;
|
||
|
|
||
|
+#ifndef DISABLE_WILDCARD_MATCHING
|
||
|
+ if (strchr(tok, '*') || strchr(tok,'?')) { /* contains '*' or '?' */
|
||
|
+ /* we must convert the both to lowercase as match_pattern_ylo is case-sensitive */
|
||
|
+ for (n = 0; n < strlen(tok); n++)
|
||
|
+ tok[n] = isupper(tok[n]) ? tolower(tok[n]) : tok[n];
|
||
|
+ for (n = 0; n < strlen(string); n++)
|
||
|
+ string[n] = isupper(string[n]) ? tolower(string[n]) : string[n];
|
||
|
+ return (match_pattern_ylo(string,tok));
|
||
|
+ } else
|
||
|
+#endif
|
||
|
+
|
||
|
if (tok[0] == '.') { /* suffix */
|
||
|
n = strlen(string) - strlen(tok);
|
||
|
return (n > 0 && STR_EQ(tok, string + n));
|
||
|
@@ -329,3 +340,72 @@
|
||
|
}
|
||
|
return ((addr & mask) == net);
|
||
|
}
|
||
|
+
|
||
|
+#ifndef DISABLE_WILDCARD_MATCHING
|
||
|
+/* Note: this feature has been adapted in a pretty straightforward way
|
||
|
+ from Tatu Ylonen's last SSH version under free license by
|
||
|
+ Pekka Savola <pekkas@netcore.fi>.
|
||
|
+
|
||
|
+ Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||
|
+*/
|
||
|
+
|
||
|
+/* Returns true if the given string matches the pattern (which may contain
|
||
|
+ ? and * as wildcards), and zero if it does not match. */
|
||
|
+
|
||
|
+int match_pattern_ylo(const char *s, const char *pattern)
|
||
|
+{
|
||
|
+ while (1)
|
||
|
+ {
|
||
|
+ /* If at end of pattern, accept if also at end of string. */
|
||
|
+ if (!*pattern)
|
||
|
+ return !*s;
|
||
|
+
|
||
|
+ /* Process '*'. */
|
||
|
+ if (*pattern == '*')
|
||
|
+ {
|
||
|
+ /* Skip the asterisk. */
|
||
|
+ pattern++;
|
||
|
+
|
||
|
+ /* If at end of pattern, accept immediately. */
|
||
|
+ if (!*pattern)
|
||
|
+ return 1;
|
||
|
+
|
||
|
+ /* If next character in pattern is known, optimize. */
|
||
|
+ if (*pattern != '?' && *pattern != '*')
|
||
|
+ {
|
||
|
+ /* Look instances of the next character in pattern, and try
|
||
|
+ to match starting from those. */
|
||
|
+ for (; *s; s++)
|
||
|
+ if (*s == *pattern &&
|
||
|
+ match_pattern_ylo(s + 1, pattern + 1))
|
||
|
+ return 1;
|
||
|
+ /* Failed. */
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* Move ahead one character at a time and try to match at each
|
||
|
+ position. */
|
||
|
+ for (; *s; s++)
|
||
|
+ if (match_pattern_ylo(s, pattern))
|
||
|
+ return 1;
|
||
|
+ /* Failed. */
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* There must be at least one more character in the string. If we are
|
||
|
+ at the end, fail. */
|
||
|
+ if (!*s)
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ /* Check if the next character of the string is acceptable. */
|
||
|
+ if (*pattern != '?' && *pattern != *s)
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ /* Move to the next character, both in string and in pattern. */
|
||
|
+ s++;
|
||
|
+ pattern++;
|
||
|
+ }
|
||
|
+ /*NOTREACHED*/
|
||
|
+}
|
||
|
+#endif /* DISABLE_WILDCARD_MATCHING */
|
||
|
+
|