- Enhanced domain part globbing with infix and prefix asterisk
[privoxy.git] / filters.c
index e5497c2..2de5e29 100644 (file)
--- a/filters.c
+++ b/filters.c
@@ -1,4 +1,4 @@
-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 $
@@ -38,6 +38,9 @@ const char filters_rcs[] = "$Id: filters.c,v 1.10 2001/05/29 09:50:24 jongfoster
  *
  * 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
@@ -1045,13 +1048,7 @@ struct url_spec dsplit(char *domain)
 
    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);
 
@@ -1075,6 +1072,7 @@ struct url_spec dsplit(char *domain)
       memcpy(ret->dvec, v, size);
    }
 
+
    return(*ret);
 
 }
@@ -1085,10 +1083,17 @@ struct url_spec dsplit(char *domain)
  * 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.
@@ -1104,27 +1109,29 @@ int domaincmp(struct url_spec *pattern, struct url_spec *fqdn)
    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));
 
 }