-const char filters_rcs[] = "$Id: filters.c,v 1.10 2001/05/29 09:50:24 jongfoster Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.11 2001/05/29 11:53:23 oes Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
*
* Revisions :
* $Log: filters.c,v $
+ * Revision 1.11 2001/05/29 11:53:23 oes
+ * "See why" link added to "blocked" page
+ *
* Revision 1.10 2001/05/29 09:50:24 jongfoster
* Unified blocklist/imagelist/permissionslist.
* File format is still under discussion, but the internal changes
memset(ret, '\0', sizeof(*ret));
- if ((p = strrchr(domain, '.')))
- {
- if (*(++p) == '\0')
- {
- ret->toplevel = 1;
- }
- }
+ ret->unanchored = (domain[strlen(domain) - 1] == '.');
ret->dbuf = strdup(domain);
memcpy(ret->dvec, v, size);
}
+
return(*ret);
}
* Function : domaincmp
*
* Description : Compare domain names.
- * domaincmp("a.b.c" , "a.b.c") => 0 (MATCH)
+ * domaincmp("a.b.c", "a.b.c") => 0 (MATCH)
* domaincmp("a*.b.c", "a.b.c") => 0 (MATCH)
+ * domaincmp("a*.b.c", "abc.b.c") => 0 (MATCH)
+ * domaincmp("a*c.b.c","abbc.b.c") => 0 (MATCH)
+ * domaincmp("*a.b.c", "dabc.b.c") => 0 (MATCH)
* domaincmp("b.c" , "a.b.c") => 0 (MATCH)
+ * domaincmp("a.b" , "a.b.c") => 1 (DIFF)
+ * domaincmp("a.b." , "a.b.c") => 0 (MATCH)
* domaincmp("" , "a.b.c") => 0 (MATCH)
+ *
+ * FIXME: I need a definition!
*
* Parameters :
* 1 : pattern = a domain that may contain a '*' as a wildcard.
char *p, *f; /* chars */
pv = pattern->dvec;
- pn = pattern->dcnt;
-
fv = fqdn->dvec;
- fn = fqdn->dcnt;
+ fn = pn = 0;
- while ((pn > 0) && (fn > 0))
+ while (fn < fqdn->dcnt && pn < pattern->dcnt)
{
- p = pv[--pn];
- f = fv[--fn];
+ p = pv[pn];
+ f = fv[fn];
- while (*p && *f && (*p == tolower(*f)))
+ if (trivimatch(p, f))
{
- p++, f++;
+ if(pn)
+ {
+ return 1;
+ }
}
-
- if ((*p != tolower(*f)) && (*p != '*')) return(1);
+ else
+ {
+ pn++;
+ }
+ fn++;
}
- if (pn > 0) return(1);
-
- return(0);
+ return ((pn < pattern->dcnt) || ((fn < fqdn->dcnt) && !pattern->unanchored));
}