[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim…

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Philip Hazel
Date:  
À: exim-cvs
Sujet: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim/exim-src/src sieve.c
ph10 2007/08/17 12:16:45 BST

  Modified files:
    exim-doc/doc-txt     ChangeLog 
    exim-src/src         sieve.c 
  Log:
  Patch from the Sieve maintainer.


  Revision  Changes    Path
  1.522     +3 -0      exim/exim-doc/doc-txt/ChangeLog
  1.29      +94 -3     exim/exim-src/src/sieve.c


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.521
  retrieving revision 1.522
  diff -u -r1.521 -r1.522
  --- ChangeLog    4 Jul 2007 10:37:03 -0000    1.521
  +++ ChangeLog    17 Aug 2007 11:16:45 -0000    1.522
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.521 2007/07/04 10:37:03 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.522 2007/08/17 11:16:45 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -79,6 +79,9 @@
   PH/15 Removed an incorrect (int) cast when reading the value of SIZE in a
         MAIL command. The effect was to mangle the value on 64-bit systems.


+PH/16 Another patch from the Sieve maintainer.
+
+

Exim version 4.67
-----------------

  Index: sieve.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/sieve.c,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- sieve.c    19 Apr 2007 13:19:06 -0000    1.28
  +++ sieve.c    17 Aug 2007 11:16:45 -0000    1.29
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/sieve.c,v 1.28 2007/04/19 13:19:06 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/sieve.c,v 1.29 2007/08/17 11:16:45 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -143,6 +143,10 @@
   #ifdef ENOTIFY
   static uschar str_enotify_c[]="enotify";
   static const struct String str_enotify={ str_enotify_c, 7 };
  +static uschar str_online_c[]="online";
  +static const struct String str_online={ str_online_c, 6 };
  +static uschar str_maybe_c[]="maybe";
  +static const struct String str_maybe={ str_maybe_c, 5 };
   #endif
   #ifdef SUBADDRESS
   static uschar str_subaddress_c[]="subaddress";
  @@ -2476,11 +2480,11 @@
     return 1;
     }
   #ifdef ENOTIFY
  -else if (parse_identifier(filter,CUS "valid_notif_method"))
  +else if (parse_identifier(filter,CUS "valid_notify_method"))
     {
     /*
  -  valid_notif_method = "valid_notif_method"
  -                       <notification-uris: string-list>
  +  valid_notify_method = "valid_notify_method"
  +                        <notification-uris: string-list>
     */


     struct String *uris,*u;
  @@ -2516,6 +2520,93 @@
       }
     return 1;
     }
  +else if (parse_identifier(filter,CUS "notify_method_capability"))
  +  {
  +  /*
  +  notify_method_capability = "notify_method_capability" [COMPARATOR] [MATCH-TYPE]
  +                             <notification-uri: string>
  +                             <notification-capability: string>
  +                             <key-list: string-list>
  +  */
  +
  +  int m;
  +  int co=0,mt=0;
  +
  +  enum Comparator comparator=COMP_EN_ASCII_CASEMAP;
  +  enum MatchType matchType=MATCH_IS;
  +  struct String uri,capa,*keys,*k;
  +
  +  if (!filter->require_enotify)
  +    {
  +    filter->errmsg=CUS "missing previous require \"enotify\";";
  +    return -1;
  +    }
  +  for (;;)
  +    {
  +    if (parse_white(filter)==-1) return -1;
  +    if ((m=parse_comparator(filter,&comparator))!=0)
  +      {
  +      if (m==-1) return -1;
  +      if (co)
  +        {
  +        filter->errmsg=CUS "comparator already specified";
  +        return -1;
  +        }
  +      else co=1;
  +      }
  +    else if ((m=parse_matchtype(filter,&matchType))!=0)
  +      {
  +      if (m==-1) return -1;
  +      if (mt)
  +        {
  +        filter->errmsg=CUS "match type already specified";
  +        return -1;
  +        }
  +      else mt=1;
  +      }
  +    else break;
  +    }
  +    if ((m=parse_string(filter,&uri))!=1)
  +      {
  +      if (m==0) filter->errmsg=CUS "missing notification URI string";
  +      return -1;
  +      }
  +    if (parse_white(filter)==-1) return -1;
  +    if ((m=parse_string(filter,&capa))!=1)
  +      {
  +      if (m==0) filter->errmsg=CUS "missing notification capability string";
  +      return -1;
  +      }
  +    if (parse_white(filter)==-1) return -1;
  +    if ((m=parse_stringlist(filter,&keys))!=1)
  +      {
  +      if (m==0) filter->errmsg=CUS "missing key string list";
  +      return -1;
  +      }
  +    if (exec)
  +      {
  +      string_item *recipient;
  +      struct String header,body;
  +
  +      *cond=0;
  +      recipient=NULL;
  +      header.length=-1;
  +      header.character=(uschar*)0;
  +      body.length=-1;
  +      body.character=(uschar*)0;
  +      if (parse_mailto_uri(filter,uri.character,&recipient,&header,&body)==1)
  +        {
  +        if (eq_asciicase(&capa,&str_online,0)==1)
  +          for (k=keys; k->length!=-1; ++k)
  +            {
  +            *cond=compare(filter,k,&str_maybe,comparator,matchType);
  +            if (*cond==-1) return -1;
  +            if (*cond) break;
  +            }
  +        }
  +      }
  +    return 1;
  +  }
   #endif
   else return 0;
   }