Re: [sieve] Sieve deleteheader and :count match type
NED+mta-filters@mauve.mrochek.com Tue, 17 January 2017 03:34 UTC
Return-Path: <NED+mta-filters@mauve.mrochek.com>
X-Original-To: sieve@ietfa.amsl.com
Delivered-To: sieve@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DC857129490 for <sieve@ietfa.amsl.com>; Mon, 16 Jan 2017 19:34:48 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -5.101
X-Spam-Level:
X-Spam-Status: No, score=-5.101 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-3.199, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Kf8DmAnOnEsS for <sieve@ietfa.amsl.com>; Mon, 16 Jan 2017 19:34:46 -0800 (PST)
Received: from mauve.mrochek.com (mauve.mrochek.com [68.183.62.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7E20C129466 for <sieve@ietf.org>; Mon, 16 Jan 2017 19:34:46 -0800 (PST)
Received: from dkim-sign.mauve.mrochek.com by mauve.mrochek.com (PMDF V6.1-1 #35243) id <01Q9RHX317JK0007FS@mauve.mrochek.com> for sieve@ietf.org; Mon, 16 Jan 2017 19:32:48 -0800 (PST)
MIME-version: 1.0
Content-transfer-encoding: 7bit
Content-type: TEXT/PLAIN; CHARSET="us-ascii"; Format="flowed"
Received: from mauve.mrochek.com by mauve.mrochek.com (PMDF V6.1-1 #35243) id <01Q9Q42VM1B400004H@mauve.mrochek.com> (original mail from NED@mauve.mrochek.com) for sieve@ietf.org; Mon, 16 Jan 2017 19:32:45 -0800 (PST)
From: NED+mta-filters@mauve.mrochek.com
Message-id: <01Q9RHX13ZFM00004H@mauve.mrochek.com>
Date: Mon, 16 Jan 2017 18:11:29 -0800
In-reply-to: "Your message dated Mon, 16 Jan 2017 19:39:12 -0500" <82102421-fed0-13eb-f557-83c878618a04@andrew.cmu.edu>
References: <82102421-fed0-13eb-f557-83c878618a04@andrew.cmu.edu>
To: Ken Murchison <murch@andrew.cmu.edu>
Archived-At: <https://mailarchive.ietf.org/arch/msg/sieve/MPhjfuKh6Y97tCbb5uvVntd7hQw>
Cc: Sieve mailing list <sieve@ietf.org>
Subject: Re: [sieve] Sieve deleteheader and :count match type
X-BeenThere: sieve@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: SIEVE Working Group <sieve.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/sieve>, <mailto:sieve-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/sieve/>
List-Post: <mailto:sieve@ietf.org>
List-Help: <mailto:sieve-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sieve>, <mailto:sieve-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 17 Jan 2017 03:34:49 -0000
> Does :index still behave in the same way with the :count match-type that > it does with :value, :is, :regex, etc? That depends on the context. :index is associated with multiple extensions; its meaning depends on which one you're talking about. For example, the index extension only specifies how :index works with the header, address, and date tests. Note that these are tests, not actions, and the interpretation of the combination of :index and :count is pretty clear given the "number of specified entities" language in RFC 5231 section 4.2: :index restricts the test to Nth field, adding :count to that basically then gives you a 1 or 0 depending on whether or not there is an Nth field, which is what is tested. (And in the case of the date test, it's further restricted to fields containing valid dates.) In other words, these two tests are basically equivalent: header :index 4 :count "gt" :comparator "i;ascii-numeric" "foo" "0" header :index 4 :matches "foo" "*" Personally, I think the second test is much clearer, but YMMV. The :index that's part of deleteheader action isn't part of the index extension, but works pretty much the same way: It restricts the entire operation to the Nth field. And in this case the specification is very clear (secion 5, fourth paragraph) that the <value-patterns> check, which would necessarily include :count, happens *after* the :index restriction is applied. And this means that deleteheader :index 2 :count "ge" :comparator "i;ascii-numeric" "X-foo" [ "3" ] is a no-op, because the :index restriction is applied first, and means that the number of fields under consideration is either 0 or 1, and can be >=3. And that makes the addition of :count to :index useless in this context. But more generally, the :count match type really only makes sense in the context of tests or actions on at most one thing. It sort of falls apart in the context of action that's acting on multiple things, because it makes sense to apply the test part of an action on a case by case basis to the set of things the action is being applied to, and use that result to control whether or not to apply the action. But the semantics of :count are "count the number of things and then test that". And while that plays fairly nicely with tests, it's really at odds with action semantics. More generally still, since :count is wierd, the accepted convention is for new actions and tests to specify how :count works for them. RFC 5260 does this for both currentdate and date. RFC 5703 explains how :count and :mime interact. And so on. But editheader didn't do that for deleteheader, and that IMO means the behavior of :count in the context of deleteheader is undefined unless :index is also present, in which case it's useless. I also don't think that saying that :count tests perform a preliminary count like :index :last is especially useful - can you think of a case where you'd want to delete all headers of a given type based on how many of them are present? I can't. Ned
- [sieve] Sieve deleteheader and :count match type Ken Murchison
- Re: [sieve] Sieve deleteheader and :count match t… NED+mta-filters
- Re: [sieve] Sieve deleteheader and :count match t… Ken Murchison
- Re: [sieve] Sieve deleteheader and :count match t… Arnt Gulbrandsen
- Re: [sieve] Sieve deleteheader and :count match t… NED+mta-filters
- Re: [sieve] Sieve deleteheader and :count match t… Arnt Gulbrandsen