
From nobody Fri Feb  1 13:03:38 2019
Return-Path: <barryleiba@gmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 447AD130EAB; Fri,  1 Feb 2019 13:03:22 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level: 
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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 Kr2Xvamcz4Bl; Fri,  1 Feb 2019 13:03:20 -0800 (PST)
Received: from mail-io1-f42.google.com (mail-io1-f42.google.com [209.85.166.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E782E124408; Fri,  1 Feb 2019 13:03:16 -0800 (PST)
Received: by mail-io1-f42.google.com with SMTP id t24so6903047ioi.0; Fri, 01 Feb 2019 13:03:16 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=T4uFEEcHGkkBVBKCRB+bk1dmyVMK+VtHu5ekOi1SsvE=; b=nOHpMbZerC8lsRO0eTFdy89SrEeB9tDGfdJZaTkY9qwZk0UCc9IZ3D/6IYm+RC+BiP FyvlsDeYjpW8gou/B651F4D4tZOV8PAgOqFyw/mbka7HeVb3cJMnI0ggRc8Kx+oXtY0+ YAEr6Rkz776C3LFMRjpagaaJ1GpnhKWiz+PMK1VgFr4Cl9ZaVOClJTOXxZjRmEi7108h EzPatwYo7JZxnj25aMcrtdgRVIGGQX57CV2zHGiM+gvZsoFPukkuLmZzWrKJ416CYBKO c5lxkzM1kGSIuZqtgYcParjZdtYzT+/ffJ/acNEf6Xx2uqdmoQQgz2KymLFRsmX1aAqV NPQg==
X-Gm-Message-State: AHQUAuZT/I0tHWcNu42Vm1z05gC2iZj42HKd8WBeav4eL744aZBsLmHR mtsKYYKb/pQjD2Rd5Przv8w879YROuVOF9Pf+e8=
X-Google-Smtp-Source: ALg8bN7vGE0jroxDg2GtA+/HJFUxmMmMofXz3JYozf1c6cHQt8Hizc58iAsNBHEYLVAQufc70/VM8AjkiMI8leWTp3w=
X-Received: by 2002:a6b:6814:: with SMTP id d20mr24965510ioc.76.1549054995749;  Fri, 01 Feb 2019 13:03:15 -0800 (PST)
MIME-Version: 1.0
References: <154900252324.10128.7132833415832444034@ietfa.amsl.com>
In-Reply-To: <154900252324.10128.7132833415832444034@ietfa.amsl.com>
From: Barry Leiba <barryleiba@computer.org>
Date: Fri, 1 Feb 2019 16:03:04 -0500
Message-ID: <CALaySJJFjWCs-0AMvQjhE-ymzu038e+QrD0YBQ5YTx5tB=V_Ng@mail.gmail.com>
To: Dan Romascanu <dromasca@gmail.com>
Cc: draft-ietf-jmap-mail.all@ietf.org, gen-art@ietf.org, ietf@ietf.org,  jmap@ietf.org
Content-Type: multipart/alternative; boundary="000000000000c261520580db78a6"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/Fn7wlchHZmnvKRykMfCMj1QZg1k>
Subject: Re: [Jmap] Genart last call review of draft-ietf-jmap-mail-14
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 01 Feb 2019 21:03:23 -0000

--000000000000c261520580db78a6
Content-Type: text/plain; charset="UTF-8"

Thanks, Dan, for taking time to review it!

Barry

On Fri, Feb 1, 2019 at 1:28 AM Dan Romascanu <dromasca@gmail.com> wrote:

> Reviewer: Dan Romascanu
> Review result: Ready
>
> I am the assigned Gen-ART reviewer for this draft. The General Area
> Review Team (Gen-ART) reviews all IETF documents being processed
> by the IESG for the IETF Chair.  Please treat these comments just
> like any other last call comments.
>
> For more information, please see the FAQ at
>
> <https://trac.ietf.org/trac/gen/wiki/GenArtfaq>.
>
> Document: draft-ietf-jmap-mail-??
> Reviewer: Dan Romascanu
> Review Date: 2019-01-31
> IETF LC End Date: 2019-02-04
> IESG Telechat date: Not scheduled for a telechat
>
> Summary:
>
> This is a clear and complete specification which is READY for publication
> from
> a Gen-ART perspective.
>
> Major issues:
>
> Minor issues:
>
> Nits/editorial comments:
>
>
>

--000000000000c261520580db78a6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div><div dir=3D"auto">Thanks, Dan, for taking time to review it!</div></di=
v><div dir=3D"auto"><br></div><div dir=3D"auto">Barry</div><div><br><div cl=
ass=3D"gmail_quote"><div dir=3D"ltr">On Fri, Feb 1, 2019 at 1:28 AM Dan Rom=
ascanu &lt;<a href=3D"mailto:dromasca@gmail.com">dromasca@gmail.com</a>&gt;=
 wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8=
ex;border-left:1px #ccc solid;padding-left:1ex">Reviewer: Dan Romascanu<br>
Review result: Ready<br>
<br>
I am the assigned Gen-ART reviewer for this draft. The General Area<br>
Review Team (Gen-ART) reviews all IETF documents being processed<br>
by the IESG for the IETF Chair.=C2=A0 Please treat these comments just<br>
like any other last call comments.<br>
<br>
For more information, please see the FAQ at<br>
<br>
&lt;<a href=3D"https://trac.ietf.org/trac/gen/wiki/GenArtfaq" rel=3D"norefe=
rrer" target=3D"_blank">https://trac.ietf.org/trac/gen/wiki/GenArtfaq</a>&g=
t;.<br>
<br>
Document: draft-ietf-jmap-mail-??<br>
Reviewer: Dan Romascanu<br>
Review Date: 2019-01-31<br>
IETF LC End Date: 2019-02-04<br>
IESG Telechat date: Not scheduled for a telechat<br>
<br>
Summary:<br>
<br>
This is a clear and complete specification which is READY for publication f=
rom<br>
a Gen-ART perspective.<br>
<br>
Major issues:<br>
<br>
Minor issues:<br>
<br>
Nits/editorial comments:<br>
<br>
<br>
</blockquote></div></div>

--000000000000c261520580db78a6--


From nobody Sun Feb  3 07:24:51 2019
Return-Path: <session-request@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 0F63712426A; Sun,  3 Feb 2019 07:24:50 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: IETF Meeting Session Request Tool <session-request@ietf.org>
To: <session-request@ietf.org>
Cc: jmap@ietf.org, brong@fastmailteam.com, jmap-chairs@ietf.org, aamelnikov@fastmail.fm
X-Test-IDTracker: no
X-IETF-IDTracker: 6.90.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <154920748998.10965.10940069948264157655.idtracker@ietfa.amsl.com>
Date: Sun, 03 Feb 2019 07:24:49 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/yRn4CSBp0hb3MtFZgg1yDIqQ810>
Subject: [Jmap] jmap - New Meeting Session Request for IETF 104
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 03 Feb 2019 15:24:50 -0000

A new meeting session request has just been submitted by Bron Gondwana, a Chair of the jmap working group.


---------------------------------------------------------
Working Group Name: JSON Mail Access Protocol
Area Name: Applications and Real-Time Area
Session Requester: Bron Gondwana

Number of Sessions: 1
Length of Session(s):  1 Hour
Number of Attendees: 20
Conflicts to Avoid: 
 First Priority: doh oauth saag iasa2 dmarc artarea uta dispatch extra
 Second Priority: tls httpbis ace lamps core t2trg



People who must be present:
  Barry Leiba
  Alexey Melnikov
  Neil Jenkins
  Bron Gondwana

Resources Requested:
  Experimental Room Setup (U-Shape and classroom, subject to availability)
  Flipcharts: please specify number in Special Requests field

Special Requests:
  One of the authors would prefer late in the week.
---------------------------------------------------------


From nobody Thu Feb  7 02:26:37 2019
Return-Path: <session-request@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id B825912DDA3; Thu,  7 Feb 2019 02:26:36 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: IETF Meeting Session Request Tool <session-request@ietf.org>
To: <session-request@ietf.org>
Cc: jmap@ietf.org, brong@fastmailteam.com, jmap-chairs@ietf.org, aamelnikov@fastmail.fm
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <154953519671.23555.3499883549303308040.idtracker@ietfa.amsl.com>
Date: Thu, 07 Feb 2019 02:26:36 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/08RmlJ_vmR29838kj_oFMAnNoRw>
Subject: [Jmap] jmap - Update to a Meeting Session Request for IETF 104
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 07 Feb 2019 10:26:37 -0000

An update to a meeting session request has just been submitted by Bron Gondwana, a Chair of the jmap working group.


---------------------------------------------------------
Working Group Name: JSON Mail Access Protocol
Area Name: Applications and Real-Time Area
Session Requester: Bron Gondwana

Number of Sessions: 1
Length of Session(s):  1 Hour
Number of Attendees: 20
Conflicts to Avoid: 
 First Priority: doh oauth saag iasa2 dmarc artarea uta dispatch extra
 Second Priority: tls httpbis ace lamps core t2trg



People who must be present:
  Barry Leiba
  Alexey Melnikov
  Neil Jenkins
  Bron Gondwana

Resources Requested:
  
  

Special Requests:
  Many of the same people attend both JMAP and EXTRA, so if they can be placed consecutively, it would be useful, ideally in the afternoon.  Two sessions consecutively in the same room would be ideal.
---------------------------------------------------------


From nobody Thu Feb  7 03:26:12 2019
Return-Path: <alexey.melnikov@isode.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 41E2013110B for <jmap@ietfa.amsl.com>; Thu,  7 Feb 2019 03:26:11 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.699
X-Spam-Level: 
X-Spam-Status: No, score=0.699 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=isode.com
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 ERVN6e51q_jQ for <jmap@ietfa.amsl.com>; Thu,  7 Feb 2019 03:26:10 -0800 (PST)
Received: from statler.isode.com (Statler.isode.com [62.232.206.189]) by ietfa.amsl.com (Postfix) with ESMTP id 3ABDB1310F7 for <jmap@ietf.org>; Thu,  7 Feb 2019 03:26:10 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1549538769; d=isode.com; s=june2016; i=@isode.com; bh=MNo0bLQC3BbkgG3tng3XSdGfaO2+Vj8XaXlVT6zx7HQ=; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version: In-Reply-To:References:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description; b=cF9WevFHRLPj7pibgXZ6aBim8GkjRiuVtAdCmQJ3OBLF/MtKy2DNe/qMzaiuL6fEPPWSmf TSb4iLwg8rzR6PKKTvrCsARO4kR62WYG9wueETpy6URaw1E0tJL7LTx2dorSRIDsI3xFtd q/5RSHsKs+GT1+KbfMTyGpMgZMMGo2U=;
Received: from [172.20.1.215] (dhcp-215.isode.net [172.20.1.215])  by statler.isode.com (submission channel) via TCP with ESMTPSA  id <XFwV0ABC8Lrt@statler.isode.com>; Thu, 7 Feb 2019 11:26:09 +0000
To: "jmap@ietf.org" <jmap@ietf.org>
From: Alexey Melnikov <alexey.melnikov@isode.com>
Message-ID: <57d1323f-d546-5c70-713a-0eca66a2fa3b@isode.com>
Date: Thu, 7 Feb 2019 11:25:45 +0000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/H-sKLU5QB_Q-kXaTO1FpuS8HKgM>
Subject: [Jmap] Looking for volunteers to co-chair JMAP WG
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 07 Feb 2019 11:26:11 -0000

Dear WG participants,

With Barry Leiba being selected as another Application and RealTime Area 
Director, I am looking for another co-chair to replace him to work with 
Bron. If you are interested or know somebody who might be interested, 
please reply to me directly.

Thank you,

Alexey, as AD



From nobody Mon Feb 11 01:01:50 2019
Return-Path: <ietf-secretariat-reply@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 112C8130E85 for <jmap@ietf.org>; Mon, 11 Feb 2019 01:01:48 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: <jmap@ietf.org>
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <154987570806.18578.9349962737591481056.idtracker@ietfa.amsl.com>
Date: Mon, 11 Feb 2019 01:01:48 -0800
From: IETF Secretariat <ietf-secretariat-reply@ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/zcUTavgadcKXV1De6KVhxmX4idE>
Subject: [Jmap] Milestones changed for jmap WG
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Feb 2019 09:01:48 -0000

Changed milestone "Submit document with guidance for implementation of IMAP
servers and proxies (Informational)", set due date to June 2019 from March
2018.

URL: https://datatracker.ietf.org/wg/jmap/about/


From nobody Mon Feb 11 04:27:51 2019
Return-Path: <ietf-secretariat-reply@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 8E879130E8C for <jmap@ietf.org>; Mon, 11 Feb 2019 04:27:50 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
To: <jmap@ietf.org>
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <154988807057.18676.4700523830517630396.idtracker@ietfa.amsl.com>
Date: Mon, 11 Feb 2019 04:27:50 -0800
From: IETF Secretariat <ietf-secretariat-reply@ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/HwcNf83BpUhXl3VWjRkd_0ehp5k>
Subject: [Jmap] Milestones changed for jmap WG
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Feb 2019 12:27:51 -0000

Changed milestone "Update charter to reflect current and planned work", set
state to active from review, accepting new milestone.

URL: https://datatracker.ietf.org/wg/jmap/about/


From nobody Mon Feb 11 06:25:40 2019
Return-Path: <brong@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1E1EE130E95 for <jmap@ietfa.amsl.com>; Mon, 11 Feb 2019 06:25:36 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=j6yknGfx; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=S0H3VvLA
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 3Q6Kei1jMSDe for <jmap@ietfa.amsl.com>; Mon, 11 Feb 2019 06:25:33 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7AFAE12008A for <jmap@ietf.org>; Mon, 11 Feb 2019 06:25:33 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id DF16822B97; Mon, 11 Feb 2019 09:25:31 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 11 Feb 2019 09:25:31 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm1; bh=n60VsE90O3xsdpT1NGTnqp7K3 gUxrm/LYyABPAOYy/M=; b=j6yknGfxuFqzp50uwgvG8oAjJfquNGboIM5tnA4Fs WrKKEthnuZy4HLPgt6tL6CTxhdyvPrQ54knylcW+b62CRjfg7oHSjeiZwAOmjx4B pUis7Jd5yy4s3oP5XaGnwzGhpDcFhNWgqC4cotfcnru6cSB8bX71peqAhMPrygMF m1dXhHSxYE9pK6lwlfA31sR5naWxMqvSFd0Ffk8e1FxVOyykH/yGIBS2JtC7Q/Qc g+V8uhk5sfCVHnIa+y/Rr/vPd+rfSOlSVl/ZoQOQWhrDb8upuV/DoJ6cV031lD9i ZMl89q6kf9yjMblt5+hmfHKAkumzPvztBdOKWZbj/qj2A==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=n60VsE90O3xsdpT1N GTnqp7K3gUxrm/LYyABPAOYy/M=; b=S0H3VvLA169bxOXCzQfPQX3KZgUg0V0wr KVuFifDPI1Iw2VqsA9EuRGyfN/e4VH1INGlFHSlyJNQJsN2MdP1E7EsF/wAWbEkM f5zC7UmAyCitqq2JQCSoVvFpjkl4wCwUUmyqQLIqtSItWrBbBrpDSmNcjUP99M5H oNs71Tkn9ArJjunl3exZ9hD6kapUsT0iDUkYput8LDb4UA/4GnpeKIA73ATrqclu SP0x/T3wfTgZ15K503G/6EK51kQlGB3iPB163JuJ0k7VM5rfJK418tjNT2tYTU4T uXkaRhj2tteMza52sVRhXL0Y37KtwbXOyvhk9kcPDJgI4iXxsLuFw==
X-ME-Sender: <xms:24VhXKOw1zqxKpS4WtqKUH-jC4lX6ZzuXJ9A6UaNBzDqKX7TZrstbg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedtledrleelgdegkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthenuceurghilhhouhhtmecufedt tdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepofgfkfgjfhffhf fvufgtsegrtderreerreejnecuhfhrohhmpedfuehrohhnucfiohhnugifrghnrgdfuceo sghrohhnghesfhgrshhtmhgrihhlthgvrghmrdgtohhmqeenucffohhmrghinhepihgvth hfrdhorhhgnecurfgrrhgrmhepmhgrihhlfhhrohhmpegsrhhonhhgsehfrghsthhmrghi lhhtvggrmhdrtghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:24VhXDmaXme1_n2xfwnelotVWxW2ONNotgXTl3Fjmw1YpydMvcExvw> <xmx:24VhXNRstYPFWVvob_z3rEr0gSIeetKS8bcv2Y7I8OXFLZg74UDXeg> <xmx:24VhXK-bMBJ-5AQ9JTKK1CRK_HGRydiiV4oNgCd0Q9FMHJwb9h_KOQ> <xmx:24VhXHYeXgdxtI79pmcrCNl35MVg4Zhhl4mKA_ryvoLXbubpNlf_FQ>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id EFF3220176; Mon, 11 Feb 2019 09:25:30 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-832-gba113d7-fmstable-20190201v1
X-Me-Personality: 56629417
Message-Id: <cafb3e22-a11a-41ad-8efc-e2311370dc4c@www.fastmail.com>
In-Reply-To: <f3a7729c1fd61e3b62dfe8b98eda5e43@linagora.com>
References: <153270520782.32707.4419621555491459322@ietfa.amsl.com> <2cf743f3-1c18-4062-848e-f85ca505fa55@sloti7d1t02> <f3a7729c1fd61e3b62dfe8b98eda5e43@linagora.com>
Date: Mon, 11 Feb 2019 09:25:30 -0500
From: "Bron Gondwana" <brong@fastmailteam.com>
To: jmap@ietf.org
Cc: "Raphael OUAZANA" <raphael.ouazana@linagora.com>
Content-Type: multipart/alternative; boundary=faf538988bc044e9bfe9d9bb7d7964fa
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/CC5AmbCQ77s03fhImY9pV8C0BSI>
Subject: Re: [Jmap] I-D Action: draft-ietf-jmap-mdn-00.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Feb 2019 14:25:36 -0000

--faf538988bc044e9bfe9d9bb7d7964fa
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi Rapha=C3=ABl,

This document recently expired. Do you have the time to prepare an updat=
ed draft before Prague?

Thanks,

Bron.

On Sat, Dec 22, 2018, at 04:05, Raphael OUAZANA wrote:
> Hi Neil,
>=20
> Thank you very much for your feedback. Not enough time to handle it fo=
r=20
> the moment, but it will be in my next year resolutions.
>=20
> Regards,
> Rapha=C3=ABl.
>=20
> Le 2018-12-05 01:46, Neil Jenkins a =C3=A9crit :
> > Finally sending my feedback on this draft, as promised in Bangkok.
> > Sorry for the delay! Generally this looks good, just some comments t=
o
> > bring it up to date with the current JMAP conventions and a confusio=
n
> > over how you're actually meant to send the MDN!
> >=20
> >> 2 [1]. Email/createMDN
> >>=20
> >> The Email/createMDN method create a [RFC5322 [2]] message from
> >> MDN
> >> properties.
> >=20
> > Where are these Email objects being created? It's not clear to me
> > whether these are intended to be saved to the account's mail store o=
r
> > not. If they _are_ being saved to the mail store, we need to give
> > mailboxIds and keywords arguments. If they are not being saved, but
> > just being sent immediately, that needs to be made clear and the
> > method probably renamed to _sendMDN_.
> >=20
> >> It takes the following arguments:
> >>=20
> >> o *accountId*: "String|null" The id of the account to use for
> >> this
> >> call. If "null", defaults to the "urn:ietf:params:jmap:mail"
> >> primary account.
> >=20
> > This should be non-optional now to match the same change in the othe=
r
> > JMAP specs.
> >=20
> >> o *mdns*: "String[MDN]" A map of creation id (client specified)
> >> to
> >> MDN objects
> >>=20
> >> An *MDN* object has the following properties:
> >>=20
> >> o *referencedMessageId*: "String" Message Id of the received
> >> message
> >> the user wants to create an MDN for.
> >=20
> > Again, to match current JMAP convention this should be
> > referencedEmailId, or maybe just forEmailId?
> >=20
> >> o *subject*: "String" Subject that will be used as "Subject"
> >> header
> >> for this MDN.
> >>=20
> >> o *textBody*: "String" Human readable part of the MDN, as plain
> >> text.
> >>=20
> >> o *reportingUA*: "String" Name of the MUA creating this MDN. It
> >> is
> >> used to build the MDN Report part of the MDN.
> >>=20
> >> o *disposition*: "Disposition" Object containing the diverse MDN
> >> disposition options.
> >>=20
> >> A *Disposition* object has the following properties:
> >>=20
> >> o *actionMode*: "String" This MUST be one of the following
> >> strings:
> >> "manual-action" / "automatic-action"
> >>=20
> >> o *sendingMode*: "String" This MUST be one of the following
> >> strings:
> >> "MDN-sent-manually" / "MDN-sent-automatically"
> >>=20
> >> o *type*: "String" This MUST be one of the following strings:
> >> "deleted" / "dispatched" / "displayed" / "processed"
> >>=20
> >> See [RFC8098 [3]] for the exact meaning of these different
> >> fields.
> >=20
> > This all looks fine.
> >=20
> >> If the _referencedMessageId_, _subject_, _textBody_,
> >> _reportingUA_,
> >> _disposition_ properties are invalid (e.g. missing, wrong type,
> >> id
> >> not found), the server MUST reject the import with an
> >> "invalidProperties" SetError.
> >>=20
> >> If the email cannot be created because it would take the account
> >> over
> >> quota, the creation should be rejected with a "maxQuotaReached"
> >> SetError.
> >=20
> > import -> create (I presume this is a copy-paste error) and the
> > maxQuotaReached error is now just called overQuota. But rather than
> > specify the last two paragraphs, probably better just to say it may
> > return any standard SetError that is defined for a _create_ in the
> > core spec.
> >=20
> >> The response has the following arguments:
> >>=20
> >> o *accountId*: "String" The id of the account used for this
> >> call.
> >>=20
> >> o *created*: "String[Email]" A map of the creation id to an
> >> object
> >> build from the referenced properties. The _blobId_ field of
> >> the
> >> Email objects can then be used to effectively send the MDN.
> >=20
> > Again, I'm unclear how you are supposed to use the blobId to send th=
is
> > MDN. The EmailSubmission object uses an emailId reference rather tha=
n
> > a blobId. If it's creating an email object, it also needs to be clea=
r
> > about which properties the servers should return for each object in
> > the response (e.g. id, threadId, blobId, etc.).
> >=20
> >> o *notCreated*: "String[SetError]" A map of creation id to a
> >> SetError object for each Email that failed to be created. The
> >> possible errors are defined above.
> >=20
> > This document needs a security considerations section at the end.
> >=20
> > Cheers,
> >=20
> > Neil.
> >=20
> > Links:
> > ------
> > [1] https://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2
> > [2] https://tools.ietf.org/html/rfc5322
> > [3] https://tools.ietf.org/html/rfc8098
> >=20
> > _______________________________________________
> > Jmap mailing list
> > Jmap@ietf.org
> > https://www.ietf.org/mailman/listinfo/jmap
>=20
> _______________________________________________
> Jmap mailing list
> Jmap@ietf.org
> https://www.ietf.org/mailman/listinfo/jmap
>=20

--
 Bron Gondwana, CEO, FastMail Pty Ltd
 brong@fastmailteam.com


--faf538988bc044e9bfe9d9bb7d7964fa
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div style=3D"font-f=
amily:Arial;">Hi Rapha=C3=ABl,<br></div><div style=3D"font-family:Arial;=
"><br></div><div style=3D"font-family:Arial;">This document recently exp=
ired.&nbsp; Do you have the time to prepare an updated draft before Prag=
ue?<br></div><div style=3D"font-family:Arial;"><br></div><div style=3D"f=
ont-family:Arial;">Thanks,<br></div><div style=3D"font-family:Arial;"><b=
r>Bron.<br></div><div style=3D"font-family:Arial;"><br></div><div style=3D=
"font-family:Arial;">On Sat, Dec 22, 2018, at 04:05, Raphael OUAZANA wro=
te:<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div style=
=3D"font-family:Arial;">Hi Neil,<br></div><div style=3D"font-family:Aria=
l;"><br></div><div style=3D"font-family:Arial;">Thank you very much for =
your feedback. Not enough time to handle it for&nbsp;<br></div><div styl=
e=3D"font-family:Arial;">the moment, but it will be in my next year reso=
lutions.<br></div><div style=3D"font-family:Arial;"><br></div><div style=
=3D"font-family:Arial;">Regards,<br></div><div style=3D"font-family:Aria=
l;">Rapha=C3=ABl.<br></div><div style=3D"font-family:Arial;"><br></div><=
div style=3D"font-family:Arial;">Le 2018-12-05 01:46, Neil Jenkins a =C3=
=A9crit&nbsp;:<br></div><div style=3D"font-family:Arial;">&gt; Finally s=
ending my feedback on this draft, as promised in Bangkok.<br></div><div =
style=3D"font-family:Arial;">&gt; Sorry for the delay! Generally this lo=
oks good, just some comments to<br></div><div style=3D"font-family:Arial=
;">&gt; bring it up to date with the current JMAP conventions and a conf=
usion<br></div><div style=3D"font-family:Arial;">&gt; over how you're ac=
tually meant to send the MDN!<br></div><div style=3D"font-family:Arial;"=
>&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; 2 [1].&n=
bsp; Email/createMDN<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; The Email/cre=
ateMDN method create a [RFC5322 [2]] message from<br></div><div style=3D=
"font-family:Arial;">&gt;&gt; MDN<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt; properties.<br></div><div style=3D"font-family:Arial;">&gt=
;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt; Where are these =
Email objects being created? It's not clear to me<br></div><div style=3D=
"font-family:Arial;">&gt; whether these are intended to be saved to the =
account's mail store or<br></div><div style=3D"font-family:Arial;">&gt; =
not. If they _are_ being saved to the mail store, we need to give<br></d=
iv><div style=3D"font-family:Arial;">&gt; mailboxIds and keywords argume=
nts. If they are not being saved, but<br></div><div style=3D"font-family=
:Arial;">&gt; just being sent immediately, that needs to be made clear a=
nd the<br></div><div style=3D"font-family:Arial;">&gt; method probably r=
enamed to _sendMDN_.<br></div><div style=3D"font-family:Arial;">&gt;&nbs=
p;<br></div><div style=3D"font-family:Arial;">&gt;&gt; It takes the foll=
owing arguments:<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbs=
p;<br></div><div style=3D"font-family:Arial;">&gt;&gt; o&nbsp; *accountI=
d*: "String|null" The id of the account to use for<br></div><div style=3D=
"font-family:Arial;">&gt;&gt; this<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt; call.&nbsp; If "null", defaults to the "urn:ietf:params:j=
map:mail"<br></div><div style=3D"font-family:Arial;">&gt;&gt; primary ac=
count.<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br></div><d=
iv style=3D"font-family:Arial;">&gt; This should be non-optional now to =
match the same change in the other<br></div><div style=3D"font-family:Ar=
ial;">&gt; JMAP specs.<br></div><div style=3D"font-family:Arial;">&gt;&n=
bsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; o&nbsp; *mdns*:=
 "String[MDN]" A map of creation id (client specified)<br></div><div sty=
le=3D"font-family:Arial;">&gt;&gt; to<br></div><div style=3D"font-family=
:Arial;">&gt;&gt; MDN objects<br></div><div style=3D"font-family:Arial;"=
>&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; An *=
MDN* object has the following properties:<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt;&gt; o&nbsp; *referencedMessageId*: "String" Message Id of the receiv=
ed<br></div><div style=3D"font-family:Arial;">&gt;&gt; message<br></div>=
<div style=3D"font-family:Arial;">&gt;&gt; the user wants to create an M=
DN for.<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br></div><=
div style=3D"font-family:Arial;">&gt; Again, to match current JMAP conve=
ntion this should be<br></div><div style=3D"font-family:Arial;">&gt; ref=
erencedEmailId, or maybe just forEmailId?<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&=
gt; o&nbsp; *subject*: "String" Subject that will be used as "Subject"<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt; header<br></div><div =
style=3D"font-family:Arial;">&gt;&gt; for this MDN.<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt; o&nbsp; *textBody*: "String" Human readable part of the =
MDN, as plain<br></div><div style=3D"font-family:Arial;">&gt;&gt; text.<=
br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div =
style=3D"font-family:Arial;">&gt;&gt; o&nbsp; *reportingUA*: "String" Na=
me of the MUA creating this MDN.&nbsp; It<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt; is<br></div><div style=3D"font-family:Arial;">&gt;=
&gt; used to build the MDN Report part of the MDN.<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt; o&nbsp; *disposition*: "Disposition" Object containing t=
he diverse MDN<br></div><div style=3D"font-family:Arial;">&gt;&gt; dispo=
sition options.<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp=
;<br></div><div style=3D"font-family:Arial;">&gt;&gt; A *Disposition* ob=
ject has the following properties:<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
 o&nbsp; *actionMode*: "String" This MUST be one of the following<br></d=
iv><div style=3D"font-family:Arial;">&gt;&gt; strings:<br></div><div sty=
le=3D"font-family:Arial;">&gt;&gt; "manual-action" / "automatic-action"<=
br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div =
style=3D"font-family:Arial;">&gt;&gt; o&nbsp; *sendingMode*: "String" Th=
is MUST be one of the following<br></div><div style=3D"font-family:Arial=
;">&gt;&gt; strings:<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
 "MDN-sent-manually" / "MDN-sent-automatically"<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt; o&nbsp; *type*: "String" This MUST be one of the following=
 strings:<br></div><div style=3D"font-family:Arial;">&gt;&gt; "deleted" =
/ "dispatched" / "displayed" / "processed"<br></div><div style=3D"font-f=
amily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">=
&gt;&gt; See [RFC8098 [3]] for the exact meaning of these different<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt; fields.<br></div><div st=
yle=3D"font-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-family=
:Arial;">&gt; This all looks fine.<br></div><div style=3D"font-family:Ar=
ial;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; If =
the _referencedMessageId_, _subject_, _textBody_,<br></div><div style=3D=
"font-family:Arial;">&gt;&gt; _reportingUA_,<br></div><div style=3D"font=
-family:Arial;">&gt;&gt; _disposition_ properties are invalid (e.g. miss=
ing, wrong type,<br></div><div style=3D"font-family:Arial;">&gt;&gt; id<=
br></div><div style=3D"font-family:Arial;">&gt;&gt; not found), the serv=
er MUST reject the import with an<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt; "invalidProperties" SetError.<br></div><div style=3D"font-=
family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;"=
>&gt;&gt; If the email cannot be created because it would take the accou=
nt<br></div><div style=3D"font-family:Arial;">&gt;&gt; over<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt; quota, the creation should be re=
jected with a "maxQuotaReached"<br></div><div style=3D"font-family:Arial=
;">&gt;&gt; SetError.<br></div><div style=3D"font-family:Arial;">&gt;&nb=
sp;<br></div><div style=3D"font-family:Arial;">&gt; import -&gt; create =
(I presume this is a copy-paste error) and the<br></div><div style=3D"fo=
nt-family:Arial;">&gt; maxQuotaReached error is now just called overQuot=
a. But rather than<br></div><div style=3D"font-family:Arial;">&gt; speci=
fy the last two paragraphs, probably better just to say it may<br></div>=
<div style=3D"font-family:Arial;">&gt; return any standard SetError that=
 is defined for a _create_ in the<br></div><div style=3D"font-family:Ari=
al;">&gt; core spec.<br></div><div style=3D"font-family:Arial;">&gt;&nbs=
p;<br></div><div style=3D"font-family:Arial;">&gt;&gt; The response has =
the following arguments:<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; o&nbsp; *=
accountId*: "String" The id of the account used for this<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt; call.<br></div><div style=3D"font-f=
amily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">=
&gt;&gt; o&nbsp; *created*: "String[Email]" A map of the creation id to =
an<br></div><div style=3D"font-family:Arial;">&gt;&gt; object<br></div><=
div style=3D"font-family:Arial;">&gt;&gt; build from the referenced prop=
erties.&nbsp; The _blobId_ field of<br></div><div style=3D"font-family:A=
rial;">&gt;&gt; the<br></div><div style=3D"font-family:Arial;">&gt;&gt; =
Email objects can then be used to effectively send the MDN.<br></div><di=
v style=3D"font-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-fa=
mily:Arial;">&gt; Again, I'm unclear how you are supposed to use the blo=
bId to send this<br></div><div style=3D"font-family:Arial;">&gt; MDN. Th=
e EmailSubmission object uses an emailId reference rather than<br></div>=
<div style=3D"font-family:Arial;">&gt; a blobId. If it's creating an ema=
il object, it also needs to be clear<br></div><div style=3D"font-family:=
Arial;">&gt; about which properties the servers should return for each o=
bject in<br></div><div style=3D"font-family:Arial;">&gt; the response (e=
.g. id, threadId, blobId, etc.).<br></div><div style=3D"font-family:Aria=
l;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; o&nbs=
p; *notCreated*: "String[SetError]" A map of creation id to a<br></div><=
div style=3D"font-family:Arial;">&gt;&gt; SetError object for each Email=
 that failed to be created.&nbsp; The<br></div><div style=3D"font-family=
:Arial;">&gt;&gt; possible errors are defined above.<br></div><div style=
=3D"font-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-family:Ar=
ial;">&gt; This document needs a security considerations section at the =
end.<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br></div><div=
 style=3D"font-family:Arial;">&gt; Cheers,<br></div><div style=3D"font-f=
amily:Arial;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;=
 Neil.<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br></div><d=
iv style=3D"font-family:Arial;">&gt; Links:<br></div><div style=3D"font-=
family:Arial;">&gt; ------<br></div><div style=3D"font-family:Arial;">&g=
t; [1] https://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2<br><=
/div><div style=3D"font-family:Arial;">&gt; [2] https://tools.ietf.org/h=
tml/rfc5322<br></div><div style=3D"font-family:Arial;">&gt; [3] https://=
tools.ietf.org/html/rfc8098<br></div><div style=3D"font-family:Arial;">&=
gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt; ______________=
_________________________________<br></div><div style=3D"font-family:Ari=
al;">&gt; Jmap mailing list<br></div><div style=3D"font-family:Arial;">&=
gt; Jmap@ietf.org<br></div><div style=3D"font-family:Arial;">&gt; https:=
//www.ietf.org/mailman/listinfo/jmap<br></div><div style=3D"font-family:=
Arial;"><br></div><div style=3D"font-family:Arial;">____________________=
___________________________<br></div><div style=3D"font-family:Arial;">J=
map mailing list<br></div><div style=3D"font-family:Arial;">Jmap@ietf.or=
g<br></div><div style=3D"font-family:Arial;">https://www.ietf.org/mailma=
n/listinfo/jmap<br></div><div style=3D"font-family:Arial;"><br></div></b=
lockquote><div style=3D"font-family:Arial;"><br></div><div id=3D"sig5662=
9417"><div class=3D"signature">--<br></div><div class=3D"signature">&nbs=
p; Bron Gondwana, CEO, FastMail Pty Ltd<br></div><div class=3D"signature=
">&nbsp; brong@fastmailteam.com<br></div><div class=3D"signature"><br></=
div></div><div style=3D"font-family:Arial;"><br></div></body></html>
--faf538988bc044e9bfe9d9bb7d7964fa--


From nobody Tue Feb 12 01:08:08 2019
Return-Path: <raphael.ouazana@linagora.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9286C124408 for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 01:08:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.302
X-Spam-Level: 
X-Spam-Status: No, score=-4.302 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=smtpcorp.com header.b=hzam6g1G; dkim=pass (2048-bit key) header.d=linagora.com header.b=Q2GXqhCs
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 kNCnuJEI5jqR for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 01:08:03 -0800 (PST)
Received: from e2i64.smtp2go.com (e2i64.smtp2go.com [103.2.140.64]) (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 64FFF12894E for <jmap@ietf.org>; Tue, 12 Feb 2019 01:08:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpcorp.com; s=a1-4; h=Feedback-ID:X-Smtpcorp-Track:Message-ID:Subject:To: From:Date:Reply-To:Sender:List-Unsubscribe; bh=nOoI1oI3T9zmlJb2dCMHMR2Ic0GIS2ReSXgN1AxzRh4=; b=hzam6g1GtRXwcIIi29DXp3jAZ6 HBC4SbWnr/7EXx3xLYWHNnL5sfHBIqZGs3F1xb0lErzwm7Opz8C9+uCWN27PVc9l1ltndP7WNsIRP tKdEzVwxAB0RkwW1B7deYo7ZbGtHIcexTfRHLnX9M7ZczG49zImQ+GdrpGyyy5IzBBNNxfMH7J0Wc NYclmlpdeqlLeQUoO6kGpjm37fdbayXBfq1M3gkO2WC54+Z9yHWrZ6ZqW9RXmFoW6QG5fRo3TAUUk N25gxsjjYzy7i1HOMS11RG9l7DiEmiCWVY6gP7ipyERzUn6kFUU8fAcDx+p7Eqrv/W74dtW4qJUHo uzmXPt4Q==;
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linagora.com; i=@linagora.com;  q=dns/txt; s=s266739; t=1549962483; h=from : subject : to : message-id  : date; bh=nOoI1oI3T9zmlJb2dCMHMR2Ic0GIS2ReSXgN1AxzRh4=;  b=Q2GXqhCsDVc/SanuZvuelpSaPpbxc+aM4WJ45S8ZdMB7XbwonKLlX1PKXmxi8QbaKBVSIK dZEYyJDttoGW9lfWBT0C2NCyeSe+45B00evdiqQsya1RIbmXVl9eeGHCQcMCccS1HU+u2z8w JKhyVAMriF07uLPsfiJijmFugn6TUUrlFS6JTMoKq3fV1UW2FS4PWLn2za75z8EcomzvKgmh YD+Z08z4MG+63OcaI0HZXN2oC6/HYSNP6DH4Lbs8RqSDyAG6mtVnkhHo/v0Avg0Z94lR/23V JSs4kDU0U26U4heOqFS1AJWU1zZ36GlkVyqCzyBd22OGQfkIl68cySIw==
Received: from [10.66.228.43] (helo=SmtpCorp) by smtpcorp.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.91) (envelope-from <raphael.ouazana@linagora.com>) id 1gtU2l-cp4WXe-3W; Tue, 12 Feb 2019 09:07:55 +0000
Received: from [10.54.36.8] (helo=smtp.linagora.com) by smtpcorp.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.91) (envelope-from <raphael.ouazana@linagora.com>) id 1gtU2k-wSERvJ-0F; Tue, 12 Feb 2019 09:07:54 +0000
Received: from extranet.linagora.com (obm3-ui.linagora.dc2 [172.24.128.227]) by smtp.linagora.com (Postfix) with ESMTP id D4EA13F1A4; Tue, 12 Feb 2019 10:07:51 +0100 (CET)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Date: Tue, 12 Feb 2019 10:07:51 +0100
X-LINAGORA-Copy-Delivery-Done: 1
From: Raphael OUAZANA <raphael.ouazana@linagora.com>
To: Bron Gondwana <brong@fastmailteam.com>
Cc: jmap@ietf.org
In-Reply-To: <cafb3e22-a11a-41ad-8efc-e2311370dc4c@www.fastmail.com>
References: <153270520782.32707.4419621555491459322@ietfa.amsl.com> <2cf743f3-1c18-4062-848e-f85ca505fa55@sloti7d1t02> <f3a7729c1fd61e3b62dfe8b98eda5e43@linagora.com> <cafb3e22-a11a-41ad-8efc-e2311370dc4c@www.fastmail.com>
Message-ID: <37240c9d0200928267cc8f97029d29ad@linagora.com>
X-Sender: raphael.ouazana@linagora.com
User-Agent: Roundcube Webmail/1.1.4
X-Smtpcorp-Track: 1gtl2kwSERvJ0F.YMzoebJno
Feedback-ID: 266739m:266739aja3LFS:266739sqomqQgQ91
X-Report-Abuse: Please forward a copy of this message, including all headers,  to <abuse-report@smtp2go.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/K8UYPh5yjymf8Q5LV0iFlTtTeZ4>
Subject: Re: [Jmap] I-D Action: draft-ietf-jmap-mdn-00.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Feb 2019 09:08:07 -0000

Hi Bron,

Yes, I'll take the time to update it soon.

Regards,
Raphaël.

Le 2019-02-11 15:25, Bron Gondwana a écrit :
> Hi Raphaël,
> 
> This document recently expired.  Do you have the time to prepare an
> updated draft before Prague?
> 
> Thanks,
> 
> Bron.
> 
> On Sat, Dec 22, 2018, at 04:05, Raphael OUAZANA wrote:
> 
>> Hi Neil,
>> 
>> Thank you very much for your feedback. Not enough time to handle it
>> for
>> 
>> the moment, but it will be in my next year resolutions.
>> 
>> Regards,
>> 
>> Raphaël.
>> 
>> Le 2018-12-05 01:46, Neil Jenkins a écrit :
>> 
>>> Finally sending my feedback on this draft, as promised in Bangkok.
>> 
>>> Sorry for the delay! Generally this looks good, just some comments
>> to
>> 
>>> bring it up to date with the current JMAP conventions and a
>> confusion
>> 
>>> over how you're actually meant to send the MDN!
>> 
>>> 
>> 
>>>> 2 [1].  Email/createMDN
>> 
>>>> 
>> 
>>>> The Email/createMDN method create a [RFC5322 [2]] message from
>> 
>>>> MDN
>> 
>>>> properties.
>> 
>>> 
>> 
>>> Where are these Email objects being created? It's not clear to me
>> 
>>> whether these are intended to be saved to the account's mail store
>> or
>> 
>>> not. If they _are_ being saved to the mail store, we need to give
>> 
>>> mailboxIds and keywords arguments. If they are not being saved,
>> but
>> 
>>> just being sent immediately, that needs to be made clear and the
>> 
>>> method probably renamed to _sendMDN_.
>> 
>>> 
>> 
>>>> It takes the following arguments:
>> 
>>>> 
>> 
>>>> o  *accountId*: "String|null" The id of the account to use for
>> 
>>>> this
>> 
>>>> call.  If "null", defaults to the "urn:ietf:params:jmap:mail"
>> 
>>>> primary account.
>> 
>>> 
>> 
>>> This should be non-optional now to match the same change in the
>> other
>> 
>>> JMAP specs.
>> 
>>> 
>> 
>>>> o  *mdns*: "String[MDN]" A map of creation id (client specified)
>> 
>>>> to
>> 
>>>> MDN objects
>> 
>>>> 
>> 
>>>> An *MDN* object has the following properties:
>> 
>>>> 
>> 
>>>> o  *referencedMessageId*: "String" Message Id of the received
>> 
>>>> message
>> 
>>>> the user wants to create an MDN for.
>> 
>>> 
>> 
>>> Again, to match current JMAP convention this should be
>> 
>>> referencedEmailId, or maybe just forEmailId?
>> 
>>> 
>> 
>>>> o  *subject*: "String" Subject that will be used as "Subject"
>> 
>>>> header
>> 
>>>> for this MDN.
>> 
>>>> 
>> 
>>>> o  *textBody*: "String" Human readable part of the MDN, as plain
>> 
>>>> text.
>> 
>>>> 
>> 
>>>> o  *reportingUA*: "String" Name of the MUA creating this MDN.  It
>> 
>>>> is
>> 
>>>> used to build the MDN Report part of the MDN.
>> 
>>>> 
>> 
>>>> o  *disposition*: "Disposition" Object containing the diverse MDN
>> 
>>>> disposition options.
>> 
>>>> 
>> 
>>>> A *Disposition* object has the following properties:
>> 
>>>> 
>> 
>>>> o  *actionMode*: "String" This MUST be one of the following
>> 
>>>> strings:
>> 
>>>> "manual-action" / "automatic-action"
>> 
>>>> 
>> 
>>>> o  *sendingMode*: "String" This MUST be one of the following
>> 
>>>> strings:
>> 
>>>> "MDN-sent-manually" / "MDN-sent-automatically"
>> 
>>>> 
>> 
>>>> o  *type*: "String" This MUST be one of the following strings:
>> 
>>>> "deleted" / "dispatched" / "displayed" / "processed"
>> 
>>>> 
>> 
>>>> See [RFC8098 [3]] for the exact meaning of these different
>> 
>>>> fields.
>> 
>>> 
>> 
>>> This all looks fine.
>> 
>>> 
>> 
>>>> If the _referencedMessageId_, _subject_, _textBody_,
>> 
>>>> _reportingUA_,
>> 
>>>> _disposition_ properties are invalid (e.g. missing, wrong type,
>> 
>>>> id
>> 
>>>> not found), the server MUST reject the import with an
>> 
>>>> "invalidProperties" SetError.
>> 
>>>> 
>> 
>>>> If the email cannot be created because it would take the account
>> 
>>>> over
>> 
>>>> quota, the creation should be rejected with a "maxQuotaReached"
>> 
>>>> SetError.
>> 
>>> 
>> 
>>> import -> create (I presume this is a copy-paste error) and the
>> 
>>> maxQuotaReached error is now just called overQuota. But rather
>> than
>> 
>>> specify the last two paragraphs, probably better just to say it
>> may
>> 
>>> return any standard SetError that is defined for a _create_ in the
>> 
>>> core spec.
>> 
>>> 
>> 
>>>> The response has the following arguments:
>> 
>>>> 
>> 
>>>> o  *accountId*: "String" The id of the account used for this
>> 
>>>> call.
>> 
>>>> 
>> 
>>>> o  *created*: "String[Email]" A map of the creation id to an
>> 
>>>> object
>> 
>>>> build from the referenced properties.  The _blobId_ field of
>> 
>>>> the
>> 
>>>> Email objects can then be used to effectively send the MDN.
>> 
>>> 
>> 
>>> Again, I'm unclear how you are supposed to use the blobId to send
>> this
>> 
>>> MDN. The EmailSubmission object uses an emailId reference rather
>> than
>> 
>>> a blobId. If it's creating an email object, it also needs to be
>> clear
>> 
>>> about which properties the servers should return for each object
>> in
>> 
>>> the response (e.g. id, threadId, blobId, etc.).
>> 
>>> 
>> 
>>>> o  *notCreated*: "String[SetError]" A map of creation id to a
>> 
>>>> SetError object for each Email that failed to be created.  The
>> 
>>>> possible errors are defined above.
>> 
>>> 
>> 
>>> This document needs a security considerations section at the end.
>> 
>>> 
>> 
>>> Cheers,
>> 
>>> 
>> 
>>> Neil.
>> 
>>> 
>> 
>>> Links:
>> 
>>> ------
>> 
>>> [1] https://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2
>> 
>>> [2] https://tools.ietf.org/html/rfc5322
>> 
>>> [3] https://tools.ietf.org/html/rfc8098
>> 
>>> 
>> 
>>> _______________________________________________
>> 
>>> Jmap mailing list
>> 
>>> Jmap@ietf.org
>> 
>>> https://www.ietf.org/mailman/listinfo/jmap
>> 
>> _______________________________________________
>> 
>> Jmap mailing list
>> 
>> Jmap@ietf.org
>> 
>> https://www.ietf.org/mailman/listinfo/jmap
> 
> --
> 
>   Bron Gondwana, CEO, FastMail Pty Ltd
> 
>   brong@fastmailteam.com


From nobody Tue Feb 12 01:14:56 2019
Return-Path: <brong@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 277AF128CE4 for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 01:14:54 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=W6fZof4R; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=usQku/Ft
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 YiXd6mIVJSJb for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 01:14:51 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7268612894E for <jmap@ietf.org>; Tue, 12 Feb 2019 01:14:51 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id A8123221C6 for <jmap@ietf.org>; Tue, 12 Feb 2019 04:14:50 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Tue, 12 Feb 2019 04:14:50 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:subject:content-type; s=fm1; bh=xeNV7Chd2R+tZJUlxA/HECyID+gc WNhs1JixsK4nCAE=; b=W6fZof4RfILLW9cMp4aLh60V13dcAUUqMVa3OXsYNRL1 0zHLFMHhJqdH0LKFqARIfFjbgAOE/qIHs9HqheOByB9gbldZPWcoEWVstfwX5Sn8 l8iv8wzbHdkfTsvBN85mnSuaoIB1IdUzc+mp+/S3dFzwWyhN1Sz5fYnQKlq8mL0+ MC4q5XrTG8N+3d6DOvcUlKpZHvE5ATEE7IafmIEDrHq94iVWO3UEeetx2CQ+m3St RrEmJNEwaM8gfw9PWDzDelZPbquJ52OogdFLIcyHz9s4JuMp6aMRB1Quza+WCp3b NOrhQlCWsQ7XO56DAQJcB+qrvAS9yByTdE/T+rLh7g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=xeNV7Chd2R+tZJUlx A/HECyID+gcWNhs1JixsK4nCAE=; b=usQku/FtF95tX4mb0q9TEDOquaFBaDu0t icFQP4o45FRPN/70huptCumzJipHkehWqaXyGgt2zXcDhXpltcatkMDeWXsHm0Qz G1J6Nztyump1tzYNJcr4oQOJaya7fPFe4xRUsbFCvphLHqNK1AiOSDkULDZ6SGEc PLhzhN6m+X3GPvnJqT/3KLbHwkHpBoafZkG0adC7V2UR0hz2Eqm+vbHiCiJk7dQ9 ujJ+hAAxXfAJY8msfULqI1WdDQYLAUhg3g76TMk2zQbAuIho6DjVfOfWquB192+N q1inGTZR0/wQYxX7X0fYISrvvm4PtYIPtjFVxQc3S49wQ0pf/3/EA==
X-ME-Sender: <xms:io5iXHrR10PCft4WEwpTSVwJA73fKOKdPTKkwYC7FCa8zZiuKD-OmA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedtledruddtuddgtdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhhtnecuuegrihhlohhuthemucef tddtnecunecujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpe dfuehrohhnucfiohhnugifrghnrgdfuceosghrohhnghesfhgrshhtmhgrihhlthgvrghm rdgtohhmqeenucffohhmrghinhepihgvthhfrdhorhhgnecurfgrrhgrmhepmhgrihhlfh hrohhmpegsrhhonhhgsehfrghsthhmrghilhhtvggrmhdrtghomhenucevlhhushhtvghr ufhiiigvpedt
X-ME-Proxy: <xmx:io5iXDLpVnMxZ3xUDpR9DgTYJoBVAROCQxUZkitQLpEMSg6Bk6bLng> <xmx:io5iXM3EtDxmaInl004nbdEBygh4GV4uZ-sC8CwCt20NBFUMsGUpFg> <xmx:io5iXM4LHbqvc2V5gj5st6xPVeESlfFXqQg8slB3zESCs9qTcTBH8A> <xmx:io5iXDacK9DKruJxjMV68p3m-T_97a5TdpPhTZhSxD37FABA6U4E8w>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 0AE4A2023C; Tue, 12 Feb 2019 04:14:50 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-832-gba113d7-fmstable-20190201v1
X-Me-Personality: 56629417
Message-Id: <6f38e91e-3bac-4873-912b-c44b7fee42ff@www.fastmail.com>
In-Reply-To: <37240c9d0200928267cc8f97029d29ad@linagora.com>
References: <153270520782.32707.4419621555491459322@ietfa.amsl.com> <2cf743f3-1c18-4062-848e-f85ca505fa55@sloti7d1t02> <f3a7729c1fd61e3b62dfe8b98eda5e43@linagora.com> <cafb3e22-a11a-41ad-8efc-e2311370dc4c@www.fastmail.com> <37240c9d0200928267cc8f97029d29ad@linagora.com>
Date: Tue, 12 Feb 2019 04:14:49 -0500
From: "Bron Gondwana" <brong@fastmailteam.com>
To: jmap@ietf.org
Content-Type: multipart/alternative; boundary=28318ff3bb7d46d487ca814a9ff20387
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/tlCtcGey0_OZWlkRoI9sVJxVJsk>
Subject: Re: [Jmap] I-D Action: draft-ietf-jmap-mdn-00.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Feb 2019 09:14:54 -0000

--28318ff3bb7d46d487ca814a9ff20387
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Awesome, thanks for that.

Cheers,

Bron.

On Tue, Feb 12, 2019, at 20:08, Raphael OUAZANA wrote:
> Hi Bron,
>=20
> Yes, I'll take the time to update it soon.
>=20
> Regards,
> Rapha=C3=ABl.
>=20
> Le 2019-02-11 15:25, Bron Gondwana a =C3=A9crit :
> > Hi Rapha=C3=ABl,
> >=20
> > This document recently expired. Do you have the time to prepare an
> > updated draft before Prague?
> >=20
> > Thanks,
> >=20
> > Bron.
> >=20
> > On Sat, Dec 22, 2018, at 04:05, Raphael OUAZANA wrote:
> >=20
> >> Hi Neil,
> >>=20
> >> Thank you very much for your feedback. Not enough time to handle it=

> >> for
> >>=20
> >> the moment, but it will be in my next year resolutions.
> >>=20
> >> Regards,
> >>=20
> >> Rapha=C3=ABl.
> >>=20
> >> Le 2018-12-05 01:46, Neil Jenkins a =C3=A9crit :
> >>=20
> >>> Finally sending my feedback on this draft, as promised in Bangkok.=

> >>=20
> >>> Sorry for the delay! Generally this looks good, just some comments=

> >> to
> >>=20
> >>> bring it up to date with the current JMAP conventions and a
> >> confusion
> >>=20
> >>> over how you're actually meant to send the MDN!
> >>=20
> >>>=20
> >>=20
> >>>> 2 [1]. Email/createMDN
> >>=20
> >>>>=20
> >>=20
> >>>> The Email/createMDN method create a [RFC5322 [2]] message from
> >>=20
> >>>> MDN
> >>=20
> >>>> properties.
> >>=20
> >>>=20
> >>=20
> >>> Where are these Email objects being created? It's not clear to me
> >>=20
> >>> whether these are intended to be saved to the account's mail store=

> >> or
> >>=20
> >>> not. If they _are_ being saved to the mail store, we need to give
> >>=20
> >>> mailboxIds and keywords arguments. If they are not being saved,
> >> but
> >>=20
> >>> just being sent immediately, that needs to be made clear and the
> >>=20
> >>> method probably renamed to _sendMDN_.
> >>=20
> >>>=20
> >>=20
> >>>> It takes the following arguments:
> >>=20
> >>>>=20
> >>=20
> >>>> o *accountId*: "String|null" The id of the account to use for
> >>=20
> >>>> this
> >>=20
> >>>> call. If "null", defaults to the "urn:ietf:params:jmap:mail"
> >>=20
> >>>> primary account.
> >>=20
> >>>=20
> >>=20
> >>> This should be non-optional now to match the same change in the
> >> other
> >>=20
> >>> JMAP specs.
> >>=20
> >>>=20
> >>=20
> >>>> o *mdns*: "String[MDN]" A map of creation id (client specified)
> >>=20
> >>>> to
> >>=20
> >>>> MDN objects
> >>=20
> >>>>=20
> >>=20
> >>>> An *MDN* object has the following properties:
> >>=20
> >>>>=20
> >>=20
> >>>> o *referencedMessageId*: "String" Message Id of the received
> >>=20
> >>>> message
> >>=20
> >>>> the user wants to create an MDN for.
> >>=20
> >>>=20
> >>=20
> >>> Again, to match current JMAP convention this should be
> >>=20
> >>> referencedEmailId, or maybe just forEmailId?
> >>=20
> >>>=20
> >>=20
> >>>> o *subject*: "String" Subject that will be used as "Subject"
> >>=20
> >>>> header
> >>=20
> >>>> for this MDN.
> >>=20
> >>>>=20
> >>=20
> >>>> o *textBody*: "String" Human readable part of the MDN, as plain
> >>=20
> >>>> text.
> >>=20
> >>>>=20
> >>=20
> >>>> o *reportingUA*: "String" Name of the MUA creating this MDN. It
> >>=20
> >>>> is
> >>=20
> >>>> used to build the MDN Report part of the MDN.
> >>=20
> >>>>=20
> >>=20
> >>>> o *disposition*: "Disposition" Object containing the diverse MDN
> >>=20
> >>>> disposition options.
> >>=20
> >>>>=20
> >>=20
> >>>> A *Disposition* object has the following properties:
> >>=20
> >>>>=20
> >>=20
> >>>> o *actionMode*: "String" This MUST be one of the following
> >>=20
> >>>> strings:
> >>=20
> >>>> "manual-action" / "automatic-action"
> >>=20
> >>>>=20
> >>=20
> >>>> o *sendingMode*: "String" This MUST be one of the following
> >>=20
> >>>> strings:
> >>=20
> >>>> "MDN-sent-manually" / "MDN-sent-automatically"
> >>=20
> >>>>=20
> >>=20
> >>>> o *type*: "String" This MUST be one of the following strings:
> >>=20
> >>>> "deleted" / "dispatched" / "displayed" / "processed"
> >>=20
> >>>>=20
> >>=20
> >>>> See [RFC8098 [3]] for the exact meaning of these different
> >>=20
> >>>> fields.
> >>=20
> >>>=20
> >>=20
> >>> This all looks fine.
> >>=20
> >>>=20
> >>=20
> >>>> If the _referencedMessageId_, _subject_, _textBody_,
> >>=20
> >>>> _reportingUA_,
> >>=20
> >>>> _disposition_ properties are invalid (e.g. missing, wrong type,
> >>=20
> >>>> id
> >>=20
> >>>> not found), the server MUST reject the import with an
> >>=20
> >>>> "invalidProperties" SetError.
> >>=20
> >>>>=20
> >>=20
> >>>> If the email cannot be created because it would take the account
> >>=20
> >>>> over
> >>=20
> >>>> quota, the creation should be rejected with a "maxQuotaReached"
> >>=20
> >>>> SetError.
> >>=20
> >>>=20
> >>=20
> >>> import -> create (I presume this is a copy-paste error) and the
> >>=20
> >>> maxQuotaReached error is now just called overQuota. But rather
> >> than
> >>=20
> >>> specify the last two paragraphs, probably better just to say it
> >> may
> >>=20
> >>> return any standard SetError that is defined for a _create_ in the=

> >>=20
> >>> core spec.
> >>=20
> >>>=20
> >>=20
> >>>> The response has the following arguments:
> >>=20
> >>>>=20
> >>=20
> >>>> o *accountId*: "String" The id of the account used for this
> >>=20
> >>>> call.
> >>=20
> >>>>=20
> >>=20
> >>>> o *created*: "String[Email]" A map of the creation id to an
> >>=20
> >>>> object
> >>=20
> >>>> build from the referenced properties. The _blobId_ field of
> >>=20
> >>>> the
> >>=20
> >>>> Email objects can then be used to effectively send the MDN.
> >>=20
> >>>=20
> >>=20
> >>> Again, I'm unclear how you are supposed to use the blobId to send
> >> this
> >>=20
> >>> MDN. The EmailSubmission object uses an emailId reference rather
> >> than
> >>=20
> >>> a blobId. If it's creating an email object, it also needs to be
> >> clear
> >>=20
> >>> about which properties the servers should return for each object
> >> in
> >>=20
> >>> the response (e.g. id, threadId, blobId, etc.).
> >>=20
> >>>=20
> >>=20
> >>>> o *notCreated*: "String[SetError]" A map of creation id to a
> >>=20
> >>>> SetError object for each Email that failed to be created. The
> >>=20
> >>>> possible errors are defined above.
> >>=20
> >>>=20
> >>=20
> >>> This document needs a security considerations section at the end.
> >>=20
> >>>=20
> >>=20
> >>> Cheers,
> >>=20
> >>>=20
> >>=20
> >>> Neil.
> >>=20
> >>>=20
> >>=20
> >>> Links:
> >>=20
> >>> ------
> >>=20
> >>> [1] https://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2
> >>=20
> >>> [2] https://tools.ietf.org/html/rfc5322
> >>=20
> >>> [3] https://tools.ietf.org/html/rfc8098
> >>=20
> >>>=20
> >>=20
> >>> _______________________________________________
> >>=20
> >>> Jmap mailing list
> >>=20
> >>> Jmap@ietf.org
> >>=20
> >>> https://www.ietf.org/mailman/listinfo/jmap
> >>=20
> >> _______________________________________________
> >>=20
> >> Jmap mailing list
> >>=20
> >> Jmap@ietf.org
> >>=20
> >> https://www.ietf.org/mailman/listinfo/jmap
> >=20
> > --
> >=20
> > Bron Gondwana, CEO, FastMail Pty Ltd
> >=20
> > brong@fastmailteam.com
>=20
> _______________________________________________
> Jmap mailing list
> Jmap@ietf.org
> https://www.ietf.org/mailman/listinfo/jmap
>=20

--
 Bron Gondwana, CEO, FastMail Pty Ltd
 brong@fastmailteam.com


--28318ff3bb7d46d487ca814a9ff20387
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div style=3D"font-f=
amily:Arial;">Awesome, thanks for that.<br></div><div style=3D"font-fami=
ly:Arial;"><br></div><div style=3D"font-family:Arial;">Cheers,<br></div>=
<div style=3D"font-family:Arial;"><br>Bron.<br></div><div style=3D"font-=
family:Arial;"><br></div><div style=3D"font-family:Arial;">On Tue, Feb 1=
2, 2019, at 20:08, Raphael OUAZANA wrote:<br></div><blockquote type=3D"c=
ite" id=3D"fastmail-quoted"><div style=3D"font-family:Arial;">Hi Bron,<b=
r></div><div style=3D"font-family:Arial;"><br></div><div style=3D"font-f=
amily:Arial;">Yes, I'll take the time to update it soon.<br></div><div s=
tyle=3D"font-family:Arial;"><br></div><div style=3D"font-family:Arial;">=
Regards,<br></div><div style=3D"font-family:Arial;">Rapha=C3=ABl.<br></d=
iv><div style=3D"font-family:Arial;"><br></div><div style=3D"font-family=
:Arial;">Le 2019-02-11 15:25, Bron Gondwana a =C3=A9crit&nbsp;:<br></div=
><div style=3D"font-family:Arial;">&gt; Hi Rapha=C3=ABl,<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-famil=
y:Arial;">&gt; This document recently expired.&nbsp; Do you have the tim=
e to prepare an<br></div><div style=3D"font-family:Arial;">&gt; updated =
draft before Prague?<br></div><div style=3D"font-family:Arial;">&gt;&nbs=
p;<br></div><div style=3D"font-family:Arial;">&gt; Thanks,<br></div><div=
 style=3D"font-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-fam=
ily:Arial;">&gt; Bron.<br></div><div style=3D"font-family:Arial;">&gt;&n=
bsp;<br></div><div style=3D"font-family:Arial;">&gt; On Sat, Dec 22, 201=
8, at 04:05, Raphael OUAZANA wrote:<br></div><div style=3D"font-family:A=
rial;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; Hi=
 Neil,<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></di=
v><div style=3D"font-family:Arial;">&gt;&gt; Thank you very much for you=
r feedback. Not enough time to handle it<br></div><div style=3D"font-fam=
ily:Arial;">&gt;&gt; for<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; the momen=
t, but it will be in my next year resolutions.<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt; Regards,<br></div><div style=3D"font-family:Arial;">&gt;&gt=
;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt; Rapha=C3=ABl=
.<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt; Le 2018-12-05 01:46, Neil Jenkin=
s a =C3=A9crit :<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbs=
p;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; Finally sendi=
ng my feedback on this draft, as promised in Bangkok.<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fami=
ly:Arial;">&gt;&gt;&gt; Sorry for the delay! Generally this looks good, =
just some comments<br></div><div style=3D"font-family:Arial;">&gt;&gt; t=
o<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&gt; bring it up to date with the=
 current JMAP conventions and a<br></div><div style=3D"font-family:Arial=
;">&gt;&gt; confusion<br></div><div style=3D"font-family:Arial;">&gt;&gt=
;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; over how=
 you're actually meant to send the MDN!<br></div><div style=3D"font-fami=
ly:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt=
;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp=
;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; 2 [1].&nbs=
p; Email/createMDN<br></div><div style=3D"font-family:Arial;">&gt;&gt;&n=
bsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt;&nbsp;<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&gt;&gt; The Email/createMDN method =
create a [RFC5322 [2]] message from<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt=
;&gt;&gt; MDN<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<=
br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; properties.<=
br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div =
style=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt;&gt; Where are these Email objects being created? It's not =
clear to me<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; whether these are =
intended to be saved to the account's mail store<br></div><div style=3D"=
font-family:Arial;">&gt;&gt; or<br></div><div style=3D"font-family:Arial=
;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt=
; not. If they _are_ being saved to the mail store, we need to give<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&gt; mailboxIds and keywords arguments.=
 If they are not being saved,<br></div><div style=3D"font-family:Arial;"=
>&gt;&gt; but<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<=
br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; just being sent =
immediately, that needs to be made clear and the<br></div><div style=3D"=
font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&gt; method probably renamed to _sendMDN_.<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-f=
amily:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&gt; It takes the following arguments:<br></div><div style=3D"font-fam=
ily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&g=
t;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; o&nbs=
p; *accountId*: "String|null" The id of the account to use for<br></div>=
<div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"=
font-family:Arial;">&gt;&gt;&gt;&gt; this<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt;&gt;&gt;&gt; call.&nbsp; If "null", defaults to the "urn:ietf:params:=
jmap:mail"<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br>=
</div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; primary account=
.<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&gt; This should be non-optional now to match the same ch=
ange in the<br></div><div style=3D"font-family:Arial;">&gt;&gt; other<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div st=
yle=3D"font-family:Arial;">&gt;&gt;&gt; JMAP specs.<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt=
;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; =
o&nbsp; *mdns*: "String[MDN]" A map of creation id (client specified)<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div st=
yle=3D"font-family:Arial;">&gt;&gt;&gt;&gt; to<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&gt;&gt; MDN objects<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; An *MDN* obje=
ct has the following properties:<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; o&nbsp; *refe=
rencedMessageId*: "String" Message Id of the received<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fami=
ly:Arial;">&gt;&gt;&gt;&gt; message<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt=
;&gt;&gt; the user wants to create an MDN for.<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&g=
t;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; Again, =
to match current JMAP convention this should be<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt;&gt; referencedEmailId, or maybe just forEmailId?<br></div>=
<div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"=
font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-famil=
y:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&gt;&gt; o&nbsp; *subject*: "String" Subject that will be used as "S=
ubject"<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></d=
iv><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; header<br></div><d=
iv style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&gt;&gt; for this MDN.<br></div><div style=3D"=
font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">=
&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&g=
t; o&nbsp; *textBody*: "String" Human readable part of the MDN, as plain=
<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div=
 style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; text.<br></div><div style=
=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-famil=
y:Arial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&gt; o&nbsp; *reportingUA*: "String" Name of the MUA creating this MDN=
.&nbsp; It<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br>=
</div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; is<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&gt;&gt; used to build the MDN Report part of t=
he MDN.<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></d=
iv><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&gt;&gt; o&nbsp; *disposition*: "Disposition" O=
bject containing the diverse MDN<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&gt; disposition options.<br></div><div style=3D"font-family:Arial;">&=
gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt=
;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></d=
iv><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; A *Disposition* ob=
ject has the following properties:<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;=
<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; o&nbsp; *ac=
tionMode*: "String" This MUST be one of the following<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fami=
ly:Arial;">&gt;&gt;&gt;&gt; strings:<br></div><div style=3D"font-family:=
Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&g=
t;&gt;&gt; "manual-action" / "automatic-action"<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt=
; o&nbsp; *sendingMode*: "String" This MUST be one of the following<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&gt;&gt; strings:<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&gt;&gt; "MDN-sent-manually" / "MDN-sent-automatically"<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D=
"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&gt;&gt; o&nbsp; *type*: "String" This MUST be one of the=
 following strings:<br></div><div style=3D"font-family:Arial;">&gt;&gt;&=
nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; "delet=
ed" / "dispatched" / "displayed" / "processed"<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&g=
t;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt;=
 See [RFC8098 [3]] for the exact meaning of these different<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&gt;&gt; fields.<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nb=
sp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; This all loo=
ks fine.<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></=
div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-f=
amily:Arial;">&gt;&gt;&gt;&gt; If the _referencedMessageId_, _subject_, =
_textBody_,<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; _reportingUA_,=
<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div=
 style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; _disposition_ properties =
are invalid (e.g. missing, wrong type,<br></div><div style=3D"font-famil=
y:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&gt;&gt; id<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp=
;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; not found)=
, the server MUST reject the import with an<br></div><div style=3D"font-=
family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;"=
>&gt;&gt;&gt;&gt; "invalidProperties" SetError.<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt=
; If the email cannot be created because it would take the account<br></=
div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=
=3D"font-family:Arial;">&gt;&gt;&gt;&gt; over<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial=
;">&gt;&gt;&gt;&gt; quota, the creation should be rejected with a "maxQu=
otaReached"<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; SetError.<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-=
family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;"=
>&gt;&gt;&gt; import -&gt; create (I presume this is a copy-paste error)=
 and the<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></=
div><div style=3D"font-family:Arial;">&gt;&gt;&gt; maxQuotaReached error=
 is now just called overQuota. But rather<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt; than<br></div><div style=3D"font-family:Arial;">&g=
t;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; spe=
cify the last two paragraphs, probably better just to say it<br></div><d=
iv style=3D"font-family:Arial;">&gt;&gt; may<br></div><div style=3D"font=
-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;=
">&gt;&gt;&gt; return any standard SetError that is defined for a _creat=
e_ in the<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt;&gt; core spec.<br></div>=
<div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"=
font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-famil=
y:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&gt;&gt; The response has the following arguments:<br></div><div sty=
le=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fam=
ily:Arial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&gt;&gt; o&nbsp; *accountId*: "String" The id of the account used for th=
is<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><d=
iv style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; call.<br></div><div sty=
le=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fam=
ily:Arial;">&gt;&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ar=
ial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&gt;&gt; o&nbsp; *created*: "String[Email]" A map of the creation id to =
an<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><d=
iv style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; object<br></div><div st=
yle=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt;&gt;&gt; build from the referenced properties.&nbsp=
; The _blobId_ field of<br></div><div style=3D"font-family:Arial;">&gt;&=
gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; th=
e<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; Email objects can then b=
e used to effectively send the MDN.<br></div><div style=3D"font-family:A=
rial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt=
;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; Again, I'm unclear=
 how you are supposed to use the blobId to send<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt; this<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t; MDN. The EmailSubmission object uses an emailId reference rather<br><=
/div><div style=3D"font-family:Arial;">&gt;&gt; than<br></div><div style=
=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-famil=
y:Arial;">&gt;&gt;&gt; a blobId. If it's creating an email object, it al=
so needs to be<br></div><div style=3D"font-family:Arial;">&gt;&gt; clear=
<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div=
 style=3D"font-family:Arial;">&gt;&gt;&gt; about which properties the se=
rvers should return for each object<br></div><div style=3D"font-family:A=
rial;">&gt;&gt; in<br></div><div style=3D"font-family:Arial;">&gt;&gt;&n=
bsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; the respons=
e (e.g. id, threadId, blobId, etc.).<br></div><div style=3D"font-family:=
Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&g=
t;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; o&nbsp; *notC=
reated*: "String[SetError]" A map of creation id to a<br></div><div styl=
e=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fami=
ly:Arial;">&gt;&gt;&gt;&gt; SetError object for each Email that failed t=
o be created.&nbsp; The<br></div><div style=3D"font-family:Arial;">&gt;&=
gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&gt; po=
ssible errors are defined above.<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&g=
t;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></=
div><div style=3D"font-family:Arial;">&gt;&gt;&gt; This document needs a=
 security considerations section at the end.<br></div><div style=3D"font=
-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;=
">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;=
&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; Cheers,<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div style=3D"fo=
nt-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Aria=
l;">&gt;&gt;&gt; Neil.<br></div><div style=3D"font-family:Arial;">&gt;&g=
t;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<b=
r></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&gt; Links:<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Ari=
al;">&gt;&gt;&gt; ------<br></div><div style=3D"font-family:Arial;">&gt;=
&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&gt;&gt; [1] h=
ttps://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&gt; [2] https://tools.ietf.org/html/rfc5322<br=
></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div st=
yle=3D"font-family:Arial;">&gt;&gt;&gt; [3] https://tools.ietf.org/html/=
rfc8098<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></d=
iv><div style=3D"font-family:Arial;">&gt;&gt;&gt;&nbsp;<br></div><div st=
yle=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-fa=
mily:Arial;">&gt;&gt;&gt; ______________________________________________=
_<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><di=
v style=3D"font-family:Arial;">&gt;&gt;&gt; Jmap mailing list<br></div><=
div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"f=
ont-family:Arial;">&gt;&gt;&gt; Jmap@ietf.org<br></div><div style=3D"fon=
t-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial=
;">&gt;&gt;&gt; https://www.ietf.org/mailman/listinfo/jmap<br></div><div=
 style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font=
-family:Arial;">&gt;&gt; _______________________________________________=
<br></div><div style=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div=
 style=3D"font-family:Arial;">&gt;&gt; Jmap mailing list<br></div><div s=
tyle=3D"font-family:Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-f=
amily:Arial;">&gt;&gt; Jmap@ietf.org<br></div><div style=3D"font-family:=
Arial;">&gt;&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&gt;&g=
t; https://www.ietf.org/mailman/listinfo/jmap<br></div><div style=3D"fon=
t-family:Arial;">&gt;&nbsp;<br></div><div style=3D"font-family:Arial;">&=
gt; --<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br></div><d=
iv style=3D"font-family:Arial;">&gt;&nbsp;&nbsp; Bron Gondwana, CEO, Fas=
tMail Pty Ltd<br></div><div style=3D"font-family:Arial;">&gt;&nbsp;<br><=
/div><div style=3D"font-family:Arial;">&gt;&nbsp;&nbsp; brong@fastmailte=
am.com<br></div><div style=3D"font-family:Arial;"><br></div><div style=3D=
"font-family:Arial;">_______________________________________________<br>=
</div><div style=3D"font-family:Arial;">Jmap mailing list<br></div><div =
style=3D"font-family:Arial;">Jmap@ietf.org<br></div><div style=3D"font-f=
amily:Arial;">https://www.ietf.org/mailman/listinfo/jmap<br></div><div s=
tyle=3D"font-family:Arial;"><br></div></blockquote><div style=3D"font-fa=
mily:Arial;"><br></div><div id=3D"sig56629417"><div class=3D"signature">=
--<br></div><div class=3D"signature">&nbsp; Bron Gondwana, CEO, FastMail=
 Pty Ltd<br></div><div class=3D"signature">&nbsp; brong@fastmailteam.com=
<br></div><div class=3D"signature"><br></div></div><div style=3D"font-fa=
mily:Arial;"><br></div></body></html>
--28318ff3bb7d46d487ca814a9ff20387--


From nobody Tue Feb 12 04:53:56 2019
Return-Path: <kivinen@iki.fi>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 600D6130E74; Tue, 12 Feb 2019 04:53:38 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Tero Kivinen <kivinen@iki.fi>
To: <secdir@ietf.org>
Cc: jmap@ietf.org, draft-ietf-jmap-core.all@ietf.org, ietf@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <154997601829.8330.1953392138178618640@ietfa.amsl.com>
Date: Tue, 12 Feb 2019 04:53:38 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/jPbahMbkBMZ7GIWha7Qt9O_97R8>
Subject: [Jmap] Secdir telechat review of draft-ietf-jmap-core-14
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Feb 2019 12:53:47 -0000

Reviewer: Tero Kivinen
Review result: Ready

I have reviewed this document as part of the security directorate's
ongoing effort to review all IETF documents being processed by the
IESG.  These comments were written primarily for the benefit of the
security area directors.  Document editors and WG chairs should treat
these comments just like any other last call comments.

This is rereview of this document, and all my previous issues have
been solved, so I think this document is ready.


From nobody Tue Feb 12 11:37:43 2019
Return-Path: <daniel@gultsch.de>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E6862130DE3 for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 11:37:40 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level: 
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gultsch-de.20150623.gappssmtp.com
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 JVUM67iOdZq2 for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 11:37:38 -0800 (PST)
Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8A8F3130DC8 for <jmap@ietf.org>; Tue, 12 Feb 2019 11:37:38 -0800 (PST)
Received: by mail-pg1-x535.google.com with SMTP id v28so1706459pgk.10 for <jmap@ietf.org>; Tue, 12 Feb 2019 11:37:38 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gultsch-de.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=AQoCj8wAHlYv3JkZuklDQITE+JyLDc+DLywkX+/86T4=; b=hnB69xhqU0CP+caVY+Imfyl8HMjVKiO5x0dSMV6+Y8cs3D2eMNp9PvxQXUGsczOXbK Qf06uuveGWZvV0Gy/sw6PRVa+MSn8sWSUMrG1UnnATNChUoVkzamR0tx8Bu7VLyPLK8+ 92G77CSz14uHbwXdgLQIrNzD93Nmj538+SwAzGOhyhfQYU3EflMZHeRuAHn1KyFCJ3rD ahVVjzE2zuEwIL7PumcWQvLBAmy2Cq0eu8lTHgI9fhMg7C1py1iDrsmGcPchj+MMdcE0 juzk26Lamx0JcldccG+jywJSd8UAnSGOajFstmE0aqoO5GmAUtM4WM7HNIpmUPOkCCOo 5fUQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=AQoCj8wAHlYv3JkZuklDQITE+JyLDc+DLywkX+/86T4=; b=NCWb7wQIbbTOa7tUARgjGhQWaNBsJNkn8GsEgL285Q9St3w+75VguQLWJu++vDMzC0 pwk5hQ8vPsWGvpHhYm6Yj6XPchiQgv1qcYVRDNeIF8COYwRWV3LOPSWG/yeCGuIvQv+F XesYr1OBWXv+n7j46PhokLO8zoz+0k1hCHvFaN7p9BZ6HlpaWQkUtJpzvrSXvWqc00B9 IJgTkPn1nUOli0k8HcsN29qEIMol8Li2qy1DTSphYlLLjP/aqBcnUnOiGr74a+dRbS6X sopUO1R0hmujRn83EyID3A22l1Fe5kgBoIGc7unoD27tjT2uC6RAAKNyQU14IOEq69QV yrlQ==
X-Gm-Message-State: AHQUAuYtAYePKVs0Ha+bViiMLnDArD4Dv2ZpQ2pnd4z+sPHKimOrgwaF Xnef5jAUv+hCJGNuZXDRW4h15NNZ/HJyoa8oLPraSv6c58hWOA==
X-Google-Smtp-Source: AHgI3Ib/RPLP9+O/5Mbp27eTrkj25eHDpfMMkxtKhYH46oYQofqBqENC1I26eS/4pc3HlBmboecpZOQDY0vhLwP7O6A=
X-Received: by 2002:a62:6702:: with SMTP id b2mr5436956pfc.244.1550000257106;  Tue, 12 Feb 2019 11:37:37 -0800 (PST)
MIME-Version: 1.0
From: Daniel Gultsch <daniel@gultsch.de>
Date: Tue, 12 Feb 2019 19:37:26 +0000
Message-ID: <CAN-aAr-e8iGiGPvmtes43XxQZcC1uNTwR4+bjNPU6rzfdkUftA@mail.gmail.com>
To: jmap@ietf.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/EjfuNqFOLOR7PBwkzA-c-ob3MJI>
Subject: [Jmap] Multiple responses for method?
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Feb 2019 19:37:41 -0000

Hi,

are multiple responses for the same method call still a thing in JMAP?
I remember them being used to trigger subsequent calls (get after
changes) before back references were introduced. Now they seem
obsolete (at least I can=E2=80=99t find an actual use case) however Example
3.3.1 (https://datatracker.ietf.org/doc/html/draft-ietf-jmap-core-14#sectio=
n-3.3.1)
still has them and the text above that example neither specifically
allows nor forbids them.

Is there a 1:1 relationship between request and response or a 1:n? And
should this be explicitly specified?

cheers
Daniel


From nobody Tue Feb 12 20:24:03 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 35920130F9C for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 20:24:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=I20I6vVS; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=nwGXfUlV
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 NyNDCeEE-b60 for <jmap@ietfa.amsl.com>; Tue, 12 Feb 2019 20:23:59 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A65AB12D4F3 for <jmap@ietf.org>; Tue, 12 Feb 2019 20:23:59 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id D4D32222F9 for <jmap@ietf.org>; Tue, 12 Feb 2019 23:23:58 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Tue, 12 Feb 2019 23:23:58 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:subject:content-type; s=fm1; bh=458KNJMv+x4K0s6L/YGVqZs+WSNs B5x1JwFZZseFY0U=; b=I20I6vVSwIt/vT2DOYn/JxIOFrLFLx+aRm4pLfCTUAvI eP2nHUrO5JBIxwB3rN5CKk2Ohnbm8pqnZKX4DPFDR2SD23Ia1OBJDNKpAuyglrl2 BpEzPjNlHMsQAABjkCyhOKgPRNdVX0bP+fREBF9ZU59ZH0ceEvBXbgEz0tzIy3OB GdW+k3zRvhrYuGQ2lM1Zzf43bNnDumdOiI0LxfjcRKawmRIQGumGUTjVoV+l9T2n S05XfAD9UHE9HsCqLmXLYXCqbZGaPIEi3unm9JAm+KD3I9JQa4vZQCfVid9Pcoid HjiZ8aPceetkqG/GEfKn4N9IyjEtQf/I1xQliZW0tg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=458KNJMv+x4K0s6L/ YGVqZs+WSNsB5x1JwFZZseFY0U=; b=nwGXfUlV7HB54l5y719YT2NeuiGmq0jUr q4AEXziJ5gmS2V0NUUwutB1It/S52WsSv0v7WnTT+YR+A1IEZjQXS76Nlqr7Y4Ln p0GPgMMTy52pcvZbTGRYquEBNdU5kce2hVW8mVLIK8SKZ2FQt6PmdPTgAFugEe6u gpl4Wtp0jPaZbFqnjuG9Pf3KWxBuIZ4XArU9sY9nLsd/8Q4lWAA1otV0ANKYGoaA l8qZpst/M9u9KcvByCqokfNOzCxGLI/kC2I86lfGHApMVBmq/adHE8dxCBFlw53h k3p80ybJliFUt451ooTnN7NeFDWvn3LPYp97B+v5Gh5mnbWHQVQbQ==
X-ME-Sender: <xms:3ptjXDPXxkWST8C8Iw1dtMbfZYwwJKk-95_Vf-gGSNWTexC999rpWg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedtledruddtvddgjedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhhtnecuuegrihhlohhuthemucef tddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefofgfkjghfff fhvffutgesrgdtreerreertdenucfhrhhomhepfdfpvghilhculfgvnhhkihhnshdfuceo nhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhmqeenucffohhmrghinhepihgvth hfrdhorhhgnecurfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghi lhhtvggrmhdrtghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:3ptjXOni6FjGaxckG9lCzxvvJ0lv-nepc032vxM3cClcryu7Na66nQ> <xmx:3ptjXNbCY6rbIgLp07jvEKzxC0vVsPCATj0HEvaNa-P0zMyeL5LcJQ> <xmx:3ptjXMRDeXmSYSVE3KMutitwv0mh4GbbpUaN7hNe_jPcZkxSNLsvxg> <xmx:3ptjXMwdJQGaNZWx7eOqKzk1eN-LKVRxgU3Gmhd3gsHWtqJutwI1Dw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 6025B20250; Tue, 12 Feb 2019 23:23:58 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-832-gba113d7-fmstable-20190201v1
X-Me-Personality: 64588216
Message-Id: <760238df-9a97-40a3-b607-20295569aa6b@beta.fastmail.com>
In-Reply-To: <CAN-aAr-e8iGiGPvmtes43XxQZcC1uNTwR4+bjNPU6rzfdkUftA@mail.gmail.com>
References: <CAN-aAr-e8iGiGPvmtes43XxQZcC1uNTwR4+bjNPU6rzfdkUftA@mail.gmail.com>
Date: Tue, 12 Feb 2019 23:23:58 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=1e3fe0a5badd486c92f0d15994e65ce6
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/ru5gaTJuFQ9S2pyDoQqd-FbwqxM>
Subject: Re: [Jmap] Multiple responses for method?
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Feb 2019 04:24:01 -0000

--1e3fe0a5badd486c92f0d15994e65ce6
Content-Type: text/plain

https://tools.ietf.org/html/draft-ietf-jmap-core-14#section-3.2

 (a method may return 1 or more responses, as it may make
 implicit calls to other methods; all responses initiated by
 this method call get the same client id in the response).

See the real-world example in Section 7.5.1 of the mail spec <https://tools.ietf.org/html/draft-ietf-jmap-mail-14#section-7.5.1>, where the EmailSubmission call makes an implicit Email/set call to move the message from "drafts" to "sent" if it sends successfully.

Cheers,
Neil.
--1e3fe0a5badd486c92f0d15994e65ce6
Content-Type: text/html

<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div><a href="https://tools.ietf.org/html/draft-ietf-jmap-core-14#section-3.2">https://tools.ietf.org/html/draft-ietf-jmap-core-14#section-3.2</a><br></div><div><br></div><pre class="newpage" style="font-size:13.3333px;margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0px;text-decoration-style:initial;text-decoration-color:initial;"> (a method may return 1 or more responses, as it may make
 implicit calls to other methods; all responses initiated by
 this method call get the same client id in the response).<br></pre><div><br></div><div>See the real-world example in <a href="https://tools.ietf.org/html/draft-ietf-jmap-mail-14#section-7.5.1">Section 7.5.1 of the mail spec</a>, where the EmailSubmission call makes an implicit Email/set call to move the message from "drafts" to "sent" if it sends successfully.<br></div><div><br></div><div>Cheers,<br></div><div>Neil.<br></div></body></html>
--1e3fe0a5badd486c92f0d15994e65ce6--


From nobody Sat Feb 16 16:17:42 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 97B4B12785F; Sat, 16 Feb 2019 16:17:33 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Eric Rescorla <ekr@rtfm.com>
To: "The IESG" <iesg@ietf.org>
Cc: jmap@ietf.org, draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com>
Date: Sat, 16 Feb 2019 16:17:33 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/a6VBmgwR07yiYPpngneUyEQPSJE>
Subject: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 17 Feb 2019 00:17:34 -0000

Eric Rescorla has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Rich version of this review at:
https://mozphab-ietf.devsvcdev.mozaws.net/D4155


I believe I have found a security issue, noted below. In addition, I
have noted a potential interop issue.

DETAIL
S 2.
>            "urn:ietf:params:jmap:contacts", while the second account would
>            just have the last of these.  Attempts to use the methods
>            defined in a specification with one of the accounts that does
>            not contain those data types are rejected with an
>            _accountNotSupportedByMethod_ error (see section 3.5.2: method-
>            level errors).

What happens if this changes after the user has logged in. So, for
instance, I log in and am told that account X has contacts, but later
calendars get added. Do requests have to fail?


S 7.2.2.
>      o  *pushSubscriptionId*: "String" The id of the push subscription
>         that was created.
>   
>      o  *verificationCode*: "String" The verification code to add to the
>         push subscription.  This MUST contain sufficient entropy to avoid
>         the client being able to brute force guess the code.

This doesn't actually guarantee permission. Consider the case where
the client provides a push URL for some sort of open server upload
endpoint. The client could then read the verification code off that
endpoint and confirm the push subscription. Off the top of my head,
requiring the push endpoint to respond in-band with a function of the
code would be better.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

S 1.2.
>      the "URL and Filename safe" Base 64 Alphabet, as defined in section 5
>      of [RFC4648].  This is the ASCII alphanumeric characters ("A-Za-
>      z0-9"), hyphen ("-"), and underscore ("_").
>   
>      These characters are safe to use in almost any context (e.g.,
>      filesystems, URIs, IMAP atoms).  For maximum safety, servers should

SHOULD?


S 1.7.
>   
>   1.7.  The JMAP API model
>   
>      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
>      resources.  Implementations MUST support HTTP/1.1, and MAY support
>      later versions.  All HTTP requests MUST use [RFC8446] TLS (HTTPS)

You need to cite 2818 here too.


S 1.7.
>   
>   1.7.  The JMAP API model
>   
>      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
>      resources.  Implementations MUST support HTTP/1.1, and MAY support
>      later versions.  All HTTP requests MUST use [RFC8446] TLS (HTTPS)

At this point, do you think it should be SHOULD for H2


S 1.7.
>      and caching are assumed.
>   
>      All HTTP requests MUST be authenticated.  Servers MUST conform with
>      the [RFC7235] HTTP Authentication framework to reject requests that
>      fail authentication and inform the client of available authentication
>      schemes.

This seems pretty restrictive. I read it as forbidding TLS client auth
and/or PAKEs.


S 2.
>            something like "urn:ietf:params:jmap:mail",
>            "urn:ietf:params:jmap:calendars",
>            "urn:ietf:params:jmap:contacts", while the second account would
>            just have the last of these.  Attempts to use the methods
>            defined in a specification with one of the accounts that does
>            not contain those data types are rejected with an

Is this a MUST-level statement or something else?



S 2.
>      o  *downloadUrl*: "String" The URL endpoint to use when downloading
>         files, in [RFC6570] URI Template (level 1) format.  The URL MUST
>         contain variables called "accountId", "blobId", "type" and "name".
>         The use of these variables is described in section 6.2.  Due to
>         potential encoding issues with slashes in content types, it is
>         recommended to put the "type" variable in the query section of the

Should this be RECOMMENDED?


S 3.2.
>   
>         3.  A "String" *client id*: an arbitrary string from the client to
>             be echoed back with the responses emitted by that method call
>             (a method may return 1 or more responses, as it may make
>             implicit calls to other methods; all responses initiated by
>             this method call get the same client id in the response).

Do all the responses have to come back in the same package, so that I
know when I have received the last one?


S 3.2.
>         different servers.  For example it could send the first two method
>         calls to server A, then the third to server B, before sending the
>         fourth to server A again.  By passing the createdIds of the
>         previous response to the next request, it can ensure all of these
>         still resolve.  See section 5.8 for further discussion of proxy
>         considerations.

This is a bit hard to parse and would be improved by an example.


S 3.5.2.
>      and, unless otherwise specified, further processing MUST NOT happen
>      within that method call.
>   
>      Any further method calls in the request MUST then be processed as
>      normal.  Errors at the method level MUST NOT generate an HTTP-level
>      error.

So, what do I do if I want to have method 1 execute and then method 2
execute only if method 1 succeeded. E.g., copy an object and then
delete the original? Do two requests? it looks like maybe I can use
back-references for this, but will that always work?


S 5.4.
>      to copy them using the _Foo/copy_ method, then once the copy has
>      succeeded, delete the original.  The _onSuccessDestroyOriginal_
>      argument allows you to try to do this in one method call, however
>      note that the two different actions are not atomic, and so it is
>      possible for the copy to succeed but the original not to be destroyed
>      for some reason.

Can the other direction happen?


S 8.1.
>   8.1.  Transport confidentiality
>   
>      All HTTP requests MUST use [RFC8446] TLS (https) transport to ensure
>      the confidentiality and integrity of data sent and received via JMAP.
>      Clients MUST validate TLS certificate chains to protect against man-
>      in-the-middle attacks.

You should cite 7525. Also, you need to specify which versions are
acceptbale.



From nobody Sun Feb 17 09:56:20 2019
Return-Path: <barryleiba@gmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4911E130E5B; Sun, 17 Feb 2019 09:56:13 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.881
X-Spam-Level: 
X-Spam-Status: No, score=-1.881 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.018, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 31U0qmwE_Ipd; Sun, 17 Feb 2019 09:56:11 -0800 (PST)
Received: from mail-it1-f172.google.com (mail-it1-f172.google.com [209.85.166.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1A75F130E74; Sun, 17 Feb 2019 09:56:05 -0800 (PST)
Received: by mail-it1-f172.google.com with SMTP id i2so35719338ite.5; Sun, 17 Feb 2019 09:56:05 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=AoZ2wG9JqJU/ipLQa0wATdXmwyr6ky08icP48HSk+40=; b=l7Jd3ugYogpx+Y8SsGuI7A/L4qQvSM58TC+ReUXTv3qUJcGVktGL0c+MV33k463izt QC1Wcuo2VAMpeUfj+umcMa1tkLmnbJqEXpCdwe8onMAAI/+oE3J2JBHYBRDURJ7Advjn 3uShFjyEnUs9A/l6k7ZdGPItqI1X5OvtPKtUgLd1eJ6nJNI2yJ3goFUXmov9PDMhw6YH WD+UPqhWWV9IsReKdg9ziMYxqp1LZNCvY1SqPWov7YSX1vkFOImDLEFggVZUHvBi7Gab nlWdhdo9Ri5GvEEA2DfEtt0NXcx+bSZe0lcfRDiTNwTcGSJnpO9kKXMffm7mQeN7FGQt uXuQ==
X-Gm-Message-State: AHQUAuYaG2BOIxBfshiEJs5l6b/aodHsiPABrbkjejSNZPat6Jhcz0su oVsdzAzyem4gm8Bj2eneqhGROZTO5HQ521tlZfYQ0w==
X-Google-Smtp-Source: AHgI3IY8ndRaCP8YA4wOfbXZz6ezQ7g1BXzKZtSBA/yseebF5ZkI/LYsTubQ9PoQpDwAsaGnvLj53FWFmjHk9jcomok=
X-Received: by 2002:a24:6fc4:: with SMTP id x187mr12028603itb.93.1550426163942;  Sun, 17 Feb 2019 09:56:03 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com>
In-Reply-To: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com>
From: Barry Leiba <barryleiba@computer.org>
Date: Sun, 17 Feb 2019 12:55:52 -0500
Message-ID: <CALaySJJQUgAs-iE-t6QTOmUyCqmJ8Th_wh=W6eM6BX3Bm7xY6Q@mail.gmail.com>
To: Eric Rescorla <ekr@rtfm.com>
Cc: The IESG <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: text/plain; charset="UTF-8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/AW7nQTr1qphkLklg67uVffTcBqo>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 17 Feb 2019 17:56:18 -0000

Just on three of the comments:

> S 1.2.
> >      the "URL and Filename safe" Base 64 Alphabet, as defined in section 5
> >      of [RFC4648].  This is the ASCII alphanumeric characters ("A-Za-
> >      z0-9"), hyphen ("-"), and underscore ("_").
> >
> >      These characters are safe to use in almost any context (e.g.,
> >      filesystems, URIs, IMAP atoms).  For maximum safety, servers should
>
> SHOULD?

I think so, as it speaks to a choice related to interoperability.

> S 1.7.
> >
> >   1.7.  The JMAP API model
> >
> >      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
> >      resources.  Implementations MUST support HTTP/1.1, and MAY support
> >      later versions.  All HTTP requests MUST use [RFC8446] TLS (HTTPS)
>
> At this point, do you think it should be SHOULD for H2

Yes.  "Implementations MUST support HTTP/1.1, SHOULD support HTTP/2,
and MAY support later versions.

And this will come up again when QUIC is ready.

> S 2.
> >            something like "urn:ietf:params:jmap:mail",
> >            "urn:ietf:params:jmap:calendars",
> >            "urn:ietf:params:jmap:contacts", while the second account would
> >            just have the last of these.  Attempts to use the methods
> >            defined in a specification with one of the accounts that does
> >            not contain those data types are rejected with an
>
> Is this a MUST-level statement or something else?

It's a style choice in writing out a protocol.  There are times, I
think, when you want to use MUST to highlight that there are multiple
ways one might handle something, and this is the one you have to use.
Here, it's just saying, "This is how the protocol works."  If you
don't do this, it's not this protocol.  I don't think it's necessary
to use "MUST" here.

That said, of course (1) it doesn't hurt to say MUST and (2) we're
inconsistent, in general, with when we say, "this is what happens,"
and when, "this is what you MUST do."

Barry


From nobody Sun Feb 17 16:06:16 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 58A151292F1; Sun, 17 Feb 2019 16:06:14 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Eric Rescorla <ekr@rtfm.com>
To: "The IESG" <iesg@ietf.org>
Cc: jmap@ietf.org, draft-ietf-jmap-mail@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com>
Date: Sun, 17 Feb 2019 16:06:14 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/xBO4YXQg7SaN3F0rNH3OkhDXF2Y>
Subject: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 18 Feb 2019 00:06:14 -0000

Eric Rescorla has entered the following ballot position for
draft-ietf-jmap-mail-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-mail/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Rich version of this review at:
https://mozphab-ietf.devsvcdev.mozaws.net/D4198


IMPORTANT: It's a bit hard to tell what the server is required to do.
Which of the many properties of emails (headers, the like) is the
server required to provide?

DETAIL
S 2.
>   
>         *  *mayReadItems*: "Boolean" If true, the user may use this
>            mailbox as part of a filter in a _Email/query_ call and the
>            mailbox may be included in the _mailboxIds_ set of _Email_
>            objects.  If a sub-mailbox is shared but not the parent
>            mailbox, this may be "false".  Corresponds to IMAP ACLs "lr".

This doesn't have any impact on Email/get? that seems odd.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

S 2.
>      A *Mailbox* object has the following properties:
>   
>      o  *id*: "Id" (immutable; server-set) The id of the mailbox.
>   
>      o  *name*: "String" User-visible name for the mailbox, e.g.  "Inbox".
>         This may be any Net-Unicode string ([RFC5198]) of at least 1

MAY?


S 2.
>   
>      o  *role*: "String|null" (default: null) Identifies mailboxes that
>         have a particular common purpose (e.g. the "inbox"), regardless of
>         the _name_ (which may be localised).  This value is shared with
>         IMAP (exposed in IMAP via the [RFC6154] SPECIAL-USE extension).
>         However, unlike in IMAP, a mailbox may only have a single role,

MUST only


S 2.
>      o  *totalEmails*: "PositiveInt" (server-set) The number of emails in
>         this mailbox.
>   
>      o  *unreadEmails*: "PositiveInt" (server-set) The number of emails in
>         this mailbox that have neither the "$seen" keyword nor the
>         "$draft" keyword.

This is the first appearance of "keyword" in this document. Please
provide some explanation of what that means before this.


S 2.
>      o  *totalThreads*: "PositiveInt" (server-set) The number of threads
>         where at least one email in the thread is in this mailbox.
>   
>      o  *unreadThreads*: "PositiveInt" (server-set) An indication of the
>         number of "unread" threads in the mailbox.  This may be presented
>         by the client as a badge or marker associated with the mailbox.

I know we're in 8174-land, but it seems to me that this may is a bit
confusing in any case. The client can do anything it wants with this
at all, right?


S 4.1.
>         list rather than a single part as messages may have headers and/or
>         footers appended/prepended as separate parts as they are
>         transmitted, and some clients send text and images intended to be
>         displayed inline in the body (or even videos and sound clips) as
>         multiple parts rather than a single HTML part with referenced
>         images.

Does the server have to supply this? It seems like it's a bit of a
pain if you don't otherwise have a bunch of MIME-parsing machiner.


S 4.1.1.
>      properties is specified over the following three sub-sections.
>   
>   4.1.1.  Metadata
>   
>      These properties represent metadata about the [RFC5322] message, and
>      are not derived from parsing the message itself.

As above, is the server required to supply all of these?


S 4.1.2.3.
>   
>      o  Resent-Cc
>   
>      o  Resent-Bcc
>   
>      o  Any header not defined in [RFC5322] or [RFC2369]

Can this list be updated in the future? If so, how?


S 9.2.
>   
>      Subtle differences in parsing of HTML can introduce security flaws:
>      to filter with 100% accuracy you need to use the same parser when
>      sanitizing that the HTML rendering engine will use.
>   
>      o  Encapsulating the message in an "<iframe sandbox>" can help

You need a reference to this.



From nobody Mon Feb 18 19:27:19 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B18FD130E5F; Mon, 18 Feb 2019 19:27:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=KLQnom15; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=rabvccpB
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 TfWSczjFcdw5; Mon, 18 Feb 2019 19:27:07 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7F5BD130E62; Mon, 18 Feb 2019 19:27:07 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 8D5AB21F43; Mon, 18 Feb 2019 22:27:06 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 18 Feb 2019 22:27:06 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=o/9V71LVe5QIZekL3SO4g6n3Q oZPsOyQykQKRa6RCjI=; b=KLQnom15KUP9f8ldFpTUeUNEYXkMPZEoPw5/h53bt gOgR4/krsZWPPnLEaQ6jDLROPmunKuTldZyT/cLs+lcyK22S6rEsXCCtmpYH5/0Z HWmoVCAYGkz9NoyeI5R+1vHeuPhLdBHwZfwmImL9YN+61win10euoeZcSP6ORNjn 07nPilEWhhS13y353WqlEl/4glTUuvFFsrORJw5Dp8gTEDPc8We0S4E+UWSsmfRV 2oRo+BV0tLZASVU2OzuSbexE1Zl3FrNx1uku73mVJH6aEBGGvtHgJrcOiYeu7tlk 8J9jSwGKSi+BgFILAy2Cbi7MV+dxMQR78dTAu3+cMh5fg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=o/9V71LVe5QIZekL3 SO4g6n3QoZPsOyQykQKRa6RCjI=; b=rabvccpBpwGGNeej9YzHXV57uuOXcUgOr luYyySupbhXb8pK83cZxrmXNbYYxZUg8NhIGZYKaPAp6Yd1ErnfST1+IWiF0ZQPe YMxNbr8z2xS4atlIw5cTGqwdKazslgvDezqy2MhVJxEX0xQPpAjGaX4fdvSjwLIY 20tENUHenVlbdjtUt2kmBzHe9zWKxc7fXsyEvmFPp2dgIt5jNwJu2JzOOFMyYytq momwZkQriZD/In5ydzRai4lpb3Ixs0SRSQ/lWKscAogvYZCyTgHl8B33VWgI6CmU Onriv098nPur9KxU46F5iWrsSISOvv22+u4MKRLzYv21Cn+UXQcWg==
X-ME-Sender: <xms:indrXEsHaMQ60UJHa0Qd12m7HzasGlX7VRyGEg6dd5tMJK_IwHwBcw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtddvgdehheculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne cuffhomhgrihhnpehhthhtphdqlhgvvhgvlhgvrhhrohhrrdhsohdpihgvthhfrdhorhhg pdhmohiiihhllhgrrdhorhhgpdhhthhtphhrvghquhgvshhtshihvghsrdhinhdpjhhmrg hprdhiohenucfrrghrrghmpehmrghilhhfrhhomhepnhgvihhljhesfhgrshhtmhgrihhl thgvrghmrdgtohhmnecuvehluhhsthgvrhfuihiivgeptd
X-ME-Proxy: <xmx:indrXIY30dtE1RbTQOnTh4p1pQQg-4RRHwlJ201-uFMyK42-eaMyRA> <xmx:indrXIs98r1j-PZPVgC7z5dNgQH3snCz1ccsRE-FQLhGs5qVoRSkmw> <xmx:indrXPANYSaByITwviyCxr-PIps2CuMocVnc-nLnjGop50dDx5LtHw> <xmx:indrXHjG_e-nv640x-2aFFmTB1sR_BmOdPicxSe71aZVXbm6wDmvDg>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id EA33F2031F; Mon, 18 Feb 2019 22:27:05 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com>
In-Reply-To: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com>
Date: Mon, 18 Feb 2019 22:25:09 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: iesg <iesg@ietf.org>, "Eric Rescorla" <ekr@rtfm.com>
Cc: "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=f779b38205f74ca390b194511d3dd2e0
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/FvgRVn5yH6fTAnVq-H-6Yz5Kf-4>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 03:27:11 -0000

--f779b38205f74ca390b194511d3dd2e0
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Sun, 17 Feb 2019, at 11:17, Eric Rescorla wrote:
> DETAIL
> S 2.
> > "urn:ietf:params:jmap:contacts", while the second account would
> > just have the last of these. Attempts to use the methods
> > defined in a specification with one of the accounts that does
> > not contain those data types are rejected with an
> > _accountNotSupportedByMethod_ error (see section 3.5.2: method-
> > level errors).
>=20
> What happens if this changes after the user has logged in. So, for
> instance, I log in and am told that account X has contacts, but later
> calendars get added. Do requests have to fail?

Requests as a whole would not fail, no. In the case of just now having a=
ccess to calendars for account X, methods operating on contacts would be=
have exactly as before. However, the `sessionState` property of the API =
responses will change so the client will know it needs to refetch the se=
ssion information (and thus discover it now has more access). Of course =
in the inverse case, say if you used to have access to contacts and cale=
ndars in account X and now only have access to contacts, then calling a =
calendar method for account X would then return an `accountNotSupportedB=
yMethod` error.

> S 7.2.2.
> > o *pushSubscriptionId*: "String" The id of the push subscription
> > that was created.
> >=20
> > o *verificationCode*: "String" The verification code to add to the
> > push subscription. This MUST contain sufficient entropy to avoid
> > the client being able to brute force guess the code.
>=20
> This doesn't actually guarantee permission. Consider the case where
> the client provides a push URL for some sort of open server upload
> endpoint. The client could then read the verification code off that
> endpoint and confirm the push subscription. Off the top of my head,
> requiring the push endpoint to respond in-band with a function of the
> code would be better.

This would kill interoperability. The current specification is designed =
to work with a push server that supports RFC8030 <https://tools.ietf.org=
/html/rfc8030>, but doesn't necessarily know anything about the JMAP ser=
ver (so cannot do custom processing or in-band replies). So in a browser=
, you should be able to use Web Push <https://developer.mozilla.org/en-U=
S/docs/Web/API/Push_API> to get an endpoint and encryption key, then reg=
ister this with the JMAP server.=20

If you believe this is a significant security issue, could you suggest a=
ny way of mitigating this while still maintaining compatibility with exi=
sting push servers (as supported by Firefox, Chrome etc.)?

> ----------------------------------------------------------------------=

> COMMENT:
> ----------------------------------------------------------------------=

>=20
> S 1.2.
> > the "URL and Filename safe" Base 64 Alphabet, as defined in section =
5
> > of [RFC4648]. This is the ASCII alphanumeric characters ("A-Za-
> > z0-9"), hyphen ("-"), and underscore ("_").
> >=20
> > These characters are safe to use in almost any context (e.g.,
> > filesystems, URIs, IMAP atoms). For maximum safety, servers should
>=20
> SHOULD?

Yes, will change.

> S 1.7.
> >=20
> > 1.7. The JMAP API model
> >=20
> > JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
> > resources. Implementations MUST support HTTP/1.1, and MAY support
> > later versions. All HTTP requests MUST use [RFC8446] TLS (HTTPS)
>=20
> You need to cite 2818 here too.

OK. I've changed this to:

*All HTTP requests MUST use HTTPS (RFC2818 HTTP over TLS) with TLS 1.2 (=
RFC5246) or later, following the recommendations in RFC7525. Servers SHO=
ULD support TLS 1.3 (RFC8446) or later.*

> S 1.7.
> >=20
> > 1.7. The JMAP API model
> >=20
> > JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
> > resources. Implementations MUST support HTTP/1.1, and MAY support
> > later versions. All HTTP requests MUST use [RFC8446] TLS (HTTPS)
>=20
> At this point, do you think it should be SHOULD for H2

Sure, I have adopted Barry's suggested wording.

> S 1.7.
> > and caching are assumed.
> >=20
> > All HTTP requests MUST be authenticated. Servers MUST conform with
> > the [RFC7235] HTTP Authentication framework to reject requests that
> > fail authentication and inform the client of available authenticatio=
n
> > schemes.
>=20
> This seems pretty restrictive. I read it as forbidding TLS client auth=

> and/or PAKEs.

Sure. I have changed the MUST to a MAY. Is that sufficient? Enumerating =
all "acceptable" authentication schemes would be too limiting, but not m=
entioning it at all seems likely to hamper interoperability.

> S 2.
> > something like "urn:ietf:params:jmap:mail",
> > "urn:ietf:params:jmap:calendars",
> > "urn:ietf:params:jmap:contacts", while the second account would
> > just have the last of these. Attempts to use the methods
> > defined in a specification with one of the accounts that does
> > not contain those data types are rejected with an
>=20
> Is this a MUST-level statement or something else?

As Barry said, this is just describing how the protocol works. Since the=
 definition is elsewhere (referenced just below where you cut off the qu=
ote), I thought this a better stylistic choice here.

> S 2.
> > o *downloadUrl*: "String" The URL endpoint to use when downloading
> > files, in [RFC6570] URI Template (level 1) format. The URL MUST
> > contain variables called "accountId", "blobId", "type" and "name".
> > The use of these variables is described in section 6.2. Due to
> > potential encoding issues with slashes in content types, it is
> > recommended to put the "type" variable in the query section of the
>=20
> Should this be RECOMMENDED?

Yes, will fix.

> S 3.2.
> >=20
> > 3. A "String" *client id*: an arbitrary string from the client to
> > be echoed back with the responses emitted by that method call
> > (a method may return 1 or more responses, as it may make
> > implicit calls to other methods; all responses initiated by
> > this method call get the same client id in the response).
>=20
> Do all the responses have to come back in the same package, so that I
> know when I have received the last one?

Yes. This whole section, as described above in 3.1, is describing the fo=
rmat of the body of an HTTP request and, the format of the response if t=
hat request completes successfully.

> S 3.5.2.
> > and, unless otherwise specified, further processing MUST NOT happen
> > within that method call.
> >=20
> > Any further method calls in the request MUST then be processed as
> > normal. Errors at the method level MUST NOT generate an HTTP-level
> > error.
>=20
> So, what do I do if I want to have method 1 execute and then method 2
> execute only if method 1 succeeded. E.g., copy an object and then
> delete the original? Do two requests? it looks like maybe I can use
> back-references for this, but will that always work?

To cover all cases, you may need to do two HTTP requests, yes. In some s=
ituations you may be able to use back references with the ifInState <htt=
ps://jmap.io/spec-core.html#/set> argument. The copy then delete origina=
l is handled specially, as you saw later.

> S 5.4.
> > to copy them using the _Foo/copy_ method, then once the copy has
> > succeeded, delete the original. The _onSuccessDestroyOriginal_
> > argument allows you to try to do this in one method call, however
> > note that the two different actions are not atomic, and so it is
> > possible for the copy to succeed but the original not to be destroye=
d
> > for some reason.
>=20
> Can the other direction happen?

No. Because the Foo/copy is executed first and succeeds or fails. If it =
fails, the Foo/set call to destroy the original never happens, so you ca=
nnot have the copy not succeed but the original still destroyed.

> S 8.1.
> > 8.1. Transport confidentiality
> >=20
> > All HTTP requests MUST use [RFC8446] TLS (https) transport to ensure=

> > the confidentiality and integrity of data sent and received via JMAP=
.
> > Clients MUST validate TLS certificate chains to protect against man-=

> > in-the-middle attacks.
>=20
> You should cite 7525. Also, you need to specify which versions are
> acceptbale.

I have amended this to match the earlier section requiring TLS:

*To ensure the confidentiality and integrity of data sent and received v=
ia JMAP, all HTTP requests MUST use HTTPS ([@!RFC2818] HTTP over TLS) wi=
th TLS 1.2 ([RFC5246]) or later, following the recommendations in [@!RFC=
7525]. Servers SHOULD support TLS 1.3 ([@!RFC8446]) or later.*

Does that sound reasonable? (We could make TLS 1.3 or later be required,=
 although RFC7525 explicitly says its recommendations may not be valid f=
or versions of TLS after 1.2=E2=80=A6)

Thanks for all the detailed feedback.
Neil.
--f779b38205f74ca390b194511d3dd2e0
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Sun, 17=
 Feb 2019, at 11:17, Eric Rescorla wrote:<br></div><blockquote type=3D"c=
ite" id=3D"fastmail-quoted"><div>DETAIL<br></div><div>S 2.<br></div><div=
>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
"urn:ietf:params:jmap:contacts", while the second account would<br></div=
><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; just have the last of these.&nbsp; Attempts to use the methods<br><=
/div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp; defined in a specification with one of the accounts that does<b=
r></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; not contain those data types are rejected with an<br></div><=
div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; _accountNotSupportedByMethod_ error (see section 3.5.2: method-<br></=
div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; level errors).<br></div><div><br></div><div>What happens if this=
 changes after the user has logged in. So, for<br></div><div>instance, I=
 log in and am told that account X has contacts, but later<br></div><div=
>calendars get added. Do requests have to fail?<br></div></blockquote><d=
iv><br></div><div>Requests as a whole would not fail, no. In the case of=
 just now having access to calendars for account X, methods operating on=
 contacts would behave exactly as before. However, the&nbsp;<code style=3D=
"border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-ri=
ght-radius:3px;border-bottom-left-radius:3px;border-top-width:1px;border=
-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-to=
p-style:solid;border-right-style:solid;border-bottom-style:solid;border-=
left-style:solid;border-top-color:rgb(204, 204, 204);border-right-color:=
rgb(204, 204, 204);border-bottom-color:rgb(204, 204, 204);border-left-co=
lor:rgb(204, 204, 204);border-image-source:initial;border-image-slice:in=
itial;border-image-width:initial;border-image-outset:initial;border-imag=
e-repeat:initial;padding-top:1px;padding-right:3px;padding-bottom:1px;pa=
dding-left:3px;background-image:initial;background-position-x:initial;ba=
ckground-position-y:initial;background-size:initial;background-repeat:in=
itial;background-repeat:initial;background-attachment:initial;background=
-origin:initial;background-clip:initial;background-color:rgb(246, 246, 2=
46);font-family:menlo, consolas, monospace;font-size:90%;">sessionState<=
/code>&nbsp;property of the API responses will change so the client will=
 know it needs to refetch the session information (and thus discover it =
now has more access). Of course in the inverse case, say if you used to =
have access to contacts and calendars in account X and now only have acc=
ess to contacts, then calling a calendar method for account X would then=
 return an <code style=3D"border-top-left-radius:3px;border-top-right-ra=
dius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;bo=
rder-top-width:1px;border-right-width:1px;border-bottom-width:1px;border=
-left-width:1px;border-top-style:solid;border-right-style:solid;border-b=
ottom-style:solid;border-left-style:solid;border-top-color:rgb(204, 204,=
 204);border-right-color:rgb(204, 204, 204);border-bottom-color:rgb(204,=
 204, 204);border-left-color:rgb(204, 204, 204);border-image-source:init=
ial;border-image-slice:initial;border-image-width:initial;border-image-o=
utset:initial;border-image-repeat:initial;padding-top:1px;padding-right:=
3px;padding-bottom:1px;padding-left:3px;background-image:initial;backgro=
und-position-x:initial;background-position-y:initial;background-size:ini=
tial;background-repeat:initial;background-repeat:initial;background-atta=
chment:initial;background-origin:initial;background-clip:initial;backgro=
und-color:rgb(246, 246, 246);font-family:menlo, consolas, monospace;font=
-size:90%;">accountNotSupportedByMethod</code> error.<br></div><div><br>=
</div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 7.2.2.<br>=
</div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *pushSubscriptionI=
d*: "String" The id of the push subscription<br></div><div>&gt;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that was created.<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
o&nbsp; *verificationCode*: "String" The verification code to add to the=
<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push=
 subscription.&nbsp; This MUST contain sufficient entropy to avoid<br></=
div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the client=
 being able to brute force guess the code.<br></div><div><br></div><div>=
This doesn't actually guarantee permission. Consider the case where<br><=
/div><div>the client provides a push URL for some sort of open server up=
load<br></div><div>endpoint. The client could then read the verification=
 code off that<br></div><div>endpoint and confirm the push subscription.=
 Off the top of my head,<br></div><div>requiring the push endpoint to re=
spond in-band with a function of the<br></div><div>code would be better.=
<br></div></blockquote><div><br></div><div>This would kill interoperabil=
ity. The current specification is designed to work with a push server th=
at supports <a href=3D"https://tools.ietf.org/html/rfc8030">RFC8030</a>,=
 but doesn't necessarily know anything about the JMAP server (so cannot =
do custom processing or in-band replies). So in a browser, you should be=
 able to use <a href=3D"https://developer.mozilla.org/en-US/docs/Web/API=
/Push_API">Web Push</a>&nbsp;to get an endpoint and encryption key, then=
 register this with the JMAP server. <br></div><div><br></div><div>If yo=
u believe this is a significant security issue, could you suggest any wa=
y of mitigating this while still maintaining compatibility with existing=
 push servers (as supported by Firefox, Chrome etc.)?<br></div><div><br>=
</div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>------------=
----------------------------------------------------------<br></div><div=
>COMMENT:<br></div><div>------------------------------------------------=
----------------------<br></div><div><br></div><div>S 1.2.<br></div><div=
>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the "URL and Filename safe" Base 64 =
Alphabet, as defined in section 5<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; of [RFC4648].&nbsp; This is the ASCII alphanumeric characters=
 ("A-Za-<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z0-9"), hyphen=
 ("-"), and underscore ("_").<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></=
div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; These characters are safe to=
 use in almost any context (e.g.,<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; filesystems, URIs, IMAP atoms).&nbsp; For maximum safety, ser=
vers should<br></div><div><br></div><div>SHOULD?<br></div></blockquote><=
div><br></div><div>Yes, will change.<br></div><div><br></div><blockquote=
 type=3D"cite" id=3D"fastmail-quoted"><div>S 1.7.<br></div><div>&gt;&nbs=
p;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp; 1.7.&nbsp; The JMAP API mo=
del<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; JMAP uses HTTP [RFC7230] to expose API, Push, Upload a=
nd Download<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resources.&=
nbsp; Implementations MUST support HTTP/1.1, and MAY support<br></div><d=
iv>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; later versions.&nbsp; All HTTP req=
uests MUST use [RFC8446] TLS (HTTPS)<br></div><div><br></div><div>You ne=
ed to cite 2818 here too.<br></div></blockquote><div><br></div><div>OK. =
I've changed this to:<br></div><div><br></div><div><i>All HTTP requests =
MUST use HTTPS (RFC2818 HTTP over TLS) with TLS 1.2 (RFC5246) or later, =
following the recommendations in RFC7525. Servers SHOULD support TLS 1.3=
 (RFC8446) or later.</i><br></div><div><br></div><blockquote type=3D"cit=
e" id=3D"fastmail-quoted"><div>S 1.7.<br></div><div>&gt;&nbsp;&nbsp;&nbs=
p;<br></div><div>&gt;&nbsp;&nbsp; 1.7.&nbsp; The JMAP API model<br></div=
><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download<=
br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resources.&nbsp; Implem=
entations MUST support HTTP/1.1, and MAY support<br></div><div>&gt;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; later versions.&nbsp; All HTTP requests MUST u=
se [RFC8446] TLS (HTTPS)<br></div><div><br></div><div>At this point, do =
you think it should be SHOULD for H2<br></div></blockquote><div><br></di=
v><div>Sure, I have adopted Barry's suggested wording.<br></div><div><br=
></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 1.7.<br><=
/div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and caching are assumed.<br=
></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; All HTTP requests MUST be authenticated.&nbsp; Servers MUST =
conform with<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the [RFC72=
35] HTTP Authentication framework to reject requests that<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fail authentication and inform the cl=
ient of available authentication<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; schemes.<br></div><div><br></div><div>This seems pretty restri=
ctive. I read it as forbidding TLS client auth<br></div><div>and/or PAKE=
s.<br></div></blockquote><div><br></div><div>Sure. I have changed the MU=
ST to a MAY. Is that sufficient? Enumerating all "acceptable" authentica=
tion schemes would be too limiting, but not mentioning it at all seems l=
ikely to hamper interoperability.<br></div><div><br></div><blockquote ty=
pe=3D"cite" id=3D"fastmail-quoted"><div>S 2.<br></div><div>&gt;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; something like=
 "urn:ietf:params:jmap:mail",<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "urn:ietf:params:jmap:calenda=
rs",<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; "urn:ietf:params:jmap:contacts", while the second acco=
unt would<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; just have the last of these.&nbsp; Attempts to us=
e the methods<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp; defined in a specification with one of the ac=
counts that does<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not contain those data types are rejected =
with an<br></div><div><br></div><div>Is this a MUST-level statement or s=
omething else?<br></div></blockquote><div><br></div><div>As Barry said, =
this is just describing how the protocol works. Since the definition is =
elsewhere (referenced just below where you cut off the quote), I thought=
 this a better stylistic choice here.<br></div><div><br></div><blockquot=
e type=3D"cite" id=3D"fastmail-quoted"><div>S 2.<br></div><div>&gt;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *downloadUrl*: "String" The URL endpoi=
nt to use when downloading<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; files, in [RFC6570] URI Template (level 1) format.=
&nbsp; The URL MUST<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; contain variables called "accountId", "blobId", "type" an=
d "name".<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; The use of these variables is described in section 6.2.&nbsp; Due t=
o<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pot=
ential encoding issues with slashes in content types, it is<br></div><di=
v>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recommended to pu=
t the "type" variable in the query section of the<br></div><div><br></di=
v><div>Should this be RECOMMENDED?<br></div></blockquote><div><br></div>=
<div>Yes, will fix.<br></div><div><br></div><blockquote type=3D"cite" id=
=3D"fastmail-quoted"><div>S 3.2.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br=
></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.&nbsp=
; A "String" *client id*: an arbitrary string from the client to<br></di=
v><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; be echoed back with the responses emitted by that method cal=
l<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; (a method may return 1 or more responses, as it may=
 make<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; implicit calls to other methods; all responses =
initiated by<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this method call get the same client id =
in the response).<br></div><div><br></div><div>Do all the responses have=
 to come back in the same package, so that I<br></div><div>know when I h=
ave received the last one?<br></div></blockquote><div><br></div><div>Yes=
. This whole section, as described above in 3.1, is describing the forma=
t of the body of an HTTP request and, the format of the response if that=
 request completes successfully.<br></div><div><br></div><blockquote typ=
e=3D"cite" id=3D"fastmail-quoted"><div>S 3.5.2.<br></div><div>&gt;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; and, unless otherwise specified, further proces=
sing MUST NOT happen<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wi=
thin that method call.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><di=
v>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Any further method calls in the req=
uest MUST then be processed as<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; normal.&nbsp; Errors at the method level MUST NOT generate an HT=
TP-level<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error.<br></di=
v><div><br></div><div>So, what do I do if I want to have method 1 execut=
e and then method 2<br></div><div>execute only if method 1 succeeded. E.=
g., copy an object and then<br></div><div>delete the original? Do two re=
quests? it looks like maybe I can use<br></div><div>back-references for =
this, but will that always work?<br></div></blockquote><div><br></div><d=
iv>To cover all cases, you may need to do two HTTP requests, yes. In som=
e situations you may be able to use back references with the <a href=3D"=
https://jmap.io/spec-core.html#/set">ifInState</a> argument. The copy th=
en delete original is handled specially, as you saw later.<br></div><div=
><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 5.4.<=
br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to copy them using the =
_Foo/copy_ method, then once the copy has<br></div><div>&gt;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp; succeeded, delete the original.&nbsp; The _onSuccessD=
estroyOriginal_<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; argumen=
t allows you to try to do this in one method call, however<br></div><div=
>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; note that the two different actions =
are not atomic, and so it is<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; possible for the copy to succeed but the original not to be destro=
yed<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for some reason.<br=
></div><div><br></div><div>Can the other direction happen?<br></div></bl=
ockquote><div><br></div><div>No. Because the Foo/copy is executed first =
and succeeds or fails. If it fails, the Foo/set call to destroy the orig=
inal never happens, so you cannot have the copy not succeed but the orig=
inal still destroyed.<br></div><div><br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div>S 8.1.<br></div><div>&gt;&nbsp;&nbsp; 8.1.&n=
bsp; Transport confidentiality<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br><=
/div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; All HTTP requests MUST use =
[RFC8446] TLS (https) transport to ensure<br></div><div>&gt;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp; the confidentiality and integrity of data sent and re=
ceived via JMAP.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Client=
s MUST validate TLS certificate chains to protect against man-<br></div>=
<div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in-the-middle attacks.<br></div>=
<div><br></div><div>You should cite 7525. Also, you need to specify whic=
h versions are<br></div><div>acceptbale.<br></div></blockquote><div><br>=
</div><div>I have amended this to match the earlier section requiring TL=
S:<br></div><div><br></div><div><i>To ensure the confidentiality and int=
egrity of data sent and received via JMAP, all HTTP requests MUST use HT=
TPS ([@!RFC2818] HTTP over TLS) with TLS 1.2 ([RFC5246]) or later, follo=
wing the recommendations in [@!RFC7525]. Servers SHOULD support TLS 1.3 =
([@!RFC8446]) or later.</i><br></div><div><br></div><div>Does that sound=
 reasonable? (We could make TLS 1.3 or later be required, although RFC75=
25 explicitly says its recommendations may not be valid for versions of =
TLS after 1.2=E2=80=A6)<br></div><div><br></div><div>Thanks for all the =
detailed feedback.<br></div><div>Neil.<br></div></body></html>
--f779b38205f74ca390b194511d3dd2e0--


From nobody Mon Feb 18 20:42:26 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 86601130E78 for <jmap@ietfa.amsl.com>; Mon, 18 Feb 2019 20:42:22 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level: 
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 cdIffujzO_JH for <jmap@ietfa.amsl.com>; Mon, 18 Feb 2019 20:42:19 -0800 (PST)
Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id CA7CF130E67 for <jmap@ietf.org>; Mon, 18 Feb 2019 20:42:15 -0800 (PST)
Received: by mail-lj1-x232.google.com with SMTP id j19so15457499ljg.5 for <jmap@ietf.org>; Mon, 18 Feb 2019 20:42:15 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=pTnkXulsvhAen867Zz+Kp1QdXrFVZvfSzlaXMqnk6O8=; b=DCHFnckQDgfyxAE17j63s4YvFMWmXGbwVXsD19Yu9aHEQttNJDJXoSsI/sD+etBeNb aUl9LjGtSOELEe9bbZnDkW02JEZnVEri9hw3QpOJ98bU/WngeWWetjxnzntkBY4VDmYH W9IGEp2girosDjXS5yshRxuAPObHwzIzXm37JeDn9+RLB4z/WbR1WccZDYDy+jcOD5kH kQUgw+Yrq+8N2zMYxHDCM/+fiWoQc5wSzLNqoW7hr4ylY0521Pn20CpoyRo5ujU9QVUR Xyb7luCsjVS2NeA7vkBmxPN4vqWQ2ge6bfHuPDIhzCYEXz5srUjzKlnxPNIn17WPvfnm kzUg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=pTnkXulsvhAen867Zz+Kp1QdXrFVZvfSzlaXMqnk6O8=; b=OSXvr5TXYyeWYXG2EJk21Edr1bmfNC/ORzRIrSfBz6B4g2EdcIV83cl6pBmo+xb20U ywE2gfH78HLouw0a2eKwhwcj3F8mxiig8On1a/zbzn0KHd2l8X+CiCPNRFTdTNmy9tR9 4sjBKK234/k2STl6O1i/Nlxkfof8n1FV02LfqNryhnqIjokCAeSJYUpF2GveVmVQ9DrV qcVduNnIw4ReHr4NSTOCXG/fYFxBjUK85loEXbckTWCXAQ3X4Y1209j0+SfxvLcXS5gZ +kALbuwrWCz5ys2j6/II3FZUMKA3jZjGtG+FszEGUPib6hmKq8YON42wbv1Odgo20zNV RNUw==
X-Gm-Message-State: AHQUAuamKC8tUZYdgoUWwI5Y2jHqJpV7ELJW5oDl839ojrjaJ2C3FR3V XXHgG57aG1SrlDccOYBnVMi8hfO/fJ44PzDUBP4/Eg==
X-Google-Smtp-Source: AHgI3IZdh7NTfPHZLYOVfJSi2kgwGQFY5VZ8k1/UovyI9l2D4x2kLWClv7kKOH45/Hko/S4FUoe2oUw508yRgb6xKxg=
X-Received: by 2002:a2e:4d7:: with SMTP id a84mr13409396ljf.86.1550551333854;  Mon, 18 Feb 2019 20:42:13 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com>
In-Reply-To: <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Mon, 18 Feb 2019 20:41:36 -0800
Message-ID: <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>, Martin Thomson <martin.thomson@gmail.com>
Cc: iesg <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="00000000000075fd03058237dda5"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/sQzM7FaywMvBMXPOjdcdblNV9kE>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 04:42:23 -0000

--00000000000075fd03058237dda5
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, Feb 18, 2019 at 7:27 PM Neil Jenkins <neilj@fastmailteam.com> wrote=
:

> On Sun, 17 Feb 2019, at 11:17, Eric Rescorla wrote:
>
> DETAIL
> S 2.
> >            "urn:ietf:params:jmap:contacts", while the second account
> would
> >            just have the last of these.  Attempts to use the methods
> >            defined in a specification with one of the accounts that doe=
s
> >            not contain those data types are rejected with an
> >            _accountNotSupportedByMethod_ error (see section 3.5.2:
> method-
> >            level errors).
>
> What happens if this changes after the user has logged in. So, for
> instance, I log in and am told that account X has contacts, but later
> calendars get added. Do requests have to fail?
>
>
> Requests as a whole would not fail, no. In the case of just now having
> access to calendars for account X, methods operating on contacts would
> behave exactly as before. However, the sessionState property of the API
> responses will change so the client will know it needs to refetch the
> session information (and thus discover it now has more access). Of course
> in the inverse case, say if you used to have access to contacts and
> calendars in account X and now only have access to contacts, then calling=
 a
> calendar method for account X would then return an
> accountNotSupportedByMethod error.
>

OK. Perhaps you could clarify this in the text.


S 7.2.2.
> >      o  *pushSubscriptionId*: "String" The id of the push subscription
> >         that was created.
> >
> >      o  *verificationCode*: "String" The verification code to add to th=
e
> >         push subscription.  This MUST contain sufficient entropy to avo=
id
> >         the client being able to brute force guess the code.
>
> This doesn't actually guarantee permission. Consider the case where
> the client provides a push URL for some sort of open server upload
> endpoint. The client could then read the verification code off that
> endpoint and confirm the push subscription. Off the top of my head,
> requiring the push endpoint to respond in-band with a function of the
> code would be better.
>
>
> This would kill interoperability. The current specification is designed t=
o
> work with a push server that supports RFC8030
> <https://tools.ietf.org/html/rfc8030>, but doesn't necessarily know
> anything about the JMAP server (so cannot do custom processing or in-band
> replies). So in a browser, you should be able to use Web Push
> <https://developer.mozilla.org/en-US/docs/Web/API/Push_API> to get an
> endpoint and encryption key, then register this with the JMAP server.
>
> If you believe this is a significant security issue, could you suggest an=
y
> way of mitigating this while still maintaining compatibility with existin=
g
> push servers (as supported by Firefox, Chrome etc.)?
>

I'm not sure if it's a significant security issue. My understanding is that
RFC 8030 endpoints don't normally involve a round-trip check. CCing Martin
Thomson for his thougths.


> S 1.7.
> >
> >   1.7.  The JMAP API model
> >
> >      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and Download
> >      resources.  Implementations MUST support HTTP/1.1, and MAY support
> >      later versions.  All HTTP requests MUST use [RFC8446] TLS (HTTPS)
>
> You need to cite 2818 here too.
>
>
> OK. I've changed this to:
>
> *All HTTP requests MUST use HTTPS (RFC2818 HTTP over TLS) with TLS 1.2
> (RFC5246) or later, following the recommendations in RFC7525. Servers
> SHOULD support TLS 1.3 (RFC8446) or later.*
>

LGTM


> S 1.7.
>
> >      and caching are assumed.
> >
> >      All HTTP requests MUST be authenticated.  Servers MUST conform wit=
h
> >      the [RFC7235] HTTP Authentication framework to reject requests tha=
t
> >      fail authentication and inform the client of available
> authentication
> >      schemes.
>
> This seems pretty restrictive. I read it as forbidding TLS client auth
> and/or PAKEs.
>
>
> Sure. I have changed the MUST to a MAY. Is that sufficient? Enumerating
> all "acceptable" authentication schemes would be too limiting, but not
> mentioning it at all seems likely to hamper interoperability.
>

I'm not sure quite what you're trying to achieve. I think requiring
authentication is good, but I'm not sure why you need to require any
specific type of authentication.


> S 2.
> >            something like "urn:ietf:params:jmap:mail",
> >            "urn:ietf:params:jmap:calendars",
> >            "urn:ietf:params:jmap:contacts", while the second account
> would
> >            just have the last of these.  Attempts to use the methods
> >            defined in a specification with one of the accounts that doe=
s
> >            not contain those data types are rejected with an
>
> Is this a MUST-level statement or something else?
>
>
> As Barry said, this is just describing how the protocol works. Since the
> definition is elsewhere (referenced just below where you cut off the
> quote), I thought this a better stylistic choice here.
>

OK.


S 3.2.
> >
> >         3.  A "String" *client id*: an arbitrary string from the client
> to
> >             be echoed back with the responses emitted by that method ca=
ll
> >             (a method may return 1 or more responses, as it may make
> >             implicit calls to other methods; all responses initiated by
> >             this method call get the same client id in the response).
>
> Do all the responses have to come back in the same package, so that I
> know when I have received the last one?
>
>
> Yes. This whole section, as described above in 3.1, is describing the
> format of the body of an HTTP request and, the format of the response if
> that request completes successfully.
>

OK.  Saying that somewhere would have helped me.

S 5.4.
> >      to copy them using the _Foo/copy_ method, then once the copy has
> >      succeeded, delete the original.  The _onSuccessDestroyOriginal_
> >      argument allows you to try to do this in one method call, however
> >      note that the two different actions are not atomic, and so it is
> >      possible for the copy to succeed but the original not to be
> destroyed
> >      for some reason.
>
> Can the other direction happen?
>
>
> No. Because the Foo/copy is executed first and succeeds or fails. If it
> fails, the Foo/set call to destroy the original never happens, so you
> cannot have the copy not succeed but the original still destroyed.
>

OK.


> S 8.1.
> >   8.1.  Transport confidentiality
> >
> >      All HTTP requests MUST use [RFC8446] TLS (https) transport to ensu=
re
> >      the confidentiality and integrity of data sent and received via
> JMAP.
> >      Clients MUST validate TLS certificate chains to protect against ma=
n-
> >      in-the-middle attacks.
>
> You should cite 7525. Also, you need to specify which versions are
> acceptbale.
>
>
> I have amended this to match the earlier section requiring TLS:
>
> *To ensure the confidentiality and integrity of data sent and received vi=
a
> JMAP, all HTTP requests MUST use HTTPS ([@!RFC2818] HTTP over TLS) with T=
LS
> 1.2 ([RFC5246]) or later, following the recommendations in [@!RFC7525].
> Servers SHOULD support TLS 1.3 ([@!RFC8446]) or later.*
>
> Does that sound reasonable? (We could make TLS 1.3 or later be required,
> although RFC7525 explicitly says its recommendations may not be valid for
> versions of TLS after 1.2=E2=80=A6)
>

Yep, this LGTM.

-Ekr


> Thanks for all the detailed feedback.
> Neil.
>

--00000000000075fd03058237dda5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Mon, Feb 18, 2019 at 7:27 PM Neil =
Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.com">neilj@fastmailteam.co=
m</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
><u></u><div><div>On Sun, 17 Feb 2019, at 11:17, Eric Rescorla wrote:<br></=
div><blockquote type=3D"cite" id=3D"gmail-m_-3091712663328825686fastmail-qu=
oted"><div>DETAIL<br></div><div>S 2.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &quot;urn:ietf:params:jmap=
:contacts&quot;, while the second account would<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 just have the las=
t of these.=C2=A0 Attempts to use the methods<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 defined in a spec=
ification with one of the accounts that does<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 not contain those da=
ta types are rejected with an<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 _accountNotSupportedByMethod_ error=
 (see section 3.5.2: method-<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 level errors).<br></div><div><br></=
div><div>What happens if this changes after the user has logged in. So, for=
<br></div><div>instance, I log in and am told that account X has contacts, =
but later<br></div><div>calendars get added. Do requests have to fail?<br><=
/div></blockquote><div><br></div><div>Requests as a whole would not fail, n=
o. In the case of just now having access to calendars for account X, method=
s operating on contacts would behave exactly as before. However, the=C2=A0<=
code style=3D"border-radius:3px;border-width:1px;border-style:solid;border-=
color:rgb(204,204,204);padding:1px 3px;background-image:initial;background-=
size:initial;background-repeat:initial;background-origin:initial;background=
-clip:initial;background-color:rgb(246,246,246);font-family:menlo,consolas,=
monospace;font-size:90%">sessionState</code>=C2=A0property of the API respo=
nses will change so the client will know it needs to refetch the session in=
formation (and thus discover it now has more access). Of course in the inve=
rse case, say if you used to have access to contacts and calendars in accou=
nt X and now only have access to contacts, then calling a calendar method f=
or account X would then return an <code style=3D"border-radius:3px;border-w=
idth:1px;border-style:solid;border-color:rgb(204,204,204);padding:1px 3px;b=
ackground-image:initial;background-size:initial;background-repeat:initial;b=
ackground-origin:initial;background-clip:initial;background-color:rgb(246,2=
46,246);font-family:menlo,consolas,monospace;font-size:90%">accountNotSuppo=
rtedByMethod</code> error.<br></div></div></blockquote><div><br></div><div>=
OK. Perhaps you could clarify this in the text.</div><div><br></div><div><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><blockquote =
type=3D"cite" id=3D"gmail-m_-3091712663328825686fastmail-quoted"><div>S 7.2=
.2.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 *pushSubscript=
ionId*: &quot;String&quot; The id of the push subscription<br></div><div>&g=
t;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 that was created.<br></d=
iv><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 o=C2=A0 *verificationCode*: &quot;String&quot; The verification code=
 to add to the<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 push subscription.=C2=A0 This MUST contain sufficient entropy to avo=
id<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 the c=
lient being able to brute force guess the code.<br></div><div><br></div><di=
v>This doesn&#39;t actually guarantee permission. Consider the case where<b=
r></div><div>the client provides a push URL for some sort of open server up=
load<br></div><div>endpoint. The client could then read the verification co=
de off that<br></div><div>endpoint and confirm the push subscription. Off t=
he top of my head,<br></div><div>requiring the push endpoint to respond in-=
band with a function of the<br></div><div>code would be better.<br></div></=
blockquote><div><br></div><div>This would kill interoperability. The curren=
t specification is designed to work with a push server that supports <a hre=
f=3D"https://tools.ietf.org/html/rfc8030" target=3D"_blank">RFC8030</a>, bu=
t doesn&#39;t necessarily know anything about the JMAP server (so cannot do=
 custom processing or in-band replies). So in a browser, you should be able=
 to use <a href=3D"https://developer.mozilla.org/en-US/docs/Web/API/Push_AP=
I" target=3D"_blank">Web Push</a>=C2=A0to get an endpoint and encryption ke=
y, then register this with the JMAP server. <br></div><div><br></div><div>I=
f you believe this is a significant security issue, could you suggest any w=
ay of mitigating this while still maintaining compatibility with existing p=
ush servers (as supported by Firefox, Chrome etc.)?<br></div></div></blockq=
uote><div><br></div><div>I&#39;m not sure if it&#39;s a significant securit=
y issue. My understanding is that RFC 8030 endpoints don&#39;t normally inv=
olve a round-trip check. CCing Martin Thomson for his thougths.</div><div><=
br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e=
x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div></div>=
<br><blockquote type=3D"cite" id=3D"gmail-m_-3091712663328825686fastmail-qu=
oted"><div>S 1.7.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>&gt;=
=C2=A0=C2=A0 1.7.=C2=A0 The JMAP API model<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 JMAP uses HTTP [RFC=
7230] to expose API, Push, Upload and Download<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 resources.=C2=A0 Implementations MUST support HTTP/1.=
1, and MAY support<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 later v=
ersions.=C2=A0 All HTTP requests MUST use [RFC8446] TLS (HTTPS)<br></div><d=
iv><br></div><div>You need to cite 2818 here too.<br></div></blockquote><di=
v><br></div><div>OK. I&#39;ve changed this to:<br></div><div><br></div><div=
><i>All HTTP requests MUST use HTTPS (RFC2818 HTTP over TLS) with TLS 1.2 (=
RFC5246) or later, following the recommendations in RFC7525. Servers SHOULD=
 support TLS 1.3 (RFC8446) or later.</i></div></div></blockquote><div><br><=
/div><div>LGTM</div><div> <br></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><div><div><br></div>S 1.7.<br><blockquote type=3D"cite" id=3D"gm=
ail-m_-3091712663328825686fastmail-quoted"><div>&gt;=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 and caching are assumed.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br>=
</div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 All HTTP requests MUST be aut=
henticated.=C2=A0 Servers MUST conform with<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 the [RFC7235] HTTP Authentication framework to reject re=
quests that<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fail authentic=
ation and inform the client of available authentication<br></div><div>&gt;=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 schemes.<br></div><div><br></div><div>This s=
eems pretty restrictive. I read it as forbidding TLS client auth<br></div><=
div>and/or PAKEs.<br></div></blockquote><div><br></div><div>Sure. I have ch=
anged the MUST to a MAY. Is that sufficient? Enumerating all &quot;acceptab=
le&quot; authentication schemes would be too limiting, but not mentioning i=
t at all seems likely to hamper interoperability.<br></div></div></blockquo=
te><div><br></div><div>I&#39;m not sure quite what you&#39;re trying to ach=
ieve. I think requiring authentication is good, but I&#39;m not sure why yo=
u need to require any specific type of authentication.</div><div> <br></div=
><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border=
-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div></div><div><br=
></div><blockquote type=3D"cite" id=3D"gmail-m_-3091712663328825686fastmail=
-quoted"><div>S 2.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 something like &quot;urn:ietf:params:jmap:ma=
il&quot;,<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 &quot;urn:ietf:params:jmap:calendars&quot;,<br></div>=
<div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
 &quot;urn:ietf:params:jmap:contacts&quot;, while the second account would<=
br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 just have the last of these.=C2=A0 Attempts to use the methods<br=
></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 defined in a specification with one of the accounts that does<br>=
</div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 not contain those data types are rejected with an<br></div><div><br>=
</div><div>Is this a MUST-level statement or something else?<br></div></blo=
ckquote><div><br></div><div>As Barry said, this is just describing how the =
protocol works. Since the definition is elsewhere (referenced just below wh=
ere you cut off the quote), I thought this a better stylistic choice here.<=
br></div></div></blockquote><div><br></div><div>OK.</div><div><br> </div><d=
iv><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px =
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div></=
div><blockquote type=3D"cite" id=3D"gmail-m_-3091712663328825686fastmail-qu=
oted"><div>S 3.2.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>&gt;=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3.=C2=A0 A &quot;String&qu=
ot; *client id*: an arbitrary string from the client to<br></div><div>&gt;=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 be=
 echoed back with the responses emitted by that method call<br></div><div>&=
gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
 (a method may return 1 or more responses, as it may make<br></div><div>&gt=
;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 i=
mplicit calls to other methods; all responses initiated by<br></div><div>&g=
t;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =
this method call get the same client id in the response).<br></div><div><br=
></div><div>Do all the responses have to come back in the same package, so =
that I<br></div><div>know when I have received the last one?<br></div></blo=
ckquote><div><br></div><div>Yes. This whole section, as described above in =
3.1, is describing the format of the body of an HTTP request and, the forma=
t of the response if that request completes successfully.<br></div></div></=
blockquote><div><br></div><div>OK.=C2=A0 Saying that somewhere would have h=
elped me.</div><div> <br></div><blockquote class=3D"gmail_quote" style=3D"m=
argin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left=
:1ex"><div><div></div><blockquote type=3D"cite" id=3D"gmail-m_-309171266332=
8825686fastmail-quoted"><div>S 5.4.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 to copy them using the _Foo/copy_ method, then once the copy has<=
br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 succeeded, delete the orig=
inal.=C2=A0 The _onSuccessDestroyOriginal_<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 argument allows you to try to do this in one method call=
, however<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 note that the tw=
o different actions are not atomic, and so it is<br></div><div>&gt;=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0 possible for the copy to succeed but the original =
not to be destroyed<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for so=
me reason.<br></div><div><br></div><div>Can the other direction happen?<br>=
</div></blockquote><div><br></div><div>No. Because the Foo/copy is executed=
 first and succeeds or fails. If it fails, the Foo/set call to destroy the =
original never happens, so you cannot have the copy not succeed but the ori=
ginal still destroyed.<br></div></div></blockquote><div><br></div><div>OK.<=
/div><div> <br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div=
><div><br></div><blockquote type=3D"cite" id=3D"gmail-m_-309171266332882568=
6fastmail-quoted"><div>S 8.1.<br></div><div>&gt;=C2=A0=C2=A0 8.1.=C2=A0 Tra=
nsport confidentiality<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>&=
gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 All HTTP requests MUST use [RFC8446] TLS =
(https) transport to ensure<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 the confidentiality and integrity of data sent and received via JMAP.<b=
r></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Clients MUST validate TLS c=
ertificate chains to protect against man-<br></div><div>&gt;=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 in-the-middle attacks.<br></div><div><br></div><div>You sho=
uld cite 7525. Also, you need to specify which versions are<br></div><div>a=
cceptbale.<br></div></blockquote><div><br></div><div>I have amended this to=
 match the earlier section requiring TLS:<br></div><div><br></div><div><i>T=
o ensure the confidentiality and integrity of data sent and received via JM=
AP, all HTTP requests MUST use HTTPS ([@!RFC2818] HTTP over TLS) with TLS 1=
.2 ([RFC5246]) or later, following the recommendations in [@!RFC7525]. Serv=
ers SHOULD support TLS 1.3 ([@!RFC8446]) or later.</i><br></div><div><br></=
div><div>Does that sound reasonable? (We could make TLS 1.3 or later be req=
uired, although RFC7525 explicitly says its recommendations may not be vali=
d for versions of TLS after 1.2=E2=80=A6)<br></div></div></blockquote><div>=
<br></div><div>Yep, this LGTM.</div><div><br></div><div>-Ekr</div><div><br>=
</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;b=
order-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div></div><di=
v><br></div><div>Thanks for all the detailed feedback.<br></div><div>Neil.<=
br></div></div></blockquote></div></div>

--00000000000075fd03058237dda5--


From nobody Mon Feb 18 22:29:44 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1585F130E74; Mon, 18 Feb 2019 22:29:37 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=GqCd4pCa; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=OkbiZ8ss
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 J_2RpmRqdW35; Mon, 18 Feb 2019 22:29:34 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 68C2C130E71; Mon, 18 Feb 2019 22:29:34 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 5769B22E2E; Tue, 19 Feb 2019 01:29:33 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Tue, 19 Feb 2019 01:29:33 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=5aRpS1+ACbT/ayf/mZL3S7wEX xuqr93TcKm3/AIk3qA=; b=GqCd4pCa56DRM3THI2z1nL3DlmjY2AGzWcKnAWZoB DIBK6N54ytLJAQtNbmsLM/cqRfG/RpCAtLI3TWlvYFW6fSmR6JveDK3Pun7dwPhC gLA/e5RvIHukfMNZKjttaam3fMqNYdXyN1c3u+KiXepJ5wQIYP80Df0qeC3vam/U NWrINuPlJYZn5mHcuyJNiinRnKy+2w3CeVx0D0KrEBqeSO5QnaxWRKyaU+6v8e/K v1CQ4W1PlDyxzeNInhKrzTjcgmB8YGkH1CQsVy0d6Pr66pXD0dpYaISQdOYgxoqb iKkCJumdNmYjqYDTo0twwJFJPqHAgmD2h6YW3nIKjqkvA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=5aRpS1+ACbT/ayf/m ZL3S7wEXxuqr93TcKm3/AIk3qA=; b=OkbiZ8ssnpz01ktpR9ajbigsoBu3rg0Uc CVXo+og6lJa7ws9Y2rNU4hk5r5Ilk8kInsx26U19tZp06QdLJKY7K0JT7UNmVUW5 ah1AQ0HFPETAog60JeIda9ppNxXGSv6zLh4DUk3lWakT61Nc+C15SZ7DgW0d1vVh 07YgFI9LSooBrjqbKdtjWbD837+cETW0QwWDj31E2jQOOK4AxXzuCEOkvZfOZZ/I 8YTijSldc7ptCqnwhtwRowJuQoWW4h2LxZpuPRtYV4QQYs6y1G3KoJ/6N1phLJvI qHOpnTViwTCVEXC0/ljoS2t5Qh234Wqh8oO/4VpKVf6f2NUvPNVCQ==
X-ME-Sender: <xms:TKJrXGlcnkTI5ucYIck4Ae1JYeajeK4SydKkY2r_dYOx9AB8J34YRA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdefgdduleculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:TKJrXG6krhY8Hy3qDSm0iaOZ9YG8YPPOUU8k5HFCwAz0x57w9Q7mlA> <xmx:TKJrXNsz642Z1VyDixz-FBUjHbq0bcm-k7WmEchQRtF6ysIqcVfrTg> <xmx:TKJrXGVVgpbp7ITUBQtFPTr425C95sMx_WEIxhYr-6Hq9CJ09PwArQ> <xmx:TaJrXFb2OrRS_6g66lv_C2tYVq9YvalWNB5xeCRZlwCDsUMUE5TCeQ>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 531092031F; Tue, 19 Feb 2019 01:29:32 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com>
In-Reply-To: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com>
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com>
Date: Tue, 19 Feb 2019 01:29:19 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: iesg <iesg@ietf.org>, "Eric Rescorla" <ekr@rtfm.com>
Cc: "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=f1b84da264a0488b9103daf29297bc60
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/079o-Dn1nw_8NZtXPmfc166__BQ>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-ma?= =?utf-8?q?il-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 06:29:37 -0000

--f1b84da264a0488b9103daf29297bc60
Content-Type: text/plain

On Mon, 18 Feb 2019, at 11:06, Eric Rescorla wrote:
> IMPORTANT: It's a bit hard to tell what the server is required to do.
> Which of the many properties of emails (headers, the like) is the
> server required to provide?

I'm sorry, I don't understand exactly what you're asking here. Which bit of the spec are you referring to? As a general thing, the client can request parsed representations of the RFC5322 message, and the server needs to be able to parse the message and return what was requested.

> DETAIL
> S 2. 
> > * *mayReadItems*: "Boolean" If true, the user may use this
> > mailbox as part of a filter in a _Email/query_ call and the
> > mailbox may be included in the _mailboxIds_ set of _Email_
> > objects. If a sub-mailbox is shared but not the parent
> > mailbox, this may be "false". Corresponds to IMAP ACLs "lr".
> 
> This doesn't have any impact on Email/get? that seems odd.

This was kind-of implied. I realise it should be more explicit. I have added:

*Email objects may be fetched if they are in at least one mailbox with this permission.*

I have also added a section to the security considerations:

**Partial account access***
*
*
*
*A user may only have permission to access a subset of the data that exists in an account. To avoid leaking any unauthorised information, in such a situation the server MUST treat any data the user does not have permission to access the same as if it did not exist.
*
*
*
*For example, suppose user A has an account with two mailboxes, Inbox and Sent, but only shares the Inbox with user B. In this case, when user B fetches mailboxes for this account, the server MUST behave as though the Sent mailbox did not exist. Similarly when querying or fetching Email objects, it MUST treat any messages that just belong to the Sent mailbox as though they did not exist. Fetching Thread objects MUST only return ids for Email objects the user has permission to access; if none, the Thread again MUST be treated the same as if it did not exist.*

> ----------------------------------------------------------------------
> COMMENT:
> ----------------------------------------------------------------------
> 
> S 2.
> > A *Mailbox* object has the following properties:
> > 
> > o *id*: "Id" (immutable; server-set) The id of the mailbox.
> > 
> > o *name*: "String" User-visible name for the mailbox, e.g. "Inbox".
> > This may be any Net-Unicode string ([RFC5198]) of at least 1
> 
> MAY?

Actually this is a MUST. Will change to clarify.

> S 2.
> > 
> > o *role*: "String|null" (default: null) Identifies mailboxes that
> > have a particular common purpose (e.g. the "inbox"), regardless of
> > the _name_ (which may be localised). This value is shared with
> > IMAP (exposed in IMAP via the [RFC6154] SPECIAL-USE extension).
> > However, unlike in IMAP, a mailbox may only have a single role,
> 
> MUST only

Yes, will fix.

> S 2.
> > o *totalEmails*: "PositiveInt" (server-set) The number of emails in
> > this mailbox.
> > 
> > o *unreadEmails*: "PositiveInt" (server-set) The number of emails in
> > this mailbox that have neither the "$seen" keyword nor the
> > "$draft" keyword.
> 
> This is the first appearance of "keyword" in this document. Please
> provide some explanation of what that means before this.

Looking at this, I think a brief overview of the data model is useful. I have added the following to the introduction:

*This specification defines a data model for accessing a mail store over JMAP, allowing you to query, read, organise and submit mail for sending.
*
*
*
*The data model is designed to allow a server to provide consistent access to the same data via IMAP (RFC3501) as well as JMAP. As in IMAP, a message must belong to a mailbox, however in JMAP its id does not change if you move it between mailboxes, and the server may allow it to belong to multiple mailboxes simultaneously (often exposed in a user agent as labels rather than folders).
*
*
*
*As in IMAP, emails may also be assigned zero or more keywords: short arbitrary strings. These are primarily intended to store metadata to inform client display, such as unread status or whether a message has been replied to. An IANA registry allows common semantics to be shared between clients and extended easily in the future.
*
*
*
*A message and its replies are linked on the server by a common thread id. Clients may fetch the list of messages with a particular thread id to more easily present a threaded or conversational interface.
*
*
*
*Permissions for message access happen on a per-mailbox basis. Servers may give the user restricted permissions for certain mailboxes, for example if another user's inbox has been shared read-only with them.*

> S 2.
> > o *totalThreads*: "PositiveInt" (server-set) The number of threads
> > where at least one email in the thread is in this mailbox.
> > 
> > o *unreadThreads*: "PositiveInt" (server-set) An indication of the
> > number of "unread" threads in the mailbox. This may be presented
> > by the client as a badge or marker associated with the mailbox.
> 
> I know we're in 8174-land, but it seems to me that this may is a bit
> confusing in any case. The client can do anything it wants with this
> at all, right?

Yes. The expected common use case is as described, however I'm happy to just cut the sentence.

> S 4.1.
> > list rather than a single part as messages may have headers and/or
> > footers appended/prepended as separate parts as they are
> > transmitted, and some clients send text and images intended to be
> > displayed inline in the body (or even videos and sound clips) as
> > multiple parts rather than a single HTML part with referenced
> > images.
> 
> Does the server have to supply this? It seems like it's a bit of a
> pain if you don't otherwise have a bunch of MIME-parsing machiner.

Well, yes. The server MUST be able to do MIME parsing to implement the whole Email object, so I'm not quite sure what to make of this comment. There is a suggested algorithm lower down in 4.1 for taking the `bodyParts` property (the parsed MIME tree) and decomposing it into the appropriate `textBody`/`htmlBody` arrays.

> S 4.1.1.
> > properties is specified over the following three sub-sections.
> > 
> > 4.1.1. Metadata
> > 
> > These properties represent metadata about the [RFC5322] message, and
> > are not derived from parsing the message itself.
> 
> As above, is the server required to supply all of these?

Yes, if the client requests them.

> S 4.1.2.3.
> > 
> > o Resent-Cc
> > 
> > o Resent-Bcc
> > 
> > o Any header not defined in [RFC5322] or [RFC2369]
> 
> Can this list be updated in the future? If so, how?

This is a blacklist to prevent obviously nonsensical behaviour with common headers available today. Any future header not listed here may be used with the form. The blacklist is primarily to help client authors realise more quickly if they are doing something silly, but there is no danger if you were to use an inappropriate form with a header; it's just not very useful. A future RFC could update the list of course, but I don't think it's likely to be necessary.

> S 9.2.
> > 
> > Subtle differences in parsing of HTML can introduce security flaws:
> > to filter with 100% accuracy you need to use the same parser when
> > sanitizing that the HTML rendering engine will use.
> > 
> > o Encapsulating the message in an "<iframe sandbox>" can help
> 
> You need a reference to this.

Right, I have added a reference to the appropriate part of the HTML spec.

Cheers,
Neil.
--f1b84da264a0488b9103daf29297bc60
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Mon, 18=
 Feb 2019, at 11:06, Eric Rescorla wrote:<br></div><blockquote type=3D"c=
ite" id=3D"fastmail-quoted"><div>IMPORTANT: It's a bit hard to tell what=
 the server is required to do.<br></div><div>Which of the many propertie=
s of emails (headers, the like) is the<br></div><div>server required to =
provide?<br></div></blockquote><div><br></div><div>I'm sorry, I don't un=
derstand exactly what you're asking here. Which bit of the spec are you =
referring to? As a general thing, the client can request parsed represen=
tations of the RFC5322 message, and the server needs to be able to parse=
 the message and return what was requested.<br></div><div><br></div><blo=
ckquote type=3D"cite" id=3D"fastmail-quoted"><div>DETAIL<br></div><div>S=
 2.&nbsp; &nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; *&nbsp; *mayReadItems*: "Boolean" If true, the user may use =
this<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; mailbox as part of a filter in a _Email/query_ call an=
d the<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp; mailbox may be included in the _mailboxIds_ set of _E=
mail_<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp; objects.&nbsp; If a sub-mailbox is shared but not the=
 parent<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; mailbox, this may be "false".&nbsp; Corresponds to =
IMAP ACLs "lr".<br></div><div><br></div><div>This doesn't have any impac=
t on Email/get? that seems odd.<br></div></blockquote><div><br></div><di=
v>This was kind-of implied. I realise it should be more explicit. I have=
 added:<br></div><div><br></div><div><i>Email objects may be fetched if =
they are in at least one mailbox with this permission.</i><br></div><div=
><br></div><div>I have also added a section to the security consideratio=
ns:<br></div><div><br></div><div><b><i>Partial account access</i></b><i>=
<br></i></div><div><i><br></i></div><div><i>A user may only have permiss=
ion to access a subset of the data that exists in an account. To avoid l=
eaking any unauthorised information, in such a situation the server MUST=
 treat any data the user does not have permission to access the same as =
if it did not exist.<br></i></div><div><i><br></i></div><div><i>For exam=
ple, suppose user A has an account with two mailboxes, Inbox and Sent, b=
ut only shares the Inbox with user B. In this case, when user B fetches =
mailboxes for this account, the server MUST behave as though the Sent ma=
ilbox did not exist. Similarly when querying or fetching Email objects, =
it MUST treat any messages that just belong to the Sent mailbox as thoug=
h they did not exist. Fetching Thread objects MUST only return ids for E=
mail objects the user has permission to access; if none, the Thread agai=
n MUST be treated the same as if it did not exist.</i><br></div><div><br=
></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>-----------=
-----------------------------------------------------------<br></div><di=
v>COMMENT:<br></div><div>-----------------------------------------------=
-----------------------<br></div><div><br></div><div>S 2.<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A *Mailbox* object has the following =
properties:<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *id*: "Id" (immutable; server-set) The=
 id of the mailbox.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&=
gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *name*: "String" User-visible =
name for the mailbox, e.g.&nbsp; "Inbox".<br></div><div>&gt;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This may be any Net-Unicode string =
([RFC5198]) of at least 1<br></div><div><br></div><div>MAY?<br></div></b=
lockquote><div><br></div><div>Actually this is a MUST. Will change to cl=
arify.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-=
quoted"><div>S 2.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *role*: "String|null" (default: =
null) Identifies mailboxes that<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp; have a particular common purpose (e.g. the "i=
nbox"), regardless of<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; the _name_ (which may be localised).&nbsp; This value i=
s shared with<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp; IMAP (exposed in IMAP via the [RFC6154] SPECIAL-USE extension).=
<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Howe=
ver, unlike in IMAP, a mailbox may only have a single role,<br></div><di=
v><br></div><div>MUST only<br></div></blockquote><div><br></div><div>Yes=
, will fix.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fast=
mail-quoted"><div>S 2.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
o&nbsp; *totalEmails*: "PositiveInt" (server-set) The number of emails i=
n<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thi=
s mailbox.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; *unreadEmails*: "PositiveInt" (server-s=
et) The number of emails in<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; this mailbox that have neither the "$seen" keywor=
d nor the<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; "$draft" keyword.<br></div><div><br></div><div>This is the first ap=
pearance of "keyword" in this document. Please<br></div><div>provide som=
e explanation of what that means before this.<br></div></blockquote><div=
><br></div><div>Looking at this, I think a brief overview of the data mo=
del is useful. I have added the following to the introduction:<br></div>=
<div><br></div><div><i>This specification defines a data model for acces=
sing a mail store over JMAP, allowing you to query, read, organise and s=
ubmit mail for sending.<br></i></div><div><i><br></i></div><div><i>The d=
ata model is designed to allow a server to provide consistent access to =
the same data via IMAP (RFC3501) as well as JMAP. As in IMAP, a message =
must belong to a mailbox, however in JMAP its id does not change if you =
move it between mailboxes, and the server may allow it to belong to mult=
iple mailboxes simultaneously (often exposed in a user agent as labels r=
ather than folders).<br></i></div><div><i><br></i></div><div><i>As in IM=
AP, emails may also be assigned zero or more keywords: short arbitrary s=
trings. These are primarily intended to store metadata to inform client =
display, such as unread status or whether a message has been replied to.=
 An IANA registry allows common semantics to be shared between clients a=
nd extended easily in the future.<br></i></div><div><i><br></i></div><di=
v><i>A message and its replies are linked on the server by a common thre=
ad id. Clients may fetch the list of messages with a particular thread i=
d to more easily present a threaded or conversational interface.<br></i>=
</div><div><i><br></i></div><div><i>Permissions for message access happe=
n on a per-mailbox basis. Servers may give the user restricted permissio=
ns for certain mailboxes, for example if another user's inbox has been s=
hared read-only with them.</i><br></div><div><br></div><blockquote type=3D=
"cite" id=3D"fastmail-quoted"><div>S 2.<br></div><div>&gt;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; o&nbsp; *totalThreads*: "PositiveInt" (server-set) The =
number of threads<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; where at least one email in the thread is in this mailbox.<=
br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; o&nbsp; *unreadThreads*: "PositiveInt" (server-set) An ind=
ication of the<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; number of "unread" threads in the mailbox.&nbsp; This may be p=
resented<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp; by the client as a badge or marker associated with the mailbox.<br><=
/div><div><br></div><div>I know we're in 8174-land, but it seems to me t=
hat this may is a bit<br></div><div>confusing in any case. The client ca=
n do anything it wants with this<br></div><div>at all, right?<br></div><=
/blockquote><div><br></div><div>Yes. The expected common use case is as =
described, however I'm happy to just cut the sentence.<br></div><div><br=
></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 4.1.<br><=
/div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list rath=
er than a single part as messages may have headers and/or<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; footers appended/pr=
epended as separate parts as they are<br></div><div>&gt;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transmitted, and some clients send text=
 and images intended to be<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; displayed inline in the body (or even videos and s=
ound clips) as<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; multiple parts rather than a single HTML part with referenced<=
br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; image=
s.<br></div><div><br></div><div>Does the server have to supply this? It =
seems like it's a bit of a<br></div><div>pain if you don't otherwise hav=
e a bunch of MIME-parsing machiner.<br></div></blockquote><div><br></div=
><div>Well, yes. The server MUST be able to do MIME parsing to implement=
 the whole Email object, so I'm not quite sure what to make of this comm=
ent. There is a suggested algorithm lower down in 4.1 for taking the <co=
de style=3D"border-top-left-radius:3px;border-top-right-radius:3px;borde=
r-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top-width=
:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1p=
x;border-top-style:solid;border-right-style:solid;border-bottom-style:so=
lid;border-left-style:solid;border-top-color:rgb(204, 204, 204);border-r=
ight-color:rgb(204, 204, 204);border-bottom-color:rgb(204, 204, 204);bor=
der-left-color:rgb(204, 204, 204);border-image-source:initial;border-ima=
ge-slice:initial;border-image-width:initial;border-image-outset:initial;=
border-image-repeat:initial;padding-top:1px;padding-right:3px;padding-bo=
ttom:1px;padding-left:3px;background-image:initial;background-position-x=
:initial;background-position-y:initial;background-size:initial;backgroun=
d-repeat:initial;background-repeat:initial;background-attachment:initial=
;background-origin:initial;background-clip:initial;background-color:rgb(=
246, 246, 246);font-family:menlo, consolas, monospace;font-size:90%;">bo=
dyParts</code> property (the parsed MIME tree) and decomposing it into t=
he appropriate <code style=3D"border-top-left-radius:3px;border-top-righ=
t-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3p=
x;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;bo=
rder-left-width:1px;border-top-style:solid;border-right-style:solid;bord=
er-bottom-style:solid;border-left-style:solid;border-top-color:rgb(204, =
204, 204);border-right-color:rgb(204, 204, 204);border-bottom-color:rgb(=
204, 204, 204);border-left-color:rgb(204, 204, 204);border-image-source:=
initial;border-image-slice:initial;border-image-width:initial;border-ima=
ge-outset:initial;border-image-repeat:initial;padding-top:1px;padding-ri=
ght:3px;padding-bottom:1px;padding-left:3px;background-image:initial;bac=
kground-position-x:initial;background-position-y:initial;background-size=
:initial;background-repeat:initial;background-repeat:initial;background-=
attachment:initial;background-origin:initial;background-clip:initial;bac=
kground-color:rgb(246, 246, 246);font-family:menlo, consolas, monospace;=
font-size:90%;">textBody</code>/<code style=3D"border-top-left-radius:3p=
x;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bott=
om-left-radius:3px;border-top-width:1px;border-right-width:1px;border-bo=
ttom-width:1px;border-left-width:1px;border-top-style:solid;border-right=
-style:solid;border-bottom-style:solid;border-left-style:solid;border-to=
p-color:rgb(204, 204, 204);border-right-color:rgb(204, 204, 204);border-=
bottom-color:rgb(204, 204, 204);border-left-color:rgb(204, 204, 204);bor=
der-image-source:initial;border-image-slice:initial;border-image-width:i=
nitial;border-image-outset:initial;border-image-repeat:initial;padding-t=
op:1px;padding-right:3px;padding-bottom:1px;padding-left:3px;background-=
image:initial;background-position-x:initial;background-position-y:initia=
l;background-size:initial;background-repeat:initial;background-repeat:in=
itial;background-attachment:initial;background-origin:initial;background=
-clip:initial;background-color:rgb(246, 246, 246);font-family:menlo, con=
solas, monospace;font-size:90%;">htmlBody</code> arrays.<br></div><div><=
br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 4.1.1.<=
br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; properties is specified=
 over the following three sub-sections.<br></div><div>&gt;&nbsp;&nbsp;&n=
bsp;<br></div><div>&gt;&nbsp;&nbsp; 4.1.1.&nbsp; Metadata<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
These properties represent metadata about the [RFC5322] message, and<br>=
</div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; are not derived from parsi=
ng the message itself.<br></div><div><br></div><div>As above, is the ser=
ver required to supply all of these?<br></div></blockquote><div><br></di=
v><div>Yes, if the client requests them.<br></div><div><br></div><blockq=
uote type=3D"cite" id=3D"fastmail-quoted"><div>S 4.1.2.3.<br></div><div>=
&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
o&nbsp; Resent-Cc<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; Resent-Bcc<br></div><div>&gt;&nb=
sp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp;=
 Any header not defined in [RFC5322] or [RFC2369]<br></div><div><br></di=
v><div>Can this list be updated in the future? If so, how?<br></div></bl=
ockquote><div><br></div><div>This is a blacklist to prevent obviously no=
nsensical behaviour with common headers available today. Any future head=
er not listed here may be used with the form. The blacklist is primarily=
 to help client authors realise more quickly if they are doing something=
 silly, but there is no danger if you were to use an inappropriate form =
with a header; it's just not very useful. A future RFC could update the =
list of course, but I don't think it's likely to be necessary.<br></div>=
<div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>S 9=
.2.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; Subtle differences in parsing of HTML can introduce se=
curity flaws:<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to filter=
 with 100% accuracy you need to use the same parser when<br></div><div>&=
gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sanitizing that the HTML rendering eng=
ine will use.<br></div><div>&gt;&nbsp;&nbsp;&nbsp;<br></div><div>&gt;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; o&nbsp; Encapsulating the message in an "&lt=
;iframe sandbox&gt;" can help<br></div><div><br></div><div>You need a re=
ference to this.<br></div></blockquote><div><br></div><div>Right, I have=
 added a reference to the appropriate part of the HTML spec.<br></div><d=
iv><br></div><div>Cheers,<br></div><div>Neil.<br></div></body></html>
--f1b84da264a0488b9103daf29297bc60--


From nobody Mon Feb 18 22:38:43 2019
Return-Path: <martin.thomson@gmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 39FED130E79; Mon, 18 Feb 2019 22:38:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level: 
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
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 coAszwVr3eZn; Mon, 18 Feb 2019 22:38:33 -0800 (PST)
Received: from mail-ot1-x333.google.com (mail-ot1-x333.google.com [IPv6:2607:f8b0:4864:20::333]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7E216130E76; Mon, 18 Feb 2019 22:38:33 -0800 (PST)
Received: by mail-ot1-x333.google.com with SMTP id n8so32440165otl.6; Mon, 18 Feb 2019 22:38:33 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;  h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xNJWSZH1MsCZH/gY6ErIW0b2RkOHbrNicysYMjtvd+g=; b=QNwcCpm6eHIElCnBAo+z0aUTjWAZNvQD1STOfkqH/yk5/HdBf4I36LO7OmTHM2u1zx WAio1POi6/VDA/3EIWZfzFj+kMbpct4vsURdS5/jtia5TXR2Gffklcb9xDr+CPC6vbgn ZhqEtN46z3yBO/m0cRzImEbCuIQuoGH20Zl8g2LCztYXWB0cJyvGcLXRN0aQWROpf4i6 B6q+SQA6u9URJGbSkMSg32SAnNY/zS9b1KesQcuYrrhdS4xWGOuW2zMwHA/WW0CVeeRt 3HYk2pjwHIveLJG8g/X9iVuMWAA4PkQIXZrhjaKElG7fHShun/g2tBbtF8B5Ju0i2txQ bw9w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xNJWSZH1MsCZH/gY6ErIW0b2RkOHbrNicysYMjtvd+g=; b=qZNVtdc3SjKL814tQihtKM1iYzg9ZJBKOqrHGrQ020xGFt3MS6/Imtw9hl5Ul1AEuq leBSMXTO2ccDqCi5oMql67hirYttxCi695Kl6YYwMcIHlGSW00OMPppsNoWSD9HW8/9a afJiN1jivvv6eHmAbe8a9uDPBDSQeRxVNVG3jaqmELrnlCAln+lYrCdv17qGR1Eb/4l+ Tc9uGAicMIHd3i3ckFYdSeVfRN7jvoucAcJJXh9wO23WrOLFAZI8FN0WlVXgqkPOleTy sLf7/EIabilxP1vmnP67MsKMscd9vHjKgwVebp4Actzl9AAe6SyZBagAUbHSjnZmDanD /XTA==
X-Gm-Message-State: AHQUAuZyizhUMForgDIbv7O00RMjPmMaqQgazXpLRYnvHIj1+ffzXi2G k3SC+lWxSXBowvvKLvd6ta5hb4/AemTO593WlWM=
X-Google-Smtp-Source: AHgI3IYk7WPZbkDSBBOfzi7OqQQR+hIr1db4Tk966YcgvYASIkZnC95N/wUhoWCuIpw+wBn+8FN7oErSo4V0KaajfVU=
X-Received: by 2002:aca:e544:: with SMTP id c65mr1624297oih.75.1550558312399;  Mon, 18 Feb 2019 22:38:32 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com>
In-Reply-To: <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com>
From: Martin Thomson <martin.thomson@gmail.com>
Date: Mon, 18 Feb 2019 22:38:21 -0800
Message-ID: <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com>
To: Eric Rescorla <ekr@rtfm.com>
Cc: Neil Jenkins <neilj@fastmailteam.com>, iesg <iesg@ietf.org>,  IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/kY8GtDpIs-MMxZiNOf7m0Wr-wRE>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 06:38:35 -0000

On Mon, Feb 18, 2019 at 8:42 PM Eric Rescorla <ekr@rtfm.com> wrote:
>> S 7.2.2.
>> >      o  *pushSubscriptionId*: "String" The id of the push subscription
>> >         that was created.
>> >
>> >      o  *verificationCode*: "String" The verification code to add to t=
he
>> >         push subscription.  This MUST contain sufficient entropy to av=
oid
>> >         the client being able to brute force guess the code.
>>
>> This doesn't actually guarantee permission. Consider the case where
>> the client provides a push URL for some sort of open server upload
>> endpoint. The client could then read the verification code off that
>> endpoint and confirm the push subscription. Off the top of my head,
>> requiring the push endpoint to respond in-band with a function of the
>> code would be better.
>>
>>
>> This would kill interoperability. The current specification is designed =
to work with a push server that supports RFC8030, but doesn't necessarily k=
now anything about the JMAP server (so cannot do custom processing or in-ba=
nd replies). So in a browser, you should be able to use Web Push to get an =
endpoint and encryption key, then register this with the JMAP server.
>>
>> If you believe this is a significant security issue, could you suggest a=
ny way of mitigating this while still maintaining compatibility with existi=
ng push servers (as supported by Firefox, Chrome etc.)?
>
> I'm not sure if it's a significant security issue. My understanding is th=
at RFC 8030 endpoints don't normally involve a round-trip check. CCing Mart=
in Thomson for his thougths.

This uses the design in RFC 8291 as I understand it.  But the
verification code is something on top of that.  The intent is to
perform a routeability check on the subscription.  In that way it is
like the QUIC PATH_CHALLENGE, verifying that the client can receive
messages.  This opens the client to collusion: one client forwards
messages for another, but the effect is that the JMAP server will send
updates to the wrong client.  The client that should be receiving
those messages can be duped into doing that if they can be convinced
to set a subscription URI (and keys) that are controlled by an
attacker and the attacker has the subscription URI (and keys) for the
client.  The attacker can forward the string along and have the client
verify its string.

This doesn't have the same constraints as ACME, but the challenge
there is not dissimilar.  The server sets a large random value (ACME
has 128 bits of entropy, similar to this, though this has no hard
lower bound, which might be worth correcting).  The supplicant echoes
that value, and includes the identity adjacent to that value.  The
added identity prevents the simple hack of echoing a value.  This
system is analogous, assuming that the client is authenticated when it
makes the PushSubscription/set request.

Now, ACME is completely open to on-path attacks, so maybe you could
decide that you wanted to care about that.  You could include the
identity of the push subscription in the message in a way that can be
authenticated by the client so that it could verify that the message
was sent to it.  For instance, you could add a key when creating the
subscription and include a MAC of the token and subscription URL in
the message.  That might be too much complexity given the nature of
the request (and it's a fairly narrowly targeted fix).

The problem Ekr cites here is a different one, where the client
doesn't care who receives its messages.  I think that suffers from
problems of alignment of incentives (the client could also just
broadcast all of its messages as it receives them), so I'm less
concerned about that.  I'm not sure that I even care about the
forwarding thing enough to recommend any fix at all.


From nobody Tue Feb 19 00:26:18 2019
Return-Path: <aamelnikov@fastmail.fm>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BF8FB130E9C; Tue, 19 Feb 2019 00:26:03 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level: 
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmail.fm header.b=Tdoxdlqv; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=lF40kWU4
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 t9gr8KP5goWl; Tue, 19 Feb 2019 00:26:01 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8C324130ECD; Tue, 19 Feb 2019 00:26:01 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 5CAB521F85; Tue, 19 Feb 2019 03:26:00 -0500 (EST)
Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Tue, 19 Feb 2019 03:26:00 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=fm2; bh=O feUpEpc8o2Ln4D/aVDOIVIuI5EqiFQv2y/6/9tDsyM=; b=TdoxdlqvTrPyDCWRC 7PgmQm3FsvzaTN+Jz1pL7nPnDCfGhVVoTf/ZVs9Ps9XVtbPOfbPTN+zTxBz1J88p ousKWtuSZoj5K3m8dkvAyQ6Oqs0xDvsVbJNHxl+NKnxts2Ezfhf3mDgBYAXHAxWG eP/o8lVPns78Jw33F3r2i3wPjQf4prX4p1yiahSDVWpHDg8SlCt6W0H8A+3tKiLL cLYhLhBukHyrFn+hClNhKCMxPnxuQ2rKUfZSMu7sRIeIvXWtlvB3FPyP248qAkvW lnOtCY3SEhQI7+ZU+Z9jBU6uwNEmGokrUtFtDaPnb4BuGeaxKVbyGPqA6QEua3q/ GulzQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=OfeUpEpc8o2Ln4D/aVDOIVIuI5EqiFQv2y/6/9tDs yM=; b=lF40kWU41/e4eJ6BIsM9VM5EvMJi1h1yWQ0OsUcmevOAPMkf7+A2MOYW+ ksEbDr4N/G0YCaCSxYdhKvZA+NxF2kbjf1oBZRHFKcVvaBjksIh/MgLsHyo/lvpp 1PwSx7fpHIoUHJJP5xPdpoeoUAsQE1uxZfOOmLPoLzG+nv1vQRCXgRnzoyY0suG4 TVyxLECRdftFdat9JRuu+V3zH7XNbGxV2hLT5iHtlvWKOMqnvI2tyNpCqRJmfB3+ dE1yi7z0dOfbX1SUJ/FsDPWkw/4i4B0yUopHFHBO1xbaKTt0ryN3iSPHAXdOXn+5 CXaMi+xvnBp3QjIypgJzMxfeCfaog==
X-ME-Sender: <xms:l71rXBxkF0uaGJckQ8tKmuS_hx1LVJosSuR2SEOjVqKmHiH8_UyfDg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdefgdegfeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptggguffhofgjfffgkfhfvfesthhqmhdthhdtjeenucfhrhhomheptehlvgig vgihucfovghlnhhikhhovhcuoegrrghmvghlnhhikhhovhesfhgrshhtmhgrihhlrdhfmh eqnecukfhppeejjedrleejrddugeehrdehheenucfrrghrrghmpehmrghilhhfrhhomhep rggrmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfhhmnecuvehluhhsthgvrhfuihiivg eptd
X-ME-Proxy: <xmx:l71rXFi92y-0VK-hhxyTP9bEtkwou4omxDxAhr5OJmBkqzttFp3RqA> <xmx:l71rXGWbd2ug-P7EcVOaW2OQSgCn5O4qDlo9XR6SqAvx0VIp4WalfQ> <xmx:l71rXH3xpB2j5x7zUyBto1ZxqdJ5-hh7fYtB6M0SW8HzzPFiMnMRRw> <xmx:mL1rXBgkNZadYA886lLfALkN3c_sW85qNoZb9wH-GnSMyeNLzfxwLQ>
Received: from [192.168.0.10] (cpc121086-nmal24-2-0-cust54.19-2.cable.virginm.net [77.97.145.55]) by mail.messagingengine.com (Postfix) with ESMTPA id 6B69A10314; Tue, 19 Feb 2019 03:25:59 -0500 (EST)
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (1.0)
From: Alexey Melnikov <aamelnikov@fastmail.fm>
X-Mailer: iPhone Mail (15G77)
In-Reply-To: <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com>
Date: Tue, 19 Feb 2019 08:25:58 +0000
Cc: iesg <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, Bron Gondwana <brong@fastmailteam.com>
Content-Transfer-Encoding: quoted-printable
Message-Id: <EE30ED7D-B5D5-4637-B1BF-005FEB0929D6@fastmail.fm>
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>, Eric Rescorla <ekr@rtfm.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/uwVOiFMkwSgIuC_MEVxq5m9Ubjo>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 08:26:11 -0000

Hi,

On 19 Feb 2019, at 06:29, Neil Jenkins <neilj@fastmailteam.com> wrote:

>> On Mon, 18 Feb 2019, at 11:06, Eric Rescorla wrote:
>> IMPORTANT: It's a bit hard to tell what the server is required to do.
>> Which of the many properties of emails (headers, the like) is the
>> server required to provide?
>=20
>=20
> I'm sorry, I don't understand exactly what you're asking here. Which bit o=
f the spec are you referring to? As a general thing, the client can request p=
arsed representations of the RFC5322 message, and the server needs to be abl=
e to parse the message and return what was requested.

I didn=E2=80=99t understand Ekr=E2=80=99s question either. I think the answe=
r is that JMAP server needs to parse MIME structure of messages and be able t=
o return any header field or attachment. (This is the same as IMAP model.)

Best Regards,
Alexey



From nobody Tue Feb 19 05:49:32 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CFF55130F06 for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 05:49:29 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level: 
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 pOOGIInQavos for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 05:49:27 -0800 (PST)
Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 75CF5130ED6 for <jmap@ietf.org>; Tue, 19 Feb 2019 05:49:26 -0800 (PST)
Received: by mail-lf1-x144.google.com with SMTP id v7so14970378lfd.2 for <jmap@ietf.org>; Tue, 19 Feb 2019 05:49:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=3iC/9AyRYOXOnT9CaGeot9kEZQoqmIZIMpfswtByOeU=; b=e3lpmHhqEIH7FF6yuALlR7kv8ow4CJodVqoc6raO64vobQ3aEpwVunTIkpi9vZA/4u M77X5CZl0fI/1C+nmypPFgTGS3JHFlfaF1khSmHPSEwxxoCS80WBCVJTXv1EXr/H0h1T MYNkdnfDBdrdAhF42Gdwn9I4yyQVkCBXtX4Cc9mL4/f3xO/muW0mtwBMO/N3Q8T7HNJP 8iRaf85TNqsQbbdddaQN7fJlTfqFdE23IyYVJ95A4//UHMVge/YATgHTE8qF8iCQWDCV ys3rZhHQZDD4eGdm+By+85ULyC9R5Zel2B0c/g8C/N8viT3n3J9Hj7rIshARxmCwGIfm fAjw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=3iC/9AyRYOXOnT9CaGeot9kEZQoqmIZIMpfswtByOeU=; b=b8MXZByN0SevAVbBxWVBPUEWl0hzBTGojQyT3bfxhW/tEkRcY+PnZv0fR72blNwYYC MMYwHTOII6BNe0OS1nxlqd9rFI//SZcH0eAwTjap79lJmLpwItZ+d8lqtlPi/ign6Qbk 3FFvBMdKCiRtcPwEsP2mVDbfOfsRSxHFf/gdqk8lt0eXa5RjUEDS5uNpO1606pjHsmxi HKuj/yghdiTg+5mU2SaS99qXgjZs4Dk1TfAHvIDOa19QDvI/pg+rS4RhURX+usW3t87D WhqOVpnKpwplgRVQDGApgkLVBLHTEmKGnuEc1zXZAjKKzuxnHXJawwgTI6AuD/a945PS 7UoQ==
X-Gm-Message-State: AHQUAuaHGBB9cwC3IHeYevB2RDonGCWWH2XLEWqqkjPt7Vt71pYW97Bu ozJbAJrQomF2BArqqUug5tnLD7D82WLIkrTwyM0tKA==
X-Google-Smtp-Source: AHgI3IZmW2WkMstdzJoQuXbiLwyGNPULSngN/mjaFCB/w9IIPR4Eazx0OEtuFJROH7Mzg/QMS2XEKQ4wTH/FP/jhpuU=
X-Received: by 2002:a19:f204:: with SMTP id q4mr17892614lfh.133.1550584164527;  Tue, 19 Feb 2019 05:49:24 -0800 (PST)
MIME-Version: 1.0
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com>
In-Reply-To: <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Tue, 19 Feb 2019 05:48:45 -0800
Message-ID: <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: iesg <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="0000000000005244c105823f82ca"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/Kw3mKLg86i2N9HNzilGxND_unxo>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Feb 2019 13:49:30 -0000

--0000000000005244c105823f82ca
Content-Type: text/plain; charset="UTF-8"

On Mon, Feb 18, 2019 at 10:29 PM Neil Jenkins <neilj@fastmailteam.com>
wrote:

> On Mon, 18 Feb 2019, at 11:06, Eric Rescorla wrote:
>
> IMPORTANT: It's a bit hard to tell what the server is required to do.
> Which of the many properties of emails (headers, the like) is the
> server required to provide?
>
>
> I'm sorry, I don't understand exactly what you're asking here. Which bit
> of the spec are you referring to? As a general thing, the client can
> request parsed representations of the RFC5322 message, and the server needs
> to be able to parse the message and return what was requested.
>

Well it's not just parsed representations. For instance, see S 4.1.1, which
lists a bunch of metadata properties. Must the server include all of them
or can I omit (say) |size|? It seems you think the answer is that they all
must be present but the document doesn't seem to say that anywhere, and
absent that, it doesn't seem clear how to write an interoperable server.



DETAIL
> S 2.
> >         *  *mayReadItems*: "Boolean" If true, the user may use this
> >            mailbox as part of a filter in a _Email/query_ call and the
> >            mailbox may be included in the _mailboxIds_ set of _Email_
> >            objects.  If a sub-mailbox is shared but not the parent
> >            mailbox, this may be "false".  Corresponds to IMAP ACLs "lr".
>
> This doesn't have any impact on Email/get? that seems odd.
>
>
> This was kind-of implied. I realise it should be more explicit. I have
> added:
>
> *Email objects may be fetched if they are in at least one mailbox with
> this permission.*
>
> I have also added a section to the security considerations:
>
> *Partial account access*
>
>
> *A user may only have permission to access a subset of the data that
> exists in an account. To avoid leaking any unauthorised information, in
> such a situation the server MUST treat any data the user does not have
> permission to access the same as if it did not exist.*
>
> *For example, suppose user A has an account with two mailboxes, Inbox and
> Sent, but only shares the Inbox with user B. In this case, when user B
> fetches mailboxes for this account, the server MUST behave as though the
> Sent mailbox did not exist. Similarly when querying or fetching Email
> objects, it MUST treat any messages that just belong to the Sent mailbox as
> though they did not exist. Fetching Thread objects MUST only return ids for
> Email objects the user has permission to access; if none, the Thread again
> MUST be treated the same as if it did not exist.*
>

Thanks.


S 2.
> >      o  *totalEmails*: "PositiveInt" (server-set) The number of emails in
> >         this mailbox.
> >
> >      o  *unreadEmails*: "PositiveInt" (server-set) The number of emails
> in
> >         this mailbox that have neither the "$seen" keyword nor the
> >         "$draft" keyword.
>
> This is the first appearance of "keyword" in this document. Please
> provide some explanation of what that means before this.
>
>
> Looking at this, I think a brief overview of the data model is useful. I
> have added the following to the introduction:
>
>
> *This specification defines a data model for accessing a mail store over
> JMAP, allowing you to query, read, organise and submit mail for sending.*
>
>
> *The data model is designed to allow a server to provide consistent access
> to the same data via IMAP (RFC3501) as well as JMAP. As in IMAP, a message
> must belong to a mailbox, however in JMAP its id does not change if you
> move it between mailboxes, and the server may allow it to belong to
> multiple mailboxes simultaneously (often exposed in a user agent as labels
> rather than folders).*
>
>
> *As in IMAP, emails may also be assigned zero or more keywords: short
> arbitrary strings. These are primarily intended to store metadata to inform
> client display, such as unread status or whether a message has been replied
> to. An IANA registry allows common semantics to be shared between clients
> and extended easily in the future.*
>
>
> *A message and its replies are linked on the server by a common thread id.
> Clients may fetch the list of messages with a particular thread id to more
> easily present a threaded or conversational interface.*
>
> *Permissions for message access happen on a per-mailbox basis. Servers may
> give the user restricted permissions for certain mailboxes, for example if
> another user's inbox has been shared read-only with them.*
>

Thanks. This is helpful.


>
> S 2.
> >      o  *totalThreads*: "PositiveInt" (server-set) The number of threads
> >         where at least one email in the thread is in this mailbox.
> >
> >      o  *unreadThreads*: "PositiveInt" (server-set) An indication of the
> >         number of "unread" threads in the mailbox.  This may be presented
> >         by the client as a badge or marker associated with the mailbox.
>
> I know we're in 8174-land, but it seems to me that this may is a bit
> confusing in any case. The client can do anything it wants with this
> at all, right?
>
>
> Yes. The expected common use case is as described, however I'm happy to
> just cut the sentence.
>

It's not a big deal, but I would.


> S 4.1.
> >         list rather than a single part as messages may have headers
> and/or
> >         footers appended/prepended as separate parts as they are
> >         transmitted, and some clients send text and images intended to be
> >         displayed inline in the body (or even videos and sound clips) as
> >         multiple parts rather than a single HTML part with referenced
> >         images.
>
> Does the server have to supply this? It seems like it's a bit of a
> pain if you don't otherwise have a bunch of MIME-parsing machiner.
>
>
> Well, yes. The server MUST be able to do MIME parsing to implement the
> whole Email object, so I'm not quite sure what to make of this comment.
> There is a suggested algorithm lower down in 4.1 for taking the bodyParts
> property (the parsed MIME tree) and decomposing it into the appropriate
> textBody/htmlBody arrays.
>

See my comment above. You don't actually say that I have to do this as
opposed to (say) rejecting the request with an error.




> S 4.1.2.3.
> >
> >      o  Resent-Cc
> >
> >      o  Resent-Bcc
> >
> >      o  Any header not defined in [RFC5322] or [RFC2369]
>
> Can this list be updated in the future? If so, how?
>
>
> This is a blacklist to prevent obviously nonsensical behaviour with common
> headers available today. Any future header not listed here may be used with
> the form. The blacklist is primarily to help client authors realise more
> quickly if they are doing something silly, but there is no danger if you
> were to use an inappropriate form with a header; it's just not very useful.
> A future RFC could update the list of course, but I don't think it's likely
> to be necessary.
>

OK.

-Ekr


> S 9.2.
> >
> >      Subtle differences in parsing of HTML can introduce security flaws:
> >      to filter with 100% accuracy you need to use the same parser when
> >      sanitizing that the HTML rendering engine will use.
> >
> >      o  Encapsulating the message in an "<iframe sandbox>" can help
>
> You need a reference to this.
>
>
> Right, I have added a reference to the appropriate part of the HTML spec.
>
> Cheers,
> Neil.
>

--0000000000005244c105823f82ca
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Mon, Feb 18, 2019 at 10:29 PM Neil=
 Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.com">neilj@fastmailteam.c=
om</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
"><u></u><div><div>On Mon, 18 Feb 2019, at 11:06, Eric Rescorla wrote:<br><=
/div><blockquote type=3D"cite" id=3D"gmail-m_-740981324471507406fastmail-qu=
oted"><div>IMPORTANT: It&#39;s a bit hard to tell what the server is requir=
ed to do.<br></div><div>Which of the many properties of emails (headers, th=
e like) is the<br></div><div>server required to provide?<br></div></blockqu=
ote><div><br></div><div>I&#39;m sorry, I don&#39;t understand exactly what =
you&#39;re asking here. Which bit of the spec are you referring to? As a ge=
neral thing, the client can request parsed representations of the RFC5322 m=
essage, and the server needs to be able to parse the message and return wha=
t was requested.<br></div></div></blockquote><div><br></div><div>Well it&#3=
9;s not just parsed representations. For instance, see S 4.1.1, which lists=
 a bunch of metadata properties. Must the server include all of them or can=
 I omit (say) |size|? It seems you think the answer is that they all must b=
e present but the document doesn&#39;t seem to say that anywhere, and absen=
t that, it doesn&#39;t seem clear how to write an interoperable server.<br>=
</div><div><br></div><div><br></div><div><br></div><blockquote class=3D"gma=
il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2=
04,204);padding-left:1ex"><div><blockquote type=3D"cite" id=3D"gmail-m_-740=
981324471507406fastmail-quoted"><div>DETAIL<br></div><div>S 2.=C2=A0 =C2=A0=
<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *=C2=A0=
 *mayReadItems*: &quot;Boolean&quot; If true, the user may use this<br></di=
v><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 mailbox as part of a filter in a _Email/query_ call and the<br></div><d=
iv>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m=
ailbox may be included in the _mailboxIds_ set of _Email_<br></div><div>&gt=
;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 objects=
.=C2=A0 If a sub-mailbox is shared but not the parent<br></div><div>&gt;=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 mailbox, th=
is may be &quot;false&quot;.=C2=A0 Corresponds to IMAP ACLs &quot;lr&quot;.=
<br></div><div><br></div><div>This doesn&#39;t have any impact on Email/get=
? that seems odd.<br></div></blockquote><div><br></div><div>This was kind-o=
f implied. I realise it should be more explicit. I have added:<br></div><di=
v><br></div><div><i>Email objects may be fetched if they are in at least on=
e mailbox with this permission.</i><br></div><div><br></div><div>I have als=
o added a section to the security considerations:<br></div><div><br></div><=
div><b><i>Partial account access</i></b><i><br></i></div><div><i><br></i></=
div><div><i>A user may only have permission to access a subset of the data =
that exists in an account. To avoid leaking any unauthorised information, i=
n such a situation the server MUST treat any data the user does not have pe=
rmission to access the same as if it did not exist.<br></i></div><div><i><b=
r></i></div><div><i>For example, suppose user A has an account with two mai=
lboxes, Inbox and Sent, but only shares the Inbox with user B. In this case=
, when user B fetches mailboxes for this account, the server MUST behave as=
 though the Sent mailbox did not exist. Similarly when querying or fetching=
 Email objects, it MUST treat any messages that just belong to the Sent mai=
lbox as though they did not exist. Fetching Thread objects MUST only return=
 ids for Email objects the user has permission to access; if none, the Thre=
ad again MUST be treated the same as if it did not exist.</i></div></div></=
blockquote><div><br></div><div>Thanks.</div><div><br></div><div><br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l=
eft:1px solid rgb(204,204,204);padding-left:1ex"><div><blockquote type=3D"c=
ite" id=3D"gmail-m_-740981324471507406fastmail-quoted"><div>S 2.<br></div><=
div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 *totalEmails*: &quot;Positiv=
eInt&quot; (server-set) The number of emails in<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this mailbox.<br></div><div>&gt;=C2=
=A0=C2=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 *u=
nreadEmails*: &quot;PositiveInt&quot; (server-set) The number of emails in<=
br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this mai=
lbox that have neither the &quot;$seen&quot; keyword nor the<br></div><div>=
&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &quot;$draft&quot; key=
word.<br></div><div><br></div><div>This is the first appearance of &quot;ke=
yword&quot; in this document. Please<br></div><div>provide some explanation=
 of what that means before this.<br></div></blockquote><div><br></div><div>=
Looking at this, I think a brief overview of the data model is useful. I ha=
ve added the following to the introduction:<br></div><div><br></div><div><i=
>This specification defines a data model for accessing a mail store over JM=
AP, allowing you to query, read, organise and submit mail for sending.<br><=
/i></div><div><i><br></i></div><div><i>The data model is designed to allow =
a server to provide consistent access to the same data via IMAP (RFC3501) a=
s well as JMAP. As in IMAP, a message must belong to a mailbox, however in =
JMAP its id does not change if you move it between mailboxes, and the serve=
r may allow it to belong to multiple mailboxes simultaneously (often expose=
d in a user agent as labels rather than folders).<br></i></div><div><i><br>=
</i></div><div><i>As in IMAP, emails may also be assigned zero or more keyw=
ords: short arbitrary strings. These are primarily intended to store metada=
ta to inform client display, such as unread status or whether a message has=
 been replied to. An IANA registry allows common semantics to be shared bet=
ween clients and extended easily in the future.<br></i></div><div><i><br></=
i></div><div><i>A message and its replies are linked on the server by a com=
mon thread id. Clients may fetch the list of messages with a particular thr=
ead id to more easily present a threaded or conversational interface.<br></=
i></div><div><i><br></i></div><div><i>Permissions for message access happen=
 on a per-mailbox basis. Servers may give the user restricted permissions f=
or certain mailboxes, for example if another user&#39;s inbox has been shar=
ed read-only with them.</i></div></div></blockquote><div><br></div><div>Tha=
nks. This is helpful.</div><div> <br></div><blockquote class=3D"gmail_quote=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex"><div><div><br></div><div><br></div><blockquote type=3D"ci=
te" id=3D"gmail-m_-740981324471507406fastmail-quoted"><div>S 2.<br></div><d=
iv>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 *totalThreads*: &quot;Positiv=
eInt&quot; (server-set) The number of threads<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 where at least one email in the thr=
ead is in this mailbox.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>=
&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 *unreadThreads*: &quot;PositiveI=
nt&quot; (server-set) An indication of the<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 number of &quot;unread&quot; threads i=
n the mailbox.=C2=A0 This may be presented<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 by the client as a badge or marker ass=
ociated with the mailbox.<br></div><div><br></div><div>I know we&#39;re in =
8174-land, but it seems to me that this may is a bit<br></div><div>confusin=
g in any case. The client can do anything it wants with this<br></div><div>=
at all, right?<br></div></blockquote><div><br></div><div>Yes. The expected =
common use case is as described, however I&#39;m happy to just cut the sent=
ence.<br></div></div></blockquote><div><br></div><div>It&#39;s not a big de=
al, but I would.<br></div><div><br></div><blockquote class=3D"gmail_quote" =
style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa=
dding-left:1ex"><div><div></div><div><br></div><blockquote type=3D"cite" id=
=3D"gmail-m_-740981324471507406fastmail-quoted"><div>S 4.1.<br></div><div>&=
gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 list rather than a sing=
le part as messages may have headers and/or<br></div><div>&gt;=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 footers appended/prepended as separate=
 parts as they are<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 transmitted, and some clients send text and images intended to=
 be<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 disp=
layed inline in the body (or even videos and sound clips) as<br></div><div>=
&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 multiple parts rather =
than a single HTML part with referenced<br></div><div>&gt;=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 images.<br></div><div><br></div><div>Does=
 the server have to supply this? It seems like it&#39;s a bit of a<br></div=
><div>pain if you don&#39;t otherwise have a bunch of MIME-parsing machiner=
.<br></div></blockquote><div><br></div><div>Well, yes. The server MUST be a=
ble to do MIME parsing to implement the whole Email object, so I&#39;m not =
quite sure what to make of this comment. There is a suggested algorithm low=
er down in 4.1 for taking the <code style=3D"border-radius:3px;border-width=
:1px;border-style:solid;border-color:rgb(204,204,204);padding:1px 3px;backg=
round-image:initial;background-size:initial;background-repeat:initial;backg=
round-origin:initial;background-clip:initial;background-color:rgb(246,246,2=
46);font-family:menlo,consolas,monospace;font-size:90%">bodyParts</code> pr=
operty (the parsed MIME tree) and decomposing it into the appropriate <code=
 style=3D"border-radius:3px;border-width:1px;border-style:solid;border-colo=
r:rgb(204,204,204);padding:1px 3px;background-image:initial;background-size=
:initial;background-repeat:initial;background-origin:initial;background-cli=
p:initial;background-color:rgb(246,246,246);font-family:menlo,consolas,mono=
space;font-size:90%">textBody</code>/<code style=3D"border-radius:3px;borde=
r-width:1px;border-style:solid;border-color:rgb(204,204,204);padding:1px 3p=
x;background-image:initial;background-size:initial;background-repeat:initia=
l;background-origin:initial;background-clip:initial;background-color:rgb(24=
6,246,246);font-family:menlo,consolas,monospace;font-size:90%">htmlBody</co=
de> arrays.<br></div></div></blockquote><div><br></div><div>See my comment =
above. You don&#39;t actually say that I have to do this as opposed to (say=
) rejecting the request with an error.</div><div> <br></div><div><br></div>=
<div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><di=
v></div><blockquote type=3D"cite" id=3D"gmail-m_-740981324471507406fastmail=
-quoted"><div>S 4.1.2.3.<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div=
>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 Resent-Cc<br></div><div>&gt;=C2=
=A0=C2=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 Re=
sent-Bcc<br></div><div>&gt;=C2=A0=C2=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 Any header not defined in [RFC5322] or [RFC23=
69]<br></div><div><br></div><div>Can this list be updated in the future? If=
 so, how?<br></div></blockquote><div><br></div><div>This is a blacklist to =
prevent obviously nonsensical behaviour with common headers available today=
. Any future header not listed here may be used with the form. The blacklis=
t is primarily to help client authors realise more quickly if they are doin=
g something silly, but there is no danger if you were to use an inappropria=
te form with a header; it&#39;s just not very useful. A future RFC could up=
date the list of course, but I don&#39;t think it&#39;s likely to be necess=
ary.<br></div></div></blockquote><div><br></div><div>OK.</div><div><br></di=
v><div>-Ekr</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex"><div><div></div><div><br></div><blockquote type=3D"cite" id=3D"gmail=
-m_-740981324471507406fastmail-quoted"><div>S 9.2.<br></div><div>&gt;=C2=A0=
=C2=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Subtle differ=
ences in parsing of HTML can introduce security flaws:<br></div><div>&gt;=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 to filter with 100% accuracy you need to use=
 the same parser when<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sani=
tizing that the HTML rendering engine will use.<br></div><div>&gt;=C2=A0=C2=
=A0=C2=A0<br></div><div>&gt;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 o=C2=A0 Encapsul=
ating the message in an &quot;&lt;iframe sandbox&gt;&quot; can help<br></di=
v><div><br></div><div>You need a reference to this.<br></div></blockquote><=
div><br></div><div>Right, I have added a reference to the appropriate part =
of the HTML spec.<br></div><div><br></div><div>Cheers,<br></div><div>Neil.<=
br></div></div></blockquote></div></div>

--0000000000005244c105823f82ca--


From nobody Tue Feb 19 19:33:13 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 699F212785F; Tue, 19 Feb 2019 19:33:05 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=j5o7Q2R0; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=kgopYwZZ
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 zKefQP33jHks; Tue, 19 Feb 2019 19:33:03 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5931B12E036; Tue, 19 Feb 2019 19:33:03 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id AE27A22D3D; Tue, 19 Feb 2019 22:33:01 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Tue, 19 Feb 2019 22:33:01 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=783kxoURI8OtiqXay7YxOd9gT KJEMsoesInwTjq6frU=; b=j5o7Q2R0JsPvv1dqHT4k5fPtW3c0X6iQkKqngTDlH uFjZ1geyHrVj6UUj7gSkij9IMAq0RWdSCYuQLHMj02Tz4kS+Hi6EXoiHG1iluaoA 1zeMoLTyZpTxMuyHs6LhiYKl9XaPX2aomV8+vz7/6KqmH9QnZFp2I8lLGkAMCe4X hyofo7rjfaYwzq3hrrwkj1Jr9f158MDyJUwBdVOxykDYCGbW3KBxAzHbw5EDCzFx /w4HH0ZxZWB1NS5U1hLOLXoAmyfrILmX7nxFEMkqgJCZymYcxuSRmWrhVY7QPmS0 QBl79qR0hmiAcK8pcVR5MDjyY/8HJe7s4rqYaNIEFSjOw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=783kxoURI8OtiqXay 7YxOd9gTKJEMsoesInwTjq6frU=; b=kgopYwZZDblBAprV7NuqguhWC+W7RFuSD f1kHViAeRt31VSMsaAViE0GJMomXn+oWeKlOFHIviwng0uhEoHTZU3d7tmligQmH oMGHtbskHsij7uPgr7haFB9FWadFblJcNLdI0ZpgiJq/8OJkUtOPCCxTXEWYlH8d 8MX586OBfA+qwnPKlfmVDx7+EzRyYhQkjgudMKshHgf8TsT8kqXK8PT2Co2yN6Z7 Ur/fnR3lj7uGdQDDAiARC3HWpCBr/E8ph74gJNUBHR/rlbftuQ/EuVBJkG20Pdk6 vbniEJGeo3TBp3BQNT916GY2AMloX7EJ7mpI+Co2N9qN+PopnxDGg==
X-ME-Sender: <xms:bcpsXGeA2cQWkrsPzeiafiRUIMzTkmvRvS4iS3SUjNeGNnmMvwZn7Q>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdehgdeivdculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:bcpsXCAhlfAQUkk0hThDjD3c5PXsTJiD_TXoxIloKEdOYu4RJKBSQA> <xmx:bcpsXJQEJ1PjRBiti_IZ1jBSAW52VtLJf9ETbw88jtHXPPW07mvlpQ> <xmx:bcpsXFK1S86w_GctsIMLTn4lli27LYFXCAwTGZEz_7BbO2UaAGM3AA> <xmx:bcpsXEL3LErdxLpeluujJuzZFwo58w1JoKiiqH9uHwj3_PkWeEHnPw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 3AB572031F; Tue, 19 Feb 2019 22:33:01 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <3f1fd4b3-df27-4659-9a13-737cc47885ed@beta.fastmail.com>
In-Reply-To: <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com>
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com> <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com>
Date: Tue, 19 Feb 2019 22:33:00 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Eric Rescorla" <ekr@rtfm.com>
Cc: iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=88d466ddc5dd46e6978a63c00457f802
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/EHzuwePRTEZl0-rA6RUc_hCqmF4>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-ma?= =?utf-8?q?il-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 03:33:05 -0000

--88d466ddc5dd46e6978a63c00457f802
Content-Type: text/plain

On Wed, 20 Feb 2019, at 00:49, Eric Rescorla wrote:
> Well it's not just parsed representations. For instance, see S 4.1.1, which lists a bunch of metadata properties. Must the server include all of them

Yes, of course the server must support all of them. This is a description of the properties that may be fetched for this datatype. 

>  It seems you think the answer is that they all must be present but the document doesn't seem to say that anywhere

I am not really sure what to say here. If you don't implement the properties of a datatype defined in the spec, then you don't have a compliant implementation. It seems superfluous to start sprinkling more MUSTs around. There is no decision here, you are either implementing the spec or not.

Neil.
--88d466ddc5dd46e6978a63c00457f802
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Wed, 20 Feb =
2019, at 00:49, Eric Rescorla wrote:<br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div dir=3D"ltr"><div class=3D"fastmail-quoted-gm=
ail_quote"><div>Well it's not just parsed representations. For instance,=
 see S 4.1.1, which lists a bunch of metadata properties. Must the serve=
r include all of them<br></div></div></div></blockquote><div><br></div><=
div>Yes, of course the server must support all of them. This is a descri=
ption of the properties that may be fetched for this datatype.&nbsp;</di=
v><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div d=
ir=3D"ltr"><div class=3D"fastmail-quoted-gmail_quote"><div> It seems you=
 think the answer is that they all must be present but the document does=
n't seem to say that anywhere<br></div></div></div></blockquote><div><br=
></div><div>I am not really sure what to say here. If you don't implemen=
t the properties of a datatype defined in the spec, then you don't have =
a compliant implementation. It seems superfluous to start sprinkling mor=
e MUSTs around. There is no decision here, you are either implementing t=
he spec or not.<br></div><div><br></div><div>Neil.</div></body></html>
--88d466ddc5dd46e6978a63c00457f802--


From nobody Tue Feb 19 19:41:30 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0F6EB12EB11; Tue, 19 Feb 2019 19:41:29 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=WNzJVcpg; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=M/RL01bN
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 OzFHy_QLcRcM; Tue, 19 Feb 2019 19:41:27 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 67B2612E7C1; Tue, 19 Feb 2019 19:41:27 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 07AFB22269; Tue, 19 Feb 2019 22:41:26 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Tue, 19 Feb 2019 22:41:26 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=8bCT8RnTw5fdvh+rKCFNLoLQT xAhN07PPNWXTAmpBQY=; b=WNzJVcpgThOqeNvpeABwgV7QRHDNO9obbUU5Wy3Bp F7hC/9F0nZkmh9T6qF5b86jHVthKkVMVrMhNfWt+L8kDjbeMlzt114t+iAIIK6KP HKXFsqX24JKD9HwjD5sTPXABHTRyTkPgeI75/iz7PXpDF4VxREiOssMOyiPDNQVN 0zWSGgdak/iPGKO18lr2pnqqJMXf14I18ZQWKX44QkHBUgMmm1KP55iOltdCrw79 XG+5wj0oyz8v41odjsGIxgO6oST++FeZcF3MrEWElvIy2rR9nmIicNNZOY/3dnh3 p5a4hBrJu3JUvaTirgQCknujsj2c+aSwq9XS9GUhx78jQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=8bCT8RnTw5fdvh+rK CFNLoLQTxAhN07PPNWXTAmpBQY=; b=M/RL01bN2JB4Z0UhhLyAwFQzW2yzSVJFi 3J0Yie7SqWCmd9w8XhhIQ1ho65Dfrlxkcd0bLpMwWjbLQxDm7ePUIaYu1AkKKwu3 zUgRXgV9QH1t7dZGIjlhbJpm7JEMGL8in2oEWoCXNhfL9JxhqVIOFuiN9MUiGOXH /5+mmGLRgDdoYAiEbHjO2SnpIX80qtePokppJv7ltLs+gPTIRoSX9Tc25JNwG2s/ r4gjCqP/2M6UYTXuzUrBpojofk/whTBhZgwe9ZIs79SgQzMo8zJRazTlL996p/W4 E6osvxpKyYt9z3YEA4TR5G9tIsMUCd91IteDGNz/X72sUDU4L0Naw==
X-ME-Sender: <xms:ZcxsXJx-yQZZ8SG-wpjWbyRwKFYh-TNuPsenPFL5J38TRMW0Msmrjw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdehgdeigeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:ZcxsXDVwqD0ciocwtbysNR3d-seKqoXxOiOTW0OWPzABB3scfgmv6w> <xmx:ZcxsXDPAPXCmlN2JkjqaLezKI0l_9dvUeE0T9FlPUdKJcl991QfbHg> <xmx:ZcxsXNCiZTwXSZZoTwiEaj-d-bU9n0VfjKBMXDs_WjN1BDKXDG2w4w> <xmx:ZcxsXK3q0wOgknMeNXx4pXCcjTRmKrEIxAtIr0_sAch0NBrBZk-0bw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 173322031F; Tue, 19 Feb 2019 22:41:25 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com>
In-Reply-To: <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com>
Date: Tue, 19 Feb 2019 22:40:41 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Eric Rescorla" <ekr@rtfm.com>, "Martin Thomson" <martin.thomson@gmail.com>
Cc: iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=5f80cdb14b04404d981a5e6811975889
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/MMdg9_tLfWS9DGOD19s1nvyjmBE>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 03:41:29 -0000

--5f80cdb14b04404d981a5e6811975889
Content-Type: text/plain

On Tue, 19 Feb 2019, at 17:38, Martin Thomson wrote:
> This uses the design in RFC 8291 as I understand it. But the
> verification code is something on top of that.

Yes, the verification code was added at the request of the secdir review.

> The intent is to perform a routeability check on the subscription.

This was a secondary intent, however the primary intent was to prevent a JMAP server from being used as a DDOS amplification vector (a client registers a URL for a victim server rather than a push service, and that server responds with some kind of success code to the HTTP requests made for pushes; the client may now be able to get the JMAP server to make many requests to the victim server).

> In that way it is like the QUIC PATH_CHALLENGE, verifying that the client can receive messages. This opens the client to collusion: one client forwards messages for another, but the effect is that the JMAP server will send updates to the wrong client.

This is an entirely orthogonal issue.

> The client that should be receiving those messages can be duped into doing that if they can be convinced
> to set a subscription URI (and keys) that are controlled by an attacker and the attacker has the subscription URI (and keys) for the client. The attacker can forward the string along and have the client verify its string.

Well, sure. But this seems a slightly far-fetched scenario. And even then, the push data in JMAP contains very little (just tells you that the state of a collection of objects for a particular data type has changed; the actual changes are fetched via standard API requests).

> The problem Ekr cites here is a different one, where the client
> doesn't care who receives its messages. I think that suffers from
> problems of alignment of incentives (the client could also just
> broadcast all of its messages as it receives them), so I'm less
> concerned about that. I'm not sure that I even care about the
> forwarding thing enough to recommend any fix at all.

So, can we conclude that the current spec is fine here then; no changes are required? :)

Neil.
--5f80cdb14b04404d981a5e6811975889
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Tue, 19 Feb =
2019, at 17:38, Martin Thomson wrote:<br></div><blockquote type=3D"cite"=
 id=3D"fastmail-quoted"><div>This uses the design in RFC 8291 as I under=
stand it.&nbsp; But the<br></div><div>verification code is something on =
top of that.<br></div></blockquote><div><br></div><div>Yes, the verifica=
tion code was added at the request of the secdir review.</div><div><br><=
/div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>The intent is=
 to perform a routeability check on the subscription.<br></div></blockqu=
ote><div><br></div><div>This was a secondary intent, however the primary=
 intent was to prevent a JMAP server from being used as a DDOS amplifica=
tion vector (a client registers a URL for a victim server rather than a =
push service, and that server responds with some kind of success code to=
 the HTTP requests made for pushes; the client may now be able to get th=
e JMAP server to make many requests to the victim server).<br></div><div=
><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>In that=
 way it is like the QUIC PATH_CHALLENGE, verifying that the client can r=
eceive messages.&nbsp; This opens the client to collusion: one client fo=
rwards messages for another, but the effect is that the JMAP server will=
 send updates to the wrong client.<br></div></blockquote><div><br></div>=
<div>This is an entirely orthogonal issue.</div><div><br></div><blockquo=
te type=3D"cite" id=3D"fastmail-quoted"><div>The client that should be r=
eceiving those messages can be duped into doing that if they can be conv=
inced<br></div><div>to set a subscription URI (and keys) that are contro=
lled by an attacker and the attacker has the subscription URI (and keys)=
 for the client.&nbsp; The attacker can forward the string along and hav=
e the client verify its string.<br></div></blockquote><div><br></div><di=
v>Well, sure. But this seems a slightly far-fetched scenario. And even t=
hen, the push data in JMAP contains very little (just tells you that the=
 state of a collection of objects for a particular data type has changed=
; the actual changes are fetched via standard API requests).<br></div><d=
iv><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>The p=
roblem Ekr cites here is a different one, where the client<br></div><div=
>doesn't care who receives its messages.&nbsp; I think that suffers from=
<br></div><div>problems of alignment of incentives (the client could als=
o just<br></div><div>broadcast all of its messages as it receives them),=
 so I'm less<br></div><div>concerned about that.&nbsp; I'm not sure that=
 I even care about the<br></div><div>forwarding thing enough to recommen=
d any fix at all.<br></div></blockquote><div><br></div><div>So, can we c=
onclude that the current spec is fine here then; no changes are required=
? :)<br></div><div><br></div><div>Neil.</div></body></html>
--5f80cdb14b04404d981a5e6811975889--


From nobody Tue Feb 19 20:39:46 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 96281130DC2 for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 20:39:43 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 fQWEpCjz7_6x for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 20:39:41 -0800 (PST)
Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EBECA12F1A2 for <jmap@ietf.org>; Tue, 19 Feb 2019 20:39:40 -0800 (PST)
Received: by mail-lf1-x130.google.com with SMTP id l10so16515329lfh.9 for <jmap@ietf.org>; Tue, 19 Feb 2019 20:39:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=AiD6pZyMbfaS5OPddAZBqH8FDKFGW+jv8qFVD+tOCuc=; b=OPhjLlSSlDxU5ZqGQHk20FMTzaTVxemsS53maQISCXZJztpJQ1mOZU5A8WtFvdNQ48 G1yle5nd0wTdJnHt8Wll5gWrw15e9qMWoKT+aYekzSa/mXlfwbPyZEkPG0C1NHdBfXxV QChMU6BXZfa87zbHZ29lAs04JAFN7YtmmoyCWKdh36DTli78+IPWqUXre1Rkiza73Voq F6zeMG3R4nYEP0l2iMxmTxXeBojLjf+x2v2aE2yviu3roKbtAYPeae36okGKyBf+kzaL 8a2fOT3Y1br5JBmzLuzZzqRd0/SvBb6alQC3ICYE4j0T1pl8rs2nU9XTzQFC0yMlPJdx WyGQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=AiD6pZyMbfaS5OPddAZBqH8FDKFGW+jv8qFVD+tOCuc=; b=T5vu+F9QcdnfOzqwgKlp6dqtChD1bmxatk6gpOPC2XSDhrEji8bawPEqSzpJyew3Lg INjRXRYQeZJT0NrTSDPti6PSgJL2aohFiuync/EwwoO4lC11cZ7JAVnzLf2VTKGjJRBP H3qDcisoK7po8ZryWMdZ22QWy1fgB2I7s+kFlgfzfShJZ+CK9OnRKzhuJqT7oKMt7B89 8FUFEZd0aBtT8dfqOSkSa9JoDrIyf/0Ru3pDtGHbo2tVLbbys+CNivpr1QKRn7KWagfu 754HMRc2Bd9FaZ3nItdCwD8o+J0bSMmaI5Yc7YZEzXG/Iq8jN8owUHF0pQNAjUaCOMy3 WOzA==
X-Gm-Message-State: AHQUAuaRjowrObC/xoUATQ2aC7oh8w5pHIZVtqVL2QytNbSHLuHIGtC4 2aX4/+y9DQBO6l8nefmmUSxnJ/zohRrNbFHRXvz9gw==
X-Google-Smtp-Source: AHgI3IYi0tFwSWLoQ0hn62OB9YspRt9T2Fp1krIiAibwhMo/xv75mcAAkZslQLZB6toQXSCY3IXEnsHbcu+Z3keb1HA=
X-Received: by 2002:a19:5013:: with SMTP id e19mr18650730lfb.89.1550637579108;  Tue, 19 Feb 2019 20:39:39 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com> <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com>
In-Reply-To: <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Tue, 19 Feb 2019 20:39:00 -0800
Message-ID: <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: Martin Thomson <martin.thomson@gmail.com>, iesg <iesg@ietf.org>,  IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="00000000000014180505824bf2fe"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/KR5V0Qf0-jP3krXTtRmeBWHLnt0>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 04:39:44 -0000

--00000000000014180505824bf2fe
Content-Type: text/plain; charset="UTF-8"

On Tue, Feb 19, 2019 at 7:41 PM Neil Jenkins <neilj@fastmailteam.com> wrote:

> On Tue, 19 Feb 2019, at 17:38, Martin Thomson wrote:
>
> This uses the design in RFC 8291 as I understand it.  But the
> verification code is something on top of that.
>
>
> Yes, the verification code was added at the request of the secdir review.
>
> The intent is to perform a routeability check on the subscription.
>
>
> This was a secondary intent, however the primary intent was to prevent a
> JMAP server from being used as a DDOS amplification vector (a client
> registers a URL for a victim server rather than a push service, and that
> server responds with some kind of success code to the HTTP requests made
> for pushes; the client may now be able to get the JMAP server to make many
> requests to the victim server).
>
> In that way it is like the QUIC PATH_CHALLENGE, verifying that the client
> can receive messages.  This opens the client to collusion: one client
> forwards messages for another, but the effect is that the JMAP server will
> send updates to the wrong client.
>
>
> This is an entirely orthogonal issue.
>
> The client that should be receiving those messages can be duped into doing
> that if they can be convinced
> to set a subscription URI (and keys) that are controlled by an attacker
> and the attacker has the subscription URI (and keys) for the client.  The
> attacker can forward the string along and have the client verify its string.
>
>
> Well, sure. But this seems a slightly far-fetched scenario. And even then,
> the push data in JMAP contains very little (just tells you that the state
> of a collection of objects for a particular data type has changed; the
> actual changes are fetched via standard API requests).
>
> The problem Ekr cites here is a different one, where the client
> doesn't care who receives its messages.  I think that suffers from
> problems of alignment of incentives (the client could also just
> broadcast all of its messages as it receives them), so I'm less
> concerned about that.  I'm not sure that I even care about the
> forwarding thing enough to recommend any fix at all.
>
>
> So, can we conclude that the current spec is fine here then; no changes
> are required? :)
>

I'm not sure of that, no. To the extent to which this mechanism is supposed
to prevent DoS, it's not clear to me that it does that.

-Ekr


> Neil.
>

--00000000000014180505824bf2fe
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Tue, Feb 19, 2019 at 7:41 PM Neil =
Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.com">neilj@fastmailteam.co=
m</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
><u></u><div><div>On Tue, 19 Feb 2019, at 17:38, Martin Thomson wrote:<br><=
/div><blockquote type=3D"cite" id=3D"gmail-m_302523276124556755fastmail-quo=
ted"><div>This uses the design in RFC 8291 as I understand it.=C2=A0 But th=
e<br></div><div>verification code is something on top of that.<br></div></b=
lockquote><div><br></div><div>Yes, the verification code was added at the r=
equest of the secdir review.</div><div><br></div><blockquote type=3D"cite" =
id=3D"gmail-m_302523276124556755fastmail-quoted"><div>The intent is to perf=
orm a routeability check on the subscription.<br></div></blockquote><div><b=
r></div><div>This was a secondary intent, however the primary intent was to=
 prevent a JMAP server from being used as a DDOS amplification vector (a cl=
ient registers a URL for a victim server rather than a push service, and th=
at server responds with some kind of success code to the HTTP requests made=
 for pushes; the client may now be able to get the JMAP server to make many=
 requests to the victim server).<br></div><div><br></div><blockquote type=
=3D"cite" id=3D"gmail-m_302523276124556755fastmail-quoted"><div>In that way=
 it is like the QUIC PATH_CHALLENGE, verifying that the client can receive =
messages.=C2=A0 This opens the client to collusion: one client forwards mes=
sages for another, but the effect is that the JMAP server will send updates=
 to the wrong client.<br></div></blockquote><div><br></div><div>This is an =
entirely orthogonal issue.</div><div><br></div><blockquote type=3D"cite" id=
=3D"gmail-m_302523276124556755fastmail-quoted"><div>The client that should =
be receiving those messages can be duped into doing that if they can be con=
vinced<br></div><div>to set a subscription URI (and keys) that are controll=
ed by an attacker and the attacker has the subscription URI (and keys) for =
the client.=C2=A0 The attacker can forward the string along and have the cl=
ient verify its string.<br></div></blockquote><div><br></div><div>Well, sur=
e. But this seems a slightly far-fetched scenario. And even then, the push =
data in JMAP contains very little (just tells you that the state of a colle=
ction of objects for a particular data type has changed; the actual changes=
 are fetched via standard API requests).<br></div><div><br></div><blockquot=
e type=3D"cite" id=3D"gmail-m_302523276124556755fastmail-quoted"><div>The p=
roblem Ekr cites here is a different one, where the client<br></div><div>do=
esn&#39;t care who receives its messages.=C2=A0 I think that suffers from<b=
r></div><div>problems of alignment of incentives (the client could also jus=
t<br></div><div>broadcast all of its messages as it receives them), so I&#3=
9;m less<br></div><div>concerned about that.=C2=A0 I&#39;m not sure that I =
even care about the<br></div><div>forwarding thing enough to recommend any =
fix at all.<br></div></blockquote><div><br></div><div>So, can we conclude t=
hat the current spec is fine here then; no changes are required? :)<br></di=
v></div></blockquote><div><br></div><div>I&#39;m not sure of that, no. To t=
he extent to which this mechanism is supposed to prevent DoS, it&#39;s not =
clear to me that it does that.<br></div><div><br></div><div>-Ekr</div><div>=
<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div></div=
><div><br></div><div>Neil.</div></div></blockquote></div></div>

--00000000000014180505824bf2fe--


From nobody Tue Feb 19 20:41:30 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 214B4130DC0 for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 20:41:28 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 Yt7GTJYsEkU7 for <jmap@ietfa.amsl.com>; Tue, 19 Feb 2019 20:41:26 -0800 (PST)
Received: from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com [IPv6:2a00:1450:4864:20::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6607412F18C for <jmap@ietf.org>; Tue, 19 Feb 2019 20:41:26 -0800 (PST)
Received: by mail-lj1-x22b.google.com with SMTP id l5so16208438lje.1 for <jmap@ietf.org>; Tue, 19 Feb 2019 20:41:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=vHbMjgTQnuGfADfV6LFq6hqn9B5rf5Hkny7bUbQKXV0=; b=om2P2nX+4o8T/IRLZ6AwCvpO4qcywA8JmXxIiYh9ZwtV+bGUjOxy5ezpPUXdwoDkUX SWeZc1tSK+3bmYJ5Mwp+LVCGdM0mXUFfGbz/TQuESBsR1T8JEJjXAUUV6bdpcDKpniON fb8wyW/C2yY1+BjMCvz/uaOFYnF9jJIawJdr/EQTGWwYBz+TX7sw7iKzDRNcp96rfPFX RwQvJAYIDvMKMmh7dhyUA1cuW38X6SnWM06hwrG14jn3mWm6QFEOtQ/sOod8G5McAxSV kcJYxIEp6iaeUi7C7Md940TIPSUNtQNw3wZK23iAwiFPYpvxgYiJvZtK4gVismvyUlFM gjZA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=vHbMjgTQnuGfADfV6LFq6hqn9B5rf5Hkny7bUbQKXV0=; b=oHF9eryxA3K5BkUaaVYo0XL+H6mqwgK0qQw71OeVv2xCSZx9xgjDOd6W5TYu84KxvV TUi/CJb09wymvnKpeMc0/0QdGUadc97nUSebdJwWbOCsJ5Q2CSd2kbUV78teg34BqNHN qP4CHEYsAy1iOflmkz+P2j/ikykPMX1wxhDhhxsy0XQJSTjIwi3Ufr2VWHgIa4gtMLwG AgzJbV++wud5kvOLqLBJj2dkoyExe3yXh8KrN/axGhX9aiPJC2XZgE8uwALHlGhxiqv+ FGKAaXslVegJr+U1HR8Da1YqV86RRxVFlZ7EA9f0kZKu7q5WFNwaIAESKR9n6GmO5Kay /jlQ==
X-Gm-Message-State: AHQUAuZBTVfqsgI29vrZMWCYRrLw18Xyitg/XnOfJSizJfZn9Y87iRNw 8iVnEnqpyZghrfN9n69wgV3mpToZgJfHIkCFEyXiGZ+m
X-Google-Smtp-Source: AHgI3IbYn+m2wog2lmPdY82UJsIrKBjvY5bKt/Cwo0y0eRxG5h4LVIPCownycRqan9tXefhwTjFm0r7jcpc48k5mk4o=
X-Received: by 2002:a2e:5d59:: with SMTP id r86mr12321617ljb.158.1550637684556;  Tue, 19 Feb 2019 20:41:24 -0800 (PST)
MIME-Version: 1.0
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com> <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com> <3f1fd4b3-df27-4659-9a13-737cc47885ed@beta.fastmail.com>
In-Reply-To: <3f1fd4b3-df27-4659-9a13-737cc47885ed@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Tue, 19 Feb 2019 20:40:46 -0800
Message-ID: <CABcZeBM_EmzEF87gzEmUW2tu7JmdGQ+Xj7kXDv6=Zdsngq6zUg@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: iesg <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="0000000000005d1dc405824bf8c4"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/1iz-ThE3Sb8r49xaeyiuJnIvLwA>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 04:41:28 -0000

--0000000000005d1dc405824bf8c4
Content-Type: text/plain; charset="UTF-8"

On Tue, Feb 19, 2019 at 7:33 PM Neil Jenkins <neilj@fastmailteam.com> wrote:

> On Wed, 20 Feb 2019, at 00:49, Eric Rescorla wrote:
>
> Well it's not just parsed representations. For instance, see S 4.1.1,
> which lists a bunch of metadata properties. Must the server include all of
> them
>
>
> Yes, of course the server must support all of them. This is a description
> of the properties that may be fetched for this datatype.
>
> It seems you think the answer is that they all must be present but the
> document doesn't seem to say that anywhere
>
>
> I am not really sure what to say here. If you don't implement the
> properties of a datatype defined in the spec, then you don't have a
> compliant implementation. It seems superfluous to start sprinkling more
> MUSTs around. There is no decision here, you are either implementing the
> spec or not.
>

That's not generically true of IETF specifications. We routinely define
functionality that people aren't required to support or can return errors
for.

If it's a conformance property to support these properties, then you need
to actually say so. It's not superfluous at all.

-Ekr


> Neil.
>

--0000000000005d1dc405824bf8c4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Tue, Feb 19, 2019 at 7:33 PM Neil =
Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.com">neilj@fastmailteam.co=
m</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
><u></u><div><div>On Wed, 20 Feb 2019, at 00:49, Eric Rescorla wrote:<br></=
div><blockquote type=3D"cite" id=3D"gmail-m_-7795710326421140372fastmail-qu=
oted"><div dir=3D"ltr"><div class=3D"gmail-m_-7795710326421140372fastmail-q=
uoted-gmail_quote"><div>Well it&#39;s not just parsed representations. For =
instance, see S 4.1.1, which lists a bunch of metadata properties. Must the=
 server include all of them<br></div></div></div></blockquote><div><br></di=
v><div>Yes, of course the server must support all of them. This is a descri=
ption of the properties that may be fetched for this datatype.=C2=A0</div><=
div><br></div><blockquote type=3D"cite" id=3D"gmail-m_-7795710326421140372f=
astmail-quoted"><div dir=3D"ltr"><div class=3D"gmail-m_-7795710326421140372=
fastmail-quoted-gmail_quote"><div> It seems you think the answer is that th=
ey all must be present but the document doesn&#39;t seem to say that anywhe=
re<br></div></div></div></blockquote><div><br></div><div>I am not really su=
re what to say here. If you don&#39;t implement the properties of a datatyp=
e defined in the spec, then you don&#39;t have a compliant implementation. =
It seems superfluous to start sprinkling more MUSTs around. There is no dec=
ision here, you are either implementing the spec or not.</div></div></block=
quote><div>=C2=A0<br></div><div>That&#39;s not generically true of IETF spe=
cifications. We routinely define functionality that people aren&#39;t requi=
red to support or can return errors for.</div><div><br></div><div>If it&#39=
;s a conformance property to support these properties, then you need to act=
ually say so. It&#39;s not superfluous at all.<br></div><div>=C2=A0<br></di=
v><div>-Ekr</div><div><br></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex"><div><div><br></div><div>Neil.</div></div></blockquote></div></div>

--0000000000005d1dc405824bf8c4--


From nobody Tue Feb 19 22:37:01 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7BD2512426A; Tue, 19 Feb 2019 22:36:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=ZI/6IRJE; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=4bYp0sXT
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 VCC7Jk3bN_iT; Tue, 19 Feb 2019 22:36:50 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 4F2611200B3; Tue, 19 Feb 2019 22:36:50 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id CD1BD343F; Wed, 20 Feb 2019 01:36:48 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Wed, 20 Feb 2019 01:36:49 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=jCS/9zxGFt59B+pecb0Ws1/Z9 toY/xhLlZSQ3ZnECpY=; b=ZI/6IRJEX5rqJ5hplDW+xr02FMrxcMAKIDYdlAbMU C3y1gKwMlP9qMKz2xdyHOmL9TQAz7MqZsEhlI5T/0NLOEJ4/rJ75+CVpV1xshVIE fZ6LlRqPmFXGIxSd21rznv17v37bh7gCsTVzkjW7hPconyqi01vZtA3ARW40GSSW xvYWoVCr66asssCiUDYagYD/zPB1QM1EjdbX7MNaZdqT9GJ+SegbGx7fyMOsHtQa nL8x2T6Vf+zf8d4mSs5UxtNVRIq1uJ3vSiU/AfCOqOiZGwixHxovxoDeM77jDF7Y NCJALc0PkHtfyWgxIoboHiXXeIy7h9Nf6WsdIewgjHHnQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=jCS/9zxGFt59B+pec b0Ws1/Z9toY/xhLlZSQ3ZnECpY=; b=4bYp0sXT4soRBzHM36+y35fD0oI5W5HmY dHkawwsURdj9+RRbPLrtuywnuhHMP9aLCTvV2j3XE900aRbHJyJwaLslbtpzmnSG oUKaQpwGge62d7TQ+EIHTGvOQb+CWWJ88t4NKX/E05OP1o0KYq89v6HtQE5Radqx LKpYLBONrI5awUuEmkhRxVTaXpcB0YNTpE2FhT6i7n32KXdJmqE4DZfdegOgCU0l pHIr1nLHQf6iGSJ8pTIoWlavP4LdRacFeigvfhW5OEWLa8jrV+T8zxqb/P6m2PQA CITxYPHf109zd2PvuGTOdsLO97DB0xJS/6B0Swk+8x2xbXBKGyxug==
X-ME-Sender: <xms:f_VsXDzmeNOAMj53rO9w-FVZgEbC3GwgoBZfxaAI7caN5hxTxXAfrg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdehgddutddtucdltddurdegtdelrddttd dmucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhht necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgfkjghffffhvffutgesrgdtreerreerjeenucfhrhhomhepfdfpvghi lhculfgvnhhkihhnshdfuceonhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhmqe enucffohhmrghinhepfiefrdhorhhgnecurfgrrhgrmhepmhgrihhlfhhrohhmpehnvghi lhhjsehfrghsthhmrghilhhtvggrmhdrtghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:f_VsXBbTLu7uiXacfuIdXT8TEEqHwMbP2vEFUDkvSn0X4uv_pG9ukg> <xmx:f_VsXD1WD_KHMAsbAYx1e5pTtyCDnosiSFIhCOT8mWVzZsk9VLXg_w> <xmx:f_VsXHgb1w606cjWlcRRKmum2P8NjSEnGumrzNBpQ_yuaSC2YG0xRQ> <xmx:gPVsXKoYqjx3HU_2FkfWfcdGxCLEkAe6NTXSssMSQlTPeZspSZAYHA>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 931772031F; Wed, 20 Feb 2019 01:36:47 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <d6e2781a-8c8b-40b6-b20a-9146b975040c@beta.fastmail.com>
In-Reply-To: <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com> <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com> <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com>
Date: Wed, 20 Feb 2019 01:36:44 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Eric Rescorla" <ekr@rtfm.com>
Cc: "Martin Thomson" <martin.thomson@gmail.com>, iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=ee2149c43d7a4a568ec7785ce978a559
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/5RSW1hYsheAoh4h2XM7cpJhoszo>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 06:36:53 -0000

--ee2149c43d7a4a568ec7785ce978a559
Content-Type: text/plain

On Wed, 20 Feb 2019, at 15:39, Eric Rescorla wrote:
> I'm not sure of that, no. To the extent to which this mechanism is supposed to prevent DoS, it's not clear to me that it does that.

This doesn't seem to be a JMAP-specific problem to me though. Anyone integrating with web push (i.e. RFC8030) is going to get an arbitrary URL from the browser registered with them. They will need to make requests to this URL in order to push data back to the client. A malicious user could always replace the URL; so what are you meant to do? The verification step we've added vastly reduces the potential targets for this attack. I think the remaining risk is minimal and acceptable. There is no guidance on this as far as I can see in RFC8030 (which only discusses denial-of-service possibilities against the user agent) or in the W3 Push API <https://www.w3.org/TR/push-api/> spec.

Neil.
--ee2149c43d7a4a568ec7785ce978a559
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Wed, 20 Feb =
2019, at 15:39, Eric Rescorla wrote:<br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div dir=3D"ltr"><div>I'm not sure of that, no. T=
o the extent to which this mechanism is supposed to prevent DoS, it's no=
t clear to me that it does that.<br></div></div></blockquote><div><br></=
div><div>This doesn't seem to be a JMAP-specific problem to me though. A=
nyone integrating with web push (i.e. RFC8030) is going to get an arbitr=
ary URL from the browser registered with them. They will need to make re=
quests to this URL in order to push data back to the client. A malicious=
 user could always replace the URL; so what are you meant to do? The ver=
ification step we've added vastly reduces the potential targets for this=
 attack. I think the remaining risk is minimal and acceptable. There is =
no guidance on this as far as I can see in RFC8030 (which only discusses=
 denial-of-service possibilities against the user agent) or in the <a hr=
ef=3D"https://www.w3.org/TR/push-api/">W3 Push API</a> spec.<br></div><d=
iv><br></div><div>Neil.</div></body></html>
--ee2149c43d7a4a568ec7785ce978a559--


From nobody Wed Feb 20 05:42:54 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2F14712F18C for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 05:42:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 7D7fiqI0drBz for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 05:42:50 -0800 (PST)
Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id DEA4A12E036 for <jmap@ietf.org>; Wed, 20 Feb 2019 05:42:49 -0800 (PST)
Received: by mail-lj1-x236.google.com with SMTP id v16so20786743ljg.13 for <jmap@ietf.org>; Wed, 20 Feb 2019 05:42:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kxUyBJjbdD1aFVPm1UMole43xoc5CgRaF8gNEysvXnQ=; b=ZPskgc4+fJLALfxxjHp177aW3MoJ7q7UiN0xslhbuwwi2A6u4zmXudjtaAtQELmnhk fUklCtB/Z6U+BGtcb8vCSwy1BI9iBMfoukvnUylwmPq4va0jqrT6bvgCDtK67kNWgKM/ DZrUwixrI5ldkGe0KgjrTA0XtVCoUDeGkyDwbzQ6SqISQKyDKigp6qsv3sJJuO6QSD5X TAD3mp41GwUynvhVcnBVtSCIdrN1pUQQJktr/lmPVwFgFKztvtQFb6Z3ypEz0YJae4zM PvC1/U3VvII/xhuEhdaLZTCeCcrsCSpjzVK0CBGLY5n9SD524PGshFEJ3oapVlyiqlfi gP3Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kxUyBJjbdD1aFVPm1UMole43xoc5CgRaF8gNEysvXnQ=; b=VCQZXQ503yOD7vCRrI1uvlsuGqKGMQHpmV3Ac2/p6WPpqt+y0m4aoFqX/YHxPS5E45 65eRzHGWek2oNKS8Ej0hU9aUxCAIZzxzDimRSqr+L7ZG/8Gn2j85+I79qLQdb5G0uFGX dLPo2dPT/D2T3Pt9FVqJDQ7Wekm/Pzb9pf2nnCKnPovG0xSHczTwjd/VuaIU5Jn4iPun cvh00TGYVo6nYSJP7h0JOErbT3mGVEKD3wa2J2ZTTfRjVqFCuiEHI25C8R31Wt8As+wB urb3g/N3oZRc3mgI1csB+DUVQ/e9kBBoNHeBtweoYmtKb1t/lsQmy2vVBL0I+7guFFsd yE7w==
X-Gm-Message-State: AHQUAuZZ/WPy68s2XUPEVvHEVeQ+oa23fYN5lwl5iqBw1q5vIgoZUFb9 lweOHIFsLRZ/o1jCYrA9AVRUNdaZISwNaPbaHim3mg==
X-Google-Smtp-Source: AHgI3IZuZkKXVahnhfRDnwEkAHojUUpOIV09yGPpPzKT0uQHjb0iyTtFOBLS4yRZ/tx4NqvtlOrYvaPbxyhJfEp0b78=
X-Received: by 2002:a2e:3c19:: with SMTP id j25mr20468115lja.72.1550670167953;  Wed, 20 Feb 2019 05:42:47 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com> <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com> <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com> <d6e2781a-8c8b-40b6-b20a-9146b975040c@beta.fastmail.com>
In-Reply-To: <d6e2781a-8c8b-40b6-b20a-9146b975040c@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Wed, 20 Feb 2019 05:42:10 -0800
Message-ID: <CABcZeBPKbVJEYaJW5nT-8VbOOnkE+=bZ9NYo7ZY09cdbUTYUoQ@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: Martin Thomson <martin.thomson@gmail.com>, iesg <iesg@ietf.org>,  IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="0000000000008679ec058253884c"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/tbY8wQuzJtKBl9ifS3NM2BUnVmE>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 13:42:52 -0000

--0000000000008679ec058253884c
Content-Type: text/plain; charset="UTF-8"

On Tue, Feb 19, 2019 at 10:36 PM Neil Jenkins <neilj@fastmailteam.com>
wrote:

> On Wed, 20 Feb 2019, at 15:39, Eric Rescorla wrote:
>
> I'm not sure of that, no. To the extent to which this mechanism is
> supposed to prevent DoS, it's not clear to me that it does that.
>
>
> This doesn't seem to be a JMAP-specific problem to me though. Anyone
> integrating with web push (i.e. RFC8030) is going to get an arbitrary URL
> from the browser registered with them.They will need to make requests to
> this URL in order to push data back to the client. A malicious user could
> always replace the URL; so what are you meant to do? The verification step
> we've added vastly reduces the potential targets for this attack. I think
> the remaining risk is minimal and acceptable. There is no guidance on this
> as far as I can see in RFC8030 (which only discusses denial-of-service
> possibilities against the user agent) or in the W3 Push API
> <https://www.w3.org/TR/push-api/> spec.
>

It's probably worth starting by trying to scope the risk, which is that you
have a system in which the attacker configures an alleged push URL that is
actually a third party victim server and the result is that the mail server
now spams that server with notifications about message changes to the
user's mailbox. Do we agree on that?

There are two primary mitigation mechanisms one might have against this
kind of attack:

1. Have a whitelist of known push servers
2. Have a mechanism where the recipient proves that this URL is actually
under their control in some positive sense.

My sense is that in WebPush (whatever RFC 8030 says) there was an
expectation that you would know which were valid push servers or not (i.e.,
the first design). This would still leave the residual risk of pushing to
someone else's account, which might or might not be a big deal but
presumably push servers can deal with. The design in this document is of
the second type, but what you're actually proving is not *control* of the
endpoint but rather that you can access the data sent to it, which is a
slightly different property. You'll note that ACME requires control, not
this. I agree that this reduces the risk, but that doesn't mean that
there's not one.

Given the desire to have this work with existing 8030 endpoints, I think
this is something we can live with, as long as you document it properly in
Security Considerations.

-Ekr

--0000000000008679ec058253884c
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Tue, Feb 19, 2019 at 10:36 PM Neil=
 Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.com" target=3D"_blank">ne=
ilj@fastmailteam.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex"><div><div>On Wed, 20 Feb 2019, at 15:39, Eric Rescorla =
wrote:<br></div><blockquote type=3D"cite" id=3D"m_8126596885721243006gmail-=
m_-1256147193409821745fastmail-quoted"><div dir=3D"ltr"><div>I&#39;m not su=
re of that, no. To the extent to which this mechanism is supposed to preven=
t DoS, it&#39;s not clear to me that it does that.<br></div></div></blockqu=
ote><div><br></div><div>This doesn&#39;t seem to be a JMAP-specific problem=
 to me though. Anyone integrating with web push (i.e. RFC8030) is going to =
get an arbitrary URL from the browser registered with them.They will need t=
o make requests to this URL in order to push data back to the client. A mal=
icious user could always replace the URL; so what are you meant to do? The =
verification step we&#39;ve added vastly reduces the potential targets for =
this attack. I think the remaining risk is minimal and acceptable. There is=
 no guidance on this as far as I can see in RFC8030 (which only discusses d=
enial-of-service possibilities against the user agent) or in the <a href=3D=
"https://www.w3.org/TR/push-api/" target=3D"_blank">W3 Push API</a> spec.<b=
r></div></div></blockquote><div><br></div></div><div class=3D"gmail_quote">=
It&#39;s probably worth starting by trying to scope the risk, which is that=
 you have a system in which the attacker configures an alleged push URL tha=
t is actually a third party victim server and the result is that the mail s=
erver now spams that server with notifications about message changes to the=
 user&#39;s mailbox. Do we agree on that?</div><div class=3D"gmail_quote"><=
br></div><div class=3D"gmail_quote">There are two primary mitigation mechan=
isms one might have against this kind of attack:</div><div class=3D"gmail_q=
uote"><br></div><div class=3D"gmail_quote">1. Have a whitelist of known pus=
h servers</div><div class=3D"gmail_quote">2. Have a mechanism where the rec=
ipient proves that this URL is actually under their control in some positiv=
e sense.</div><div class=3D"gmail_quote"><br></div><div class=3D"gmail_quot=
e">My sense is that in WebPush (whatever RFC 8030 says) there was an expect=
ation that you would know which were valid push servers or not (i.e., the f=
irst design). This would still leave the residual risk of pushing to someon=
e else&#39;s account, which might or might not be a big deal but presumably=
 push servers can deal with. The design in this document is of the second t=
ype, but what you&#39;re actually proving is not *control* of the endpoint =
but rather that you can access the data sent to it, which is a slightly dif=
ferent property. You&#39;ll note that ACME requires control, not this. I ag=
ree that this reduces the risk, but that doesn&#39;t mean that there&#39;s =
not one.</div><div class=3D"gmail_quote"><br></div><div class=3D"gmail_quot=
e">Given the desire to have this work with existing 8030 endpoints, I think=
 this is something we can live with, as long as you document it properly in=
 Security Considerations.<br></div><div class=3D"gmail_quote"><br></div><di=
v class=3D"gmail_quote">-Ekr</div><div class=3D"gmail_quote"><br></div></di=
v>

--0000000000008679ec058253884c--


From nobody Wed Feb 20 11:38:04 2019
Return-Path: <alissa@cooperw.in>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 4B744130E7F; Wed, 20 Feb 2019 11:37:58 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Alissa Cooper <alissa@cooperw.in>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155069147829.31490.10165764411800945653.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 11:37:58 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/2ct02BcsVckwHdDF9ZzBuADijzI>
Subject: [Jmap] Alissa Cooper's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 19:37:59 -0000

Alissa Cooper has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

= Section 7.2 =

There is something I'm not understanding about this:

*deviceClientId*: "String" (immutable) An id that uniquely
      identifies the client + device it is running on.  The purpose of
      this is to allow clients to identify which PushSubscription
      objects they created even if they lose their local state, so they
      can revoke or update them.  This string MUST be different on
      different devices, and be different from other vendors.  It SHOULD
      be easy to re-generate, not depend on persisted state.  A secure
      hash that includes both a device id and vendor id is one way this
      could be achieved.

I don't understand why device ID needs to be incorporated in order to achieve
uniqueness here. Really it seems like what is needed is a unique ID per client,
full stop. Even if you have the unlikely scenario of two clients running on the
same device from the same vendor (say, one for mail and one for calendar), you
would still want to support the ability for each client independently to be
able to recover its push subscriptions, right? Some JMAP servers may have
device IDs for other reasons anyway, but setting this up this way seems like it
opens the door for clients to unnecessarily share device IDs with JMAP servers
in other cases.

Related to this, I don't understand the "SHOULD ... not depend on persisted
state." Why? I presume it would be straightforward to produce a unique client
ID that did not have the device ID embedded if this requirement were not there.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

= Section 1.1 =

Please use the RFC 8174 boilerplate instead of the RFC 2119 boilerplate.

= Section 2=

s/To avoid conflict, the identifiers for these MUST be a URL with a domain
owned by the vendor./To avoid conflict, an identifier for a vendor-specific
extension MUST be a URL with a domain owned by the vendor./

= Section 8 =

Depending on the outcome of the discussion related to the DISCUSS point above,
I think it would be appropriate to describe or even normatively require client
ID construction such that client IDs are opaque and can change over time at the
client's choosing.



From nobody Wed Feb 20 13:53:10 2019
Return-Path: <alissa@cooperw.in>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5A1DC129C6A; Wed, 20 Feb 2019 13:52:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.701
X-Spam-Level: 
X-Spam-Status: No, score=-2.701 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=cooperw.in header.b=hB3yFV2z; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=AoeTXnyN
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 ILKwuD3Gby8h; Wed, 20 Feb 2019 13:52:53 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 85161130E84; Wed, 20 Feb 2019 13:52:53 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 73B1B3176; Wed, 20 Feb 2019 16:52:52 -0500 (EST)
Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Wed, 20 Feb 2019 16:52:52 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cooperw.in; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=fm2; bh=B JJyCBWV+gpZNJjhu4gx7RLZca0xVhJy+yJN+1YyeaQ=; b=hB3yFV2zUnrgZlxtb +5gEZ8keWo2OFu2EillvlY4aIvOjEyJQWTZ7Is6tXHr/d6FF9KBsLG2JqxTXHJfH 28irZBr4U5OE6bAMxH8Dambv1Wk908MS9rOyrOjAi+pWUCSlFaRMO42azl/whPeO uLjOjrKyeXsR+iYm2X3lO/bqzlEMzir2tGpFdsX8OUJ8d5Xz2MuQNdObh+TNLQqR sSmZsZ3pvx91KVsIqTkt+4vT69yaJpWW+vA5pD64+RmuTU9B4YBA1xc2/ssBzkpL e27rvZxmwlj7IUDPqAzJF7TN5NAYl0E+iWnE8s2yi8iWQOMJdVx7OWsZRjzrXbCq 65zSw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=BJJyCBWV+gpZNJjhu4gx7RLZca0xVhJy+yJN+1Yye aQ=; b=AoeTXnyNSq5GAaJcFhU0Zp/JMNkNxBMqPkSFhRVylYaI83oAFrMORy0YH UZjLPFq/hik13Fcnrl4tT/UwH8yYAI47yuw7HdXTpv9F+0VqRAtCdoKWJPcmt2AZ KojSayfHIK8dGt5DEIOJGYYp9VXDnn8hpXtQsMqImRXuTT5Xsd+G7lfriJQkybwj zD0RExqpm1D6DiqSG4Z6t6kSpQ9sHqB6PAOZAxLiOUqoQTKqDyOM3hzBsnC3FGMp BixZiaOOzGYRaFF5auH+7rxQQzJUgoDLCE3sjnxu8RQt51ytuyOa2rad4sQ+qkyT CIdkNrRe74BSxIezxRPEy1XDWEgfA==
X-ME-Sender: <xms:M8xtXB5UNniKxNbTE6nMOsVTTXsekZpd8GVi-xFd8uiY1_YVFy71Jg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdeigdduheegucdltddurdegtdelrddttd dmucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhht necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpegtggfuhfgjfffgkfhfvffosehtqhhmtdhhtddvnecuhfhrohhmpeetlhhi shhsrgcuvehoohhpvghruceorghlihhsshgrsegtohhophgvrhifrdhinheqnecuffhomh grihhnpehivghtfhdrohhrghenucfkphepudejfedrfeekrdduudejrdekjeenucfrrghr rghmpehmrghilhhfrhhomheprghlihhsshgrsegtohhophgvrhifrdhinhenucevlhhush htvghrufhiiigvpedt
X-ME-Proxy: <xmx:M8xtXGW8LkCp8Xb11_1utmuoiGGf1NbKPUITlRvwleES_749SS3v4g> <xmx:M8xtXF39wsgesn388W1uiVE7KGFQsnlE_IgvRGJH2IVeZFmsJKmorw> <xmx:M8xtXD3yLcsSIhYs__zRLMydybK_UNxjfSDnx348zIZs5PxoE6s5Kg> <xmx:NMxtXL-vaXjLVazWsEHTD60RifCBTCduKtw7W3LVrOKqXKmpaat6ew>
Received: from [10.82.177.232] (unknown [173.38.117.87]) by mail.messagingengine.com (Postfix) with ESMTPA id 6B0BDE427A; Wed, 20 Feb 2019 16:52:40 -0500 (EST)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
From: Alissa Cooper <alissa@cooperw.in>
In-Reply-To: <154900252324.10128.7132833415832444034@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 13:52:23 -0800
Cc: gen-art@ietf.org, jmap@ietf.org, draft-ietf-jmap-mail.all@ietf.org, ietf@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <83E995FA-8C62-4395-88BA-43EBA3173883@cooperw.in>
References: <154900252324.10128.7132833415832444034@ietfa.amsl.com>
To: Dan Romascanu <dromasca@gmail.com>
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/oxxqifFcMmNCOFC-TUAOPhgnpik>
Subject: Re: [Jmap] [Gen-art] Genart last call review of draft-ietf-jmap-mail-14
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Feb 2019 21:52:56 -0000

Dan, thank you for your review. I entered a No Objection ballot.

Alissa

> On Jan 31, 2019, at 10:28 PM, Dan Romascanu <dromasca@gmail.com> =
wrote:
>=20
> Reviewer: Dan Romascanu
> Review result: Ready
>=20
> I am the assigned Gen-ART reviewer for this draft. The General Area
> Review Team (Gen-ART) reviews all IETF documents being processed
> by the IESG for the IETF Chair.  Please treat these comments just
> like any other last call comments.
>=20
> For more information, please see the FAQ at
>=20
> <https://trac.ietf.org/trac/gen/wiki/GenArtfaq>.
>=20
> Document: draft-ietf-jmap-mail-??
> Reviewer: Dan Romascanu
> Review Date: 2019-01-31
> IETF LC End Date: 2019-02-04
> IESG Telechat date: Not scheduled for a telechat
>=20
> Summary:
>=20
> This is a clear and complete specification which is READY for =
publication from
> a Gen-ART perspective.
>=20
> Major issues:
>=20
> Minor issues:
>=20
> Nits/editorial comments:
>=20
>=20
> _______________________________________________
> Gen-art mailing list
> Gen-art@ietf.org
> https://www.ietf.org/mailman/listinfo/gen-art


From nobody Wed Feb 20 16:58:35 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4BCAE130F29; Wed, 20 Feb 2019 16:58:28 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=bSWM8zgf; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=w641/QZ5
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 rXpcfPZ5hdiD; Wed, 20 Feb 2019 16:58:26 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id BCCB8130F28; Wed, 20 Feb 2019 16:58:26 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 8F9DB325A; Wed, 20 Feb 2019 19:58:25 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Wed, 20 Feb 2019 19:58:26 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=u/enjgzR9+EoEonYjYpM7g0uX oCi0RPFHH407F82LeY=; b=bSWM8zgf1oi8gEzgBg+FlZ6ZWnBN79fs9y228Goyt /45IaD3uafzH2e9NtazrnrM0P+eAYMu9HneEkiZqIJasfTyVr+09a4g7wsBj/Dbm 8q3NZemTXYIJv2GELpyBFgnluakyQkyQz1tkQ6FK1cP1yvnXiTkkziy6OBMdGSBa klKn3AccyvbdF/9EAgRLSB0qrgxznU3BfiBeRvibu0Vw/uFvvrtFAZyUCPl8+hkg KrbitX/ZdjgoeSoYm4Z++5lekzb4qKuxmLRjWg7kOMVU8lnJHd7ae9KcVe8CAq+K ubyTt7KIftr/ZNOap/WTPovHVgistS1IW79Og5wobi4Mw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=u/enjgzR9+EoEonYj YpM7g0uXoCi0RPFHH407F82LeY=; b=w641/QZ54vAJHvn7y4pf/bkcuE6ZbzLnK Fr3/jHJy8VWxfakm0gBXdRwWDw5jZb5R6xOY2akQJr9z0FymdQzc9/UOTud+XDV7 BBT8svYp59zHoLcYRNkwcZs6ULfNTMR4OMFH1Wc28k7JjuE38ThhJ3stYiBFYYHp eVuRcyEsKu8Cx8BZuOIzwktEH2T1C2tGjLu1kA0cEIHr+ag4bRxYDkhWIIHchKeL ufrkEhYVu6eUWhOenBrxDWXuAVn0HFtdmS/dR3ZAjh6HM4NesH8n3IhCuJj0DgYP d6Lz356SB9NfZQG0a5QIUgJvrooo/Y6csODfTD+z2tKdxVfLLxVFQ==
X-ME-Sender: <xms:sPdtXGO4vhVZz32eqCW9Ckc_Hgo1djqUnhs7k8t36p6xzSyecFvEXA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdejgddvjeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:sPdtXBDJz1IvWUe0M516CNf2wEn5RHfGzhepJuaON4ln2q9z1URBRw> <xmx:sPdtXJ9KHV8kaG-3JVi8nfZ5s5LzaNb8wZNXxpwQRNPtLbI6WOp4EQ> <xmx:sPdtXNDNQJ6uN-cQVVKRzEjaLVgvmrPyqavttuQ8DU3ZDDtUmVfJ3g> <xmx:sfdtXG0zb5B4PW4qOsxuaQXFZjPMvoIiafTxfcrApqgnpR4fiZN-og>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 412CD20320; Wed, 20 Feb 2019 19:58:24 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <23e5d3dd-6f8e-4090-92f3-2e2ab990ecd3@beta.fastmail.com>
In-Reply-To: <CABcZeBPKbVJEYaJW5nT-8VbOOnkE+=bZ9NYo7ZY09cdbUTYUoQ@mail.gmail.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com> <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com> <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com> <d6e2781a-8c8b-40b6-b20a-9146b975040c@beta.fastmail.com> <CABcZeBPKbVJEYaJW5nT-8VbOOnkE+=bZ9NYo7ZY09cdbUTYUoQ@mail.gmail.com>
Date: Wed, 20 Feb 2019 19:57:32 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Eric Rescorla" <ekr@rtfm.com>
Cc: "Martin Thomson" <martin.thomson@gmail.com>, iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=355201856ca44cee90df2ffe2c556bb9
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/fbilvv7OTsx0z5-eGEJzGxjbGNk>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 00:58:28 -0000

--355201856ca44cee90df2ffe2c556bb9
Content-Type: text/plain

On Thu, 21 Feb 2019, at 00:42, Eric Rescorla wrote:
> It's probably worth starting by trying to scope the risk, which is that you have a system in which the attacker configures an alleged push URL that is actually a third party victim server and the result is that the mail server now spams that server with notifications about message changes to the user's mailbox. Do we agree on that?

Yes.

> Given the desire to have this work with existing 8030 endpoints, I think this is something we can live with, as long as you document it properly in Security Considerations.

That sounds reasonable to me. I have added the following paragraph to the relevant section of the security considerations:

*The verification code does not guarantee the URL is a valid push server, only that the client is able to access the data submitted to it. While the verification step significantly reduces the set of potential targets, there is still a risk that the server is unrelated to the client and being targeted for a denial of service attack.*

Is this sufficient for you?

Neil.
--355201856ca44cee90df2ffe2c556bb9
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Thu, 21 Feb =
2019, at 00:42, Eric Rescorla wrote:<br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div dir=3D"ltr"><div class=3D"fastmail-quoted-gm=
ail_quote">It's probably worth starting by trying to scope the risk, whi=
ch is that you have a system in which the attacker configures an alleged=
 push URL that is actually a third party victim server and the result is=
 that the mail server now spams that server with notifications about mes=
sage changes to the user's mailbox. Do we agree on that?<br></div></div>=
</blockquote><div><br></div><div>Yes.<br></div><div><br></div><blockquot=
e type=3D"cite" id=3D"fastmail-quoted"><div dir=3D"ltr"><div class=3D"fa=
stmail-quoted-gmail_quote">Given the desire to have this work with exist=
ing 8030 endpoints, I think this is something we can live with, as long =
as you document it properly in Security Considerations.<br></div></div><=
/blockquote><div><br></div><div>That sounds reasonable to me. I have add=
ed the following paragraph to the relevant section of the security consi=
derations:<br></div><div><br></div><div><i>The verification code does no=
t guarantee the URL is a valid push server, only that the client is able=
 to access the data submitted to it. While the verification step signifi=
cantly reduces the set of potential targets, there is still a risk that =
the server is unrelated to the client and being targeted for a denial of=
 service attack.</i><br></div><div><br></div><div>Is this sufficient for=
 you?<br></div><div><br></div><div>Neil.<br></div></body></html>
--355201856ca44cee90df2ffe2c556bb9--


From nobody Wed Feb 20 17:56:24 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F1B06130F74; Wed, 20 Feb 2019 17:56:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=Pb5yElH2; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=gVJIc/jv
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 VDuun51bWYth; Wed, 20 Feb 2019 17:56:13 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E0425130F70; Wed, 20 Feb 2019 17:56:12 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 8338E3044; Wed, 20 Feb 2019 20:56:11 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Wed, 20 Feb 2019 20:56:11 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=0RDgDgLu64iDkH3EPpdE0mSox IZlPvjnFgpqiMTU0pI=; b=Pb5yElH2CWQhlcd/xngt/vB+nIqi+XRw7aVvkZzRh 1pH+BNaPrPilLXLT1Mmyh9nkL3UnotI4/dnkiTVMErcAQE3ECh6KbfPDMKdcTnmQ 4TCuL85l5UUmfvIiYHNx16mpyPq2NHUd6L0cSRPVV5EUuJavEctrcbYfHk2R8mUU ow4hgfM0vqiCQAjueewt2Vjj3yS9HpQyzdvss9AgKG/FNYvg5ymzKw1jRW4iAq4a 2a4ZnetNlSfOGI8+IUyij3SbaTeapacU5ZJ+EmkjuTYKeEIsKec7atUYgKSZ9ctl hzAAd1Q/epcHsW8guJ7h5qHmXuhjGh5iMRAqgmHT50I4g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=0RDgDgLu64iDkH3EP pdE0mSoxIZlPvjnFgpqiMTU0pI=; b=gVJIc/jvQ8KFVeTNZ7PLf3buCkQxXN5YB H58+SDeElVMDEXEVV9EycEMUJCDgy6iQwpSMnUuyTyv56qm2yU/wtoZFaSeNZT6B 0rTb5MIC6mnJt3uMA/gnzBBHgJt56DjvuG5UP16nNsJpz2IYNAmAS5huLfMaDM2h OwTns9BFoYuDpdqUg2YCaLOD8OSCNWrh8zITI/oX2zzl0todrzyq3CTfh2EdqCij 3Fv78OszMH6WHw7S9ChWYZgHoxnou8RQh3cfN7kBumWp1esKIxbexpFuYfMVLxof AV/q5h5uu0EXuR4mpl26RSLTvj90uYmOVUitKKhKTpP02/cPVaCQA==
X-ME-Sender: <xms:OgVuXF8krhYOuwfOK0-2Z162doSTLv-sAxi-1Gk3p-mHaAHWhjyoIg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdejgdefleculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:OgVuXPtrKghuvxhmDF8v-12ksg0vfKpRlS_M1KPHVLjhTHiS8XivtA> <xmx:OgVuXNMlwmkdgU3fN5y_WrPhz-EiS7jjk5yJiJtS6xEcRi4wxcJHgg> <xmx:OgVuXNUsvqiC_WE3SopA93Hwoj2stMEll3V6TysKcxFR589XfRH0LA> <xmx:OwVuXOTDhZgaASn5iciwuEY71wQ0kZrWhHH8SkfZDkCnyrg1npDeRg>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 7C16520320; Wed, 20 Feb 2019 20:56:10 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <8f1bad75-13a0-4c66-9c84-eddb5eb3ff41@beta.fastmail.com>
In-Reply-To: <155069147829.31490.10165764411800945653.idtracker@ietfa.amsl.com>
References: <155069147829.31490.10165764411800945653.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 20:56:10 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Alissa Cooper" <alissa@cooperw.in>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=b431947e41b146559c53c64d67158759
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/lMuheUEly5CqsR0AIDc6uBl0d3s>
Subject: Re: [Jmap]  =?utf-8?q?Alissa_Cooper=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 01:56:15 -0000

--b431947e41b146559c53c64d67158759
Content-Type: text/plain

On Thu, 21 Feb 2019, at 06:38, Alissa Cooper wrote:
> I don't understand why device ID needs to be incorporated in order to achieve
> uniqueness here.

Yes. This text was attempting to make clear that every instance of the client needs a separate id, but it needs to be stable. So if your client was "Mail App Foo" running on a phone with "UniqueIdX", combining these two pieces of information would give you an id that should be unique, but is none the less easy to regenerate.

> Really it seems like what is needed is a unique ID per client,
> full stop. Even if you have the unlikely scenario of two clients running on the
> same device from the same vendor (say, one for mail and one for calendar), you
> would still want to support the ability for each client independently to be
> able to recover its push subscriptions, right?

Yes.

>  Some JMAP servers may have device IDs for other reasons anyway, but setting this up this way seems like it opens the door for clients to unnecessarily share device IDs with JMAP servers in other cases.

The suggestion is to use a secure hash of a vendor string and device id, in which case it's unlikely to reveal useful information about the device id (presuming this id itself has sufficient entropy), but it's possible clients would do something else.

> Related to this, I don't understand the "SHOULD ... not depend on persisted
> state." Why? I presume it would be straightforward to produce a unique client
> ID that did not have the device ID embedded if this requirement were not there.

This is due to wanting to make sure you don't lose it and have to generate a new one, at least not very often. The reason for this is to make sure the client doesn't register itself twice. The only way it can know if it is currently registered for push notifications with the server is fetch the list of registered devices for the user and see if any of them have the same deviceClientId. For security reasons we don't return the push endpoint or encryption keys that were registered with the server, which are the only other things that could be used to correlate. If the client's id changes it can't know if it's registered and so may register twice and so start receiving every push twice, at least until that registration expires but that could be some time.

> ----------------------------------------------------------------------
> COMMENT:
> ----------------------------------------------------------------------
> 
> = Section 1.1 =
> 
> Please use the RFC 8174 boilerplate instead of the RFC 2119 boilerplate.

Sure, done.

> = Section 2=
> 
> s/To avoid conflict, the identifiers for these MUST be a URL with a domain
> owned by the vendor./To avoid conflict, an identifier for a vendor-specific
> extension MUST be a URL with a domain owned by the vendor./

Updated, thanks.

Neil.
--b431947e41b146559c53c64d67158759
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Thu, 21=
 Feb 2019, at 06:38, Alissa Cooper wrote:<br></div><blockquote id=3D"fas=
tmail-quoted" type=3D"cite"><div>I don't understand why device ID needs =
to be incorporated in order to achieve<br></div><div>uniqueness here.<br=
></div></blockquote><div><br></div><div>Yes. This text was attempting to=
 make clear that every instance of the client needs a separate id, but i=
t needs to be stable. So if your client was "Mail App Foo" running on a =
phone with "UniqueIdX", combining these two pieces of information would =
give you an id that should be unique, but is none the less easy to regen=
erate.<br></div><div><br></div><blockquote id=3D"fastmail-quoted" type=3D=
"cite"><div>Really it seems like what is needed is a unique ID per clien=
t,<br></div><div>full stop. Even if you have the unlikely scenario of tw=
o clients running on the<br></div><div>same device from the same vendor =
(say, one for mail and one for calendar), you<br></div><div>would still =
want to support the ability for each client independently to be<br></div=
><div>able to recover its push subscriptions, right?<br></div></blockquo=
te><div><br></div><div>Yes.</div><div><br></div><blockquote id=3D"fastma=
il-quoted" type=3D"cite"><div> Some JMAP servers may have device IDs for=
 other reasons anyway, but setting this up this way seems like it opens =
the door for clients to unnecessarily share device IDs with JMAP servers=
 in other cases.<br></div></blockquote><div><br></div><div>The suggestio=
n is to use a secure hash of a vendor string and device id, in which cas=
e it's unlikely to reveal useful information about the device id (presum=
ing this id itself has sufficient entropy), but it's possible clients wo=
uld do something else.<br></div><div><br></div><blockquote id=3D"fastmai=
l-quoted" type=3D"cite"><div>Related to this, I don't understand the "SH=
OULD ... not depend on persisted<br></div><div>state." Why? I presume it=
 would be straightforward to produce a unique client<br></div><div>ID th=
at did not have the device ID embedded if this requirement were not ther=
e.<br></div></blockquote><div><br></div><div>This is due to wanting to m=
ake sure you don't lose it and have to generate a new one, at least not =
very often. The reason for this is to make sure the client doesn't regis=
ter itself twice. The only way it can know if it is currently registered=
 for push notifications with the server is fetch the list of registered =
devices for the user and see if any of them have the same deviceClientId=
. For security reasons we don't return the push endpoint or encryption k=
eys that were registered with the server, which are the only other thing=
s that could be used to correlate. If the client's id changes it can't k=
now if it's registered and so may register twice and so start receiving =
every push twice, at least until that registration expires but that coul=
d be some time.<br></div><div><br></div><blockquote id=3D"fastmail-quote=
d" type=3D"cite"><div>--------------------------------------------------=
--------------------<br></div><div>COMMENT:<br></div><div>--------------=
--------------------------------------------------------<br></div><div><=
br></div><div>=3D Section 1.1 =3D<br></div><div><br></div><div>Please us=
e the RFC 8174 boilerplate instead of the RFC 2119 boilerplate.<br></div=
></blockquote><div><br></div><div>Sure, done.<br></div><div><br></div><b=
lockquote id=3D"fastmail-quoted" type=3D"cite"><div>=3D Section 2=3D<br>=
</div><div><br></div><div>s/To avoid conflict, the identifiers for these=
 MUST be a URL with a domain<br></div><div>owned by the vendor./To avoid=
 conflict, an identifier for a vendor-specific<br></div><div>extension M=
UST be a URL with a domain owned by the vendor./<br></div></blockquote><=
div><br></div><div>Updated, thanks.</div><div><br></div><div>Neil.</div>=
</body></html>
--b431947e41b146559c53c64d67158759--


From nobody Wed Feb 20 18:40:07 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 32BB6129532; Wed, 20 Feb 2019 18:39:58 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=ec/mUr4J; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=N3t3Xv00
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 w0pv5Xtgj0Cl; Wed, 20 Feb 2019 18:39:56 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 84FE312894E; Wed, 20 Feb 2019 18:39:56 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 485C8327C; Wed, 20 Feb 2019 21:39:55 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Wed, 20 Feb 2019 21:39:55 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=hE9P58uh8LgZ8c4X2dodWEu9z xT1t211y+ZX0lSWrvU=; b=ec/mUr4JSeGLr7aneU3xGBzMf2E8UlY7efBrl0Gr8 6mdN+/bvmuvxkqjETHEkQmC8jSEo/YSsXE58dqYkvb1Ea7p56BxDA/a9dxFM3Ah0 b1kO1H0DTTK9JDI7vp8pWWMUd23KOLtuUtCGED3C7lzvWOovgWd1PyelK9ENyr2H iUA9cxDdja1oMxX37/xA1IxRPkizlFDEqP94LJ9QPmysYEk/OyE5o+oHaXJJqO3Q C4w+1gk1LvPBYpwXM2fT3i30LBIhJhDiVt9rRnNoSV+VTOe1RThzBBz6YOsQNk2v IC1LDXe8SXh0mjpPa24bmupbzYcLDH85Mj1y8jTLdLkfg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=hE9P58uh8LgZ8c4X2 dodWEu9zxT1t211y+ZX0lSWrvU=; b=N3t3Xv00ymvnzob2imFfncst1eo8wTvUP 6nDmMTMriIohHAULBPPg+J15zjXA5KlQ6I7o383eVNOMAcyYAN2PuMZ5dpyhQAiQ LWE4502ouzzDA2tT6lNUZChohiDUwiNmA7V606YmwVOEqmgU5EZrjlIsfu1Vfp/g CAgtRNiQLB8MmMjTDzfZzueEVGbc/z5rHdmfqpiJM00j6wr0uy26M8pWqGKxqpao +eieW6jSXtlpIPOfWQYBy7uKlxIxoqjDXkDki7SkN8hqKufEiVUmwIw7gQaWpN6c FMr9gNNdjg9vb8I2nzyEeAE11Ob95uhZHDXv1OTd19ZFmT4Fxlxtg==
X-ME-Sender: <xms:eg9uXNyLc685i_N2O3vXz27LateYrmlURDWrGYX2BjIlW6dwUMHuhg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdejgdegleculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:eg9uXJJ0Z4NDUR09x-8c7GGJzEW_PmywdpHVQ7Cc01yy4kNUvYYfbQ> <xmx:eg9uXALfO2rjG7VjDaw0Q9bwO6ltH8yZPQKAupNruuyJfuIaLoaSrw> <xmx:eg9uXIUSeibrc_ZGiptDZIda3eS-0eY8UAfjNiF7LR9AkZIqaSHvZg> <xmx:eg9uXGsEd1McKvbGs3ISvzyxC7CtLXBad_1qFVd2FZZ5X3IVY0GV2A>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 0939020320; Wed, 20 Feb 2019 21:39:54 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <03a96ebc-b1c4-4348-96ab-1140baf2d6fe@beta.fastmail.com>
In-Reply-To: <CABcZeBM_EmzEF87gzEmUW2tu7JmdGQ+Xj7kXDv6=Zdsngq6zUg@mail.gmail.com>
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com> <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com> <3f1fd4b3-df27-4659-9a13-737cc47885ed@beta.fastmail.com> <CABcZeBM_EmzEF87gzEmUW2tu7JmdGQ+Xj7kXDv6=Zdsngq6zUg@mail.gmail.com>
Date: Wed, 20 Feb 2019 21:39:43 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Eric Rescorla" <ekr@rtfm.com>
Cc: iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=195be953fe674bb68a7805a56b1d9a52
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/gDkGi5akNfzQjZbJByExhTXwUbc>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-ma?= =?utf-8?q?il-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 02:39:58 -0000

--195be953fe674bb68a7805a56b1d9a52
Content-Type: text/plain

On Wed, 20 Feb 2019, at 15:41, Eric Rescorla wrote:
> That's not generically true of IETF specifications. We routinely define functionality that people aren't required to support or can return errors for.

I'm not disagreeing with that, but it is normally clearly marked if something is optional. Regardless, would you find it sufficient if I add the following to the notational conventions section in the introduction?

*Servers MUST support all properties specified for the new data types defined in this document.*

Neil.
--195be953fe674bb68a7805a56b1d9a52
Content-Type: text/html

<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Wed, 20 Feb 2019, at 15:41, Eric Rescorla wrote:<br></div><blockquote type="cite" id="fastmail-quoted"><div dir="ltr"><div dir="ltr">That's not generically true of IETF specifications. We routinely define functionality that people aren't required to support or can return errors for.<br></div></div></blockquote><div><br></div><div>I'm not disagreeing with that, but it is normally clearly marked if something is optional. Regardless, would you find it sufficient if I add the following to the notational conventions section in the introduction?<br></div><div><br></div><div><i>Servers MUST support all properties specified for the new data types defined in this document.</i><br></div><div><br></div><div>Neil.<br></div></body></html>
--195be953fe674bb68a7805a56b1d9a52--


From nobody Wed Feb 20 18:50:38 2019
Return-Path: <chris.newman@oracle.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8662B12894E; Wed, 20 Feb 2019 18:50:30 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.302
X-Spam-Level: 
X-Spam-Status: No, score=-4.302 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=oracle.com
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 oBVGl02Ra6Nw; Wed, 20 Feb 2019 18:50:28 -0800 (PST)
Received: from aserp2130.oracle.com (aserp2130.oracle.com [141.146.126.79]) (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 058C3126D00; Wed, 20 Feb 2019 18:50:27 -0800 (PST)
Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x1L2nHWi001755; Thu, 21 Feb 2019 02:50:22 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=corp-2018-07-02; bh=wWzaqe7s+2EnglG9TVY2oZ+/z9G/yLCAqd9Lii7ZZvM=; b=tIGUSlKdzz58kCwxU8k42s7M4G20W7R9b9RAGodHLH+vveiOdTvi53xQb7tu9sBqzR6v /sphOvS88n/Le794Gw7KRiSNhOh2lJlCH8Demj9FfjOdCmRR07UxXG/Q1an8KMR5No86 f01DdwpHL29fgEWIGGRzX6n8Prl43TGEaqjpJVEDgQqxJ5T3KnovyvVLcCElC0kLPthP huAcdqNN+Nwp7cu6KK8OZ3a6WoLWDByVMe5d6U8tWQBBC9X2P1fQX0kJrbrq+S2UNT8a RWxboIk+74axtFCGiKsTAgU6cOzZYFY5IAeToqburrU6ZP5IYNPpIDM4Jlcps9jEO3Yx eg== 
Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp2130.oracle.com with ESMTP id 2qp81edh43-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 21 Feb 2019 02:50:21 +0000
Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id x1L2oLpO031236 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 21 Feb 2019 02:50:21 GMT
Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id x1L2oKDf025824; Thu, 21 Feb 2019 02:50:20 GMT
Received: from [10.145.183.62] (/10.145.183.62) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 20 Feb 2019 18:50:20 -0800
From: "Chris Newman" <chris.newman@oracle.com>
To: "Barry Leiba" <barryleiba@computer.org>
Cc: "Eric Rescorla" <ekr@rtfm.com>, "The IESG" <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Date: Wed, 20 Feb 2019 18:50:18 -0800
X-Mailer: MailMate (1.12.4r5594)
Message-ID: <0DC740DF-DECC-4D01-826E-7D7D9317A7CD@oracle.com>
In-Reply-To: <CALaySJJQUgAs-iE-t6QTOmUyCqmJ8Th_wh=W6eM6BX3Bm7xY6Q@mail.gmail.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <CALaySJJQUgAs-iE-t6QTOmUyCqmJ8Th_wh=W6eM6BX3Bm7xY6Q@mail.gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; format=flowed
X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9173 signatures=668683
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=977 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1902210020
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/8k0GrJ9c0PNovRndNBKGPSNA9LI>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 02:50:31 -0000

On 17 Feb 2019, at 9:55, Barry Leiba wrote:
>> S 1.7.
>>>
>>>   1.7.  The JMAP API model
>>>
>>>      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and 
>>> Download
>>>      resources.  Implementations MUST support HTTP/1.1, and MAY 
>>> support
>>>      later versions.  All HTTP requests MUST use [RFC8446] TLS 
>>> (HTTPS)
>>
>> At this point, do you think it should be SHOULD for H2
>
> Yes.  "Implementations MUST support HTTP/1.1, SHOULD support HTTP/2,
> and MAY support later versions.
>
> And this will come up again when QUIC is ready.

I'm opposed to saying "SHOULD support HTTP/2" in this specification.

There are likely two classes of JMAP implementations:

1. Implementations that use an HTTP library of choice, likely in an OS 
or language runtime. Nothing this specification says is going to change 
whether that OS or language runtime HTTP library supports HTTP/2. So for 
these implementations, the only thing this accomplishes is forcing a 
diligent implementor to spend a lot of time on extra tests, which might 
be a barrier to deployment of JMAP (since it will take longer to finish 
those tests).

2. thin client JMAP applications that use a minimal stripped down 
version of HTTP for applications like IoT-mail-submission. Implementing 
more than one version of HTTP is contrary to thin-client goals, so 
implementers will either ignore the SHOULD or ignore JMAP altogether and 
use a protocol that can be implemented without the need for HTTP/2 code 
(like SMTP submission or one of the many existing ad-hoc HTTP submission 
JSON APIs).

So a "SHOULD support HTTP/2" is likely to accomplish nothing useful with 
respect to HTTP/2 deployment and may deter deployment of JMAP. Like it 
or not, JMAP is competing with existing deployed protocols. I consider 
JMAP technically better than the deployed alternatives (IMAP, SMTP 
submission) so I'd like to see it gradually replace them. As a result, I 
generally oppose requirements and recommendations that create barriers 
to JMAP deployment.

As a compromise, I could live with: servers are encouraged to support 
HTTP/2.

		- Chris


From nobody Wed Feb 20 19:18:59 2019
Return-Path: <ben@nostrum.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 3056D128CE4; Wed, 20 Feb 2019 19:18:52 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Ben Campbell <ben@nostrum.com>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155071913219.20241.16703368943240294389.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 19:18:52 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/TIKin2jw4naDUBTCXQn--2F1rlo>
Subject: [Jmap] Ben Campbell's No Objection on draft-ietf-jmap-core-14: (with COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 03:18:52 -0000

Ben Campbell has entered the following ballot position for
draft-ietf-jmap-core-14: No Objection

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for the huge amount of work this involved.

I support Alissa's discuss point concerning device ids. Otherwise, I have a few
minor comments:

§1.1: Is there a reason not to use the updated boilerplate from RFC 8174?

§1.6.2:
- 2nd paragraph:  I think this means that any given piece of data belongs to
one account. But it could be read (nonsensically) to mean that one account owns
all the data.

§1.6.3: "The id of a record is immutable, and normally assigned by the
server.":  This seems to conflict with section 1. 2, which says all record lDs
are assigned by the server. (I take "normally" to mean "most of the time, but
sometimes not"

§1.7: "Support for common HTTP mechanisms such as redirection
and caching are assumed.":  I'm not sure what this means. Are they *required*
to be supported?

§2:
- "If the specification
includes new object type definitions, the server MUST include
it in the _hasDataFor_ array if, and only if, the user may use
those data types with this account."
 This would be more clear in the form of "MUST include... and MUST NOT..."

- "Servers MAY advertise vendor-specific JMAP
extensions, as described in section 1.7. To avoid conflict, the
identifiers for these MUST be a URL with a domain owned by the
vendor."
I think the cross reference should be to section 1.8. Also, the MUST is
redundant to normative text in that section.

§5:
- "Not all types may have all methods. ": Is that the same as saying some types
may not have all methods?  (It could be read to say not all types are allowed
to have all methods.)



From nobody Wed Feb 20 19:33:35 2019
Return-Path: <ben@nostrum.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 4B487128D0B; Wed, 20 Feb 2019 19:33:28 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Ben Campbell <ben@nostrum.com>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-mail@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155072000830.20336.8924861683731438362.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 19:33:28 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/fIAs7peEBsD9WcyMQoNP2M4VI6Q>
Subject: [Jmap] Ben Campbell's No Objection on draft-ietf-jmap-mail-14: (with COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 03:33:28 -0000

Ben Campbell has entered the following ballot position for
draft-ietf-jmap-mail-14: No Objection

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-mail/



----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for all the work on this. I have a few minor comments:

- Title, Abstract, and Introduction: Please expand JMAP on first mention.

§1.1: Is there a reason not to use the updated boilerplate from RFC 8174?

§1.5: "Servers MUST support the standard JMAP push mechanisms to receive
notifications when the state changes for any of the types defined in
this specification."
Which are the "standard" mechanisms? Does that mean both in-band notification
and the use of external push notification systems>

§1.6: "If a JMAP Mail server also provides an IMAP interface to the data and
supports [RFC8474] IMAP Extension for Object Identifiers, the ids
SHOULD be the same for mailbox, thread, and email objects in JMAP."
What happens if they are not?  (Why not MUST)?

§2: "This value is shared with
IMAP (exposed in IMAP via the [RFC6154] SPECIAL-USE extension).
However, unlike in IMAP, a mailbox may only have a single role,"
What happens if a mailbox is accessible via both IMAP and JMAP, and has
multiple roles in IMAP?

§7: "* "pending": It MAY be possible to cancel this submission."
The MAY seems more a statement of fact than permission.



From nobody Wed Feb 20 20:36:33 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ED6AD130DF1 for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 20:36:29 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level: 
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 zMcCtXRLeUKF for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 20:36:26 -0800 (PST)
Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6C8CE127598 for <jmap@ietf.org>; Wed, 20 Feb 2019 20:36:26 -0800 (PST)
Received: by mail-lj1-x236.google.com with SMTP id j13-v6so22834928ljc.2 for <jmap@ietf.org>; Wed, 20 Feb 2019 20:36:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DtaOnOaqvCUdnNLiAeVC7coe5BHcXFVYRYQyhMzUo3A=; b=DZ7Qj8eriSb5YGT22JMWrZDAyJj2CTERtOu2PuPGbsrjzwqLegukO7zTK9E8LQVgW3 3Bc2P1G3kSaZLYH09bZ0AkKD2OQEQSvFDbMCnU0xE6U9UXdbxGnWaPdMKz3UiG95y53B wXyqqKaV+Dm/4q2uKEKzyfMbvtCY/+6KlE/fwnW801e+1qIKNIdAgqTBXX8WGjpCXcX+ 2bX7Dn4TOWHZ/PzrjKjxr8/PvSvvyCScpZjZnHqD0wvcse+aPBd0/gXAwkrofpfcsS1l C3sHbHN+VJwfjW/hLob7MXCiIoK1vwGIU8jd2OGFBRvYaJdjdTf8zIQ1F2IrXhnmy5Wj Z4BA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=DtaOnOaqvCUdnNLiAeVC7coe5BHcXFVYRYQyhMzUo3A=; b=XOGaQECi3/Ooo/38NCDo/w/rvMHtOYtK8hh+gXSOJ4KY/KsqtkIsZpM717NjAq1eXI pBo/Xi8Ag2Ud/ZjIK71NlT9F8e+dHR70CZi5NYoxTWAkHN75AoAvZu8SdUGPZIkkadsg rhuE7OsBtYoIZSHNz9aRJvTjVXDqUMB2i8Tl9UcRdtEK4A2IA9+gYB0l1JPp4M6YO34m fISDVgALuFjvuABQCj9dRFVX/tzFVkG/2Q4nxr6q31Hn39FjMaOd0OtQmRQwjBYudEl+ i7P0M286M9BqFln41ng+ngwj606WxEoRqWsOV07Vp0tpcv430OdwZQE9p0LsHjy8tO5x 56Tw==
X-Gm-Message-State: AHQUAubSQpnOqISHodl3KbyS4zQFpiXEkMAH+Kq8gvXX5+sjZlPABZk1 HVqiKxzRgPzfyFvCxr1JgeIQ/UY+5CmVfVXsFr9zrQ==
X-Google-Smtp-Source: AHgI3IZSg54Wo/1+mN+lrF/RDF/GmriRGp/LUmrfm63zQrAwUfjD148CE9NcLfpRkvmXGGnTwec9kV723AUwaB/pJx0=
X-Received: by 2002:a2e:7202:: with SMTP id n2mr12207815ljc.28.1550723784433;  Wed, 20 Feb 2019 20:36:24 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <95007b3d-52ad-48a8-af6f-56c59dd179a1@beta.fastmail.com> <CABcZeBOsu5dsM-XFmfKRvCp1Z8geQuOU+57SF2Cuujgor6ZzfQ@mail.gmail.com> <CABkgnnVaJK4G6CP5nFdLh59V-PGotJQvJTtofAKRK_9Sp5qC8w@mail.gmail.com> <cc02aaad-089a-41a0-bacd-265024e4e026@beta.fastmail.com> <CABcZeBOcS0UfjSU9qc+NRdjs8qE-5t6SLG7cC39dayWyhvXrtg@mail.gmail.com> <d6e2781a-8c8b-40b6-b20a-9146b975040c@beta.fastmail.com> <CABcZeBPKbVJEYaJW5nT-8VbOOnkE+=bZ9NYo7ZY09cdbUTYUoQ@mail.gmail.com> <23e5d3dd-6f8e-4090-92f3-2e2ab990ecd3@beta.fastmail.com>
In-Reply-To: <23e5d3dd-6f8e-4090-92f3-2e2ab990ecd3@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Wed, 20 Feb 2019 20:35:44 -0800
Message-ID: <CABcZeBMR-cQa=4qEa0+SVj8hJZh1txB6RhYJOF2qAwhezPf=gg@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: Martin Thomson <martin.thomson@gmail.com>, iesg <iesg@ietf.org>,  IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="00000000000050fce90582600416"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/fuGsQrGV0wuAlciDqJs80RpiSEw>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 04:36:30 -0000

--00000000000050fce90582600416
Content-Type: text/plain; charset="UTF-8"

Yes, I can live with this.

-Ekr


On Wed, Feb 20, 2019 at 4:58 PM Neil Jenkins <neilj@fastmailteam.com> wrote:

> On Thu, 21 Feb 2019, at 00:42, Eric Rescorla wrote:
>
> It's probably worth starting by trying to scope the risk, which is that
> you have a system in which the attacker configures an alleged push URL that
> is actually a third party victim server and the result is that the mail
> server now spams that server with notifications about message changes to
> the user's mailbox. Do we agree on that?
>
>
> Yes.
>
> Given the desire to have this work with existing 8030 endpoints, I think
> this is something we can live with, as long as you document it properly in
> Security Considerations.
>
>
> That sounds reasonable to me. I have added the following paragraph to the
> relevant section of the security considerations:
>
> *The verification code does not guarantee the URL is a valid push server,
> only that the client is able to access the data submitted to it. While the
> verification step significantly reduces the set of potential targets, there
> is still a risk that the server is unrelated to the client and being
> targeted for a denial of service attack.*
>
> Is this sufficient for you?
>
> Neil.
>

--00000000000050fce90582600416
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Yes, I can live with this.</div><div><br></div><div>-=
Ekr</div><div><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"lt=
r" class=3D"gmail_attr">On Wed, Feb 20, 2019 at 4:58 PM Neil Jenkins &lt;<a=
 href=3D"mailto:neilj@fastmailteam.com">neilj@fastmailteam.com</a>&gt; wrot=
e:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0=
.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u><div><=
div>On Thu, 21 Feb 2019, at 00:42, Eric Rescorla wrote:<br></div><blockquot=
e type=3D"cite" id=3D"gmail-m_-6424252140266705130fastmail-quoted"><div dir=
=3D"ltr"><div class=3D"gmail-m_-6424252140266705130fastmail-quoted-gmail_qu=
ote">It&#39;s probably worth starting by trying to scope the risk, which is=
 that you have a system in which the attacker configures an alleged push UR=
L that is actually a third party victim server and the result is that the m=
ail server now spams that server with notifications about message changes t=
o the user&#39;s mailbox. Do we agree on that?<br></div></div></blockquote>=
<div><br></div><div>Yes.<br></div><div><br></div><blockquote type=3D"cite" =
id=3D"gmail-m_-6424252140266705130fastmail-quoted"><div dir=3D"ltr"><div cl=
ass=3D"gmail-m_-6424252140266705130fastmail-quoted-gmail_quote">Given the d=
esire to have this work with existing 8030 endpoints, I think this is somet=
hing we can live with, as long as you document it properly in Security Cons=
iderations.<br></div></div></blockquote><div><br></div><div>That sounds rea=
sonable to me. I have added the following paragraph to the relevant section=
 of the security considerations:<br></div><div><br></div><div><i>The verifi=
cation code does not guarantee the URL is a valid push server, only that th=
e client is able to access the data submitted to it. While the verification=
 step significantly reduces the set of potential targets, there is still a =
risk that the server is unrelated to the client and being targeted for a de=
nial of service attack.</i><br></div><div><br></div><div>Is this sufficient=
 for you?<br></div><div><br></div><div>Neil.<br></div></div></blockquote></=
div>

--00000000000050fce90582600416--


From nobody Wed Feb 20 20:37:32 2019
Return-Path: <ekr@rtfm.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 22F69130DF1 for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 20:37:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level: 
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.com
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 lsBdVYeEKOEX for <jmap@ietfa.amsl.com>; Wed, 20 Feb 2019 20:37:23 -0800 (PST)
Received: from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com [IPv6:2a00:1450:4864:20::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B4ABA130DC9 for <jmap@ietf.org>; Wed, 20 Feb 2019 20:37:20 -0800 (PST)
Received: by mail-lj1-x22a.google.com with SMTP id v16so22760955ljg.13 for <jmap@ietf.org>; Wed, 20 Feb 2019 20:37:20 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=2Rndv8sYiMvrRlumIMpN8nQzcLjSQMsqDkBydnPYsUI=; b=XTwGxbIGuF+fk8BFifMJhHJw//EAhyZ1Aig+YKBfKuMJ2wt0IFm9PLBuqabaItePkn r6nC34rh6XRff60Rmw8DrlXTDmpIpoxv4sI+aeVvvuOJRF2GdFdGr1oYcHm1biUf8XsL dtwlIu7xxKxbEYFkDLXxo15giP6GafE9vDt5pCc+2WFYpoYUbagyQ6N99zIN+0s/pc0Y us/FCwcTMsfsTbhVn9RggCVfwGSC5/kzWSMNsjaNdyIT67MPAqaCg86chzODbIafEuoO WOwF7epTage2NMHwgV2HLuTFrwOhRsm/ffE8nB2DxpWvsnDZEh+hccrdoNQXujD6vJp0 SrqA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=2Rndv8sYiMvrRlumIMpN8nQzcLjSQMsqDkBydnPYsUI=; b=Ue2eFfmd+1q2FCwXzqmvFkX9+06iLdZ5fOkcwfyYzuxBBeTrhHTP7SvIEbVFpV04dV 6/BFFNDKJ5vPQD/vWhMORn3fr6Fp9BYY0U3FuiB1+e7D2PAwStpNfxd78iBcw8hC0PC8 1fqu/ywm88v/1eniZV7NGbKl8aqHOpFm+eF5ITdXMZuafgSKIXLBVj0eS/Y41vKQS9/H QMF8Q3Xy8tLbLOGEjL2nkOWkf5xThNfgGvQJ1xynoGXAwYTAxCDbthsYrSjLnsfqw3le WJjyupw5LN3Gmw30GJC6DX3uiugsYx8+vI0GDOq3/Ku5sc7ollTyn8TwqfmMqU7Dxv9G 9e+A==
X-Gm-Message-State: AHQUAuZAVzHrkqU9Z3d2lZD6MhfLRh2J7B4hd0WL9IE8qpy5MdErnKHa lNCe8+esdd2nOR1ye7KiDmdzGSsAtk37fUEfZ2R9yA==
X-Google-Smtp-Source: AHgI3IZCdeGQWc1+hKMfCv6PaZod567d50eWUnF+ZclEdvwt1hSJLVLxSom+iEi8r8dV/quXssUqdAHn07atje6aRHA=
X-Received: by 2002:a2e:4d7:: with SMTP id a84mr19836750ljf.86.1550723838712;  Wed, 20 Feb 2019 20:37:18 -0800 (PST)
MIME-Version: 1.0
References: <155044837435.4109.3653101027278525875.idtracker@ietfa.amsl.com> <21a0a0f5-f9d5-4a35-9bfc-4cba8f50600f@beta.fastmail.com> <CABcZeBPgPJnM-Xtx4KwicOayVG2qODuRU_ZS912tccN2=8eykA@mail.gmail.com> <3f1fd4b3-df27-4659-9a13-737cc47885ed@beta.fastmail.com> <CABcZeBM_EmzEF87gzEmUW2tu7JmdGQ+Xj7kXDv6=Zdsngq6zUg@mail.gmail.com> <03a96ebc-b1c4-4348-96ab-1140baf2d6fe@beta.fastmail.com>
In-Reply-To: <03a96ebc-b1c4-4348-96ab-1140baf2d6fe@beta.fastmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Wed, 20 Feb 2019 20:36:40 -0800
Message-ID: <CABcZeBPE4L0-70Qyr-15akRHVZWJWPSpZfS_LsxmdMD8Ae9Vhg@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: iesg <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>, draft-ietf-jmap-mail@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary="0000000000008d3c2705826007f9"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/zxXRzHWLamzv6-HRDmLt00LD_Ns>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 04:37:25 -0000

--0000000000008d3c2705826007f9
Content-Type: text/plain; charset="UTF-8"

On Wed, Feb 20, 2019 at 6:39 PM Neil Jenkins <neilj@fastmailteam.com> wrote:

> On Wed, 20 Feb 2019, at 15:41, Eric Rescorla wrote:
>
> That's not generically true of IETF specifications. We routinely define
> functionality that people aren't required to support or can return errors
> for.
>
>
> I'm not disagreeing with that, but it is normally clearly marked if
> something is optional.
>

This may be a matter of convention. That's not my experience with protocol
specifications.


Regardless, would you find it sufficient if I add the following to the
> notational conventions section in the introduction?
>
> *Servers MUST support all properties specified for the new data types
> defined in this document.*
>

Yes, that's fine.

-Ekr


>
> Neil.
>

--0000000000008d3c2705826007f9
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div><br></div><div><br></div></div><br><=
div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Feb=
 20, 2019 at 6:39 PM Neil Jenkins &lt;<a href=3D"mailto:neilj@fastmailteam.=
com">neilj@fastmailteam.com</a>&gt; wrote:<br></div><blockquote class=3D"gm=
ail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex"><u></u><div><div>On Wed, 20 Feb 2019, at 15:41, =
Eric Rescorla wrote:<br></div><blockquote type=3D"cite" id=3D"gmail-m_42009=
06302768096001fastmail-quoted"><div dir=3D"ltr"><div dir=3D"ltr">That&#39;s=
 not generically true of IETF specifications. We routinely define functiona=
lity that people aren&#39;t required to support or can return errors for.<b=
r></div></div></blockquote><div><br></div><div>I&#39;m not disagreeing with=
 that, but it is normally clearly marked if something is optional.</div></d=
iv></blockquote><div><br></div><div>This may be a matter of convention. Tha=
t&#39;s not my experience with protocol specifications.</div><div><br></div=
><div> <br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><di=
v> Regardless, would you find it sufficient if I add the following to the n=
otational conventions section in the introduction?<br></div><div><br></div>=
<div><i>Servers MUST support all properties specified for the new data type=
s defined in this document.</i></div></div></blockquote><div><br></div><div=
>Yes, that&#39;s fine.</div><div><br></div><div>-Ekr</div><div><br></div><b=
lockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-le=
ft:1px solid rgb(204,204,204);padding-left:1ex"><div><div><br></div><div><b=
r></div><div>Neil.<br></div></div></blockquote></div></div>

--0000000000008d3c2705826007f9--


From nobody Wed Feb 20 21:27:53 2019
Return-Path: <kaduk@mit.edu>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 0FC7C12D4E6; Wed, 20 Feb 2019 21:27:50 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Benjamin Kaduk <kaduk@mit.edu>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 21:27:50 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/NkaQm1nHXIk3Z8GNZyW_hn0kYkA>
Subject: [Jmap] Benjamin Kaduk's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 05:27:50 -0000

Benjamin Kaduk has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

There's a lot here, and I was not reading in the best of environments,
so it's quite possible that I am just confused or missed something while
reading.  On the whole, this document is well-written and gives me a
good picture of how things work.  That said, there are still some places
where it looks like we may need to have some discussions...

This document (twice) has a MUST requirement for HTTP over TLS, which
seems to exclude any future usage of HTTP/3 over QUIC.  (It's also
probably not needed to repeat the normative requirement in two places; I
noted both in the COMMENT section.)

Section 1.6.2 asserts that "all data belong to a single account".  And
yet, we seem to have PushSubscription objects in Sections 7.2.1 and
7.2.2 that disclaim any relationship to an account, which seems
internally inconsistent.  It's also unclear to me from the text in the
latter sections what mechanism is used to determine whether a given
request is authorized to see a given PushSubscription object.  Is it
supposed to be based on the authentication credentials to the API
service directly, or a user abstraction, or something else?

Section 5.3

   Some records may hold references to other records (foreign keys).
   That reference may be set (via create or update) in the same request
   as the referenced record is created.  To do this, the client refers
   to the new record using its creation id prefixed with a "#".  The
   order of the method calls in the request by the client MUST be such
   that the record being referenced is created in the same or an earlier
   call.  The server thus never has to look ahead.  Instead, while

I think this means you need to specify what order the server does the
create, update, and destroy lists in -- that is, that all creates are
done before all updates, etc..

Section 5.5

The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/>
is not listed in the IANA collation registry for internet application
protocols; since the session object limits the collationAlgorithms to
those in the registry, at present, it is not permitted to use that
collation algorithm.  It would seem that this document should stimulate
the registration of that collation algorithm in some fashion (whether by
explicitly doing so in its IANA Considerations or otherwise).

Section 7.1

   o  *changed*: "Id[TypeState]" A map of _account id_ to an object
      encoding the state of data types that have changed for that
      account since the last StateChange object was pushed, for each of

I don't see how these semantics provide the properties stated in Section
7, "[i]t doesn't matter if some push events are dropped before they
reach the client; it will still get all changes next time it syncs."  In
particular, if the client misses a state change for the CalendarEvent
type, and then no other changes that affect CalendarEvents occur, the
client will remain unaware of the changes to CalendarEvents, even if
other push notifications for other types come in.  Am I misunderstanding
one or more of the behavior or stated guarantees?

Section 7.2

   As a push subscription causes the JMAP server to make a number of
   requests to a previously unknown endpoint, it can be used as a vector
   for launching a denial of service attack.  To prevent this, when a
   subscription is created the JMAP server immediately sends a
   PushVerification object to that URL (see section 7.2.2).  The JMAP
   server MUST NOT make any further requests to the URL until the client
   receives the push and updates the subscription with the correct
   verification code.

I think the JMAP server also needs to rate-limit even the initial
PushVerification generation, per-user(?), in order to close the DoS
and annoyance-vector risks.

   o  *keys*: "Object|null" (immutable) Client-generated encryption
      keys.  If supplied the server MUST use them as specified in
      [RFC8291] to encrypt all data sent to the push subscription.  The
      object MUST have the following properties:

      *  *p256dh*: the P-256 ECDH Diffie-Hellman public key as described
         in [RFC8291], encoded in URL-safe Base64 representation as

What's the crypto agility story for these web push encryption keys?
(See BCP 201.)

Also, when these expirations fire (e.g., for Basic Authentication
credentials), we need a normative requirement to actually destroy the
private credentials; there's a lot going on here so maybe I missed it,
but I don't think I saw one.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

I also have a big pile of mostly editorial comments.

Section 1.1

"Type signatures" sounds a lot like a "JSON Schema".  But we can work
with what we have, no doubt :)

   o  "String[A]" - A JSON object where the keys are all "String"s, and
      the values are of type "A".

To avoid confusion about whether String is the only possible map key
type (vs., e.g., Id), maybe "A[B]" notation is more appropriate?

Section 1.2

Do we want to give any guidance about when it is (not) advisable to use
very short identifiers (even the 1-2 character case could be
noteworthy)?  (I don't know what that guidance would be, so "no" is a
perfectly fine answer!)

W.r.t "NIL", that is the specifc 3-character identifier, right?  Or do
we need to worry about having it embedded as part of a larger string?

(I don't see how prefixing every ID with an alphabetical character
avoids the "NIL" case, unless 'N' is disallowed from being that
character.)

Section 1.3

My math degree obliges me to note that, per trichotomy, zero is not a
positive integer.

Section 1.6.1

nit: perhaps a "user object", or some broader rewrite like "in this
document, the keyword 'user' is used to refer to [...]" -- the current
text feels like it's dehumanizing, well, humans.

Section 1.6.2

nit re. "All data belong to a single account": I assume this is "each datum
has a map to its respective account", not "the entire set of data in the
system is associated with a single privileged account", as that would
make the account distinction rather useless.

Section 1.7

A "MUST" requirement for TLS would seem likely to disallow HTTP/3
(QUIC).

Does "MUST confirm with the HTTP Authentication framework" preclude
other authentication schemes?  The RFC 7235 framework has some warts,
and in many webapp settings there are plausible reasons to prefer
app-layer authentication schemes.  I guess that JMAP as being an
API-driven model may have a more natural mapping to the 7235 framework,
and I do note the remarks in the shepherd writeup that an authentication
scheme was removed from a previous version of this document.  So mostly
I'm just asking if we are intending to force the 7235 framework to be
the one and only authentication scheme for JMAP.  (Who knows, maybe this
will drive adoption of new HTTP Authentication Schemes or prompt renewed
interest in their development?)

   Clients MUST understand and be able to handle standard HTTP status
   codes appropriately.

(Is there a precise definition for "standard HTTP status codes"?)

   An authenticated client can fetch the JMAP Session object with
   details about the data and capabilities the server can provide as

nit: maybe this is "a JAMP session object" with the indefinite article?

Section 2

   o  *username*: "String" The username associated with the given
      credentials.

This seems to implicitly require that all credentialed entities have
user accounts, denying the possibility for some shared-credential or
machine-credential models.  Is this intended?

   o  *state*: "String" A string representing the state of this object
      on the server.  If the value of any other property on the session
      object changes, this string will change.  The current value is
      also returned on the API Response object (see section 3.3),
      allowing clients to quickly determine if the session information
      has changed (e.g. an account has been added or removed) and so
      they need to refetch the object.

As written this sounds like a serialized version of the full object
(without the 'state' field, of course, to avoid recursion), but I
suspect this is intended to be more like a generation number or hash or
serialized state, as a short lookup key.  Greater clarity would be
welcome.
(Same comment for all other "state" fields in the document.)
In particular, the /changes endpoints seem to place fairly strict bounds
on the generation/tracking of *state*.

Section 3.2

   o  *using*: "String[]" The set of capabilities the client wishes to
      use.  The client MAY include capability identifiers even if the
      method calls it makes do not utilise those capabilities.  The
      server advertises the set of specifications it supports in the
      JMAP Session object, as keys on the _capabilities_ property.

Are the "capability identifiers" the same as or different from the
"specifications [the server] supports"?

Was there much discussion of short Strings as method names vs. URIs?

Is the "client id" something that could also be called a "request ID"?
(I note that RFC 7252 calls a similar thing a "token" but has some text
wishing they called it a "request ID".)

The 'prefixed with a "#"' laguage seems like it has some potential for
confusion; is it better to write this like "the first character of the
creation ID MUST be octothorpe ('#')"?
I'm also still a bit unclear at this point about how the client tells
the server which entry in the createdIds map to update when which action
completes, but hopefully there is more later.
AFAICT having finished reading the doc, these can only be created by
explicit client action via a "create" array (or equivalent), where the
array keys are the "creation id"s since the client has to use some
handle before the server has assigned them.  It should be possible to
add a very brief note to that effect here.

Given the later usage in Section 3.3, I would consider splitting the
*Invocation* definition into a subsection.

Section 3.3

(editorial) If the second element of the Invocation tuple is literally
"arguments for the method", do we really have enough rope to make
response objects like this (unless we limit ourselves to conceptually
"in/out" arguments with no pure-output functionality)?

Section 3.5

I expect that deployment will see differences of opinion as to which
checks fall under "syntactically valid", but it's unclear whether we
need to attempt to forestall such debate.

Section 3.5.1

   o  "urn:ietf:params:jmap:error:notRequest" The request parsed as JSON
      but did not match the structure of the Request object.

"the Request object" makes me think of "the thing the client stuck in
the field named "Request", which is probably not the intent.  Perhaps
the key phrase is "type signature"?

Section 3.5.1.1

Since there is special handling for "urn:ietf:params:jmap:error:limit",
do we want an example to show that?

Section 3.5.2

   With the exception of "serverPartialFail", the externally-visible
   state of the server MUST NOT have changed if an error is returned at
   the method level.

nit: You don't say where in the type signature "serverPartialFail" is
supposed to be in order to trigger the special handling.

   "invalidArguments": One of the arguments is of the wrong type or
   otherwise invalid, or a required argument is missing.  A
   "description" property MAY be present to help debug with an
   explanation of what the problem was.  This is a non-localised string,
   and is not intended to be shown directly to end users.

It seems almost certain that it *will* be shown directly to end users,
intent or not.  But disavowing localization is probably sufficient for
now.
(et seq.)

   Further general errors MAY be defined in future RFCs.  Should a
   client receive an error type it does not understand, it MUST treat it
   the same as the "serverFail" type.

Does this imply that "serverPartialFail" is unique in its ability to
partially modify state?

Section 3.6

(Same comment about '"prefixes with "#"' as above.)

                                    If an argument object contains the
   same argument name in normal and referenced form (e.g. "foo" and
   "#foo"), the method MUST return an "invalidArguments" error.

This "same argument name in normal and referenced form" applies even in
arbitrarily nested objects, right?  It seems like this could potentially
be expensive and/or difficult to enforce.

Section 4

I'm trying to consider whether there is any sort of canonicalization or
un-escaping behavior that a server might perform on method inputs so
that the response would be almost but not exactly the same as the
request.  (Such behavior could perhaps be used for fingerprinting an
implementation.)  I can't think of any, though.

Section 5.1

   o  *ids*: "Id[]|null" The ids of the Foo objects to return.  If
      "null" then *all* records of the data type are returned, if this
      is supported for that data type.

Maybe note that the "maxObjectsInGet" capability limit might kick in
here for the "null" case?

   o  *properties*: "String[]|null" If supplied, only the properties
      listed in the array are returned for each Foo object.  If "null",
      all properties of the object are returned.  The id property of the
      object is *always* returned, even if not explicitly requested.  If
      an invalid property is requested, the call MUST be rejected with
      an "invalidArguments" error.

Because we're constrained to a single type here, there's no way for only
some (but not all) of the objects to have any given property, right?

Section 5.3

   o  *ifInState*: "String|null" This is a state string as returned by
      the _Foo/get_ method.  If supplied, the string must match the

So, just to double-check, this applies to the state of all objects of
the type in question (for the account)?  It might be worth reiterating,
since we frequently see this sort of check against the current state at
a per-object granularity, in other systems.

Do the "creation id"s in the "create" array include leading "#"?

Section 5.4

   o  *destroyFromIfInState*: "String|null" This argument is passed on
      as the "ifInState" argument to the implicit _Foo/set_ call, if
      made at the end of this request.

This is "the Implicit _Foo/set_ call that effectuates the destruction of
the original", right?

   o  *created*: "Id[Foo]|null" A map of the creation id to an object
      containing any properties of the copied Foo object that are set by
      the server (such as the _id_ in most object types).  This argument
      is "null" if no Foo objects were successfully copied.

Maybe note that the id property will also likely differ from the one
that was passed in in the create array, since the ids in question are
from different accounts?

Section 5.6

   o  *upToId*: "Id|null" The last (highest-index) id the client
      currently has cached from the query results.  When there are a

Just to double-check: semantically this is an object identifier, but the
ordering we care about for the "up to" part is the ordering in the query
results?

   o  *removed*: "Id[]" The _id_ for every foo that was in the query
      results in the old state and is not in the results in the new
      state.  If the server cannot calculate this exactly, the server
      MAY return extra foos in addition that may have been in the old
      results but are not in the new results.  If the sort and filter
      are both only on immutable properties and an _upToId_ is supplied
      and exists in the results, any ids that were removed but have a
      higher index than _upToId_ SHOULD be omitted.  If the _filter_ or
      _sort_ includes a mutable property, the server MUST include all
      foos in the current results for which this property MAY have
      changed.

I'm having a hard time understanding this "MAY have changed" text
(which, for one, shouldn't be using 2119 language).  Taking note that
this is the "removed" list, this text seems to be saying that I include
in the "removed" list any object that *is* in the current query results,
but which may have had a property change since the previous state.  So
we end up having to do a "remove + add" for this sort of property
change, is that right?

We may need more detail on the "splices in" operation, with respect to
the indices in the "added" array reflecting the final state, and the
local cached indices needing to be updated on the fly during the
splicing operation in order to get things inserted in the proper places.

Section 5.8

   2.  It must resolve back-references to previous method results that
       were processed on a different server.  This is a relatively
       simple syntactic substitution, described in section 3.6.

Relatively simple, yes, but does require properly parsing the JSON
(right?).

Section 6.3

Why does Blob/copy use 'blobIds' instead of 'create' like generic /copy?

   o  *fromAccountId*: "Id" The id of the account emails were copied
      from.

   o  *accountId*: "Id" The id of the account emails were copied to.

I assme the "emails" are copy/paste bugs.

Section 7.2

   o  *deviceClientId*: "String" (immutable) An id that uniquely
      identifies the client + device it is running on.  The purpose of
      this is to allow clients to identify which PushSubscription
      objects they created even if they lose their local state, so they
      can revoke or update them.  This string MUST be different on
      different devices, and be different from other vendors.  It SHOULD

What's the first vendor that's the basis for comparison?

      be easy to re-generate, not depend on persisted state.  A secure
      hash that includes both a device id and vendor id is one way this
      could be achieved.

Easy to re-generate by whom?
How does the client get the deviceClientId value the first time?

   The POST request MUST have a content type of "application/json" and
   contain the UTF-8 JSON encoded object as the body.  The request MUST

(editorial) Are we back to what the JMAP server sends to the notification URL?

   The push subscription is tied to the credentials used to authenticate
   the API request that created it.  Should these credentials expire or
   be revoked, the push subscription MUST be destroyed by the JMAP
   server.

How is the JMAP server expected to learn about credential expiry or
revocation?

   When these credentials have their own expiry (i.e. it is a session
   with a timeout), the server SHOULD NOT set or bound the expiry time

(editorial) A session where?

Section 7.2.1

I would suggest a section reference to "follows the common /get
semantics from Section 5.1, with the exceptions that [...]" to more
clearly incorporate by reference the existing text.

What nature of authorization checking is done for these get requests?

Section 7.2.2

(Same comment about invariants.)

Section 7.2.3

Given that all of these times are going to be in the past for all
readers, do we want to say something about what time the client is
performing these operations at?

Section 8.1

Again, this (duplicated!) MUST for TLS prevents future  HTTP/3 QUIC
usage.

Also, please reference RFC 7525.

Section 8.2

Please recommend against Basic.  SCRAM is probably a tolerable default
suggestion; some of the other options that have nicer-looking crypto
properties are also not widely deployed, IIUC.

Also, the concept of what a "user's regular password" is seems a bit
underspecified.

Section 8.3

DNS SRV-based autodiscovery seems the only type of autodiscovery
available that is susceptible to the attack described here; you should
probably just state that explicitly.

Section 8.4

While true, 8529's security considerations are pretty sparse; we could
say more here about not overscanning, limiting string length, being
strict about tokenization, etc.

Section 8.7

   and JMAP server the client MUST specify encryption keys when
   establishing the PushSubscription and ignore any push notification
   received that is not encrypted and signed with those keys.

There's no signing in RFC 8291; there is, however, a separate
authentication secret.

Section 8.8

I would be surprised if the propsects for traffic analysis were limited
to just push.  Even regular accesses may still be susceptible to traffic
analysis.

Section 9.4.3

You probably should document that recourse for non-response after 30
days is to request action from the IESG.



From nobody Wed Feb 20 22:05:24 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id CBAED12F1A6; Wed, 20 Feb 2019 22:05:14 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Adam Roach <adam@nostrum.com>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155072911482.20173.6175175148323613513.idtracker@ietfa.amsl.com>
Date: Wed, 20 Feb 2019 22:05:14 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/E0swd8KyMMbhBhGT54d9Qn-PBZg>
Subject: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 06:05:15 -0000

Adam Roach has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Thanks to the authors for a well-laid-out and easy-to-read document. Thanks also
to everyone who contributed to the completion of this work. I have three
DISCUSS-level items, and a handful of other suggestions that are largely
editorial

---------------------------------------------------------------------------

§7.3:

>  The client may add a query parameter called "types", with the value
...
>  The client may add a query parameter called "closeafter" with value
...
>  The client may add a query parameter called "ping", with a positive

This form of specification of URI parameters is not allowed -- it contravenes
the basic thesis of BCP 190; section 2.4 of which stipulates:

>  Applications MUST NOT directly specify the syntax of queries, as this
>  can cause operational difficulties for deployments that do not
>  support a particular form of a query.
...
>  Extensions MUST NOT constrain the format or semantics of queries.

Given that the base resource used to bootstrap the JMAP infrastructure already
uses URI templates, it seems that they would be a good candidate for specifying
a means of adding these parameters in a way that respects the basic principle
that URI design ownership belongs to the domain administrator.

---------------------------------------------------------------------------

§8.3:

>  If this is not feasible, servers MUST ensure this path cannot be
>  controlled by an attacker, as again it may be used to steal
>  credentials.

This seems problematic, as it would need to be honored by *all* web servers
everywhere on the entire Internet to be effective. One cannot really presume
that all website operators will be aware of JMAP. I think the only really
sensible thing to do here is to forbid clients from using "/.well-known/jmap" on
a server until they have received some external positive indication that the
server supports JMAP (via SRV or some other mechanism).

---------------------------------------------------------------------------

The reference for Server-Sent events normatively points to the WHATWG HTML
spec, which changes on a continuing basis. I don't think we've really worked
out the mechanics of citing this kind of reference normatively; and JMAP takes
the especially dangerous step of citing a specific *section* of the document,
which may well change at arbitrary and potentially frequent intervals. There
is, in fact, no guarantee that the cited "text/event-stream" mechanism will
continue to exist in future versions of the WHATWG document (cf. the <keygen>
element).

In this particular case, I think we want to reference
https://www.w3.org/TR/eventsource/ instead.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

§1.1:

>  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
>  "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
>  document are to be interpreted as described in [RFC2119].

Please use the boilerplate from RFC 8174.

---------------------------------------------------------------------------

§1.2:

>  Where "Id" is given as a datatype, it means a "String" of at least 1
>  and maximum 255 octets in size, and MUST only contain characters from
>  the "URL and Filename safe" Base 64 Alphabet, as defined in section 5
>  of [RFC4648].  This is the ASCII alphanumeric characters ("A-Za-
>  z0-9"), hyphen ("-"), and underscore ("_").

This is unclear as to whether "=" is allowed. It is included in the RFC 4648
"URL and Filename safe" alphabet, but not mentioned in this document's
reiteration of that alphabet's definition. If the intention is to exclude "=",
please say so explicitly.

---------------------------------------------------------------------------

§1.2 says:

>  All record ids are assigned by the server, and are immutable.

...in which no exceptions are allowed.

§1.6.3 says:

>  The id of a record is immutable, and normally assigned by the server.

...where "normally" indicates that there will be exceptions. These say different
things. Please change the inaccurate one to match the accurate one.

---------------------------------------------------------------------------

§2.1:

>       "accounts": {
>         "13824": {
>           "name": "john@example.com",
>           "isPersonal": true,
>           "isReadOnly": false,
>           "hasDataFor": [
>             "urn:ietf:params:jmap:mail",
>             "urn:ietf:params:jmap:contacts"
>           ]
>         },

Section 1.2 offers the advice:

>  In particular, it is wise to avoid:
>
...
>
>  o  Ids starting with digits
>
>  o  Ids that contain only digits

It seems that the examples should conform to the document's advice --
implementors often pay more attention to examples than even normative text, much
less non-normative advice.

---------------------------------------------------------------------------

§3.2:

>     3.  A "String" *client id*: an arbitrary string from the client to
>         be echoed back with the responses emitted by that method call

I think the document wants to say a bit more about the scope of uniqueness for
this client ID. Also, the name is a bit confusing, as "Client ID" is most easily
interpreted as "an identifier that identifies a client." This appears to be more
of a "Method ID."

---------------------------------------------------------------------------

§5.7:

>  o  *keywords*: "String[Boolean]" (default: ) A set of keywords that

I think you're missing something after "default:" inside the parentheses.

As an aside -- and I know this is just an example, but people are likely to
follow it when designing things riding on top of JMAP -- I was initially a bit
confused about why this is "String[Boolean]" rather than "String[]",
especially since the only valid value appears to be "true". Is this to allow
for smaller patch operations? If so, text explaining this design decision
would probably be good.

---------------------------------------------------------------------------

§7.1.1:

>  It can wait until the call completes and
>  then compare if the new state string after the /set is the same as
>  was pushed in the StateChange object; if so, it does not need to
>  waste a request asking for changes it already knows.

I think this phrasing may oversimplify things a bit. For example:

 - my current cached notion of state is "A"
 - I send a /set operation
 - I get a "StateChange" that indicates that the new state is "C"
 - I get a response to the /set operation indicating that the state has changed
   from "B" to "C"

The new state after the /set is the same as was pushed in the StateChange
object; however, I'm still missing state that resulted in the change from "A" to
"B".

I think the language in this example needs to be updated to be more precise
about when such requests can be omitted.

---------------------------------------------------------------------------

§7.3:

>  When a new connection is made to the event-source endpoint, a
>  client following the server-sent events specification will send a
>  Last-Event-ID HTTP header

Nit: "...HTTP header field..."



From nobody Thu Feb 21 00:33:18 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id CE87C12D4F3; Thu, 21 Feb 2019 00:33:10 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Adam Roach <adam@nostrum.com>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-mail@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 00:33:10 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/zFI-GCnG8VNUhptOmvqK_QGEefI>
Subject: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 08:33:11 -0000

Adam Roach has entered the following ballot position for
draft-ietf-jmap-mail-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-mail/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Thanks to everyone who worked on this document. I found it well-organized and
easy to read.

---------------------------------------------------------------------------

See my DISCUSS on draft-ietf-jmap-mail regarding the issues that can arise
from normatively referencing the WHATWG HTML document. Consider citing
https://www.w3.org/TR/html52/ instead.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

ID Nits Reports:

  -- The draft header indicates that this document updates RFC5788, but the
     abstract doesn't seem to mention this, which it should.

---------------------------------------------------------------------------

§1.1:

>  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
>  "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
>  document are to be interpreted as described in [RFC2119].

Please use the boilerplate from RFC 8174.

---------------------------------------------------------------------------

§2:

>     However, unlike in IMAP, a mailbox may only have a single role,
>     and no two mailboxes in the same account may have the same role.

I get the impression that JMAP for mail is intended to be implementable as a
façade on top of a normal IMAP server. It is very unclear how such an
implementation is able to fulfill this requirement when the IMAP server has
multiple mailboxes marked as, say, "Sent". Please add guidance.

---------------------------------------------------------------------------

§2.3:

>  A Mailbox object matches the filter if and only if all of the given
>  conditions match.

I believe this means to say that it matches the *FilterCondition* if and only
if the conditions match (rather than saying it matches the *filter*). Looking
at draft-ietf-jmap-core section 5.5, the *filter* consists of
*FilterOperators* and *FilterConditions*; and one presumes that JMAP for mail
is not intending to override the meaning of "*FilterOperators*" by making them
all behave identical to "AND".

This issue also arises in §7.3

---------------------------------------------------------------------------

§4.1.1:

>  o  *keywords*: "String[Boolean]" (default: ) A set of keywords that

The intended default is unclear to me. Is this meant to indicate "{}"?

---------------------------------------------------------------------------

§4.1.2.1:

>  A server SHOULD replace any octet
>  or octet run with the high bit set that violates UTF-8 syntax with
>  the unicode replacement character (U+FFFD).

This seems to preclude a client-side implementation of DKIM. That seems
problematic.

---------------------------------------------------------------------------

§4.1.2.3:

>  o  *name*: "String|null" The _display-name_ of the [RFC5322]
>     _mailbox_, or "null" if none.

Although its use is not technically correct, the use of comments in From
header fields to include display names was, at one time, painfully common --
and one still comes across such usage in the field from time to time.

For example, I received a message as recently as ten days ago with a From
header field of the form:

  From: MAILER-DAEMON@ietfa.amsl.com (Mail Delivery System)

(Yes. That was generated by an IETF-affiliated mail server. ¯\_(ツ)_/¯ )

It would probably be good for this specification to at least *allow* (and
probably encourage) JMAP-for-mail servers to populate the name field with such
comments when no properly-formatted name is available; this would allow
JMAP-for-mail clients to easily operate on par with existing IMAP clients.

---------------------------------------------------------------------------

§4.1.4:

>        the charset was unknown, or the content-trasfer-encoding was

Nit: "...-transfer-..."

---------------------------------------------------------------------------

§7.5.1:

>     "description": "Verzeihung, wegen verdaechtiger Aktivitaeten Ihres
Benutzerkontos haben wir den Versand von Nachrichten gesperrt. Bitte wenden Sie
sich fuer Hilfe an unser Support Team."

This line is approximately 120 characters too long. Consider wrapping.



From nobody Thu Feb 21 01:03:42 2019
Return-Path: <aamelnikov@fastmail.fm>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 49B92130ECD; Thu, 21 Feb 2019 01:03:40 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level: 
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmail.fm header.b=pvC1tvk5; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=6Ncr2yhS
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 ifeC8wiX_inm; Thu, 21 Feb 2019 01:03:37 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id BCBB7130E69; Thu, 21 Feb 2019 01:03:37 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id E736521D3C; Thu, 21 Feb 2019 04:03:36 -0500 (EST)
Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Thu, 21 Feb 2019 04:03:36 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=fm2; bh=d RgczSxecdc3xOLhrGvlFhdAtHvNNjiKv3J+Z83C/Ag=; b=pvC1tvk5fkE5BGf/k 1iLyFlYm64IZ+e3vu+D9Es2qEO64h9Gb19kRIj3otZtAoPwgDTm+zPDLu2WHDUAT /JimwqbxvtWRZLuEkgzoLg3NSrB0T2NL6XquhbYLj0vbqrzOhXTw6u42mHsFE/Ld lWiFfKWyiqgfT1PsC0RULxELRdIZ92/MfBLQcBkJlEP9Qp3Y+d+eOwfKo8Egfnxg rqwspQTqDOGlTqIDv6k7HN3h8wwHWrKCn9h6bpaic2Vuj931yh7arCIIuoAIlFup EG/2E+Gq4NcoN4DGLefCR8FBZusHomnZtPTh1PcmaUnj8UINnXN/ts8msOeHzlN5 MRDpA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=dRgczSxecdc3xOLhrGvlFhdAtHvNNjiKv3J+Z83C/ Ag=; b=6Ncr2yhSCr8VSTY7QLO2TfNbe56fXnlSq8RkY7owI9DrvdCt5IsXbcZPf Sj+68jS704XWLSZVBWmciCulpbYAvKKgbH0RlGz1dJje94DvIWpkBPVMIYSJCLKK QYxv9TeWg3xCxCB80a4dIWnLn2k8gLx2q4LqNnCZjuQm2g3QFTNt4cCLxQnUI+XE k8tk0dIdMvnmGZ6MZt7/jeqFyi9OV+0yW+pOFMCf8Whdf/hoC3B2T5OMTU9G7T4b GtwNraUclaPgg2wi2+bVmMZRzmqLBkioZQnmAtuUHjS2DQT5g3rv43P6mcAIDVO9 I9ER7DbDIAR/VqA/yzVLIZHSwxVPA==
X-ME-Sender: <xms:aGluXHpYcQn4kOcfGXrvXPAn6h8v47oowu0czWFFICES0OMTAL5Yiw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdekucdltddurdegtdelrddttddmucetuf doteggodetrfdotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhhtnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpegtggfuhffojgffgffkfhfvsehtqhhmtdhhtddvnecuhfhrohhmpeetlhgvgigvhicu ofgvlhhnihhkohhvuceorggrmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfhhmqeenuc ffohhmrghinhepuhhnihgtohguvgdrohhrghdphhhtthhpfehovhgvrhhquhhitgdrihht necukfhppeejjedrleejrddugeehrdehheenucfrrghrrghmpehmrghilhhfrhhomheprg grmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfhhmnecuvehluhhsthgvrhfuihiivgep td
X-ME-Proxy: <xmx:aGluXNfPiUs037_fbJnISozZ_oKZHCeCT5Sj2R7FS5bcrt8y6eIj9w> <xmx:aGluXJvmIuaIc8HU-p__hJY_RA0-uVL5WDp-if69GClOCZwMFElABA> <xmx:aGluXNWN686ivBoaxJ5cmdAAedvlW_gXDfE5sdpo33_SGnbpLuFkuQ> <xmx:aGluXOXHFlegnjctHMikQ93-Kk3upQYLDQ44oGICC1qL9oyg63GNcg>
Received: from [192.168.0.9] (cpc121086-nmal24-2-0-cust54.19-2.cable.virginm.net [77.97.145.55]) by mail.messagingengine.com (Postfix) with ESMTPA id B2BB4E4443; Thu, 21 Feb 2019 04:03:35 -0500 (EST)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (1.0)
From: Alexey Melnikov <aamelnikov@fastmail.fm>
X-Mailer: iPad Mail (14F89)
In-Reply-To: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 09:11:40 +0000
Cc: The IESG <iesg@ietf.org>, brong@fastmailteam.com, draft-ietf-jmap-core@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <CEF846E0-DB3C-49DE-8649-B591AEA0B45D@fastmail.fm>
References: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com>
To: Benjamin Kaduk <kaduk@mit.edu>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/OgW0ICtrp-6QOjM9R9_qrwZq0P8>
Subject: Re: [Jmap] Benjamin Kaduk's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 09:03:40 -0000

Hi Benjamin,
Thank you for your extensive comments.

In this email I will concentrate on [most of] your DISCUSS points:

> On 21 Feb 2019, at 05:27, Benjamin Kaduk <kaduk@mit.edu> wrote:
>=20
> ----------------------------------------------------------------------
> DISCUSS:
> ----------------------------------------------------------------------
>=20
> There's a lot here, and I was not reading in the best of environments,
> so it's quite possible that I am just confused or missed something while
> reading.  On the whole, this document is well-written and gives me a
> good picture of how things work.  That said, there are still some places
> where it looks like we may need to have some discussions...
>=20
> This document (twice) has a MUST requirement for HTTP over TLS, which
> seems to exclude any future usage of HTTP/3 over QUIC.  (It's also
> probably not needed to repeat the normative requirement in two places; I
> noted both in the COMMENT section.)

I think requiring a specific version of HTTP and underlying transport is rig=
ht. Future versions of HTTP and different transports like QUIC are different=
 mappings and I think would need a separate document, even if a short one.

Having said that, if you can show some specific wording that would address y=
our concern, the WG should consider.

> Section 1.6.2 asserts that "all data belong to a single account".  And
> yet, we seem to have PushSubscription objects in Sections 7.2.1 and
> 7.2.2 that disclaim any relationship to an account, which seems
> internally inconsistent.  It's also unclear to me from the text in the
> latter sections what mechanism is used to determine whether a given
> request is authorized to see a given PushSubscription object.  Is it
> supposed to be based on the authentication credentials to the API
> service directly, or a user abstraction, or something else?

Editors should reply to this.

>=20
> Section 5.3
>=20
>   Some records may hold references to other records (foreign keys).
>   That reference may be set (via create or update) in the same request
>   as the referenced record is created.  To do this, the client refers
>   to the new record using its creation id prefixed with a "#".  The
>   order of the method calls in the request by the client MUST be such
>   that the record being referenced is created in the same or an earlier
>   call.  The server thus never has to look ahead.  Instead, while
>=20
> I think this means you need to specify what order the server does the
> create, update, and destroy lists in -- that is, that all creates are
> done before all updates, etc..

I think you misunderstood: the order is important and all operations are per=
formed in the order specified (so there is no internal reordering to be done=
 by the server). If the client references something that wasn't yet created,=
 it is a client error and will be reported accordingly.
>=20
> Section 5.5
>=20
> The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/>
> is not listed in the IANA collation registry for internet application
> protocols; since the session object limits the collationAlgorithms to
> those in the registry, at present, it is not permitted to use that
> collation algorithm.  It would seem that this document should stimulate
> the registration of that collation algorithm in some fashion (whether by
> explicitly doing so in its IANA Considerations or otherwise).

I think this is fair.=20
>=20
> Section 7.1
>=20
>   o  *changed*: "Id[TypeState]" A map of _account id_ to an object
>      encoding the state of data types that have changed for that
>      account since the last StateChange object was pushed, for each of
>=20
> I don't see how these semantics provide the properties stated in Section
> 7, "[i]t doesn't matter if some push events are dropped before they
> reach the client; it will still get all changes next time it syncs."  In
> particular, if the client misses a state change for the CalendarEvent
> type, and then no other changes that affect CalendarEvents occur, the
> client will remain unaware of the changes to CalendarEvents, even if
> other push notifications for other types come in.  Am I misunderstanding
> one or more of the behavior or stated guarantees?

I think you do. Clients will periodically poll. Once they do, they will be a=
ble to recover all missing notifications due to use of sequence numbers.


Best Regards,
Alexey=


From nobody Thu Feb 21 05:07:57 2019
Return-Path: <ietf@kuehlewind.net>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 7E3FD129284; Thu, 21 Feb 2019 05:07:55 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: =?utf-8?q?Mirja_K=C3=BChlewind?= <ietf@kuehlewind.net>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155075447547.8706.2534600940479938491.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 05:07:55 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/GF2Ah2oh0wEREiSFea9qtcOg4v0>
Subject: [Jmap] =?utf-8?q?Mirja_K=C3=BChlewind=27s_No_Objection_on_draft-?= =?utf-8?q?ietf-jmap-core-14=3A_=28with_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 13:07:56 -0000

Mirja Kühlewind has entered the following ballot position for
draft-ietf-jmap-core-14: No Objection

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for addressing the TSV-ART comments (and thanks to Allison for the review)!

One question regarding sec 9.4.1.:
How long should IANA wait for comments before the registration is performed?



From nobody Thu Feb 21 05:24:50 2019
Return-Path: <ietf@kuehlewind.net>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 222BE130FCA; Thu, 21 Feb 2019 05:24:42 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: =?utf-8?q?Mirja_K=C3=BChlewind?= <ietf@kuehlewind.net>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.91.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 05:24:42 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/2dl5lV9oTSl8z_IOhCsOW1k9quc>
Subject: [Jmap] =?utf-8?q?Mirja_K=C3=BChlewind=27s_Discuss_on_draft-ietf-?= =?utf-8?q?jmap-core-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 13:24:42 -0000

Mirja Kühlewind has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Sorry, I earlier forgot one point I would like to quickly discuss:

The jmap service name registration only requests registration for tcp while H/3
could be used as well which will work over udp. Maybe it would be more
future-proof to also add an entry for udp?

Further, there is a note that says that this registration will change an
existing entry. Please note that for removing the existing entry, IANA might
still need to contact the original assignee to ask for approval. However, this
is just a processing issue and shouldn't lead to a real problem.

And finally a comment related to my above note about H/3, the document talks
two times about "keeping the TCP connection open". To be future proof, I would
maybe recommend to change the wording to "keeping the transport connection
open".


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for addressing the TSV-ART comments (and thanks to Allison for the review)!

One question regarding sec 9.4.1.:
How long should IANA wait for comments before the registration is performed?



From nobody Thu Feb 21 05:39:03 2019
Return-Path: <aamelnikov@fastmail.fm>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8222B129284; Thu, 21 Feb 2019 05:38:53 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level: 
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmail.fm header.b=YJetQ4yD; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=lVxALHuO
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 WkN2R8LwMe89; Thu, 21 Feb 2019 05:38:51 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1CF8C1279E6; Thu, 21 Feb 2019 05:38:50 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 57432336A; Thu, 21 Feb 2019 08:38:49 -0500 (EST)
Received: from imap1 ([10.202.2.51]) by compute7.internal (MEProxy); Thu, 21 Feb 2019 08:38:49 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= message-id:in-reply-to:references:date:from:to:cc:subject :content-type:content-transfer-encoding; s=fm2; bh=NH2te12rowbLa wHs3fDdPcg/lLKKPzJRXiUdBIRPpE8=; b=YJetQ4yDCCxUG+CkVG3B+xLBmhjPY jqDWMK8VaX+/qTGZ1lAV1L6wWb14+KVjg4HO9bdHNfwvmyyjl9QQR6y847YTM46Z snZgujrXTaHBsEkRorGcpaxAwEOjz1fhP+CypvIkpSARTvcjpzxuG0Z/CmtaOx5G O7JKlZqYRiRHTsI5n9QQfsnynC/pGuhoVl7b4FfmguEvJclnowNEhmqT8gHCJYKJ y08ngq7hWi8D2NOdIBRhn2sajJfW3P8AC1Us4tkrCdj+IiNs4bUVKOv5dPgnqqpn 9NNmpQbphRUAP+LeSoqfHn3mytMk0uAzkO6ZdnFd5NZpwft1ljApechIw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=NH2te12rowbLawHs3fDdPcg/lLKKPzJRXiUdBIRPpE8=; b=lVxALHuO tTvKnpKPxVZSjrkIpQY8lj+arydnMa+Wbav9bF/iOZFDZTe+XQJrYjH4/Sm0RbhO V9z84iQKXHUgLM+0ZBWh5IRJmVlrwtyedJc/9SoiZ5YJDmowIyY+27WpcQelc9t0 kLINgZ9Et7mOq19aLzWUVHdnjW8RNT/woqF5ytM6T0v6e3Ao1lOVk4UyovxjtZ3d 29IRRAPjGxLXkMkvyWb5NFZkBwwna0QyO+FCbhEADNtFi/F3Gcp5juSwO5EULse0 MkdiXcG1maoLohHBzmcNBKd0zQu+CXJRLG2/pXJBj0kelpNelm81CUC929yXzz1U hT5j2gaygUfJkw==
X-ME-Sender: <xms:6KluXMdqbE-f6pW3q8fvBtwd1zwgWutlSWx8hHlhrXeqMmymJvHmvA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdekgdehieculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtgfesthhqredtreerjeenucfhrhhomhepfdetlhgv gigvhicuofgvlhhnihhkohhvfdcuoegrrghmvghlnhhikhhovhesfhgrshhtmhgrihhlrd hfmheqnecuffhomhgrihhnpeiffedrohhrghenucfrrghrrghmpehmrghilhhfrhhomhep rggrmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfhhmnecuvehluhhsthgvrhfuihiivg eptd
X-ME-Proxy: <xmx:6KluXGL3gj79ojyyt3Nv_4Gy3l5H_5tMOf4he5Mtt8WaW51h0cqVlQ> <xmx:6KluXEtqA2iXuxf53-VhHHg7QXsJ3X2KkyA-cZJAwpCFwjiVZhkqHQ> <xmx:6KluXIYB-3ZDf9VbHJ6Y3J_cnwOWpoV2XPzuDqY5jv3HGnGiBXpWJA> <xmx:6KluXNf9iU1gAxOUDL932TUevXWvEN7zfZZXGVwhuNxRENMi3I4Dxw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 5BD34D459A; Thu, 21 Feb 2019 08:38:48 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 21611513
Message-Id: <768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com>
In-Reply-To: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com>
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 08:38:27 -0500
From: "Alexey Melnikov" <aamelnikov@fastmail.fm>
To: "The IESG" <iesg@ietf.org>, "Adam Roach" <adam@nostrum.com>
Cc: "Bron Gondwana" <brong@fastmailteam.com>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/n02Byv_qf_DBSIuhmz2O85V4RPg>
Subject: Re: [Jmap]  =?utf-8?q?Adam_Roach=27s_Discuss_on_draft-ietf-jmap-mail-?= =?utf-8?q?14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 13:38:54 -0000

Hi Adam,
Thank you for your comments.
Just replying to a couple of them:

On Thu, Feb 21, 2019, at 8:33 AM, Adam Roach wrote:
> Adam Roach has entered the following ballot position for
> draft-ietf-jmap-mail-14: Discuss

 [...]
> ----------------------------------------------------------------------=

> DISCUSS:
> ----------------------------------------------------------------------=

>=20
> Thanks to everyone who worked on this document. I found it well-organi=
zed and
> easy to read.
>=20
> ----------------------------------------------------------------------=
-----
>=20
> See my DISCUSS on draft-ietf-jmap-mail regarding the issues that can a=
rise
> from normatively referencing the WHATWG HTML document. Consider citing=

> https://www.w3.org/TR/html52/ instead.

I agree that the W3C reference is a better choice.

 (snip)
> ----------------------------------------------------------------------=
-----
>=20
> =C2=A72:
>=20
> >     However, unlike in IMAP, a mailbox may only have a single role,
> >     and no two mailboxes in the same account may have the same role.=

>=20
> I get the impression that JMAP for mail is intended to be implementabl=
e as a
> fa=C3=A7ade on top of a normal IMAP server. It is very unclear how suc=
h an
> implementation is able to fulfill this requirement when the IMAP serve=
r has
> multiple mailboxes marked as, say, "Sent". Please add guidance.

Allowing multiple choices of "Sent" mailbox is a misfeature of the origi=
nal IMAP extension which JMAP is trying to correct. When I implemented s=
imilar functionality in IMAP, I restricted it to allowing only 1 mailbox=
 per each special-use attribute.

I suppose it would be useful to add some guidance about what to do if on=
e implements JMAP as a frontend to IMAP which allows multiple mailboxes =
with the same special-use attribute.

 (snip)

> ----------------------------------------------------------------------=
-----
>=20
> =C2=A74.1.1:
>=20
> >  o  *keywords*: "String[Boolean]" (default: ) A set of keywords that=

>=20
> The intended default is unclear to me. Is this meant to indicate "{}"?=


Yes, I think so.

> ----------------------------------------------------------------------=
-----
>=20
> =C2=A74.1.2.3:
>=20
> >  o  *name*: "String|null" The _display-name_ of the [RFC5322]
> >     _mailbox_, or "null" if none.
>=20
> Although its use is not technically correct, the use of comments in Fr=
om
> header fields to include display names was, at one time, painfully com=
mon --
> and one still comes across such usage in the field from time to time.
>=20
> For example, I received a message as recently as ten days ago with a F=
rom
> header field of the form:
>=20
>   From: MAILER-DAEMON@ietfa.amsl.com (Mail Delivery System)
>=20
> (Yes. That was generated by an IETF-affiliated mail server. =C2=AF\_(=E3=
=83=84)_/=C2=AF )
>=20
> It would probably be good for this specification to at least *allow* (=
and
> probably encourage) JMAP-for-mail servers to populate the name field w=
ith such
> comments when no properly-formatted name is available; this would allo=
w
> JMAP-for-mail clients to easily operate on par with existing IMAP clie=
nts.

I am not entirely sure this is the right choice here, as JMAP (like IMAP=
) tries to preserve message fidelity. I think JMAP clients can do this a=
utomatically based on what they get from JMAP servers.


From nobody Thu Feb 21 07:05:57 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C91DF12F1A2; Thu, 21 Feb 2019 07:05:49 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.678
X-Spam-Level: 
X-Spam-Status: No, score=-1.678 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (message has been altered)" header.d=nostrum.com
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 t6warip6lJXd; Thu, 21 Feb 2019 07:05:48 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7845A12D7F8; Thu, 21 Feb 2019 07:05:48 -0800 (PST)
Received: from MacBook-Pro.roach.at (99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228]) (authenticated bits=0) by nostrum.com (8.15.2/8.15.2) with ESMTPSA id x1LF5djN095192 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 21 Feb 2019 09:05:41 -0600 (CST) (envelope-from adam@nostrum.com)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=nostrum.com; s=default; t=1550761542; bh=iSpx1aatt+F6khUoR/SMVxIH5NbKNLp31yTml+NsXy4=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=bVOsqmJZVDfHnU+3Kz3vv0UX0aqRpcSm+IgFwBj2LuRoqwmnhyOaj7QlNSXHoe6qf oBFT7nEr18ncjPFafyrbIRmLiAv1ejTKDU/bHqPvyWMXytywGiAquhejHR2SOkqFre LG4jGcqLvjDmZN+/xRXvn2T8VTEcrOspoAzielHQ=
X-Authentication-Warning: raven.nostrum.com: Host 99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228] claimed to be MacBook-Pro.roach.at
To: Alexey Melnikov <aamelnikov@fastmail.fm>, The IESG <iesg@ietf.org>
Cc: Bron Gondwana <brong@fastmailteam.com>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com>
From: Adam Roach <adam@nostrum.com>
Message-ID: <31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com>
Date: Thu, 21 Feb 2019 09:05:34 -0600
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.5.0
MIME-Version: 1.0
In-Reply-To: <768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com>
Content-Type: multipart/alternative; boundary="------------F9E3AF94CDEF72D9273723B2"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/bkMGDz1FSYh_UN_1ySKhL0Nkxho>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 15:05:50 -0000

This is a multi-part message in MIME format.
--------------F9E3AF94CDEF72D9273723B2
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

On 2/21/19 7:38 AM, Alexey Melnikov wrote:
>> §4.1.2.3:
>>
>>>   o*name*: "String|null" The_display-name_  of the [RFC5322]
>>>      _mailbox_, or "null" if none.
>> Although its use is not technically correct, the use of comments in From
>> header fields to include display names was, at one time, painfully common --
>> and one still comes across such usage in the field from time to time.
>>
>> For example, I received a message as recently as ten days ago with a From
>> header field of the form:
>>
>>    From:MAILER-DAEMON@ietfa.amsl.com  (Mail Delivery System)
>>
>> (Yes. That was generated by an IETF-affiliated mail server. ¯\_(ツ)_/¯ )
>>
>> It would probably be good for this specification to at least*allow*  (and
>> probably encourage) JMAP-for-mail servers to populate the name field with such
>> comments when no properly-formatted name is available; this would allow
>> JMAP-for-mail clients to easily operate on par with existing IMAP clients.
> I am not entirely sure this is the right choice here, as JMAP (like IMAP) tries to preserve message fidelity.


It appears that this is true for the raw headers, but the processed 
headers notably exclude things like comments, and have already performed 
transformations (e.g. the conversion of "=?UTF-8?Q?John_Sm=C3=AEth?=" to 
"John Smith"). I read these already-parsed forms of header fields as 
being *semantic* rather than *syntactic*, and the semantic in the 
more-common-than-it-should-be case that I cite is that "Mail Delivery 
System" is intended as the name to be displayed.


>   I think JMAP clients can do this automatically based on what they get from JMAP servers.


Only if they access the raw header fields, but that really defeats the 
purpose of having the parsed forms.

/a


--------------F9E3AF94CDEF72D9273723B2
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 2/21/19 7:38 AM, Alexey Melnikov
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com">
      <blockquote type="cite" style="color: #000000;">
        <pre class="moz-quote-pre" wrap="">§4.1.2.3:

</pre>
        <blockquote type="cite" style="color: #000000;">
          <pre class="moz-quote-pre" wrap=""> o  <b class="moz-txt-star"><span class="moz-txt-tag">*</span>name<span class="moz-txt-tag">*</span></b>: "String|null" The <span class="moz-txt-underscore"><span class="moz-txt-tag">_</span>display-name<span class="moz-txt-tag">_</span></span> of the [RFC5322]
    <span class="moz-txt-underscore"><span class="moz-txt-tag">_</span>mailbox<span class="moz-txt-tag">_</span></span>, or "null" if none.
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">Although its use is not technically correct, the use of comments in From
header fields to include display names was, at one time, painfully common --
and one still comes across such usage in the field from time to time.

For example, I received a message as recently as ten days ago with a From
header field of the form:

  From: <a class="moz-txt-link-abbreviated" href="mailto:MAILER-DAEMON@ietfa.amsl.com" moz-do-not-send="true">MAILER-DAEMON@ietfa.amsl.com</a> (Mail Delivery System)

(Yes. That was generated by an IETF-affiliated mail server. ¯\_(ツ)_/¯ )

It would probably be good for this specification to at least <b class="moz-txt-star"><span class="moz-txt-tag">*</span>allow<span class="moz-txt-tag">*</span></b> (and
probably encourage) JMAP-for-mail servers to populate the name field with such
comments when no properly-formatted name is available; this would allow
JMAP-for-mail clients to easily operate on par with existing IMAP clients.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">I am not entirely sure this is the right choice here, as JMAP (like IMAP) tries to preserve message fidelity.</pre>
    </blockquote>
    <p><br>
    </p>
    <p>It appears that this is true for the raw headers, but the
      processed headers notably exclude things like comments, and have
      already performed transformations (e.g. the conversion of
      "=?UTF-8?Q?John_Sm=C3=AEth?=" to "John Smith"). I read these
      already-parsed forms of header fields as being *semantic* rather
      than *syntactic*, and the semantic in the
      more-common-than-it-should-be case that I cite is that "Mail
      Delivery System" is intended as the name to be displayed.<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
      cite="mid:768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com">
      <pre class="moz-quote-pre" wrap=""> I think JMAP clients can do this automatically based on what they get from JMAP servers.
</pre>
    </blockquote>
    <p><br>
    </p>
    <p>Only if they access the raw header fields, but that really
      defeats the purpose of having the parsed forms.</p>
    <p>/a<br>
    </p>
  </body>
</html>

--------------F9E3AF94CDEF72D9273723B2--


From nobody Thu Feb 21 08:26:45 2019
Return-Path: <alexey.melnikov@isode.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 302191200D8; Thu, 21 Feb 2019 08:26:37 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level: 
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=isode.com
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 QBDcY3gjNCBI; Thu, 21 Feb 2019 08:26:35 -0800 (PST)
Received: from statler.isode.com (Statler.isode.com [62.232.206.189]) by ietfa.amsl.com (Postfix) with ESMTP id 1ACD6130E2E; Thu, 21 Feb 2019 08:26:33 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1550766392; d=isode.com; s=june2016; i=@isode.com; bh=zdck+B/Bl0xvB9IHC/9+aY+Be7nwyMVbUdokDd/uPm8=; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version: In-Reply-To:References:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description; b=sgcigNxpzkWNXzXZmAIO2EwQUB5ObEzmTrPB/o9KC7fL6ex9AQTLs8uDFndU6kuRFqb+dU vSR56YSp88yjFCjMfVbXMmR+nOLSaP6PWloWrvab8rEMvCBzpszOYWdP911Pik40lXSckK 1usdbFuD5QgdBAYWB2YDgWD5V5AOLZg=;
Received: from [172.20.1.215] (dhcp-215.isode.net [172.20.1.215])  by statler.isode.com (submission channel) via TCP with ESMTPSA  id <XG7RNgBUXsW1@statler.isode.com>; Thu, 21 Feb 2019 16:26:32 +0000
To: Adam Roach <adam@nostrum.com>, Alexey Melnikov <aamelnikov@fastmail.fm>, The IESG <iesg@ietf.org>
Cc: Bron Gondwana <brong@fastmailteam.com>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com> <31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com>
From: Alexey Melnikov <alexey.melnikov@isode.com>
Message-ID: <c9be7660-b1d0-402b-889a-9868157078c9@isode.com>
Date: Thu, 21 Feb 2019 16:26:07 +0000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.0
In-Reply-To: <31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="------------1EAF6A3FF611AB2DC1EFF593"
Content-Language: en-GB
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/WeqJmxHaNlH2Pc-kKjpQqeDbGRU>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 16:26:37 -0000

--------------1EAF6A3FF611AB2DC1EFF593
Content-Type: text/plain; charset=utf-8; format=flowed
Content-transfer-encoding: quoted-printable

Hi Adam,

On 21/02/2019 15:05, Adam Roach wrote:

> On 2/21/19 7:38 AM, Alexey Melnikov wrote:
>>> =C2=A74.1.2.3:
>>>
>>>>   o*name*: "String|null" The_display-name_  of the [RFC5322]
>>>>      _mailbox_, or "null" if none.
>>> Although its use is not technically correct, the use of comments in From
>>> header fields to include display names was, at one time, painfully commo=
n --
>>> and one still comes across such usage in the field from time to time.
>>>
>>> For example, I received a message as recently as ten days ago with a Fro=
m
>>> header field of the form:
>>>
>>>    From:MAILER-DAEMON@ietfa.amsl.com  (Mail Delivery System)
>>>
>>> (Yes. That was generated by an IETF-affiliated mail server. =C2=AF\_(=E3=
=83=84)_/=C2=AF )
>>>
>>> It would probably be good for this specification to at least*allow*  (an=
d
>>> probably encourage) JMAP-for-mail servers to populate the name field wit=
h such
>>> comments when no properly-formatted name is available; this would allow
>>> JMAP-for-mail clients to easily operate on par with existing IMAP client=
s.
>> I am not entirely sure this is the right choice here, as JMAP (like IMAP)=
 tries to preserve message fidelity.
>
> It appears that this is true for the raw headers, but the processed=20
> headers notably exclude things like comments, and have already=20
> performed transformations (e.g. the conversion of=20
> "=3D?UTF-8?Q?John_Sm=3DC3=3DAEth?=3D" to "John Smith"). I read these=20
> already-parsed forms of header fields as being *semantic* rather than=20
> *syntactic*, and the semantic in the more-common-than-it-should-be=20
> case that I cite is that "Mail Delivery System" is intended as the=20
> name to be displayed.
>
I think I misread your comment. If you=C2=A0 mean the the thing in () to be=
=20
used instead of the missing display name, than it would be Ok. I think=20
several IMAP servers already do this.
>
>>   I think JMAP clients can do this automatically based on what they get f=
rom JMAP servers.
>
> Only if they access the raw header fields, but that really defeats the=20
> purpose of having the parsed forms.
>
>

--------------1EAF6A3FF611AB2DC1EFF593
Content-Type: text/html; charset=utf-8
Content-transfer-encoding: quoted-printable

<html>
  <head>
    <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"=
>
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    <p>Hi Adam,<br>
    </p>
    <p>On 21/02/2019 15:05, Adam Roach wrote:<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-=
8">
      <div class=3D"moz-cite-prefix">On 2/21/19 7:38 AM, Alexey Melnikov
        wrote:<br>
      </div>
      <blockquote type=3D"cite"
        cite=3D"mid:768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com">
        <blockquote type=3D"cite" style=3D"color: #000000;">
          <pre class=3D"moz-quote-pre" wrap=3D"">=C2=A74.1.2.3:

</pre>
          <blockquote type=3D"cite" style=3D"color: #000000;">
            <pre class=3D"moz-quote-pre" wrap=3D""> o  <b class=3D"moz-txt-s=
tar"><span class=3D"moz-txt-tag">*</span>name<span class=3D"moz-txt-tag">*</=
span></b>: "String|null" The <span class=3D"moz-txt-underscore"><span class=
=3D"moz-txt-tag">_</span>display-name<span class=3D"moz-txt-tag">_</span></s=
pan> of the [RFC5322]
    <span class=3D"moz-txt-underscore"><span class=3D"moz-txt-tag">_</span>m=
ailbox<span class=3D"moz-txt-tag">_</span></span>, or "null" if none.
</pre>
          </blockquote>
          <pre class=3D"moz-quote-pre" wrap=3D"">Although its use is not tec=
hnically correct, the use of comments in From
header fields to include display names was, at one time, painfully common --
and one still comes across such usage in the field from time to time.

For example, I received a message as recently as ten days ago with a From
header field of the form:

  From: <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:MAILER-DAEMON@i=
etfa.amsl.com" moz-do-not-send=3D"true">MAILER-DAEMON@ietfa.amsl.com</a> (Ma=
il Delivery System)

(Yes. That was generated by an IETF-affiliated mail server. =C2=AF\_(=E3=83=
=84)_/=C2=AF )

It would probably be good for this specification to at least <b class=3D"moz=
-txt-star"><span class=3D"moz-txt-tag">*</span>allow<span class=3D"moz-txt-t=
ag">*</span></b> (and
probably encourage) JMAP-for-mail servers to populate the name field with su=
ch
comments when no properly-formatted name is available; this would allow
JMAP-for-mail clients to easily operate on par with existing IMAP clients.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">I am not entirely sure this i=
s the right choice here, as JMAP (like IMAP) tries to preserve message fidel=
ity.</pre>
      </blockquote>
      <p>It appears that this is true for the raw headers, but the
        processed headers notably exclude things like comments, and have
        already performed transformations (e.g. the conversion of
        "=3D?UTF-8?Q?John_Sm=3DC3=3DAEth?=3D" to "John Smith"). I read these
        already-parsed forms of header fields as being *semantic* rather
        than *syntactic*, and the semantic in the
        more-common-than-it-should-be case that I cite is that "Mail
        Delivery System" is intended as the name to be displayed.<br>
      </p>
    </blockquote>
    I think I misread your comment. If you=C2=A0 mean the the thing in () to
    be used instead of the missing display name, than it would be Ok. I
    think several IMAP servers already do this.<br>
    <blockquote type=3D"cite"
      cite=3D"mid:31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com">
      <p> </p>
      <blockquote type=3D"cite"
        cite=3D"mid:768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com">
        <pre class=3D"moz-quote-pre" wrap=3D""> I think JMAP clients can do =
this automatically based on what they get from JMAP servers.
</pre>
      </blockquote>
      <p>Only if they access the raw header fields, but that really
        defeats the purpose of having the parsed forms. </p>
      <br>
    </blockquote>
  </body>
</html>

--------------1EAF6A3FF611AB2DC1EFF593--


From nobody Thu Feb 21 09:25:08 2019
Return-Path: <barryleiba@gmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AF972131012; Thu, 21 Feb 2019 09:25:00 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.881
X-Spam-Level: 
X-Spam-Status: No, score=-1.881 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.018, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 JdoIGOaAP9rb; Thu, 21 Feb 2019 09:24:58 -0800 (PST)
Received: from mail-io1-f45.google.com (mail-io1-f45.google.com [209.85.166.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B6332131010; Thu, 21 Feb 2019 09:24:58 -0800 (PST)
Received: by mail-io1-f45.google.com with SMTP id v10so2428324iop.4; Thu, 21 Feb 2019 09:24:58 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=GMPMpV44q3s4F1lDJy7CdaVFZnb84Y/FOR06PWqh4/I=; b=fNfXuDr8/WVyZMqvTX2E4WrjT2G20Lu2emK6bmAilKZvK26IpGuHDqgMRDVqDBh2SR qOhhxT9iIRD0tGCwmI8MS4gXP4PzH6UYUjmUscF9AZUugmdPAI0ZIqVRZOdW9n+XK+0j n+iu7VQZIm4aHZjcSmxStxP+YVbISHPmXzbUd1WPTopGGShfuxlq7xnfieMQRCqPr2q7 srA42F+SsMcWZrsB4gQtJBIeZC+M+aWMaaI9AUiG3sIVmLm5kLFZPBA4+/VMnIJz0PrS vnXIclm4OXLLUsoQsa7fEa/KyGMYgNrbNnvCqmQu7cYI2sgGaDKSGmlrGmX+CUaPiQSM OuRQ==
X-Gm-Message-State: AHQUAuYa3RbrP7eR3DpP7KQBYuxUTH8Q+tTHaIaJUPffl6y1z3/yPD/m kVUWJoaQgNkDOJvzXMERJRxPzC+zjbTo/67hvck=
X-Google-Smtp-Source: AHgI3IbnneTjSQyTdbDHgFy7nJlRnbji9s5GzOkYmUmo3II9Pud/x8cN+HJGJmFMI1fRkky0t2sxW0mBERO8tUpeyTw=
X-Received: by 2002:a24:dd0a:: with SMTP id t10mr9178505itf.122.1550769897646;  Thu, 21 Feb 2019 09:24:57 -0800 (PST)
MIME-Version: 1.0
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <CALaySJJQUgAs-iE-t6QTOmUyCqmJ8Th_wh=W6eM6BX3Bm7xY6Q@mail.gmail.com> <0DC740DF-DECC-4D01-826E-7D7D9317A7CD@oracle.com>
In-Reply-To: <0DC740DF-DECC-4D01-826E-7D7D9317A7CD@oracle.com>
From: Barry Leiba <barryleiba@computer.org>
Date: Thu, 21 Feb 2019 09:24:46 -0800
Message-ID: <CALaySJ+QP3Rqe9L=pdVunmKYQZnZVeNKJqkXoQFGjXSVqH5F3A@mail.gmail.com>
To: Chris Newman <chris.newman@oracle.com>
Cc: Eric Rescorla <ekr@rtfm.com>, The IESG <iesg@ietf.org>, IETF JMAP Mailing List <jmap@ietf.org>,  draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>,  jmap-chairs@ietf.org
Content-Type: text/plain; charset="UTF-8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/DxefHmHZU9OJaRYhPCBl6klNWuc>
Subject: Re: [Jmap] Eric Rescorla's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 17:25:01 -0000

The testing issue that Chris brings up is a notable one.  On the other point:

> 2. thin client JMAP applications that use a minimal stripped down
> version of HTTP for applications like IoT-mail-submission. Implementing
> more than one version of HTTP is contrary to thin-client goals, so
> implementers will either ignore the SHOULD

See, I would say that that's not *ignoring* the SHOULD, but, rather,
doing exactly what the SHOULD is there for: considering it, being
aware of the issues, and having a good reason not to implement it.

On the other hand, I can't really say that it's an interoperability or
safety/security issue.  We're saying "SHOULD" because we want to
encourage deployment of HTTP/2.  So I'm good with Chris's suggestion
of changing it to "encouraged", or perhaps even "strongly encouraged".

Barry

On Wed, Feb 20, 2019 at 6:50 PM Chris Newman <chris.newman@oracle.com> wrote:
>
> On 17 Feb 2019, at 9:55, Barry Leiba wrote:
> >> S 1.7.
> >>>
> >>>   1.7.  The JMAP API model
> >>>
> >>>      JMAP uses HTTP [RFC7230] to expose API, Push, Upload and
> >>> Download
> >>>      resources.  Implementations MUST support HTTP/1.1, and MAY
> >>> support
> >>>      later versions.  All HTTP requests MUST use [RFC8446] TLS
> >>> (HTTPS)
> >>
> >> At this point, do you think it should be SHOULD for H2
> >
> > Yes.  "Implementations MUST support HTTP/1.1, SHOULD support HTTP/2,
> > and MAY support later versions.
> >
> > And this will come up again when QUIC is ready.
>
> I'm opposed to saying "SHOULD support HTTP/2" in this specification.
>
> There are likely two classes of JMAP implementations:
>
> 1. Implementations that use an HTTP library of choice, likely in an OS
> or language runtime. Nothing this specification says is going to change
> whether that OS or language runtime HTTP library supports HTTP/2. So for
> these implementations, the only thing this accomplishes is forcing a
> diligent implementor to spend a lot of time on extra tests, which might
> be a barrier to deployment of JMAP (since it will take longer to finish
> those tests).
>
> 2. thin client JMAP applications that use a minimal stripped down
> version of HTTP for applications like IoT-mail-submission. Implementing
> more than one version of HTTP is contrary to thin-client goals, so
> implementers will either ignore the SHOULD or ignore JMAP altogether and
> use a protocol that can be implemented without the need for HTTP/2 code
> (like SMTP submission or one of the many existing ad-hoc HTTP submission
> JSON APIs).
>
> So a "SHOULD support HTTP/2" is likely to accomplish nothing useful with
> respect to HTTP/2 deployment and may deter deployment of JMAP. Like it
> or not, JMAP is competing with existing deployed protocols. I consider
> JMAP technically better than the deployed alternatives (IMAP, SMTP
> submission) so I'd like to see it gradually replace them. As a result, I
> generally oppose requirements and recommendations that create barriers
> to JMAP deployment.
>
> As a compromise, I could live with: servers are encouraged to support
> HTTP/2.
>
>                 - Chris


From nobody Thu Feb 21 12:31:37 2019
Return-Path: <robn@fastmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D48E6130E82; Thu, 21 Feb 2019 12:31:30 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmail.com header.b=s1xupch7; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=PDUj9+lV
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 8CIN819C2IgB; Thu, 21 Feb 2019 12:31:29 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id F3866130E7F; Thu, 21 Feb 2019 12:31:28 -0800 (PST)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 3DA2E23134; Thu, 21 Feb 2019 15:31:28 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute1.internal (MEProxy); Thu, 21 Feb 2019 15:31:28 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.com; h= message-id:in-reply-to:references:date:from:to:cc:subject :content-type; s=fm2; bh=Svko2yeWtJ39uoUPZFeyewaO7QyOCIK1oAhe0lU ybiM=; b=s1xupch7MUpCGifYRPPO70i6G8X5NpzkRbrRl2vdUI8eAG6hqqFuH9Y jIQSYzP/LjpSdTAvNke+hEQU4uTqWREjdDsiuZ/WMtTjaDHiA3tAwQ9YqlJugdUa eP+HqBX13cE8EjYF4kOR/JGcsT1IXKPexMLYRG1m5O+cHDQ/o561rsdTQl8iyZkZ EZkTm7+A5rK6N4Fclx5/Th2ihAXU23TYgJ7Ay408VkwyqxufJGfQyyXMC496W+XC 7wqr3xVd4WLAZW6RIBoPyFmONSpYLBX+Mj7sQ7KXe5qesO6hR/KN4RAQmvUaAcWH CEJxbJlal6Lf4NCZwkLzO3Bl5a97/Gw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=Svko2yeWtJ39uoUPZ FeyewaO7QyOCIK1oAhe0lUybiM=; b=PDUj9+lVapY9ki/Oe6a0pD4eMsKCkOcJH Ww9dlP+FNq8LSakVyJI8Znf64SU6DavDxCLTJ/9cWe2G5ZaJ0n+FC0Gl/15+qD9R wCCgtKEbeBobNJXQK6dB37SIcxtK9kDMZ2KWr0jt28uMNomYAD8HvkHhP3dnK/lQ NONrU8H/+/0nUZd9+v7F+8wVMoXheQlZABV2i7XgVc87dnr/X9aNVhD9Uh2YHfG8 RQujZ9whRgbUYcKEGpXiS6UJebxqZKBoW7xI2rhVLr28zZLZI071QJgoEFBi2VUh vZpIhRGeewJM2Ysbk5HpcN0U7C82Xa+nQ5vGrKv0GWATWiRqlKMBw==
X-ME-Sender: <xms:nwpvXCOJohZyK_CA3lnZ2Jm5nhInzwL9V-eXnNsgihKnuKuCNpumYg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrtdekgddugeduucdltddurdegtdelrddttd dmucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhht necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgfkjghffffhvffutgesrgdtreerreerjeenucfhrhhomheptfhosggp pfgpmjcuoehrohgsnhesfhgrshhtmhgrihhlrdgtohhmqeenucfrrghrrghmpehmrghilh hfrhhomheprhhosghnsehfrghsthhmrghilhdrtghomhenucevlhhushhtvghrufhiiigv pedt
X-ME-Proxy: <xmx:nwpvXLvm2cjU218yyoQgl7MF4o_p0naFHemxIJdp1gsjMqcJxnZGag> <xmx:nwpvXIIPGjVYaBT2lr1hFP3UhIlFPYlTtt-nvZ8y-qJjEdJuFc3MSg> <xmx:nwpvXJe_J6rn7oF8XfRUN917Iu6tkEcN2pEGmhjomhSZmrQvtK5ixw> <xmx:oApvXLyRfkPFZzzzfCi4QtH9k-bIeL2OJUQdjlY_MvJZZE7wH9u9hw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 7C4C620320; Thu, 21 Feb 2019 15:31:27 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 22984477
Message-Id: <2ad865e5-2dd9-46b3-9ca5-00781267a4a1@www.fastmail.com>
In-Reply-To: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com>
References: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com>
Date: Thu, 21 Feb 2019 15:31:27 -0500
From: =?UTF-8?Q?Rob_N_=E2=98=85?= <robn@fastmail.com>
To: "The IESG" <iesg@ietf.org>, =?UTF-8?Q?Mirja_K=C3=BChlewind?= <ietf@kuehlewind.net>
Cc: "Bron Gondwana" <brong@fastmailteam.com>, draft-ietf-jmap-core@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
Content-Type: multipart/alternative; boundary=3065c23710e441cf83f2a1aa2331f059
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/WityGMPbiKq7VUAYPzz3ggkaOXs>
Subject: Re: [Jmap]  =?utf-8?q?Mirja_K=C3=BChlewind=27s_Discuss_on_draft-ietf-?= =?utf-8?q?jmap-core-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 20:31:31 -0000

--3065c23710e441cf83f2a1aa2331f059
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Fri, 22 Feb 2019, at 12:24 AM, Mirja K=C3=BChlewind wrote:
> Further, there is a note that says that this registration will change =
an
> existing entry. Please note that for removing the existing entry, IANA=
 might
> still need to contact the original assignee to ask for approval. Howev=
er, this
> is just a processing issue and shouldn't lead to a real problem.

I was the original assignee (on behalf of FastMail). IANA already contac=
ted me and I approved the change.

Cheers,
Rob N.
--3065c23710e441cf83f2a1aa2331f059
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Fri, 22 Feb =
2019, at 12:24 AM, Mirja K=C3=BChlewind wrote:<br></div><blockquote type=
=3D"cite" id=3D"fastmail-quoted"><div>Further, there is a note that says=
 that this registration will change an<br></div><div>existing entry. Ple=
ase note that for removing the existing entry, IANA might<br></div><div>=
still need to contact the original assignee to ask for approval. However=
, this<br></div><div>is just a processing issue and shouldn't lead to a =
real problem.<br></div></blockquote><div><br></div><div>I was the origin=
al assignee (on behalf of FastMail). IANA already contacted me and I app=
roved the change.<br></div><div><br></div><div>Cheers,<br></div><div>Rob=
 N.<br></div></body></html>
--3065c23710e441cf83f2a1aa2331f059--


From nobody Thu Feb 21 12:57:45 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 059BC1311CC for <jmap@ietfa.amsl.com>; Thu, 21 Feb 2019 12:57:43 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.678
X-Spam-Level: 
X-Spam-Status: No, score=-1.678 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (message has been altered)" header.d=nostrum.com
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 JiFKnj0TJHZL for <jmap@ietfa.amsl.com>; Thu, 21 Feb 2019 12:57:42 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EEA971311C2 for <jmap@ietf.org>; Thu, 21 Feb 2019 12:57:41 -0800 (PST)
Received: from MacBook-Pro.roach.at (99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228]) (authenticated bits=0) by nostrum.com (8.15.2/8.15.2) with ESMTPSA id x1LKvW16052917 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 21 Feb 2019 14:57:34 -0600 (CST) (envelope-from adam@nostrum.com)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=nostrum.com; s=default; t=1550782655; bh=qBrWVV56hAesB85faulmbBunrrOPpytexUJoxIpWHKw=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=tyGcwrrOaWADG1cD8bXeDbTTxGZXBccJdOgnSwZET6765DHtJfXw26eyEX/303/Xz iZtTn5JEWhAyZpilFjXFBW/F/EgeIlGhSj12SDGscb5Va+ag2fK4uACUXiVGi4nhkS CmkD2R3BVISVD7GYFVuAJOfr6XMZi1hm9p3NtGEs=
X-Authentication-Warning: raven.nostrum.com: Host 99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228] claimed to be MacBook-Pro.roach.at
To: Alexey Melnikov <alexey.melnikov@isode.com>, Alexey Melnikov <aamelnikov@fastmail.fm>, The IESG <iesg@ietf.org>
Cc: Bron Gondwana <brong@fastmailteam.com>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com> <31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com> <c9be7660-b1d0-402b-889a-9868157078c9@isode.com>
From: Adam Roach <adam@nostrum.com>
Message-ID: <04c515ce-74e9-dbeb-f6a7-c3bf95e6f3c7@nostrum.com>
Date: Thu, 21 Feb 2019 14:57:27 -0600
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.5.0
MIME-Version: 1.0
In-Reply-To: <c9be7660-b1d0-402b-889a-9868157078c9@isode.com>
Content-Type: multipart/alternative; boundary="------------8187F97191C5338BCA2305EE"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/bYowCUjyR3MLCKvzsXSTclre-zw>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Feb 2019 20:57:43 -0000

This is a multi-part message in MIME format.
--------------8187F97191C5338BCA2305EE
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

On 2/21/19 10:26 AM, Alexey Melnikov wrote:
>
> Hi Adam,
>
> On 21/02/2019 15:05, Adam Roach wrote:
>
>> On 2/21/19 7:38 AM, Alexey Melnikov wrote:
>>>> §4.1.2.3:
>>>>
>>>>>   o*name*: "String|null" The_display-name_  of the [RFC5322]
>>>>>      _mailbox_, or "null" if none.
>>>> Although its use is not technically correct, the use of comments in From
>>>> header fields to include display names was, at one time, painfully common --
>>>> and one still comes across such usage in the field from time to time.
>>>>
>>>> For example, I received a message as recently as ten days ago with a From
>>>> header field of the form:
>>>>
>>>>    From:MAILER-DAEMON@ietfa.amsl.com  (Mail Delivery System)
>>>>
>>>> (Yes. That was generated by an IETF-affiliated mail server. ¯\_(ツ)_/¯ )
>>>>
>>>> It would probably be good for this specification to at least*allow*  (and
>>>> probably encourage) JMAP-for-mail servers to populate the name field with such
>>>> comments when no properly-formatted name is available; this would allow
>>>> JMAP-for-mail clients to easily operate on par with existing IMAP clients.
>>> I am not entirely sure this is the right choice here, as JMAP (like IMAP) tries to preserve message fidelity.
>>
>> It appears that this is true for the raw headers, but the processed 
>> headers notably exclude things like comments, and have already 
>> performed transformations (e.g. the conversion of 
>> "=?UTF-8?Q?John_Sm=C3=AEth?=" to "John Smith"). I read these 
>> already-parsed forms of header fields as being *semantic* rather than 
>> *syntactic*, and the semantic in the more-common-than-it-should-be 
>> case that I cite is that "Mail Delivery System" is intended as the 
>> name to be displayed.
>>
> I think I misread your comment. If you  mean the the thing in () to be 
> used instead of the missing display name, than it would be Ok.


That is exactly what I mean, yes. Thanks.

/a


--------------8187F97191C5338BCA2305EE
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 2/21/19 10:26 AM, Alexey Melnikov
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:c9be7660-b1d0-402b-889a-9868157078c9@isode.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>Hi Adam,<br>
      </p>
      <p>On 21/02/2019 15:05, Adam Roach wrote:<br>
      </p>
      <blockquote type="cite"
        cite="mid:31c48be7-8520-4ff9-0c97-dd8285425784@nostrum.com">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <div class="moz-cite-prefix">On 2/21/19 7:38 AM, Alexey Melnikov
          wrote:<br>
        </div>
        <blockquote type="cite"
          cite="mid:768d7340-691e-48e1-b0bb-764ea8091810@www.fastmail.com">
          <blockquote type="cite" style="color: #000000;">
            <pre class="moz-quote-pre" wrap="">§4.1.2.3:

</pre>
            <blockquote type="cite" style="color: #000000;">
              <pre class="moz-quote-pre" wrap=""> o  <b class="moz-txt-star"><span class="moz-txt-tag">*</span>name<span class="moz-txt-tag">*</span></b>: "String|null" The <span class="moz-txt-underscore"><span class="moz-txt-tag">_</span>display-name<span class="moz-txt-tag">_</span></span> of the [RFC5322]
    <span class="moz-txt-underscore"><span class="moz-txt-tag">_</span>mailbox<span class="moz-txt-tag">_</span></span>, or "null" if none.
</pre>
            </blockquote>
            <pre class="moz-quote-pre" wrap="">Although its use is not technically correct, the use of comments in From
header fields to include display names was, at one time, painfully common --
and one still comes across such usage in the field from time to time.

For example, I received a message as recently as ten days ago with a From
header field of the form:

  From: <a class="moz-txt-link-abbreviated" href="mailto:MAILER-DAEMON@ietfa.amsl.com" moz-do-not-send="true">MAILER-DAEMON@ietfa.amsl.com</a> (Mail Delivery System)

(Yes. That was generated by an IETF-affiliated mail server. ¯\_(ツ)_/¯ )

It would probably be good for this specification to at least <b class="moz-txt-star"><span class="moz-txt-tag">*</span>allow<span class="moz-txt-tag">*</span></b> (and
probably encourage) JMAP-for-mail servers to populate the name field with such
comments when no properly-formatted name is available; this would allow
JMAP-for-mail clients to easily operate on par with existing IMAP clients.
</pre>
          </blockquote>
          <pre class="moz-quote-pre" wrap="">I am not entirely sure this is the right choice here, as JMAP (like IMAP) tries to preserve message fidelity.</pre>
        </blockquote>
        <p>It appears that this is true for the raw headers, but the
          processed headers notably exclude things like comments, and
          have already performed transformations (e.g. the conversion of
          "=?UTF-8?Q?John_Sm=C3=AEth?=" to "John Smith"). I read these
          already-parsed forms of header fields as being *semantic*
          rather than *syntactic*, and the semantic in the
          more-common-than-it-should-be case that I cite is that "Mail
          Delivery System" is intended as the name to be displayed.<br>
        </p>
      </blockquote>
      I think I misread your comment. If you  mean the the thing in ()
      to be used instead of the missing display name, than it would be
      Ok.</blockquote>
    <p><br>
    </p>
    <p>That is exactly what I mean, yes. Thanks.</p>
    <p>/a<br>
    </p>
  </body>
</html>

--------------8187F97191C5338BCA2305EE--


From nobody Fri Feb 22 01:42:08 2019
Return-Path: <ietf@kuehlewind.net>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 74F82124D68; Fri, 22 Feb 2019 01:42:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] 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 aLvrpih3TOi5; Fri, 22 Feb 2019 01:41:59 -0800 (PST)
Received: from wp513.webpack.hosteurope.de (wp513.webpack.hosteurope.de [IPv6:2a01:488:42:1000:50ed:8223::]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 14B95124BF6; Fri, 22 Feb 2019 01:41:59 -0800 (PST)
Received: from 200116b82c425700e1e475bf3f7719bd.dip.versatel-1u1.de ([2001:16b8:2c42:5700:e1e4:75bf:3f77:19bd]); authenticated by wp513.webpack.hosteurope.de running ExIM with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) id 1gx7L9-0004dw-FS; Fri, 22 Feb 2019 10:41:55 +0100
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
From: "Mirja Kuehlewind (IETF)" <ietf@kuehlewind.net>
In-Reply-To: <2ad865e5-2dd9-46b3-9ca5-00781267a4a1@www.fastmail.com>
Date: Fri, 22 Feb 2019 10:41:54 +0100
Cc: The IESG <iesg@ietf.org>, Bron Gondwana <brong@fastmailteam.com>, draft-ietf-jmap-core@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <13CC008D-910C-4508-940B-9ECE2588DC38@kuehlewind.net>
References: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com> <2ad865e5-2dd9-46b3-9ca5-00781267a4a1@www.fastmail.com>
To: =?utf-8?B?Um9iIE4g4piF?= <robn@fastmail.com>
X-Mailer: Apple Mail (2.3445.9.1)
X-bounce-key: webpack.hosteurope.de;ietf@kuehlewind.net;1550828519;97ea2381;
X-HE-SMSGID: 1gx7L9-0004dw-FS
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/XTEy4TfuSrrWUFNA9TVLpIvL0l0>
Subject: Re: [Jmap]  =?utf-8?q?Mirja_K=C3=BChlewind=27s_Discuss_on_draft-ietf-?= =?utf-8?q?jmap-core-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Feb 2019 09:42:01 -0000

Great! Thanks!

> Am 21.02.2019 um 21:31 schrieb Rob N =E2=98=85 <robn@fastmail.com>:
>=20
> On Fri, 22 Feb 2019, at 12:24 AM, Mirja K=C3=BChlewind wrote:
>> Further, there is a note that says that this registration will change =
an
>> existing entry. Please note that for removing the existing entry, =
IANA might
>> still need to contact the original assignee to ask for approval. =
However, this
>> is just a processing issue and shouldn't lead to a real problem.
>=20
> I was the original assignee (on behalf of FastMail). IANA already =
contacted me and I approved the change.
>=20
> Cheers,
> Rob N.


From nobody Fri Feb 22 08:43:18 2019
Return-Path: <alissa@cooperw.in>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AB46D130ECD; Fri, 22 Feb 2019 08:43:08 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level: 
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=cooperw.in header.b=plGLZi0J; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=EEHhCaPl
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 phoqzMnjn6At; Fri, 22 Feb 2019 08:43:07 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 19DED129741; Fri, 22 Feb 2019 08:43:07 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id D4075222B3; Fri, 22 Feb 2019 11:43:05 -0500 (EST)
Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Fri, 22 Feb 2019 11:43:05 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cooperw.in; h= from:message-id:content-type:mime-version:subject:date :in-reply-to:cc:to:references; s=fm2; bh=13nUiZSqN/8opW/InDgWHxt W5/Ip/dHaX0KNKnvVQKI=; b=plGLZi0J3Uou52Xiz4HXyihwjTKsqcZYolUIBJJ hagipeoXfaxfy7jQhht3x58WIo0nKhkjZd8f6SDtep+Ug/aOsLsd/kifH6YsYQOS YJt06OPOw/IrVFcOoGaBww9+JSNcKHYXG/jsbcurQioe3PFfTuvFK4keKBuvDxqk /wrJYd8et3CSiw++CcP96jOLHSfS03zW+aeD/G+349zXR7YWT6WxxzRA24WvwSMl 5l99HfhiBl/+O9qmjLzJYuDtuppGbb3CGj7EhUwSfV4Ei2JBMKPRLbiXKhw4mHlV sRc+JnH3oSdpxeB7shZrwrA1fjSo40Q6p7IYrdEPeHiq8qw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=13nUiZ SqN/8opW/InDgWHxtW5/Ip/dHaX0KNKnvVQKI=; b=EEHhCaPlTTy53AL0niPZ0c dKCbQasfLB03PRtGYT81cLBJW8ucWew1RcerMO3frMStoIwHeHFc1j0XZOFRgUgO zsW+mdU2OZDBcHQxfiIyO5uh9dK3l+88rcXlcEmFI4fatMVJVTMIVkE+Qf616vFN R3xBUGozduVxbG7Z24L7J23lcPnD+YfdvKl8LFG30zJtLSizlYtssoNRvJ85p9mK hIEOjqtwMhU+iGJhufgrTbCWY/OK4aRGGlvtTri7umvMxNLVIcui5Prrkm5NxU0n VbCC5Nx8yoXtuXACicG5Of0sfIP/dpZ6kKYrFVTjseh71eBPugzpjyYvJay+KR6Q ==
X-ME-Sender: <xms:mSZwXNtOMbPOHVKRKlLF20ixN71yC5oM1z77fwjBUa72Z5-c4xjRkg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddruddtgdelfeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffktgggufffjgfvfhfosegrtdhmrehhtdejnecuhfhrohhmpeetlhhishhs rgcuvehoohhpvghruceorghlihhsshgrsegtohhophgvrhifrdhinheqnecukfhppeduje efrdefkedruddujedrieejnecurfgrrhgrmhepmhgrihhlfhhrohhmpegrlhhishhsrges tghoohhpvghrfidrihhnnecuvehluhhsthgvrhfuihiivgeptd
X-ME-Proxy: <xmx:mSZwXCxCZvYBGNYyALPHGRYt0P2tAhiN5AQCq8o8vzXbeYBqAOB_ew> <xmx:mSZwXDi-jAAaQRcsUDWGGO45vIVIo5y9XTByN4Kpu82vGG16BLIInw> <xmx:mSZwXGDtBnPeK_WTV4vVzLjWMtNmINWMngsZ4x0dXuobkvpb1niBvQ> <xmx:mSZwXPk7pC8qh3RB-hCiI76-zsbIxNfFpWHLqIIicbI6QV2o5iZm_Q>
Received: from rtp-alcoop-nitro5.cisco.com (unknown [173.38.117.67]) by mail.messagingengine.com (Postfix) with ESMTPA id 02C5EE425A; Fri, 22 Feb 2019 11:43:04 -0500 (EST)
From: Alissa Cooper <alissa@cooperw.in>
Message-Id: <BD06AEA1-AAFC-46BB-ABBA-1C0EC3E50337@cooperw.in>
Content-Type: multipart/alternative; boundary="Apple-Mail=_995E0B47-3F9C-4F12-A19C-BBDEF107FD5A"
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
Date: Fri, 22 Feb 2019 11:43:04 -0500
In-Reply-To: <8f1bad75-13a0-4c66-9c84-eddb5eb3ff41@beta.fastmail.com>
Cc: iesg <iesg@ietf.org>, draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, IETF JMAP Mailing List <jmap@ietf.org>
To: Neil Jenkins <neilj@fastmailteam.com>
References: <155069147829.31490.10165764411800945653.idtracker@ietfa.amsl.com> <8f1bad75-13a0-4c66-9c84-eddb5eb3ff41@beta.fastmail.com>
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/3i3SehIC-1SmWEbGJmR1gvJZ908>
Subject: Re: [Jmap] Alissa Cooper's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Feb 2019 16:43:09 -0000

--Apple-Mail=_995E0B47-3F9C-4F12-A19C-BBDEF107FD5A
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi Neil,

> On Feb 20, 2019, at 8:56 PM, Neil Jenkins <neilj@fastmailteam.com> =
wrote:
>=20
> On Thu, 21 Feb 2019, at 06:38, Alissa Cooper wrote:
>> I don't understand why device ID needs to be incorporated in order to =
achieve
>> uniqueness here.
>=20
> Yes. This text was attempting to make clear that every instance of the =
client needs a separate id, but it needs to be stable. So if your client =
was "Mail App Foo" running on a phone with "UniqueIdX", combining these =
two pieces of information would give you an id that should be unique, =
but is none the less easy to regenerate.
>=20
>> Really it seems like what is needed is a unique ID per client,
>> full stop. Even if you have the unlikely scenario of two clients =
running on the
>> same device from the same vendor (say, one for mail and one for =
calendar), you
>> would still want to support the ability for each client independently =
to be
>> able to recover its push subscriptions, right?
>=20
> Yes.
>=20
>> Some JMAP servers may have device IDs for other reasons anyway, but =
setting this up this way seems like it opens the door for clients to =
unnecessarily share device IDs with JMAP servers in other cases.
>=20
> The suggestion is to use a secure hash of a vendor string and device =
id, in which case it's unlikely to reveal useful information about the =
device id (presuming this id itself has sufficient entropy), but it's =
possible clients would do something else.

Right, historically this is the kind of thing where some clients just =
send the raw device ID, which becomes a vector for tracking. I would =
feel more comfortable if there was a normative recommendation to use the =
scheme you suggest or something with equivalent obfuscation properties. =
But given your =E2=80=98Yes=E2=80=99 above, I don=E2=80=99t see how that =
works. Two clients from the same vendor on the same device will send the =
same ID. Isn=E2=80=99t that a problem? And how would a client know that =
it is a problem and generate the ID some other way?

Thanks,
Alissa=20

>=20
>> Related to this, I don't understand the "SHOULD ... not depend on =
persisted
>> state." Why? I presume it would be straightforward to produce a =
unique client
>> ID that did not have the device ID embedded if this requirement were =
not there.
>=20
> This is due to wanting to make sure you don't lose it and have to =
generate a new one, at least not very often. The reason for this is to =
make sure the client doesn't register itself twice. The only way it can =
know if it is currently registered for push notifications with the =
server is fetch the list of registered devices for the user and see if =
any of them have the same deviceClientId. For security reasons we don't =
return the push endpoint or encryption keys that were registered with =
the server, which are the only other things that could be used to =
correlate. If the client's id changes it can't know if it's registered =
and so may register twice and so start receiving every push twice, at =
least until that registration expires but that could be some time.
>=20
>> =
----------------------------------------------------------------------
>> COMMENT:
>> =
----------------------------------------------------------------------
>>=20
>> =3D Section 1.1 =3D
>>=20
>> Please use the RFC 8174 boilerplate instead of the RFC 2119 =
boilerplate.
>=20
> Sure, done.
>=20
>> =3D Section 2=3D
>>=20
>> s/To avoid conflict, the identifiers for these MUST be a URL with a =
domain
>> owned by the vendor./To avoid conflict, an identifier for a =
vendor-specific
>> extension MUST be a URL with a domain owned by the vendor./
>=20
> Updated, thanks.
>=20
> Neil.


--Apple-Mail=_995E0B47-3F9C-4F12-A19C-BBDEF107FD5A
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">Hi =
Neil,<br class=3D""><div><br class=3D""><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Feb 20, 2019, at 8:56 PM, Neil Jenkins =
&lt;<a href=3D"mailto:neilj@fastmailteam.com" =
class=3D"">neilj@fastmailteam.com</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D"">On =
Thu, 21 Feb 2019, at 06:38, Alissa Cooper wrote:<br =
class=3D""></div><blockquote id=3D"fastmail-quoted" type=3D"cite" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><div class=3D"">I don't understand =
why device ID needs to be incorporated in order to achieve<br =
class=3D""></div><div class=3D"">uniqueness here.<br =
class=3D""></div></blockquote><div style=3D"caret-color: rgb(0, 0, 0); =
font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D"">Yes. =
This text was attempting to make clear that every instance of the client =
needs a separate id, but it needs to be stable. So if your client was =
"Mail App Foo" running on a phone with "UniqueIdX", combining these two =
pieces of information would give you an id that should be unique, but is =
none the less easy to regenerate.<br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><blockquote id=3D"fastmail-quoted" type=3D"cite" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><div class=3D"">Really it seems like =
what is needed is a unique ID per client,<br class=3D""></div><div =
class=3D"">full stop. Even if you have the unlikely scenario of two =
clients running on the<br class=3D""></div><div class=3D"">same device =
from the same vendor (say, one for mail and one for calendar), you<br =
class=3D""></div><div class=3D"">would still want to support the ability =
for each client independently to be<br class=3D""></div><div =
class=3D"">able to recover its push subscriptions, right?<br =
class=3D""></div></blockquote><div style=3D"caret-color: rgb(0, 0, 0); =
font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" =
class=3D"">Yes.</div><div style=3D"caret-color: rgb(0, 0, 0); =
font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><blockquote =
id=3D"fastmail-quoted" type=3D"cite" style=3D"font-family: Helvetica; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: normal; letter-spacing: normal; orphans: auto; text-align: =
start; text-indent: 0px; text-transform: none; white-space: normal; =
widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><div =
class=3D"">Some JMAP servers may have device IDs for other reasons =
anyway, but setting this up this way seems like it opens the door for =
clients to unnecessarily share device IDs with JMAP servers in other =
cases.<br class=3D""></div></blockquote><div style=3D"caret-color: =
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: =
normal; font-variant-caps: normal; font-weight: normal; letter-spacing: =
normal; text-align: start; text-indent: 0px; text-transform: none; =
white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D"">The =
suggestion is to use a secure hash of a vendor string and device id, in =
which case it's unlikely to reveal useful information about the device =
id (presuming this id itself has sufficient entropy), but it's possible =
clients would do something else.<br =
class=3D""></div></div></blockquote><div><br class=3D""></div><div>Right, =
historically this is the kind of thing where some clients just send the =
raw device ID, which becomes a vector for tracking. I would feel more =
comfortable if there was a normative recommendation to use the scheme =
you suggest or something with equivalent obfuscation properties. But =
given your =E2=80=98Yes=E2=80=99 above, I don=E2=80=99t see how that =
works. Two clients from the same vendor on the same device will send the =
same ID. Isn=E2=80=99t that a problem? And how would a client know that =
it is a problem and generate the ID some other way?</div><div><br =
class=3D""></div><div>Thanks,</div><div>Alissa&nbsp;</div><br =
class=3D""><blockquote type=3D"cite" class=3D""><div class=3D""><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><blockquote id=3D"fastmail-quoted" type=3D"cite" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><div class=3D"">Related to this, I =
don't understand the "SHOULD ... not depend on persisted<br =
class=3D""></div><div class=3D"">state." Why? I presume it would be =
straightforward to produce a unique client<br class=3D""></div><div =
class=3D"">ID that did not have the device ID embedded if this =
requirement were not there.<br class=3D""></div></blockquote><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><div style=3D"caret-color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: normal; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;" class=3D"">This is due to wanting to make sure you don't lose it =
and have to generate a new one, at least not very often. The reason for =
this is to make sure the client doesn't register itself twice. The only =
way it can know if it is currently registered for push notifications =
with the server is fetch the list of registered devices for the user and =
see if any of them have the same deviceClientId. For security reasons we =
don't return the push endpoint or encryption keys that were registered =
with the server, which are the only other things that could be used to =
correlate. If the client's id changes it can't know if it's registered =
and so may register twice and so start receiving every push twice, at =
least until that registration expires but that could be some time.<br =
class=3D""></div><div style=3D"caret-color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: normal; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;" class=3D""><br class=3D""></div><blockquote id=3D"fastmail-quoted" =
type=3D"cite" style=3D"font-family: Helvetica; font-size: 12px; =
font-style: normal; font-variant-caps: normal; font-weight: normal; =
letter-spacing: normal; orphans: auto; text-align: start; text-indent: =
0px; text-transform: none; white-space: normal; widows: auto; =
word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><div =
class=3D"">---------------------------------------------------------------=
-------<br class=3D""></div><div class=3D"">COMMENT:<br =
class=3D""></div><div =
class=3D"">---------------------------------------------------------------=
-------<br class=3D""></div><div class=3D""><br class=3D""></div><div =
class=3D"">=3D Section 1.1 =3D<br class=3D""></div><div class=3D""><br =
class=3D""></div><div class=3D"">Please use the RFC 8174 boilerplate =
instead of the RFC 2119 boilerplate.<br class=3D""></div></blockquote><div=
 style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><div style=3D"caret-color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: normal; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;" class=3D"">Sure, done.<br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><blockquote id=3D"fastmail-quoted" type=3D"cite" =
style=3D"font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><div class=3D"">=3D Section 2=3D<br =
class=3D""></div><div class=3D""><br class=3D""></div><div class=3D"">s/To=
 avoid conflict, the identifiers for these MUST be a URL with a =
domain<br class=3D""></div><div class=3D"">owned by the vendor./To avoid =
conflict, an identifier for a vendor-specific<br class=3D""></div><div =
class=3D"">extension MUST be a URL with a domain owned by the =
vendor./<br class=3D""></div></blockquote><div style=3D"caret-color: =
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: =
normal; font-variant-caps: normal; font-weight: normal; letter-spacing: =
normal; text-align: start; text-indent: 0px; text-transform: none; =
white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" =
class=3D"">Updated, thanks.</div><div style=3D"caret-color: rgb(0, 0, =
0); font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;" class=3D""><br class=3D""></div><div =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" =
class=3D"">Neil.</div></div></blockquote></div><br =
class=3D""></body></html>=

--Apple-Mail=_995E0B47-3F9C-4F12-A19C-BBDEF107FD5A--


From nobody Fri Feb 22 09:09:39 2019
Return-Path: <kaduk@mit.edu>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0420D130F1C; Fri, 22 Feb 2019 09:09:31 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.001
X-Spam-Level: 
X-Spam-Status: No, score=-2.001 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=mit.edu
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 nNitOmeAnLMH; Fri, 22 Feb 2019 09:09:28 -0800 (PST)
Received: from NAM04-CO1-obe.outbound.protection.outlook.com (mail-co1nam04on072c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe4d::72c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D6FAF130F14; Fri, 22 Feb 2019 09:09:27 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mit.edu; s=selector1;  h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UWUTxYi/yog/Wm6wRvPeTo4c00modGMqJhubS37dn2M=; b=vNW6cQDuJ7peuTJuS8xTO1/96HpwzOxX/6J/PBEWe/xU+2pqzMHmrQp5pvhkVWAz185miTkZHP8MXcJ/XCwYnKONC73DPzKnGUba9/maaw+oHytnm4iUsYnyD2M+mVehCXlpkl+1xyTE8AMhB9s/I9JHkdSWaY+Kio7KfUti2CE=
Received: from SN6PR0102CA0035.prod.exchangelabs.com (2603:10b6:805:1::48) by BN8PR01MB5601.prod.exchangelabs.com (2603:10b6:408:be::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.14; Fri, 22 Feb 2019 17:09:26 +0000
Received: from DM3NAM03FT040.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::204) by SN6PR0102CA0035.outlook.office365.com (2603:10b6:805:1::48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1643.18 via Frontend Transport; Fri, 22 Feb 2019 17:09:25 +0000
Authentication-Results: spf=pass (sender IP is 18.9.28.11) smtp.mailfrom=mit.edu; ietf.org; dkim=none (message not signed) header.d=none;ietf.org; dmarc=bestguesspass action=none header.from=mit.edu;
Received-SPF: Pass (protection.outlook.com: domain of mit.edu designates 18.9.28.11 as permitted sender) receiver=protection.outlook.com; client-ip=18.9.28.11; helo=outgoing.mit.edu;
Received: from outgoing.mit.edu (18.9.28.11) by DM3NAM03FT040.mail.protection.outlook.com (10.152.83.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1643.13 via Frontend Transport; Fri, 22 Feb 2019 17:09:24 +0000
Received: from kduck.mit.edu (24-107-191-124.dhcp.stls.mo.charter.com [24.107.191.124]) (authenticated bits=56) (User authenticated as kaduk@ATHENA.MIT.EDU) by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id x1MH9K0U015229 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 22 Feb 2019 12:09:22 -0500
Date: Fri, 22 Feb 2019 11:09:20 -0600
From: Benjamin Kaduk <kaduk@mit.edu>
To: Alexey Melnikov <aamelnikov@fastmail.fm>
CC: The IESG <iesg@ietf.org>, <brong@fastmailteam.com>, <draft-ietf-jmap-core@ietf.org>, <jmap-chairs@ietf.org>, <jmap@ietf.org>
Message-ID: <20190222170920.GA69562@kduck.mit.edu>
References: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com> <CEF846E0-DB3C-49DE-8649-B591AEA0B45D@fastmail.fm>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <CEF846E0-DB3C-49DE-8649-B591AEA0B45D@fastmail.fm>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-EOPAttributedMessage: 0
X-Forefront-Antispam-Report: CIP:18.9.28.11; IPV:CAL; SCL:-1; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(39860400002)(346002)(396003)(136003)(376002)(2980300002)(199004)(189003)(50466002)(229853002)(966005)(26826003)(8936002)(46406003)(7696005)(66574012)(4326008)(23726003)(1076003)(53416004)(97756001)(8676002)(76176011)(88552002)(5660300002)(305945005)(33656002)(246002)(2906002)(478600001)(786003)(446003)(36906005)(11346002)(476003)(486006)(86362001)(106466001)(16586007)(956004)(6916009)(316002)(126002)(6246003)(426003)(58126008)(106002)(336012)(47776003)(186003)(104016004)(26005)(54906003)(356004)(75432002)(55016002)(53546011)(6306002)(14444005)(18370500001); DIR:OUT; SFP:1102; SCL:1; SRVR:BN8PR01MB5601; H:outgoing.mit.edu; FPR:; SPF:Pass; LANG:en; PTR:outgoing-auth-1.mit.edu; A:1; MX:1; 
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0762730e-08bf-47fb-e338-08d698e87f4e
X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605104)(4608103)(4709054)(2017052603328)(7153060); SRVR:BN8PR01MB5601; 
X-MS-TrafficTypeDiagnostic: BN8PR01MB5601:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Exchange-Diagnostics: 1; BN8PR01MB5601; 20:DAtmHngctvusMjMsWoZ4YVVBeS8GYAp3tbRclU+gFLpIHiOiJdTi4ZdXto8KYi8HH1Irn1fcP+Mlqz94IsPOdabLl9e01M39VHT2LUR+juPzMdojQEUcyuRIAoa92mQdGJdauvtMkdIMJ6dJAQS/9hai1n36mj/TyniCp/PnkuCWpJNhdNMgGqOsfykxZUJkRWUiSheDf5rZ75kqI/OMV7ILbD5GDKq2eu5UCBCfdIOjohiw48D8TfEJRiQMWtrSq2t6wedeSlfZmfUYX4s3od/W2Kg3rnjMEt9kLb7yQO+z/Ey2QN+YkjDvRqRQxcrT0Fm7iXFlyVx/0RyLhClpefRFuY18XGGcf/D7wKUvZaEtZHFnHXE/PDdzhnFRrBqIJ3LZ3AmkuEodxPhQcR4zTnl/WiLo7Xja9GWjYrWc0M37WnEW8G4BGVbCanmqQI7lArHVewrOhqAHR8THiYkP7D/qxEXDwHWvThnYanQo5LNrJsT1OqM2Adol7Gb62wNLwvC5LEePKkQuuiPdbNrDicczC6k9daHu9pWaD9V6jPWmE5MNc1raCOkvdE6Nu8fW0D5kkShPMVw4z31LEIDk8PxL4soL0i0ngF4J2/f0MAg=
X-Microsoft-Antispam-PRVS: <BN8PR01MB5601766BA8DEFB345F4C1C47A07F0@BN8PR01MB5601.prod.exchangelabs.com>
X-Forefront-PRVS: 09565527D6
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN8PR01MB5601; 23:7nsabRY1Ipr+WGE7xlU9gO7gnymrsfTNIcLtnGqwS?= =?us-ascii?Q?59bnbH1ro7zAzZU+l48TRIwYvQqfFgA6PG5nook234QoFNAIp1GrGUKwwY98?= =?us-ascii?Q?EYauXzOsZhhNw7TAz5+tqEiPGLqA8VfiX1ICW9oaIrYRBo8wUXFF81f4/IMY?= =?us-ascii?Q?GZF3fa5nvsL5q3Grja6EPbopEO4RDP7B0GW06ufKcmw2e6sPYLObKw6XSocC?= =?us-ascii?Q?vrnR1Ag0ciJ5jaY/2k+BJ/TqYlp7CdK0pmevCx3XftXkjMXPeZe8PLe7DYCR?= =?us-ascii?Q?LL75JycC1e8QSb3pjVR9t5BFU9WNK/aR1a1Kc0tMvL8hCTT5NUJInn17YgBM?= =?us-ascii?Q?PD72pY0VYd8WVJV4kUMzCGcCvM5rNxjfh2C8SGXRlGSGYQvqJturszInhLYf?= =?us-ascii?Q?6XvTzgxhb4p68PqT5+7xm6Bn71fFDjdwHkAkcFhvJ/cPcA2zGBdEP6TDArio?= =?us-ascii?Q?vRjE27G/idDR0LrBeE8xLsWv9Uk5uRsnpEj5oGRSETQWc8hmkMtRrt/MIpxs?= =?us-ascii?Q?XSXU90n7Mq3JWgJbooIaRlesuxHNdS6ZWZ0VLBF5LlAJwEne7S25P3hzoMar?= =?us-ascii?Q?2ImK3klupeAIAnRVp6xJyTzt3SvZQOYDgYCtdH1+FhyBcrk7YMUgmnxhNCtX?= =?us-ascii?Q?VJq8bbyy9rMi/UBkhWgkCUws1/nCoYdwba+AySay2veZZBF525p8rgz6Z/5H?= =?us-ascii?Q?+Lxu80Y7ghoIaWMq9a4CZNcy93UTYiuyrt2X1fFmjdboyKfpdjJqNMcGzYaO?= =?us-ascii?Q?u7mMPdicywP5xudt0Zn48zW5XnyamC+WF6yhNrwBJ0YC4/Qlxug54meL9jeY?= =?us-ascii?Q?QipVOPy+xvVOu8PjNHN7HFDoY2LCRcj1gOEBtlbcXsoqxYFrDzWOqbc4eNw/?= =?us-ascii?Q?Bz7Ihsqlk6oXCDp+HqaA07Ilgvy34VA0YEES0evjv67Bzv9JBAuv0GWZyjtC?= =?us-ascii?Q?lj5bo/Sma5Zy5sGfQTc5n/jeawgQb+6mvYtkX6zqx4s4MzqpI5YN+H1AqPFy?= =?us-ascii?Q?tmGsk9a9MXOgMA8rvaKiNVUP1Pj0qv3PqMR5c9b7dAOw/n7RdC1TdjKdXESV?= =?us-ascii?Q?SNHOyF6Ucp8ktLdZ4oefF8TpoBFjRucmqqhp6qYjUC6Hfd7MLcbNHdi9Go6+?= =?us-ascii?Q?QDjMZpmttVgQRSaULmXlorNFaa9mbgFlaXy+QUjohgAoRnxwLIincx5/HPFA?= =?us-ascii?Q?ajjPHLF3SjsUibUHQX1Ku6sm3qmGpohUEOP+iugPyP9YX2hOeRsyu2ebqLyg?= =?us-ascii?Q?qCP8L79wT/TDBN1o+2CoLP6VJ75FhxHbyH3mU0t5CjCUQSFlS/pc406h+9ET?= =?us-ascii?Q?6OW3XuqumNIdybOOq0C5MI=3D?=
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info: ssZ08BNBoaWrvVcd8UiWFwZTdsPXZJqLt7OUvnTBDnTbuMf0gj9XJYKbXBLqfxQnkH87eR83+8pwNl6DAuGIHWOb2OGJVfDiyyekycBwCvcqPKC04A5hHvIenXxe/SvP+bz68fqr+DU8g93m62tV8CZDprEFzVZXLx9n8keDdIcwEnZgRpaH8S4aHOt9wuwC6kGcPfVjsD5McrDYMuSXQjYdyt75/qNh6rdJA/rmpvgXWIVmqcZpqb4YY9FNbNgJrWO+l2oPbP2d/WmliLsENZV/ZGXfLd5EmyAWFddq0PgvyXxbJ4tcDSRHiHfdUwZQIJvMewPGgU8dvzCpUGuuIQ8oSQDk2trcXaJBxcoewN8nJQH1hegTty3JbtbvMoq6j4cLrIjv9I9L0k78t84+D2JzyPU+6+LoLWHzWo2sQ4Y=
X-OriginatorOrg: mit.edu
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2019 17:09:24.9300 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 0762730e-08bf-47fb-e338-08d698e87f4e
X-MS-Exchange-CrossTenant-Id: 64afd9ba-0ecf-4acf-bc36-935f6235ba8b
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=64afd9ba-0ecf-4acf-bc36-935f6235ba8b; Ip=[18.9.28.11];  Helo=[outgoing.mit.edu]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR01MB5601
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/Sii9C4zhFQT1Y9JW06pjXUwxL6A>
Subject: Re: [Jmap] Benjamin Kaduk's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Feb 2019 17:09:31 -0000

On Thu, Feb 21, 2019 at 09:11:40AM +0000, Alexey Melnikov wrote:
> Hi Benjamin,
> Thank you for your extensive comments.
> 
> In this email I will concentrate on [most of] your DISCUSS points:
> 
> > On 21 Feb 2019, at 05:27, Benjamin Kaduk <kaduk@mit.edu> wrote:
> > 
> > ----------------------------------------------------------------------
> > DISCUSS:
> > ----------------------------------------------------------------------
> > 
> > There's a lot here, and I was not reading in the best of environments,
> > so it's quite possible that I am just confused or missed something while
> > reading.  On the whole, this document is well-written and gives me a
> > good picture of how things work.  That said, there are still some places
> > where it looks like we may need to have some discussions...
> > 
> > This document (twice) has a MUST requirement for HTTP over TLS, which
> > seems to exclude any future usage of HTTP/3 over QUIC.  (It's also
> > probably not needed to repeat the normative requirement in two places; I
> > noted both in the COMMENT section.)
> 
> I think requiring a specific version of HTTP and underlying transport is right. Future versions of HTTP and different transports like QUIC are different mappings and I think would need a separate document, even if a short one.
> 
> Having said that, if you can show some specific wording that would address your concern, the WG should consider.

My original thought was something about "MUST use TLS transport or
transport that provides equivalent cryptographic protections", but that's
subject to interpretation.  Is there a reason why we can't just require the
https:// scheme?  While I haven't been following as closely as I would
like, my understanding was that QUIC's HTTP/3 would continue to use that
scheme.

> > Section 1.6.2 asserts that "all data belong to a single account".  And
> > yet, we seem to have PushSubscription objects in Sections 7.2.1 and
> > 7.2.2 that disclaim any relationship to an account, which seems
> > internally inconsistent.  It's also unclear to me from the text in the
> > latter sections what mechanism is used to determine whether a given
> > request is authorized to see a given PushSubscription object.  Is it
> > supposed to be based on the authentication credentials to the API
> > service directly, or a user abstraction, or something else?
> 
> Editors should reply to this.
> 
> > 
> > Section 5.3
> > 
> >   Some records may hold references to other records (foreign keys).
> >   That reference may be set (via create or update) in the same request
> >   as the referenced record is created.  To do this, the client refers
> >   to the new record using its creation id prefixed with a "#".  The
> >   order of the method calls in the request by the client MUST be such
> >   that the record being referenced is created in the same or an earlier
> >   call.  The server thus never has to look ahead.  Instead, while
> > 
> > I think this means you need to specify what order the server does the
> > create, update, and destroy lists in -- that is, that all creates are
> > done before all updates, etc..
> 
> I think you misunderstood: the order is important and all operations are performed in the order specified (so there is no internal reordering to be done by the server). If the client references something that wasn't yet created, it is a client error and will be reported accordingly.

Okay, so the client gets to pick which order the 'create', 'update', and
'delete' arguments appear, and the server must do everything in order, both
the order within the contents of the 'create' array and amongst
create/update/delete?  That is certainly deterministic enough for me,
though I didn't see much in the text to give the impression that the
order in which arguments appeared was relevant, especially since we claim
to be using I-JSON and RFC 7943 says "the order of object members in an
I-JSON message does not change the meaning of an I-JSON message".

> > Section 5.5
> > 
> > The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/>
> > is not listed in the IANA collation registry for internet application
> > protocols; since the session object limits the collationAlgorithms to
> > those in the registry, at present, it is not permitted to use that
> > collation algorithm.  It would seem that this document should stimulate
> > the registration of that collation algorithm in some fashion (whether by
> > explicitly doing so in its IANA Considerations or otherwise).
> 
> I think this is fair. 
> > 
> > Section 7.1
> > 
> >   o  *changed*: "Id[TypeState]" A map of _account id_ to an object
> >      encoding the state of data types that have changed for that
> >      account since the last StateChange object was pushed, for each of
> > 
> > I don't see how these semantics provide the properties stated in Section
> > 7, "[i]t doesn't matter if some push events are dropped before they
> > reach the client; it will still get all changes next time it syncs."  In
> > particular, if the client misses a state change for the CalendarEvent
> > type, and then no other changes that affect CalendarEvents occur, the
> > client will remain unaware of the changes to CalendarEvents, even if
> > other push notifications for other types come in.  Am I misunderstanding
> > one or more of the behavior or stated guarantees?
> 
> I think you do. Clients will periodically poll. Once they do, they will be able to recover all missing notifications due to use of sequence numbers.

Er, you think that I do understand correctly?
We should probably mention the expectation of polling (as well as
subscribing to pushes), then.

-Benjamin


From nobody Fri Feb 22 10:53:55 2019
Return-Path: <aamelnikov@fastmail.fm>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1CB66130EBA; Fri, 22 Feb 2019 10:53:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level: 
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmail.fm header.b=ZYTORz1R; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=vDf2v/Es
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 Ocut6rsM6dXs; Fri, 22 Feb 2019 10:53:52 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 890A8130F4F; Fri, 22 Feb 2019 10:53:52 -0800 (PST)
Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 614FF2218B; Fri, 22 Feb 2019 13:53:51 -0500 (EST)
Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Fri, 22 Feb 2019 13:53:51 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h= content-type:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; s=fm2; bh=s rd5g6YYiaGGx4sFqwDH4DyZede+iOY9nZTpuKXhuaw=; b=ZYTORz1RhLHvoPkXZ sinRRT/JRHaZcQ5qCV6PN6Wvnyt+fZLdckSF75zuRV9AuRq5LVREX3dBNwY9rmSh P4+hTmd1Nr4mo3wFW8jGJC2BZd4En1Hv2Sv33dPc3KX9hqyQXe0Z/56M7J3caEGA vxsKBj4SNX4YpfRNBzoXXwlQQaSgVJtnz4BUn/+FnivRPAjgOeWtH5JiJjFdDDvE tCFgpB3HkWmUv7NS9NRIM+WPTR/PPLyunnI5xWqdqTSXhn+Ai8GwTvShBl0C5TB8 9dmxFccSgMmuJ7geO9Xyj44/OV1iGLi+iR6g0fnFARfZdmP1l+nT3wlNsGf+ku5z 1rnhg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=srd5g6YYiaGGx4sFqwDH4DyZede+iOY9nZTpuKXhu aw=; b=vDf2v/Ess/AOj+SIGkP7AEex2zw5s9Gapig/ZzXFvyE45cUgJ2yxP4ug1 s0zGDaUjD4mGsON/hP/SjOvDeXm9ud9HrtsBD3vF3r/RGR8gxKcWTXQRVCLm2HXQ ueUGDqgU0O95r2jzn+57M1hMTA4ITUur7+QLjv3EYUplpMVuLTDLMZG1hxjoHWhr HcGu1qu1niTLxxiPvV8yaEcEInHe8Adka5iSr03/aUMrA9nW6EdoP2ye6X23tBrQ BgtbpdZRnc7wBM0R0+LD8MlfjzZxGg8vX+DqxyRgRBgdiBKsdTKILzhVt6I8twrE rCUXGbtX06C7gljYCjlrLYza5fFsA==
X-ME-Sender: <xms:PkVwXOwmu3pA-DQsiLhqQT_e_OUH1srcWoZG4nUEnN_tM5OikWgD-g>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddruddtgdduvddtucdltddurdegtdelrddttd dmucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhht necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpegtggfuhffojgffgffkfhfvsehtqhhmtdhhtdejnecuhfhrohhmpeetlhgv gigvhicuofgvlhhnihhkohhvuceorggrmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfh hmqeenucffohhmrghinhepuhhnihgtohguvgdrohhrghdphhhtthhpfehovhgvrhhquhhi tgdrihhtnecukfhppedugeekrddvhedvrdduvdelrdefheenucfrrghrrghmpehmrghilh hfrhhomheprggrmhgvlhhnihhkohhvsehfrghsthhmrghilhdrfhhmnecuvehluhhsthgv rhfuihiivgeptd
X-ME-Proxy: <xmx:P0VwXL6hAAZgyd2BdhseG9VWORuEMADyoodWOAMp1nV0TsUEUz1VMw> <xmx:P0VwXEZ3f2VLhpk8MluKl-ak8cAwzK-fzehoAwBvXmskk_hhNsD5yg> <xmx:P0VwXK9TCCsuBlCgHsiEVhTvrarJ7iXnW6Nx3NzNZt4HNXRGfaplTA> <xmx:P0VwXIzkgnJmASUZiz6tLjyHB5wfZP68HbQuFTY67tx1xKosSQnuxg>
Received: from [10.233.129.196] (unknown [148.252.129.35]) by mail.messagingengine.com (Postfix) with ESMTPA id 98EE6E412B; Fri, 22 Feb 2019 13:53:50 -0500 (EST)
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (1.0)
From: Alexey Melnikov <aamelnikov@fastmail.fm>
X-Mailer: iPhone Mail (15G77)
In-Reply-To: <20190222170920.GA69562@kduck.mit.edu>
Date: Fri, 22 Feb 2019 18:53:49 +0000
Cc: The IESG <iesg@ietf.org>, brong@fastmailteam.com, draft-ietf-jmap-core@ietf.org, jmap-chairs@ietf.org, jmap@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <BEC257B1-267C-4F67-A942-3E22680E139B@fastmail.fm>
References: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com> <CEF846E0-DB3C-49DE-8649-B591AEA0B45D@fastmail.fm> <20190222170920.GA69562@kduck.mit.edu>
To: Benjamin Kaduk <kaduk@mit.edu>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/kqZy16TW2dHPeG4kAQlVyHjLzPY>
Subject: Re: [Jmap] Benjamin Kaduk's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Feb 2019 18:53:55 -0000

Hi Benjamin,

> On 22 Feb 2019, at 17:09, Benjamin Kaduk <kaduk@mit.edu> wrote:
>=20
>> On Thu, Feb 21, 2019 at 09:11:40AM +0000, Alexey Melnikov wrote:
>> Hi Benjamin,
>> Thank you for your extensive comments.
>>=20
>> In this email I will concentrate on [most of] your DISCUSS points:
>>=20
>>> On 21 Feb 2019, at 05:27, Benjamin Kaduk <kaduk@mit.edu> wrote:
>>>=20
>>> ----------------------------------------------------------------------
>>> DISCUSS:
>>> ----------------------------------------------------------------------
>>>=20
>>> There's a lot here, and I was not reading in the best of environments,
>>> so it's quite possible that I am just confused or missed something while=

>>> reading.  On the whole, this document is well-written and gives me a
>>> good picture of how things work.  That said, there are still some places=

>>> where it looks like we may need to have some discussions...
>>>=20
>>> This document (twice) has a MUST requirement for HTTP over TLS, which
>>> seems to exclude any future usage of HTTP/3 over QUIC.  (It's also
>>> probably not needed to repeat the normative requirement in two places; I=

>>> noted both in the COMMENT section.)
>>=20
>> I think requiring a specific version of HTTP and underlying transport is r=
ight. Future versions of HTTP and different transports like QUIC are differe=
nt mappings and I think would need a separate document, even if a short one.=

>>=20
>> Having said that, if you can show some specific wording that would addres=
s your concern, the WG should consider.
>=20
> My original thought was something about "MUST use TLS transport or
> transport that provides equivalent cryptographic protections", but that's
> subject to interpretation.  Is there a reason why we can't just require th=
e
> https:// scheme?  While I haven't been following as closely as I would
> like, my understanding was that QUIC's HTTP/3 would continue to use that
> scheme.

I think https:// would be more agreeable.

>>> Section 1.6.2 asserts that "all data belong to a single account".  And
>>> yet, we seem to have PushSubscription objects in Sections 7.2.1 and
>>> 7.2.2 that disclaim any relationship to an account, which seems
>>> internally inconsistent.  It's also unclear to me from the text in the
>>> latter sections what mechanism is used to determine whether a given
>>> request is authorized to see a given PushSubscription object.  Is it
>>> supposed to be based on the authentication credentials to the API
>>> service directly, or a user abstraction, or something else?
>>=20
>> Editors should reply to this.
>>=20
>>>=20
>>> Section 5.3
>>>=20
>>>  Some records may hold references to other records (foreign keys).
>>>  That reference may be set (via create or update) in the same request
>>>  as the referenced record is created.  To do this, the client refers
>>>  to the new record using its creation id prefixed with a "#".  The
>>>  order of the method calls in the request by the client MUST be such
>>>  that the record being referenced is created in the same or an earlier
>>>  call.  The server thus never has to look ahead.  Instead, while
>>>=20
>>> I think this means you need to specify what order the server does the
>>> create, update, and destroy lists in -- that is, that all creates are
>>> done before all updates, etc..
>>=20
>> I think you misunderstood: the order is important and all operations are p=
erformed in the order specified (so there is no internal reordering to be do=
ne by the server). If the client references something that wasn't yet create=
d, it is a client error and will be reported accordingly.
>=20
> Okay, so the client gets to pick which order the 'create', 'update', and
> 'delete' arguments appear, and the server must do everything in order, bot=
h
> the order within the contents of the 'create' array and amongst
> create/update/delete? =20

I think the document says that, but I need to double check.

> That is certainly deterministic enough for me,
> though I didn't see much in the text to give the impression that the
> order in which arguments appeared was relevant, especially since we claim
> to be using I-JSON and RFC 7943 says "the order of object members in an
> I-JSON message does not change the meaning of an I-JSON message".

Unlike the order of attributes in a structure, the order of elements in arra=
ys is significant and JSON preserves it.

>=20
>>> Section 5.5
>>>=20
>>> The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/>
>>> is not listed in the IANA collation registry for internet application
>>> protocols; since the session object limits the collationAlgorithms to
>>> those in the registry, at present, it is not permitted to use that
>>> collation algorithm.  It would seem that this document should stimulate
>>> the registration of that collation algorithm in some fashion (whether by=

>>> explicitly doing so in its IANA Considerations or otherwise).
>>=20
>> I think this is fair.=20
>>>=20
>>> Section 7.1
>>>=20
>>>  o  *changed*: "Id[TypeState]" A map of _account id_ to an object
>>>     encoding the state of data types that have changed for that
>>>     account since the last StateChange object was pushed, for each of
>>>=20
>>> I don't see how these semantics provide the properties stated in Section=

>>> 7, "[i]t doesn't matter if some push events are dropped before they
>>> reach the client; it will still get all changes next time it syncs."  In=

>>> particular, if the client misses a state change for the CalendarEvent
>>> type, and then no other changes that affect CalendarEvents occur, the
>>> client will remain unaware of the changes to CalendarEvents, even if
>>> other push notifications for other types come in.  Am I misunderstanding=

>>> one or more of the behavior or stated guarantees?
>>=20
>> I think you do. Clients will periodically poll. Once they do, they will b=
e able to recover all missing notifications due to use of sequence numbers.
>=20
> Er, you think that I do understand correctly?

I meant =E2=80=9Cyou don=E2=80=99t=E2=80=9D :-)

> We should probably mention the expectation of polling (as well as
> subscribing to pushes), then.

Fair enough.


Best Regards,
Alexey=


From nobody Fri Feb 22 11:16:51 2019
Return-Path: <kaduk@mit.edu>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1AABC130F6D; Fri, 22 Feb 2019 11:16:43 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.001
X-Spam-Level: 
X-Spam-Status: No, score=-2.001 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=mit.edu
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 s8yUdJFlIZss; Fri, 22 Feb 2019 11:16:40 -0800 (PST)
Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0707.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe48::707]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 033B3130EBA; Fri, 22 Feb 2019 11:16:39 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mit.edu; s=selector1;  h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t9ANWU02MDaozrywL7b1uk4fw2jDabQfOuzZr48paKQ=; b=Rw+TcfEPADJkbOXo9PcIWABS9CreBsUenUvCK4GZ/ZF4QXrYR8YTjLH91sKrTf9C3sjfaU+StIx+TM5PEpZVpTDWHc5DX06ojJb+BWEuFVpj1pIOW6TTAEV5nhvtbct/s/MsHlQWCD/61EM2RmRkkM5nQhLSp5bYro8ZQvEPMwA=
Received: from DM5PR0101CA0011.prod.exchangelabs.com (2603:10b6:4:28::24) by DM5PR0101MB3002.prod.exchangelabs.com (2603:10b6:4:2f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1622.19; Fri, 22 Feb 2019 19:16:37 +0000
Received: from CO1NAM03FT039.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::206) by DM5PR0101CA0011.outlook.office365.com (2603:10b6:4:28::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.18 via Frontend Transport; Fri, 22 Feb 2019 19:16:37 +0000
Authentication-Results: spf=pass (sender IP is 18.9.28.11) smtp.mailfrom=mit.edu; ietf.org; dkim=none (message not signed) header.d=none;ietf.org; dmarc=bestguesspass action=none header.from=mit.edu;
Received-SPF: Pass (protection.outlook.com: domain of mit.edu designates 18.9.28.11 as permitted sender) receiver=protection.outlook.com; client-ip=18.9.28.11; helo=outgoing.mit.edu;
Received: from outgoing.mit.edu (18.9.28.11) by CO1NAM03FT039.mail.protection.outlook.com (10.152.81.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.13 via Frontend Transport; Fri, 22 Feb 2019 19:16:37 +0000
Received: from kduck.mit.edu (24-107-191-124.dhcp.stls.mo.charter.com [24.107.191.124]) (authenticated bits=56) (User authenticated as kaduk@ATHENA.MIT.EDU) by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id x1MJGXt1029467 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 22 Feb 2019 14:16:35 -0500
Date: Fri, 22 Feb 2019 13:16:33 -0600
From: Benjamin Kaduk <kaduk@mit.edu>
To: Alexey Melnikov <aamelnikov@fastmail.fm>
CC: The IESG <iesg@ietf.org>, <brong@fastmailteam.com>, <draft-ietf-jmap-core@ietf.org>, <jmap-chairs@ietf.org>, <jmap@ietf.org>
Message-ID: <20190222191632.GD69562@kduck.mit.edu>
References: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com> <CEF846E0-DB3C-49DE-8649-B591AEA0B45D@fastmail.fm> <20190222170920.GA69562@kduck.mit.edu> <BEC257B1-267C-4F67-A942-3E22680E139B@fastmail.fm>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <BEC257B1-267C-4F67-A942-3E22680E139B@fastmail.fm>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-EOPAttributedMessage: 0
X-Forefront-Antispam-Report: CIP:18.9.28.11; IPV:CAL; SCL:-1; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(376002)(346002)(136003)(396003)(39860400002)(2980300002)(199004)(189003)(8676002)(426003)(786003)(4326008)(2906002)(23676004)(2486003)(356004)(336012)(86362001)(316002)(54906003)(106002)(6246003)(53546011)(88552002)(58126008)(7696005)(36906005)(2870700001)(186003)(76176011)(8936002)(5660300002)(26005)(126002)(93886005)(476003)(6916009)(446003)(229853002)(486006)(966005)(104016004)(33656002)(305945005)(14444005)(50466002)(47776003)(75432002)(106466001)(55016002)(1076003)(956004)(6306002)(53416004)(11346002)(26826003)(66574012)(478600001)(246002)(18370500001); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR0101MB3002; H:outgoing.mit.edu; FPR:; SPF:Pass; LANG:en; PTR:outgoing-auth-1.mit.edu; A:1; MX:1; 
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 568c7bb8-4a89-4cc0-45f4-08d698fa4462
X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605104)(4608103)(4709054)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060); SRVR:DM5PR0101MB3002; 
X-MS-TrafficTypeDiagnostic: DM5PR0101MB3002:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Exchange-Diagnostics: 1; DM5PR0101MB3002; 20:sTRh0fXt0376OzXezA7gXgwgYFCRDrZ6xOgcRQJx/1OCJadvLvKU6Og+X6mrcnz2uOB9M0Zzc6oazV1tf6WmsT88XhLppBELrwjcF8fR1CyPRyi8FoDLjRoRQuupwgxAb/K4Qnmsi8NzhJr317iMcVOwxazAv1YcMVBc9R+0YuU0eCmm+v31Hh3wqMB0lcu2K0jOC3V34tM/J1PeUdippxfXy6CQXdwPgAF3voo3X/SOe0ZFTY2UpLChvCYOOLFOGxZZNGN3PnO6E7G3Fs0XQeG/CBT0NSjQNwIn/IdD3Q6BdQq3hIPn6fkB9BWuhucFW0L2kG+rNzcJV4t8wrEWhwO6pIF4ch0aksd1nE2Wq0gfbsxowY7726VrJ1ZhGrO7LweajJ1AbLjITY2+/LHQ1du5ArWapRoTPRsAecG7AqAIMHBHvbq/97MYNoTv60d8agjPxVvl9j6wdLYPFzZpyEkxfZaW14dgTKAb3Uaa+HUIKhoHKIT4hkMsqb9rCFWiiGme5/fF88hbAYlx0l5JcWtWi4jYPmBVB2xsP59MttpyP6pg2dvQzb3ep2aCfww+EyPIOVVe6uXgeoQzl06R0QMJg11DywuUOKFZ1Nkm5QI=
X-Microsoft-Antispam-PRVS: <DM5PR0101MB3002A41849B0C0080A95E0D3A07F0@DM5PR0101MB3002.prod.exchangelabs.com>
X-Forefront-PRVS: 09565527D6
X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjAxMDFNQjMwMDI7MjM6c05nc0k2MTN0VzNLWW9mMm5LRkJZRmhN?= =?utf-8?B?ai8yS0g4Y3VCT3hSMVlhbGhZSHNvalhJSTRvdnR3eFBzWE5Gc00wUnZkY2lY?= =?utf-8?B?TURGNFRLcm10WXQ2WldoUklTUmErSk9rYmROMmg0OWZNbDc1Q1RjRkN4dmh2?= =?utf-8?B?RzVHYTZXL0E2bDY3SlVCMVhZNGJMVDBiSEtXZ2pKa1FSWGtMUHMyK01QWnp5?= =?utf-8?B?VEJXNElRbkVDbHRQbzNHczlCOG1aYjE0dCt3OWN6VjZOSzlHNkw3Z21MbDJh?= =?utf-8?B?RUVsblhqSmg1aGtmWTg2eTJESFpDbHlDYlkyT0VYWEU5eUJzRVQ0Z1JiM3Vu?= =?utf-8?B?TVRjYmU4TXlDMGVnS0Z4Ymd1VHRUWmpuRllteU1PRlU4VlF0a3o5N25VSllN?= =?utf-8?B?VjBRNDAxb0kyMjBSZ0sxcVE2WTloUjd0TWdraC9GVHVtZ2ZNU1gyVUdUbVFs?= =?utf-8?B?eElJMFFOUyt6U2lka2NvMnlmdHdiL3h5SlNlZFdNRU1pU1d0QWxhc2dyY1Ux?= =?utf-8?B?QlhOT0RHMWdHckUxQWlxMGxldllHMi90akZ0SzFnbVNuZmVBOEpuRElFeGJG?= =?utf-8?B?b0hmSHJZR2JObmI2MUFpQW5wOXRKVmEydkdMOFV0UDhXMEwvU0g0ODdXbHhw?= =?utf-8?B?QWM3OG9sK3hLL3Q3cXk0TEJvaEZWRlVKU3VrdVMvS1ZkSXFwTVIxc3JMQVFy?= =?utf-8?B?c2tIRUFVQVNjS094SzBpZlV3WktsR1N6dkxUbnhweW9FdzBhS3lJbUdoZGVs?= =?utf-8?B?YXAzeTJyZ2l6bW9yRC82aVRZOW9IU2RwUXhZS28vL0tLZUFXdmE3REVUUUxZ?= =?utf-8?B?K3R2Z1Vrc1NSZ2R0QkJ3Mnk1TzJhVEhrUG9vei80UFdDdGtITXZvV2NVVmZL?= =?utf-8?B?aWZLZmdhQTBUWFlSTDZWV0Rhb2ZLU2x4MkMwS3FNWlBjUGRUMlFkeVkxVlF4?= =?utf-8?B?N01QaXkzS25rQlgybkRHcHZudXlsNHVBS1JSYnB1OUU2SVJwM2lxNDhLUXJU?= =?utf-8?B?Wk80NXhSSXhaY1p2cllmY3N3ZFQzNC9EckJUcU1tcTdGSnhqQld3UTdsL0I0?= =?utf-8?B?U3k0Vi9UQzZmSGVyWTRvdTUwamNoZjhDVEF2alJ4aHo1YWdwWnJzNkhncGNk?= =?utf-8?B?UXdqcGRha0xmbVNGM0QxdGdNVWlsN1dVK0hzVHVFWmNXYktjNTBaNzdMd0lx?= =?utf-8?B?anlmdk5UTGdodWl0VmQvcU4wWTZwOUZzTmJWV0NZdVl1UmkrQ2d6Q0pqR1E0?= =?utf-8?B?OWpIQTgxVXBlcWU2M0tQOFJURE12aStmZ3Y2WS85bzJkRnZXUkhHbWpZdUpE?= =?utf-8?B?aTcxMC9uRHhpYit4NWJBbC9yL2p0Y3lObFRNd0tnLzBsL0tZeG1YMWhIcW1W?= =?utf-8?B?T0Zsam5jVmVjWmVaWVNEZGNaM1p2TVpiY09FbFNZdlVlaHh2Qmk2MGEyQkxU?= =?utf-8?B?QVA1eVF5K0dCQWFFRGVuczJFalZqNGFGeUJsQktmUDV6RWdTQ1JlZG52WjdQ?= =?utf-8?B?TUlJN0VNZFVpSUY2amlaN2RtaW1BR3VkSjZQUytVTkdWdGc1eWMrTlplYVVu?= =?utf-8?B?QVQvM1o4K2FyY1p2T05GTy9qNGhKb2l3bFdCM2VpSFNGbTlaYUNMcFZuRzNy?= =?utf-8?B?Vms0REN2SGJ3N3JVeXl1TFRmVER2MVRVZWltWnNQODZsSVQ1Q2lCL0YxNE5r?= =?utf-8?B?MWhHMTBYeFRWVzRCN3Fwc1RZQXFMdGtRQlRjK1RJQ04zd1RVcE1FNENUbkFI?= =?utf-8?Q?Phm+zKqIwcjZR0v+zgZhzfNbyQP6h+QlzQS1PsQ=3D?=
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info: 0tzTsCFC5px7f25QqhbMkG5tPWz1Kwjf5FVCu5gG0bi1URO735nj8Q12LFz01RnaM9xFAgFnURZLPQNDkvQr7jwu2pqxtP/FKO100YSVsDCvbt2QGcy2z46Py0MkLbqAgQEju7nirEBb2KKLoCIhPqYOAeFA5/GLwbDxG97iS3519DlDLl/b38fYDU3JWCS/mnb/ddHCxgGAQWiCX+hr9EmBlk9lZwiVdmfp3J5jdYjIrVFI1cyf1oULekcBSShtoVrEwYa6fWMCgVySgAoeqxZqvnKj0JFYzlpZ6aXMQgqxEYoHZRkQy2cblRov0R76BvJ1lXD7xUt2UYpiJaVEfMRYvAg2agmc2sakWhP1PwKBzmd/ZOraaz7P3vePpR+FyyyrEtMENsTNMzOnPl04TONiNLSb6khGQVP+sYwTv8o=
X-OriginatorOrg: mit.edu
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2019 19:16:37.0986 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 568c7bb8-4a89-4cc0-45f4-08d698fa4462
X-MS-Exchange-CrossTenant-Id: 64afd9ba-0ecf-4acf-bc36-935f6235ba8b
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=64afd9ba-0ecf-4acf-bc36-935f6235ba8b; Ip=[18.9.28.11];  Helo=[outgoing.mit.edu]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0101MB3002
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/fJXPzl_vQ9ZejeTuI38_xzz5uqA>
Subject: Re: [Jmap] Benjamin Kaduk's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Feb 2019 19:16:43 -0000

On Fri, Feb 22, 2019 at 06:53:49PM +0000, Alexey Melnikov wrote:
> Hi Benjamin,
> 
> > On 22 Feb 2019, at 17:09, Benjamin Kaduk <kaduk@mit.edu> wrote:
> > 
> >> On Thu, Feb 21, 2019 at 09:11:40AM +0000, Alexey Melnikov wrote:
> >> Hi Benjamin,
> >> Thank you for your extensive comments.
> >> 
> >> In this email I will concentrate on [most of] your DISCUSS points:
> >> 
> >>> On 21 Feb 2019, at 05:27, Benjamin Kaduk <kaduk@mit.edu> wrote:
> >>> 
> >>> ----------------------------------------------------------------------
> >>> DISCUSS:
> >>> ----------------------------------------------------------------------
> >>> 
> >>> There's a lot here, and I was not reading in the best of environments,
> >>> so it's quite possible that I am just confused or missed something while
> >>> reading.  On the whole, this document is well-written and gives me a
> >>> good picture of how things work.  That said, there are still some places
> >>> where it looks like we may need to have some discussions...
> >>> 
> >>> This document (twice) has a MUST requirement for HTTP over TLS, which
> >>> seems to exclude any future usage of HTTP/3 over QUIC.  (It's also
> >>> probably not needed to repeat the normative requirement in two places; I
> >>> noted both in the COMMENT section.)
> >> 
> >> I think requiring a specific version of HTTP and underlying transport is right. Future versions of HTTP and different transports like QUIC are different mappings and I think would need a separate document, even if a short one.
> >> 
> >> Having said that, if you can show some specific wording that would address your concern, the WG should consider.
> > 
> > My original thought was something about "MUST use TLS transport or
> > transport that provides equivalent cryptographic protections", but that's
> > subject to interpretation.  Is there a reason why we can't just require the
> > https:// scheme?  While I haven't been following as closely as I would
> > like, my understanding was that QUIC's HTTP/3 would continue to use that
> > scheme.
> 
> I think https:// would be more agreeable.
> 
> >>> Section 1.6.2 asserts that "all data belong to a single account".  And
> >>> yet, we seem to have PushSubscription objects in Sections 7.2.1 and
> >>> 7.2.2 that disclaim any relationship to an account, which seems
> >>> internally inconsistent.  It's also unclear to me from the text in the
> >>> latter sections what mechanism is used to determine whether a given
> >>> request is authorized to see a given PushSubscription object.  Is it
> >>> supposed to be based on the authentication credentials to the API
> >>> service directly, or a user abstraction, or something else?
> >> 
> >> Editors should reply to this.
> >> 
> >>> 
> >>> Section 5.3
> >>> 
> >>>  Some records may hold references to other records (foreign keys).
> >>>  That reference may be set (via create or update) in the same request
> >>>  as the referenced record is created.  To do this, the client refers
> >>>  to the new record using its creation id prefixed with a "#".  The
> >>>  order of the method calls in the request by the client MUST be such
> >>>  that the record being referenced is created in the same or an earlier
> >>>  call.  The server thus never has to look ahead.  Instead, while
> >>> 
> >>> I think this means you need to specify what order the server does the
> >>> create, update, and destroy lists in -- that is, that all creates are
> >>> done before all updates, etc..
> >> 
> >> I think you misunderstood: the order is important and all operations are performed in the order specified (so there is no internal reordering to be done by the server). If the client references something that wasn't yet created, it is a client error and will be reported accordingly.
> > 
> > Okay, so the client gets to pick which order the 'create', 'update', and
> > 'delete' arguments appear, and the server must do everything in order, both
> > the order within the contents of the 'create' array and amongst
> > create/update/delete?  
> 
> I think the document says that, but I need to double check.

I think the document says the order within each of those three arrays is
relevant; what I am not sure the document says is that the client specifies
an order to (e.g) "do the entire create array before the update array".

> > That is certainly deterministic enough for me,
> > though I didn't see much in the text to give the impression that the
> > order in which arguments appeared was relevant, especially since we claim
> > to be using I-JSON and RFC 7943 says "the order of object members in an
> > I-JSON message does not change the meaning of an I-JSON message".
> 
> Unlike the order of attributes in a structure, the order of elements in arrays is significant and JSON preserves it.

Yes, though that's not what I'm concerned about.

-Benjamin

> > 
> >>> Section 5.5
> >>> 
> >>> The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/>
> >>> is not listed in the IANA collation registry for internet application
> >>> protocols; since the session object limits the collationAlgorithms to
> >>> those in the registry, at present, it is not permitted to use that
> >>> collation algorithm.  It would seem that this document should stimulate
> >>> the registration of that collation algorithm in some fashion (whether by
> >>> explicitly doing so in its IANA Considerations or otherwise).
> >> 
> >> I think this is fair. 
> >>> 
> >>> Section 7.1
> >>> 
> >>>  o  *changed*: "Id[TypeState]" A map of _account id_ to an object
> >>>     encoding the state of data types that have changed for that
> >>>     account since the last StateChange object was pushed, for each of
> >>> 
> >>> I don't see how these semantics provide the properties stated in Section
> >>> 7, "[i]t doesn't matter if some push events are dropped before they
> >>> reach the client; it will still get all changes next time it syncs."  In
> >>> particular, if the client misses a state change for the CalendarEvent
> >>> type, and then no other changes that affect CalendarEvents occur, the
> >>> client will remain unaware of the changes to CalendarEvents, even if
> >>> other push notifications for other types come in.  Am I misunderstanding
> >>> one or more of the behavior or stated guarantees?
> >> 
> >> I think you do. Clients will periodically poll. Once they do, they will be able to recover all missing notifications due to use of sequence numbers.
> > 
> > Er, you think that I do understand correctly?
> 
> I meant “you don’t” :-)
> 
> > We should probably mention the expectation of polling (as well as
> > subscribing to pushes), then.
> 
> Fair enough.
> 
> 
> Best Regards,
> Alexey


From nobody Sun Feb 24 20:31:11 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ABEE41200D8; Sun, 24 Feb 2019 20:31:02 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=cC17rbK4; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=hHUanUAg
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 lzdCxqbKsntU; Sun, 24 Feb 2019 20:31:01 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E7C2812D4E7; Sun, 24 Feb 2019 20:31:00 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 24B3C22270; Sun, 24 Feb 2019 23:31:00 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Sun, 24 Feb 2019 23:31:00 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=gby1CxwQRDtE3himpTKJ1TU9N GwfbII3H82fFeTqQV4=; b=cC17rbK4ebgDV8Lzi+9gqXZby9UcglandKFxIsuV0 I34V/bM3O+46tq4I5+qsH+24hDAUAz1bCp/QGGj+SnneqZx06Hjurxx7OLAITOWD eRXXXjjggwPG0Yw6W+X5ZXiD8rV3rKg54ZLfHJRRaHgvKDU2Lpx7QrjaXqTv4tQx 23w4YkM0XPcsaoNBG27z54QygzegUuLvuC6iopcKE1pPUawMbMHK+BulmMZ7bHwc sLNpAN06nmSczxJgTe+nSAECcaTJ/1uq8SNchSERq6Ys8MYmIbhvKzVtLE1NlsZT 1IyN8vgICjjzCAvi8AuUodowhrtTI5CxNJEy3Vjn3PReQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=gby1CxwQRDtE3himp TKJ1TU9NGwfbII3H82fFeTqQV4=; b=hHUanUAgPXsJpX1BMgVn4Ze7vZM95qcuI 2I2vEuSHpGSdfbpWNeIqqswE2JyIk9YhRg8HwvwihfEfjgTnGnoKxsBxKvVg0aH4 qZCJn9wcjhRpz9WFBMEbq+bV8gi1P7/vO2YMDP7R7nj7dluXzIqxCrlRgN74ycYR PRf4U4WIzY1bZFU+N1nJrDcaJ7DELiUgbcIEcWiC3o824NCR9h1i4YGwMH89ZrSd A6rrobl5T4BzfdfN3/h8/X3Y9Jc1MPYdSTfYMdXsGwHWoFVnSr5FrNqVl8wfDxXR yDUpcN3umADuUGuJ+RJ6k8lxpQEc9m8Hnx4GSaJsalUIoaa+7jKEw==
X-ME-Sender: <xms:g29zXHIoOuMbL3CqDHXibZ3RUIznhh-Zqbm2pmnCAdNpcnZaG9-Vgw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudehgdeileculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne cuffhomhgrihhnpehhthhtphhmvggthhgrnhhishhmshhsuhgthhgrshhrvgguihhrvggt thhiohhnrghnuggtrggthhhinhhgrghrvggrshhsuhhmvggurdhimhdpihgvthhfrdhorh hgnecurfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggr mhdrtghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:g29zXFzUsabbqahDLy3Ra2oc5nOgnWAGmNZZoI8GmnFxsKrOfDKsHA> <xmx:g29zXFvJ81yMX3Ls2A5gPskqsvHu8GKDGG8GpwXNhlkmKRXzqPL0TA> <xmx:g29zXAB6n-0_8o5OUu8fUdJZ9TWqSiuRJAl8zytpnV7WaDeMijbiYA> <xmx:hG9zXEuqwQglqk7b3bG4ej1fA2kbQtU4Cgn11vJJ8vzJen2RoanSvg>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 3533720320; Sun, 24 Feb 2019 23:30:59 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <22a03113-994e-487f-bcd7-7ab6edfc472a@beta.fastmail.com>
In-Reply-To: <155071913219.20241.16703368943240294389.idtracker@ietfa.amsl.com>
References: <155071913219.20241.16703368943240294389.idtracker@ietfa.amsl.com>
Date: Sun, 24 Feb 2019 23:30:11 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Ben Campbell" <ben@nostrum.com>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=504c89be3f0c4687b06edeb2caacde32
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/b3ZaLOs989LfaNX8QM_1f9vqFIg>
Subject: Re: [Jmap]  =?utf-8?q?Ben_Campbell=27s_No_Objection_on_draft-ietf-jma?= =?utf-8?q?p-core-14=3A_=28with_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 04:31:03 -0000

--504c89be3f0c4687b06edeb2caacde32
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thanks for the detailed feedback.

On Thu, 21 Feb 2019, at 14:18, Ben Campbell wrote:
> =C2=A71.1: Is there a reason not to use the updated boilerplate from R=
FC 8174?

No; this has now been updated.

> =C2=A71.6.2:
> - 2nd paragraph: I think this means that any given piece of data belon=
gs to
> one account. But it could be read (nonsensically) to mean that one acc=
ount owns
> all the data.

Yes, this could be clearer. looking at this again I think the sentence i=
s redundant given the previous one, so I'll just cut it.

> =C2=A71.6.3: "The id of a record is immutable, and normally assigned b=
y the
> server.": This seems to conflict with section 1. 2, which says all rec=
ord lDs
> are assigned by the server. (I take "normally" to mean "most of the ti=
me, but
> sometimes not"

I have removed the word "normally" here.

> =C2=A71.7: "Support for common HTTP mechanisms such as redirection
> and caching are assumed.": I'm not sure what this means. Are they *req=
uired*
> to be supported?

This was from an early draft <https://tools.ietf.org/html/draft-ietf-htt=
pbis-bcp56bis-00> of the "Specifying the Use of HTTP" section of BCP56bi=
s <https://datatracker.ietf.org/doc/draft-ietf-httpbis-bcp56bis/>. I see=
 this has now been updated and no longer suggests using text like this; =
I will just remove it.

> =C2=A72:
> - "If the specification
> includes new object type definitions, the server MUST include
> it in the _hasDataFor_ array if, and only if, the user may use
> those data types with this account."
> This would be more clear in the form of "MUST include... and MUST NOT.=
.."

OK, I've rewritten this to:

*If the specification includes new object type definitions, the server M=
UST include it in the *hasDataFor* array if the user may use those data =
types with this account. It MUST NOT include it in the *hasDataFor* arra=
y if the user cannot use those data types with this account.*

> - "Servers MAY advertise vendor-specific JMAP
> extensions, as described in section 1.7. To avoid conflict, the
> identifiers for these MUST be a URL with a domain owned by the
> vendor."
> I think the cross reference should be to section 1.8.=20

Thanks, fixed.

> Also, the MUST is redundant to normative text in that section.

Redundant, but consistent so I don't think it hurts; someone scanning th=
e document rather than reading in detail may not read both places so I t=
hink it's good to make this very clear.

> =C2=A75:
> - "Not all types may have all methods. ": Is that the same as saying s=
ome types
> may not have all methods? (It could be read to say not all types are a=
llowed
> to have all methods.)

I agree this could be clearer; I have rewritten this to: *Some types may=
 not have all these methods.*

Cheers,
Neil.

--504c89be3f0c4687b06edeb2caacde32
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>Thanks for=
 the detailed feedback.<br></div><div><br></div><div>On Thu, 21 Feb 2019=
, at 14:18, Ben Campbell wrote:<br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>=C2=A71.1: Is there a reason not to use the updat=
ed boilerplate from RFC 8174?<br></div></blockquote><div><br></div><div>=
No; this has now been updated.<br></div><div><br></div><blockquote type=3D=
"cite" id=3D"fastmail-quoted"><div>=C2=A71.6.2:<br></div><div>- 2nd para=
graph:&nbsp; I think this means that any given piece of data belongs to<=
br></div><div>one account. But it could be read (nonsensically) to mean =
that one account owns<br></div><div>all the data.<br></div></blockquote>=
<div><br></div><div>Yes, this could be clearer. looking at this again I =
think the sentence is redundant given the previous one, so I'll just cut=
 it.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-qu=
oted"><div>=C2=A71.6.3: "The id of a record is immutable, and normally a=
ssigned by the<br></div><div>server.":&nbsp; This seems to conflict with=
 section 1. 2, which says all record lDs<br></div><div>are assigned by t=
he server. (I take "normally" to mean "most of the time, but<br></div><d=
iv>sometimes not"<br></div></blockquote><div><br></div><div>I have remov=
ed the word "normally" here.<br></div><div><br></div><blockquote type=3D=
"cite" id=3D"fastmail-quoted"><div>=C2=A71.7: "Support for common HTTP m=
echanisms such as redirection<br></div><div>and caching are assumed.":&n=
bsp; I'm not sure what this means. Are they *required*<br></div><div>to =
be supported?<br></div></blockquote><div><br></div><div>This was from <a=
 href=3D"https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-00">an =
early draft</a> of the "Specifying the Use of HTTP" section of <a href=3D=
"https://datatracker.ietf.org/doc/draft-ietf-httpbis-bcp56bis/">BCP56bis=
</a>. I see this has now been updated and no longer suggests using text =
like this; I will just remove it.<br></div><div><br></div><blockquote ty=
pe=3D"cite" id=3D"fastmail-quoted"><div>=C2=A72:<br></div><div>- "If the=
 specification<br></div><div>includes new object type definitions, the s=
erver MUST include<br></div><div>it in the _hasDataFor_ array if, and on=
ly if, the user may use<br></div><div>those data types with this account=
."<br></div><div>This would be more clear in the form of "MUST include..=
. and MUST NOT..."<br></div></blockquote><div><br></div><div>OK, I've re=
written this to:<br></div><div><br></div><div><i>If the specification in=
cludes new object type definitions, the server MUST include it in the </=
i>hasDataFor<i>&nbsp;array if the user may use those data types with thi=
s account. It MUST NOT include it in the </i>hasDataFor<i> array if the =
user cannot use those data types with this account.</i><br></div><div><b=
r></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>- "Servers=
 MAY advertise vendor-specific JMAP<br></div><div>extensions, as describ=
ed in section 1.7. To avoid conflict, the<br></div><div>identifiers for =
these MUST be a URL with a domain owned by the<br></div><div>vendor."<br=
></div><div>I think the cross reference should be to section 1.8. <br></=
div></blockquote><div><br></div><div>Thanks, fixed.<br></div><div><br></=
div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Also, the MUST=
 is redundant to normative text in that section.<br></div></blockquote><=
div><br></div><div>Redundant, but consistent so I don't think it hurts; =
someone scanning the document rather than reading in detail may not read=
 both places so I think it's good to make this very clear.<br></div><div=
><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A75=
:<br></div><div>- "Not all types may have all methods. ": Is that the sa=
me as saying some types<br></div><div>may not have all methods?&nbsp; (I=
t could be read to say not all types are allowed<br></div><div>to have a=
ll methods.)<br></div></blockquote><div><br></div><div>I agree this coul=
d be clearer; I have rewritten this to:&nbsp;<i>Some types may not have =
all these methods.</i><br></div><div><br></div><div>Cheers,<br></div><di=
v>Neil.<br></div><div><br></div></body></html>
--504c89be3f0c4687b06edeb2caacde32--


From nobody Sun Feb 24 20:37:28 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AB442130DD3; Sun, 24 Feb 2019 20:37:18 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=OsudwQTb; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=r4sDwWr+
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 h849fD3FdJKw; Sun, 24 Feb 2019 20:37:17 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 864D512D4E7; Sun, 24 Feb 2019 20:37:17 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id A044921650; Sun, 24 Feb 2019 23:37:16 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Sun, 24 Feb 2019 23:37:16 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=RrYOSYbpJomrFWpuDfpr52SMN DVK/Kf0BZkcYrjsVPg=; b=OsudwQTb0W+O+tErQlYdrWYUt8fZ1pRzngfwqtjvF XuP3U79CevM/ZDH6pExyfKA0FYlc+wr9AvJOHfSvstvNuO880QwtQVfkyyT9mnAM hTG9WJWDrRx632OQoXFhmW+yPmTdFssTblwlQXqSBAIzi6laPWGLCHTMNALqhxfz F6CesoWDappcbBdhGA3umYmWMZRMcOKL1OnjRqkhHUoiqNZFZ2NPrObVWl1M0YWT KwDT2cJgSCNPTudfRp32+8INQEB4O2C12RrtNjyxSPnHyv80uFf0BrXtRoWoHGA7 C7nVUzZbg2twp+en2Ly41M6/zwYMBw9Au0DBAEzmeT3Bw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=RrYOSYbpJomrFWpuD fpr52SMNDVK/Kf0BZkcYrjsVPg=; b=r4sDwWr+Z/F9Gar5t1cnlVDAHTEqoZ7bo plHrDhuC5uJeaeQqATnArNHFK6fraZwwfWV25L33AgDllRkjF3pB1/G8CWjuRYmt gu5pGAbrNdnKIegfaxVgvr5idY5iKKUi6NVzrXgx0gLMo9CbdMH1XNs1QJUWGKMf ElaM6vJhw/SoCMGwN1Edk5wII3IGmiXhGsvaV0mmbw3SQXd/FPZKEp/QyoPZ3beR 92xcBi7lILZjHygkqagxOLUFdWly046dpKy08M1VfKoUe44+OF0U6JlOgOLIJjWX JWGisXxbCop9lsw1Fn/klh5VO0cUwA4eNqc4q+cB/3dbuD76IWSFA==
X-ME-Sender: <xms:-nBzXG3Ov8b66qzlchyX5eYVpgQqK3ZN2EK5_G9l57uJeO7ZRSUKWA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudehgdejudculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne cuffhomhgrihhnpehhthhtphhsshgvmhgrnhhtihgtshgrrhgvshhtrggslhgvsggvthif vggvnhhprhhothhotgholhhvvghrshhiohhnshdrihhnpdhivghtfhdrohhrghdphhhtth hpvddrshhonecurfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghi lhhtvggrmhdrtghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:-3BzXMmHdPs1fX_YmuUFsHMVBzGjO90QLCzPlcY_9Tj-a6dUPzqmvA> <xmx:-3BzXFpBOIzh7yMK_upKtSq3LrYVQ6duB5o5Pu8ei8J0Hz2BuetUUA> <xmx:-3BzXGGsZV0HckZvXBMkOV2CEKmU7gWDvEDBc4-C3yXHnjxWwF-GcQ> <xmx:_HBzXGIdQSF8Hk45Lx4xgrRCk7oh3GJpQUkrnJjm2TgrcAAKst14wA>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id CB98120320; Sun, 24 Feb 2019 23:37:14 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <264fd0e5-1bb2-417f-aa67-ee900619b811@beta.fastmail.com>
In-Reply-To: <CALaySJ+QP3Rqe9L=pdVunmKYQZnZVeNKJqkXoQFGjXSVqH5F3A@mail.gmail.com>
References: <155036265361.28448.17454562785142380047.idtracker@ietfa.amsl.com> <CALaySJJQUgAs-iE-t6QTOmUyCqmJ8Th_wh=W6eM6BX3Bm7xY6Q@mail.gmail.com> <0DC740DF-DECC-4D01-826E-7D7D9317A7CD@oracle.com> <CALaySJ+QP3Rqe9L=pdVunmKYQZnZVeNKJqkXoQFGjXSVqH5F3A@mail.gmail.com>
Date: Sun, 24 Feb 2019 23:36:59 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Barry Leiba" <barryleiba@computer.org>, "Chris Newman" <chris.newman@oracle.com>
Cc: "Eric Rescorla" <ekr@rtfm.com>, iesg <iesg@ietf.org>, "IETF JMAP Mailing List" <jmap@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org
Content-Type: multipart/alternative; boundary=ac992410082c49b4a16e9a38a55487cb
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/-7Amj397k4GtCj-Hbt1Njzov8Do>
Subject: Re: [Jmap]  =?utf-8?q?Eric_Rescorla=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 04:37:19 -0000

--ac992410082c49b4a16e9a38a55487cb
Content-Type: text/plain

On Fri, 22 Feb 2019, at 04:25, Barry Leiba wrote:
> On the other hand, I can't really say that it's an interoperability or
> safety/security issue. We're saying "SHOULD" because we want to
> encourage deployment of HTTP/2. So I'm good with Chris's suggestion
> of changing it to "encouraged", or perhaps even "strongly encouraged".

I note the latest draft of "Building Protocols with HTTP" from the HTTP Bis working group, says <https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-08#section-4.1>:

   Applications using HTTP SHOULD NOT specify a minimum version of HTTP
   to be used; because it is a hop-by-hop protocol, a HTTP connection
   can be handled by implementations that are not controlled by the
   application; for example, proxies, CDNs, firewalls and so on.
   Requiring a particular version of HTTP makes it difficult to use in
   these situations, and harms interoperability for little reason (since
   HTTP's semantics are stable between protocol versions).

In light of this, I'm inclined to remove the sentence altogether?

Neil.
--ac992410082c49b4a16e9a38a55487cb
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Fri, 22 Feb =
2019, at 04:25, Barry Leiba wrote:<br></div><blockquote type=3D"cite" id=
=3D"fastmail-quoted"><div>On the other hand, I can't really say that it'=
s an interoperability or<br></div><div>safety/security issue.&nbsp; We'r=
e saying "SHOULD" because we want to<br></div><div>encourage deployment =
of HTTP/2.&nbsp; So I'm good with Chris's suggestion<br></div><div>of ch=
anging it to "encouraged", or perhaps even "strongly encouraged".<br></d=
iv></blockquote><div><br></div><div>I note the latest draft of "Building=
 Protocols with HTTP" from the HTTP Bis working group, <a href=3D"https:=
//tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-08#section-4.1">says</=
a>:<br></div><div><br></div><pre class=3D"newpage" style=3D"font-size:13=
.3333px;margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);font-style:n=
ormal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight=
:400;letter-spacing:normal;orphans:2;text-align:start;text-indent:0px;te=
xt-transform:none;widows:2;word-spacing:0px;-webkit-text-stroke-width:0p=
x;text-decoration-style:initial;text-decoration-color:initial;">   Appli=
cations using HTTP SHOULD NOT specify a minimum version of HTTP
   to be used; because it is a hop-by-hop protocol, a HTTP connection
   can be handled by implementations that are not controlled by the
   application; for example, proxies, CDNs, firewalls and so on.
   Requiring a particular version of HTTP makes it difficult to use in
   these situations, and harms interoperability for little reason (since=

   HTTP's semantics are stable between protocol versions).<br></pre><div=
><br></div><div>In light of this, I'm inclined to remove the sentence al=
together?<br></div><div><br></div><div>Neil.</div></body></html>
--ac992410082c49b4a16e9a38a55487cb--


From nobody Sun Feb 24 21:02:21 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DA70B12D4E7; Sun, 24 Feb 2019 21:02:20 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=WMirVvIY; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=RvH2S13V
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 fnmcgsKIetEU; Sun, 24 Feb 2019 21:02:19 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B11681200D8; Sun, 24 Feb 2019 21:02:19 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 9E0493428; Mon, 25 Feb 2019 00:02:18 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 00:02:19 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=27dqPDjfv68/QJQ5eabmYqd6c +8SoO6r4g0y1IUGCAQ=; b=WMirVvIYyVsHjG7Ih3C5E2oQ4EHE2H74nxQgJQQxk fmXycJQmAN6OI7ob36qyP00iVdFjyJXmx8JvOhsfDLCb8TjuKzPhc3jwyO1f49zJ F+qho82oaGjvzAJVv1Zcuq6bApWaczsezJR3V7x2sykHWkcpSIWhibC3KV3hdBX/ FihM6vlx8AvilveKjZBUhFoPzMcFcBSuZEYL18sTRw0HU000vUk/CH1+UUPFA2BE gYGFZ+avCVzdm8jPkFJupjU3QwQnknj57EOTnhsOa7Od7IaxTMuqdicExSS7B7Hy eeH6T7Poc83fpm53dpPyf6YN9U9VG6l4TuViM8cGpjeZg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=27dqPDjfv68/QJQ5e abmYqd6c+8SoO6r4g0y1IUGCAQ=; b=RvH2S13VVfpJ5JldaM7CWwsOc7LmVUuG2 gsL0UUQEtwccC7MqtpPJkYwHAWLBNgHxB7RDtBJENXTortlfE/avk1JT3kIrYZcj FUU0DIX6zZou8cx9av4aHIFaltNoqkx+FFH0YoALKE/X5gzdf08P/wNeZflFdZ0u 16KaU43UD0UFstX6IR9Y6eyhTNSM9cnShC+UEuC6EAIq1t7kdVLIuM5luU6Qr4F1 VY8gstLv0XnVOL4F/e0PnqrgztrvVE6/ZuFm8OD9FGp48rrc7LZpeeUub3wmElIt 8kk05i+aSTyDiWGSzrrZdRjr42tHRwCYBNcgMfJt8I0n1Ic+DT2iw==
X-ME-Sender: <xms:2XZzXObBjUW30Ud_szKYUCcj9YCq0_uFOEapeawCxbEuZs3qQ-53Fw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudehgdejieculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:2XZzXJ_lNRzLPwJ2u5F-QcUoBx2aWNjSZ9lNeSKk1VHVKmTjCeTgPQ> <xmx:2XZzXAtbezfzdsvbyL8wE2RtAno-qLsmToDBkcMv8tJqOPxA0aSpYA> <xmx:2XZzXJkKTgVMCC6iym_sSGGgPwetbeF2sW4H3c6fBnCxInGqyvyG5g> <xmx:2nZzXA6kRfdmu1Rj8otrPNHtB8rtaMclv14knc8_MWsUqNmk4V2Mkw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 2ACC220320; Mon, 25 Feb 2019 00:02:17 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <4677b65b-b6c0-40b8-b5d0-ea647a7152a0@beta.fastmail.com>
In-Reply-To: <155072000830.20336.8924861683731438362.idtracker@ietfa.amsl.com>
References: <155072000830.20336.8924861683731438362.idtracker@ietfa.amsl.com>
Date: Mon, 25 Feb 2019 00:02:16 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Ben Campbell" <ben@nostrum.com>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=b09feb085b524f8891320e38a50ac41c
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/wlrtWO1mB7GK-ziqiWO2zwhSen0>
Subject: Re: [Jmap]  =?utf-8?q?Ben_Campbell=27s_No_Objection_on_draft-ietf-jma?= =?utf-8?q?p-mail-14=3A_=28with_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 05:02:21 -0000

--b09feb085b524f8891320e38a50ac41c
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thanks for the comments.

On Thu, 21 Feb 2019, at 14:33, Ben Campbell wrote:
> =C2=A71.1: Is there a reason not to use the updated boilerplate from R=
FC 8174?

This has been updated.

> =C2=A71.5: "Servers MUST support the standard JMAP push mechanisms to =
receive
> notifications when the state changes for any of the types defined in
> this specification."
> Which are the "standard" mechanisms? Does that mean both in-band notif=
ication
> and the use of external push notification systems>

I've rephrased this for clarity to reference the Core spec properly:

*Servers MUST support the JMAP push mechanisms, as specified in [@!I-D.i=
etf-jmap-core] section 7, to receive notifications when the state change=
s for any of the types defined in this specification.*

> =C2=A71.6: "If a JMAP Mail server also provides an IMAP interface to t=
he data and
> supports [RFC8474] IMAP Extension for Object Identifiers, the ids
> SHOULD be the same for mailbox, thread, and email objects in JMAP."
> What happens if they are not? (Why not MUST)?

It's not required for interoperability. But it's useful for building cus=
tom migration tools on top of, and given they have the same semantics it=
's confusing not to keep the same id.

> =C2=A72: "This value is shared with IMAP (exposed in IMAP via the [RFC=
6154] SPECIAL-USE extension).
> However, unlike in IMAP, a mailbox may only have a single role,"
> What happens if a mailbox is accessible via both IMAP and JMAP, and ha=
s
> multiple roles in IMAP?

The server must pick one to expose over JMAP, or modify the IMAP mailbox=
es to conform with this restriction. In practice almost all IMAP servers=
 already enforce this and there are negligible instances of this in the =
wild; how to fix it should you come across it is, I think, best left up =
to the implementor, as they may have more insight into how it ended up t=
his way in the first place and so how best to resolve.

> =C2=A77: "* "pending": It MAY be possible to cancel this submission."
> The MAY seems more a statement of fact than permission.

Yes, I will change this to lowercase.

Cheers,
Neil.
--b09feb085b524f8891320e38a50ac41c
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>Thanks for the =
comments.</div><div><br></div><div>On Thu, 21 Feb 2019, at 14:33, Ben Ca=
mpbell wrote:<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted">=
<div>=C2=A71.1: Is there a reason not to use the updated boilerplate fro=
m RFC 8174?<br></div></blockquote><div><br></div><div>This has been upda=
ted.</div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted=
"><div>=C2=A71.5: "Servers MUST support the standard JMAP push mechanism=
s to receive<br></div><div>notifications when the state changes for any =
of the types defined in<br></div><div>this specification."<br></div><div=
>Which are the "standard" mechanisms? Does that mean both in-band notifi=
cation<br></div><div>and the use of external push notification systems&g=
t;<br></div></blockquote><div><br></div><div>I've rephrased this for cla=
rity to reference the Core spec properly:<br></div><div><br></div><div><=
i>Servers MUST support the JMAP push mechanisms, as specified in [@!I-D.=
ietf-jmap-core] section 7, to receive notifications when the state chang=
es for any of the types defined in this specification.</i><br></div><div=
><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A71=
.6: "If a JMAP Mail server also provides an IMAP interface to the data a=
nd<br></div><div>supports [RFC8474] IMAP Extension for Object Identifier=
s, the ids<br></div><div>SHOULD be the same for mailbox, thread, and ema=
il objects in JMAP."<br></div><div>What happens if they are not?&nbsp; (=
Why not MUST)?<br></div></blockquote><div><br></div><div>It's not requir=
ed for interoperability. But it's useful for building custom migration t=
ools on top of, and given they have the same semantics it's confusing no=
t to keep the same id.<br></div><div><br></div><blockquote type=3D"cite"=
 id=3D"fastmail-quoted"><div>=C2=A72: "This value is shared with IMAP (e=
xposed in IMAP via the [RFC6154] SPECIAL-USE extension).<br></div><div>H=
owever, unlike in IMAP, a mailbox may only have a single role,"<br></div=
><div>What happens if a mailbox is accessible via both IMAP and JMAP, an=
d has<br></div><div>multiple roles in IMAP?<br></div></blockquote><div><=
br></div><div>The server must pick one to expose over JMAP, or modify th=
e IMAP mailboxes to conform with this restriction. In practice almost al=
l IMAP servers already enforce this and there are negligible instances o=
f this in the wild; how to fix it should you come across it is, I think,=
 best left up to the implementor, as they may have more insight into how=
 it ended up this way in the first place and so how best to resolve.<br>=
</div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><d=
iv>=C2=A77: "* "pending": It MAY be possible to cancel this submission."=
<br></div><div>The MAY seems more a statement of fact than permission.<b=
r></div></blockquote><div><br></div><div>Yes, I will change this to lowe=
rcase.<br></div><div><br></div><div>Cheers,</div><div>Neil.</div></body>=
</html>
--b09feb085b524f8891320e38a50ac41c--


From nobody Sun Feb 24 21:13:14 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 74F9E128B01; Sun, 24 Feb 2019 21:13:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=c3BI3AKn; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=HDzQsjD/
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 TbEfsvOgqY35; Sun, 24 Feb 2019 21:13:05 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 4A8D11200D8; Sun, 24 Feb 2019 21:13:05 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 5CB8131D3; Mon, 25 Feb 2019 00:13:04 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 00:13:04 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=CWNIjmpXZG68KgvbcqhYv/JSt Vqyg1/LkLaD2emelno=; b=c3BI3AKnCIfKU6gSUXCefPd+TloWYX5CutiF6J5kA jFywWXwuKyB84r24k2G1V4h1XD30d/g14AbCqL2NJ1HkkJyv4qbSqgisYi07uNu/ FTZ/WxHweXAV5ZaXk3OFJa2PiprOaw1oPws4ievsaI2EDZNU8mEI7U1goyvlG3I1 wbmA22xMhjWlsiODEEcvmk8oj9EZUcXrLWqAByWlCRD3KKEvKRjZ8rKYoFZ6N2Wv kXM3iSAPrbhVjEugxMfAW28FOtTZMYfbFjHW+tyPmrm3W3VB+L8gXNTiEi+sCEq9 53uItjWM2IhcmtdDpFUsyhwBjiwzDBXwWkCg6Nyvjm8ig==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=CWNIjmpXZG68Kgvbc qhYv/JStVqyg1/LkLaD2emelno=; b=HDzQsjD/WcPAZB+d8gZq1LUg1y6Js2cR8 xszdVnt23nLJhOYjRSDxPhODo3oQDsBlldNEaNK07rwlv8yMxG2mq2UNN29lXsKV 0b0qh/1rREVB8/0+M79MXrFx54ncLIMdJOzWT1g27Q4DtN4A2HhaNU6HjzZh7XD0 jS3juODuFJRkXbIM5eAb8cvLap5gA7+CEc7vAhX7roJVp8jSA9I3pN0In4ipcQe5 QRY1mTzH/Mh/2ZabH/qLOKUKSxib6xJROR90UMwu/Z/nxGD9hllBm683zc3ALRh9 4/2UO5nDMDDw7bAbIqCYhvebGlh03MBO9O28IMNEwQNZHH0ucFT1w==
X-ME-Sender: <xms:X3lzXGMrj0ruofKSAV0TwTrsDT58GJF_6FAlTeOc6RxCzq5_dohhwQ>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudehgdejjeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:X3lzXGUCT5sbNXlFmJJ0Bis73WIge53xE7HkUlCOEkv6RapIiHzZ5g> <xmx:X3lzXGiCnYOBX2icbpoXJZlGGDWei2wism5l4uHlpjLD2Cf9Qn08tQ> <xmx:X3lzXO-sEPmK7zw17vFsPVGRkEhxFpou-VCDC4dpyJHUOquiQQxfmA> <xmx:YHlzXFeNycjXc5RV_ksnfNsgTYORtRFUChtyWOkMaU69rM_AFmWwug>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 4FCC120320; Mon, 25 Feb 2019 00:13:03 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <3da0f5cf-f505-4f24-b29e-5edc642dca30@beta.fastmail.com>
In-Reply-To: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com>
References: <155075548213.8752.2989200842180735051.idtracker@ietfa.amsl.com>
Date: Mon, 25 Feb 2019 00:13:02 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: =?UTF-8?Q?Mirja_K=C3=BChlewind?= <ietf@kuehlewind.net>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=e37647555447423fa055d8dc094a0a0d
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/3GoXNGBZopK5UZcQyibc3zWqiWo>
Subject: Re: [Jmap]  =?utf-8?q?Mirja_K=C3=BChlewind=27s_Discuss_on_draft-ietf-?= =?utf-8?q?jmap-core-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 05:13:07 -0000

--e37647555447423fa055d8dc094a0a0d
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Fri, 22 Feb 2019, at 00:24, Mirja K=C3=BChlewind wrote:
> The jmap service name registration only requests registration for tcp =
while H/3
> could be used as well which will work over udp. Maybe it would be more=

> future-proof to also add an entry for udp?

Given the DNS query just resolves to a URL, it's simpler and less error-=
prone to have a single registration. When connecting to this URL the cli=
ent/server may negotiate to upgrade from HTTP over TCP to H/3, but I don=
't think it's relevant knowledge at the point of just trying to discover=
 the JMAP server location for a domain.

> And finally a comment related to my above note about H/3, the document=
 talks
> two times about "keeping the TCP connection open". To be future proof,=
 I would
> maybe recommend to change the wording to "keeping the transport connec=
tion
> open".

Sure, I'll update this.

Cheers,
Neil.

--e37647555447423fa055d8dc094a0a0d
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div><div>On Fri, 22=
 Feb 2019, at 00:24, Mirja K=C3=BChlewind wrote:<br></div><blockquote ty=
pe=3D"cite" id=3D"fastmail-quoted"><div>The jmap service name registrati=
on only requests registration for tcp while H/3<br></div><div>could be u=
sed as well which will work over udp. Maybe it would be more<br></div><d=
iv>future-proof to also add an entry for udp?<br></div></blockquote><div=
><div><br></div></div><div>Given the DNS query just resolves to a URL, i=
t's simpler and less error-prone to have a single registration. When con=
necting to this URL the client/server may negotiate to upgrade from HTTP=
 over TCP to H/3, but I don't think it's relevant knowledge at the point=
 of just trying to discover the JMAP server location for a domain.<br></=
div><div><div><br></div></div><blockquote type=3D"cite" id=3D"fastmail-q=
uoted"><div>And finally a comment related to my above note about H/3, th=
e document talks<br></div><div>two times about "keeping the TCP connecti=
on open". To be future proof, I would<br></div><div>maybe recommend to c=
hange the wording to "keeping the transport connection<br></div><div>ope=
n".<br></div></blockquote><div><div><br></div></div><div>Sure, I'll upda=
te this.<br></div><div><div><br></div></div><div>Cheers,<br></div><div>N=
eil.<br></div></div><div><br></div></body></html>
--e37647555447423fa055d8dc094a0a0d--


From nobody Sun Feb 24 22:50:51 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 86B1F130DE4; Sun, 24 Feb 2019 22:50:42 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=bXogHyey; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=O+YoKEYX
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 42gHu5XkD_Ox; Sun, 24 Feb 2019 22:50:40 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0DAD2128B33; Sun, 24 Feb 2019 22:50:40 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id E0C1F31F1; Mon, 25 Feb 2019 01:50:38 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 01:50:39 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=NMQ20ym37SgLJGplUuwTRbwzT vkvT34MXh7kH0HNIrQ=; b=bXogHyeyOMuN2VlD3U79NbGwupn6yJPXgUS0SbI20 xO1l7gb0AVLDAyX7VM0NXgCMR/UldJK+lkaf8Rznl5U+o+sksalwPP61rhBrFrja 5biABZrrGG9uLNfaBDzl0W8lRDb7FsHrtdWO4FY8TmY6TZVNGh1322XTmsGJfqYF zlmZeYkToU1EPO2wOnf1qgns9y+VhVhvEGx53Ovo5DCqnEdQBwhW1yQwGYlxfH5P YeFLd/e/Z0YNh8Tx93vriScpZGlXdCJxNg82tPZBlz4PNGMpcceiiE9er1CMGtoY gDzLXqtzR67Q8dDUuq0Om47wMkUvPMOvzmtv4atUJoSKw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=NMQ20ym37SgLJGplU uwTRbwzTvkvT34MXh7kH0HNIrQ=; b=O+YoKEYXhJf5H/P0ed9+K17Bi0LJAD0Yl FFD/xVcr8y51dVOQkRfjBZR0nCN/VaiGgl0hFjgkSgpzkVdFNxEzyTDvCo2QRNuP LgZYrHaT09ypByXxDil66r97amVPhAtnYbgaC05PSX6comrnNb5ULK4kikXpHDm+ An8VB7uN9+hJRd/9rN5+wiQ682uBUTYFFh2wXvCCmvsQoqTLfN4btJ0CxzcABu1M PhFmYRqJAx0NO+tnME366iXR+rmGGpRKEFcB5yr/ldCYBMes9OHuxn0r4phKnF9m x8kdDl2QdikKAhPJJ0oPTNjjy/9pMJlJu8pIhn4rhN5GJYubbzNmQ==
X-ME-Sender: <xms:PZBzXP1FDW4hh61ZuJd8VKit7nNLyvIY7Gar_OJQEDtJ1wdiJorbIQ>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudehgdeljeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne cuffhomhgrihhnpeiffedrohhrghdpihgvthhfrdhorhhgnecurfgrrhgrmhepmhgrihhl fhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomhenucevlhhushhtvg hrufhiiigvpedt
X-ME-Proxy: <xmx:PZBzXGh1h_z3vErsg_YHsK3YvWSt2-kPP74_dbzaTAEFEZLfL7HfGA> <xmx:PZBzXAXd9YiIWN5H6QIH5GPkgx0iWBeX282g3nDChlu7CgMC6oAOzw> <xmx:PZBzXFVoU7LIRb2M5ItVBtIQROaPkm_R2S1FcIspOvuFyAZNXH2eeA> <xmx:PpBzXJcX6_-oX-Z6Rl77pHuuwE6aR1KGdsAeIBjpp4rFjaxakN016Q>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id A317C20320; Mon, 25 Feb 2019 01:50:37 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com>
In-Reply-To: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com>
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com>
Date: Mon, 25 Feb 2019 01:50:27 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Adam Roach" <adam@nostrum.com>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=1f80447168994290a3551871a56e43af
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/vpHlrrWK6h1-6FGyFWYcWQAbLRs>
Subject: Re: [Jmap]  =?utf-8?q?Adam_Roach=27s_Discuss_on_draft-ietf-jmap-mail-?= =?utf-8?q?14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 06:50:43 -0000

--1f80447168994290a3551871a56e43af
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thanks for the detailed feedback Adam.

On Thu, 21 Feb 2019, at 19:33, Adam Roach wrote:
> See my DISCUSS on draft-ietf-jmap-mail regarding the issues that can a=
rise
> from normatively referencing the WHATWG HTML document. Consider citing=

> https://www.w3.org/TR/html52/ instead.

I have changed the citation to this.

> ID Nits Reports:
>=20
>  -- The draft header indicates that this document updates RFC5788, but=
 the
>  abstract doesn't seem to mention this, which it should.

What is normally expected here? Looking at RFC7230 <https://tools.ietf.o=
rg/html/rfc7230> (HTTP/1.1) as an example, it updates 2817 and 2616, but=
 neither are mentioned in the abstract.

> Please use the boilerplate from RFC 8174.

I have done this.

> =C2=A72:
>=20
> > However, unlike in IMAP, a mailbox may only have a single role,
> > and no two mailboxes in the same account may have the same role.
>=20
> I get the impression that JMAP for mail is intended to be implementabl=
e as a
> fa=C3=A7ade on top of a normal IMAP server. It is very unclear how suc=
h an
> implementation is able to fulfill this requirement when the IMAP serve=
r has
> multiple mailboxes marked as, say, "Sent". Please add guidance.

As Alexey said, these were misfeatures and many servers already enforce =
the restrictions JMAP adds. I think it can really be left up to the impl=
ementation how to translate multiple IMAP roles, or multiple folders wit=
h the same role, to enforce the JMAP restrictions, since this is not a c=
ompatibility issue within JMAP itself and the implementation may have do=
main-specific knowledge to help it make an informed choice. I have updat=
ed the text to clarify this:

*This value is shared with IMAP (exposed in IMAP via the [@!RFC6154] SPE=
CIAL-USE extension). However, unlike in IMAP, a mailbox MUST only have a=
 single role, and there MUST NOT be two mailboxes in the same account wi=
th the same role. Servers providing IMAP access to the same data are enc=
ouraged to enforce these extra restrictions in IMAP as well. Otherwise, =
it is implementation dependent how to modify the IMAP attributes to ensu=
re compliance when exposing the data over JMAP.*

> =C2=A72.3:
>=20
> > A Mailbox object matches the filter if and only if all of the given
> > conditions match.
>=20
> I believe this means to say that it matches the *FilterCondition* if a=
nd only
> if the conditions match

Thanks, I've fixed this.

>  =C2=A74.1.1:
>=20
> > o *keywords*: "String[Boolean]" (default: ) A set of keywords that
>=20
> The intended default is unclear to me. Is this meant to indicate "{}"?=


Yes, it's meant to be `{}` =E2=80=93 it got lost in the translation from=
 markdown to RFC XML format. I've now fixed this.

> =C2=A74.1.2.1:
>=20
> > A server SHOULD replace any octet
> > or octet run with the high bit set that violates UTF-8 syntax with
> > the unicode replacement character (U+FFFD).
>=20
> This seems to preclude a client-side implementation of DKIM. That seem=
s
> problematic.

You can always fetch the raw bytes for the whole message (by using the s=
tandard download mechanism with the blobId of the message). When returni=
ng data within the structured JSON however, it MUST be UTF-8 encoded or =
we'd be returning invalid JSON. I think the currently defined behaviour =
is reasonable.

> =C2=A74.1.2.3:
>=20
> It would probably be good for this specification to at least *allow* (=
and
> probably encourage) JMAP-for-mail servers to populate the name field w=
ith such
> comments when no properly-formatted name is available

Agreed. I have changed it to:

*name*: `String|null`

The *display-name* of the [@!RFC5322] *mailbox*. If this is a *quoted-st=
ring*:
 1. The surrounding DQUOTE characters are removed.
 2. Any *quoted-pair* is decoded.
 3. White-space is unfolded, and then any leading and trailing white-spa=
ce is removed.
If there is no *display-name* but there is a *comment* immediately follo=
wing the *addr-spec,* the value of this SHOULD be used instead. Otherwis=
e, this property is `null`.

> =C2=A74.1.4:
> > the charset was unknown, or the content-trasfer-encoding was
> Nit: "...-transfer-..."

Fixed, thanks.

> =C2=A77.5.1:
> > "description": "Verzeihung, wegen verdaechtiger Aktivitaeten Ihres
> Benutzerkontos haben wir den Versand von Nachrichten gesperrt. Bitte w=
enden Sie
> sich fuer Hilfe an unser Support Team."
>=20
> This line is approximately 120 characters too long. Consider wrapping.=


Fixed, thanks.

Cheers,
Neil.
--1f80447168994290a3551871a56e43af
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>Thanks for the =
detailed feedback Adam.<br></div><div><br></div><div>On Thu, 21 Feb 2019=
, at 19:33, Adam Roach wrote:<br></div><blockquote type=3D"cite" id=3D"f=
astmail-quoted"><div>See my DISCUSS on draft-ietf-jmap-mail regarding th=
e issues that can arise<br></div><div>from normatively referencing the W=
HATWG HTML document. Consider citing<br></div><div><a href=3D"https://ww=
w.w3.org/TR/html52/">https://www.w3.org/TR/html52/</a> instead.<br></div=
></blockquote><div><br></div><div>I have changed the citation to this.<b=
r></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted">=
<div>ID Nits Reports:<br></div><div><br></div><div>&nbsp; -- The draft h=
eader indicates that this document updates RFC5788, but the<br></div><di=
v>&nbsp;&nbsp;&nbsp;&nbsp; abstract doesn't seem to mention this, which =
it should.<br></div></blockquote><div><br></div><div>What is normally ex=
pected here? Looking at <a href=3D"https://tools.ietf.org/html/rfc7230">=
RFC7230</a>&nbsp;(HTTP/1.1) as an example, it updates 2817 and 2616, but=
 neither are mentioned in the abstract.<br></div><div><br></div><blockqu=
ote type=3D"cite" id=3D"fastmail-quoted"><div>Please use the boilerplate=
 from RFC 8174.<br></div></blockquote><div><br></div><div>I have done th=
is.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quo=
ted"><div>=C2=A72:<br></div><div><br></div><div>&gt;&nbsp;&nbsp;&nbsp;&n=
bsp; However, unlike in IMAP, a mailbox may only have a single role,<br>=
</div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp; and no two mailboxes in the same=
 account may have the same role.<br></div><div><br></div><div>I get the =
impression that JMAP for mail is intended to be implementable as a<br></=
div><div>fa=C3=A7ade on top of a normal IMAP server. It is very unclear =
how such an<br></div><div>implementation is able to fulfill this require=
ment when the IMAP server has<br></div><div>multiple mailboxes marked as=
, say, "Sent". Please add guidance.<br></div></blockquote><div><br></div=
><div>As Alexey said, these were misfeatures and many servers already en=
force the restrictions JMAP adds. I think it can really be left up to th=
e implementation how to translate multiple IMAP roles, or multiple folde=
rs with the same role, to enforce the JMAP restrictions, since this is n=
ot a compatibility issue within JMAP itself and the implementation may h=
ave domain-specific knowledge to help it make an informed choice. I have=
 updated the text to clarify this:<br></div><div><br></div><div><i>This =
value is shared with IMAP (exposed in IMAP via the [@!RFC6154] SPECIAL-U=
SE extension). However, unlike in IMAP, a mailbox MUST only have a singl=
e role, and there MUST NOT be two mailboxes in the same account with the=
 same role. Servers providing IMAP access to the same data are encourage=
d to enforce these extra restrictions in IMAP as well. Otherwise, it is =
implementation dependent how to modify the IMAP attributes to ensure com=
pliance when exposing the data over JMAP.</i><br></div><div><br></div><b=
lockquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A72.3:<br></div>=
<div><br></div><div>&gt;&nbsp; A Mailbox object matches the filter if an=
d only if all of the given<br></div><div>&gt;&nbsp; conditions match.<br=
></div><div><br></div><div>I believe this means to say that it matches t=
he *FilterCondition* if and only<br></div><div>if the conditions match<b=
r></div></blockquote><div><br></div><div>Thanks, I've fixed this.<br></d=
iv><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=
 =C2=A74.1.1:<br></div><div><br></div><div>&gt;&nbsp; o&nbsp; *keywords*=
: "String[Boolean]" (default: ) A set of keywords that<br></div><div><br=
></div><div>The intended default is unclear to me. Is this meant to indi=
cate "{}"?<br></div></blockquote><div><br></div><div>Yes, it's meant to =
be <code style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3p=
x;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;=
">{}</code> =E2=80=93 it got lost in the translation from markdown to RF=
C XML format. I've now fixed this.<br></div><div><br></div><blockquote t=
ype=3D"cite" id=3D"fastmail-quoted"><div>=C2=A74.1.2.1:<br></div><div><b=
r></div><div>&gt;&nbsp; A server SHOULD replace any octet<br></div><div>=
&gt;&nbsp; or octet run with the high bit set that violates UTF-8 syntax=
 with<br></div><div>&gt;&nbsp; the unicode replacement character (U+FFFD=
).<br></div><div><br></div><div>This seems to preclude a client-side imp=
lementation of DKIM. That seems<br></div><div>problematic.<br></div></bl=
ockquote><div><br></div><div>You can always fetch the raw bytes for the =
whole message (by using the standard download mechanism with the blobId =
of the message). When returning data within the structured JSON however,=
 it MUST be UTF-8 encoded or we'd be returning invalid JSON. I think the=
 currently defined behaviour is reasonable.<br></div><div><br></div><blo=
ckquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A74.1.2.3:<br></di=
v><div><br></div><div>It would probably be good for this specification t=
o at least *allow* (and<br></div><div>probably encourage) JMAP-for-mail =
servers to populate the name field with such<br></div><div>comments when=
 no properly-formatted name is available<br></div></blockquote><div><br>=
</div><div>Agreed. I have changed it to:<br></div><div><br></div><div><b=
>name</b>: <code style=3D"border-radius:3px;border:1px solid #ccc;paddin=
g:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-s=
ize:90%;">String|null</code><br></div><div><br></div><div>The <i>display=
-name</i>&nbsp;of the [@!RFC5322] <i>mailbox</i>. If this is a <i>quoted=
-string</i>:<br></div><ol><li>The surrounding DQUOTE characters are remo=
ved.<br></li><li>Any <i>quoted-pair</i>&nbsp;is decoded.<br></li><li>Whi=
te-space is unfolded, and then any leading and trailing white-space is r=
emoved.<br></li></ol><div>If there is no <i>display-name</i>&nbsp;but th=
ere is a <i>comment</i>&nbsp;immediately following the <i>addr-spec,</i>=
&nbsp;the value of this SHOULD be used instead. Otherwise, this property=
 is <code style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3=
px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%=
;">null</code>.<br></div><div><br></div><blockquote type=3D"cite" id=3D"=
fastmail-quoted"><div>=C2=A74.1.4:<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; the charset was unknown, or the content-trasfer-=
encoding was<br></div><div>Nit: "...-transfer-..."<br></div></blockquote=
><div><br></div><div>Fixed, thanks.<br></div><div><br></div><blockquote =
type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A77.5.1:<br></div><div>&gt=
;&nbsp;&nbsp;&nbsp;&nbsp; "description": "Verzeihung, wegen verdaechtige=
r Aktivitaeten Ihres<br></div><div>Benutzerkontos haben wir den Versand =
von Nachrichten gesperrt. Bitte wenden Sie<br></div><div>sich fuer Hilfe=
 an unser Support Team."<br></div><div><br></div><div>This line is appro=
ximately 120 characters too long. Consider wrapping.<br></div></blockquo=
te><div><br></div><div>Fixed, thanks.<br></div><div><br></div><div>Cheer=
s,<br></div><div>Neil.<br></div></body></html>
--1f80447168994290a3551871a56e43af--


From nobody Mon Feb 25 01:12:53 2019
Return-Path: <barryleiba@gmail.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A772E129441; Mon, 25 Feb 2019 01:12:45 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.881
X-Spam-Level: 
X-Spam-Status: No, score=-1.881 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.018, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, 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 vo7fkLZt7XIE; Mon, 25 Feb 2019 01:12:44 -0800 (PST)
Received: from mail-yw1-f52.google.com (mail-yw1-f52.google.com [209.85.161.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E8C1A12894E; Mon, 25 Feb 2019 01:12:43 -0800 (PST)
Received: by mail-yw1-f52.google.com with SMTP id u205so3386619ywe.1; Mon, 25 Feb 2019 01:12:43 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uyJOhO0fVVW9yGJcNltGFFe017YrdaVPbAoZQinaAX8=; b=Owbsr84ysdtaYx41FfrnDAUizMGm5joYU4aapq2HGP9JQ+pe0gqGVSgUmZLsR8NK7Y EOW5xmO5R04x8iPDHlDTuu7Da6rbCmza7vTnIxENB+TH3WzQfHOc/NAwwvvN6q6RTUVP 7/4XyETeL2vz8A+YiI/wXd1QNzUt0VxocgbbODbiYNKVheYToPZnp3zdtW4UxdllFySy /sM4s52H32yyjVbrERHSIKhhuqJWV6T9SKciLvvV/j2+utyjqyLN7VmOGRtmwy3DETS2 Voj5vmFSLK+dGDTw4t66RE7y7G5hZDbYwlZaI5C1R07ynqOmSsBppHaW0FGKJW1+BJYG p8wQ==
X-Gm-Message-State: AHQUAubLQ8CUmmPgB+lJhUW7s/vTAlCJCBZ1B9Rr71tJglxfJB8CLW2i qx80zetnIefjASyJdwfTzzSATptC4NzQbanI9+4=
X-Google-Smtp-Source: AHgI3IZPEEcCoeTb1iF1Q2wmuNndCiXcldKMFetxPfMyj8eWOV8U14GuoUlLIgicC3huTznUDOu4/Ga7nXxuyOrr/fo=
X-Received: by 2002:a81:3a0b:: with SMTP id h11mr2258472ywa.325.1551085962826;  Mon, 25 Feb 2019 01:12:42 -0800 (PST)
MIME-Version: 1.0
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com>
In-Reply-To: <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com>
From: Barry Leiba <barryleiba@computer.org>
Date: Mon, 25 Feb 2019 01:12:31 -0800
Message-ID: <CALaySJK+a8oJRvt6O=Sw==epOon=tKenWG=ssOnx=eiVKdgnPg@mail.gmail.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: Adam Roach <adam@nostrum.com>, iesg <iesg@ietf.org>, draft-ietf-jmap-mail@ietf.org,  Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org,  IETF JMAP Mailing List <jmap@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/_BNt0GHbz7UEJi0GVyOU6_k2nWc>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 09:12:46 -0000

> ID Nits Reports:
>
>   -- The draft header indicates that this document updates RFC5788, but the
>      abstract doesn't seem to mention this, which it should.
>
>
> What is normally expected here? Looking at RFC7230 (HTTP/1.1) as an example, it updates 2817
> and 2616, but neither are mentioned in the abstract.

We, the IETF community in general and the IESG in particular, don't
always agree on everything; this is one of those things we don't agree
on.  I think it's not necessary to put it in the abstract unless it's
abstract-worthy material.  Keep in mind when you decide that, that the
abstract is meant to be read separately from the document and its
metadata, and someone doing that might not otherwise know about the
"updates" situation until she reads the document itself.  If you think
that's OK, then we shouldn't have to say it in the abstract.

The point of having it called out by id-nits is that if it's left out,
that should be done thoughtfully, not negligently.

Barry


From nobody Mon Feb 25 10:51:49 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ADCC412426A; Mon, 25 Feb 2019 10:51:47 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.678
X-Spam-Level: 
X-Spam-Status: No, score=-1.678 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (message has been altered)" header.d=nostrum.com
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 GqUdObfB_h-e; Mon, 25 Feb 2019 10:51:46 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5D93F12941A; Mon, 25 Feb 2019 10:51:46 -0800 (PST)
Received: from MacBook-Pro.roach.at (99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228]) (authenticated bits=0) by nostrum.com (8.15.2/8.15.2) with ESMTPSA id x1PIpc1Q059106 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Mon, 25 Feb 2019 12:51:41 -0600 (CST) (envelope-from adam@nostrum.com)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=nostrum.com; s=default; t=1551120702; bh=HM2L8vsx6wDUOy0AYr1Xq2P08XEqT6Z66z2L4h9vYZo=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=CF9fM14rUEhPBCOG2x1zRaZX0SjntsIllfOJmmFSJwNymD5pY99N4X3RNk7orDdOy hCbuqMuSFt7DMyf85kLk43hFI38bV9rmTiebbOv+6BN3U0app3ILiD7npjTBPFtGhw BR9Y4erPR4HHRb9HtQ9v0Z22cjMT61cGLu3ueInM=
X-Authentication-Warning: raven.nostrum.com: Host 99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228] claimed to be MacBook-Pro.roach.at
To: Neil Jenkins <neilj@fastmailteam.com>, iesg <iesg@ietf.org>
Cc: Bron Gondwana <brong@fastmailteam.com>, draft-ietf-jmap-mail@ietf.org, jmap-chairs@ietf.org, IETF JMAP Mailing List <jmap@ietf.org>
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com>
From: Adam Roach <adam@nostrum.com>
Message-ID: <271454f0-333d-7bba-284a-cd15e0f408af@nostrum.com>
Date: Mon, 25 Feb 2019 12:51:33 -0600
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.5.0
MIME-Version: 1.0
In-Reply-To: <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com>
Content-Type: multipart/alternative; boundary="------------1C7A46DB31B20D97C859AFC9"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/W0eeOolT9gd9LazOX6so1lNNskg>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-mail-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 18:51:48 -0000

This is a multi-part message in MIME format.
--------------1C7A46DB31B20D97C859AFC9
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

On 2/25/19 12:50 AM, Neil Jenkins wrote:
> Thanks for the detailed feedback Adam.


Thanks! Your answers look good. One quick response below.


>
> On Thu, 21 Feb 2019, at 19:33, Adam Roach wrote:
>
>> ID Nits Reports:
>>
>>   -- The draft header indicates that this document updates RFC5788, 
>> but the
>>      abstract doesn't seem to mention this, which it should.
>
> What is normally expected here? Looking at RFC7230 
> <https://tools.ietf.org/html/rfc7230> (HTTP/1.1) as an example, it 
> updates 2817 and 2616, but neither are mentioned in the abstract.
>

  RFC 8067 provides a good example. If you want something more minimal, 
I'd look at RFC 6122.

/a


--------------1C7A46DB31B20D97C859AFC9
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 2/25/19 12:50 AM, Neil Jenkins
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <title></title>
      <style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
      <div>Thanks for the detailed feedback Adam.<br>
      </div>
    </blockquote>
    <p><br>
    </p>
    <p>Thanks! Your answers look good. One quick response below.<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
      cite="mid:76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com">
      <div><br>
      </div>
      <div>On Thu, 21 Feb 2019, at 19:33, Adam Roach wrote:<br>
      </div>
      <br>
      <blockquote type="cite" id="fastmail-quoted">
        <div>ID Nits Reports:<br>
        </div>
        <div><br>
        </div>
        <div>  -- The draft header indicates that this document updates
          RFC5788, but the<br>
        </div>
        <div>     abstract doesn't seem to mention this, which it
          should.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>What is normally expected here? Looking at <a
          href="https://tools.ietf.org/html/rfc7230"
          moz-do-not-send="true">RFC7230</a> (HTTP/1.1) as an example,
        it updates 2817 and 2616, but neither are mentioned in the
        abstract.<br>
      </div>
      <br>
    </blockquote>
    <p><br>
    </p>
    <p> RFC 8067 provides a good example. If you want something more
      minimal, I'd look at RFC 6122.</p>
    <p>/a<br>
    </p>
  </body>
</html>

--------------1C7A46DB31B20D97C859AFC9--


From nobody Mon Feb 25 13:39:05 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id E4DE81310A1; Mon, 25 Feb 2019 13:38:55 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
From: Adam Roach <adam@nostrum.com>
To: "The IESG" <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, brong@fastmailteam.com, jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.92.0
Auto-Submitted: auto-generated
Precedence: bulk
Message-ID: <155113073593.10703.12727745979647687835.idtracker@ietfa.amsl.com>
Date: Mon, 25 Feb 2019 13:38:55 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/AlIEl8_X-sFyYfOhvSK7c_1vc2s>
Subject: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 25 Feb 2019 21:38:56 -0000

Adam Roach has entered the following ballot position for
draft-ietf-jmap-core-14: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

[After consultation with a security AD, I have removed one of my three
DISCUSS items, as I now believe it pertains more broadly to the use
of .well-known and is not specific to this document]

Thanks to the authors for a well-laid-out and easy-to-read document. Thanks also
to everyone who contributed to the completion of this work. I have three
DISCUSS-level items, and a handful of other suggestions that are largely
editorial

---------------------------------------------------------------------------

§7.3:

>  The client may add a query parameter called "types", with the value
...
>  The client may add a query parameter called "closeafter" with value
...
>  The client may add a query parameter called "ping", with a positive

This form of specification of URI parameters is not allowed -- it contravenes
the basic thesis of BCP 190; section 2.4 of which stipulates:

>  Applications MUST NOT directly specify the syntax of queries, as this
>  can cause operational difficulties for deployments that do not
>  support a particular form of a query.
...
>  Extensions MUST NOT constrain the format or semantics of queries.

Given that the base resource used to bootstrap the JMAP infrastructure already
uses URI templates, it seems that they would be a good candidate for specifying
a means of adding these parameters in a way that respects the basic principle
that URI design ownership belongs to the domain administrator.

---------------------------------------------------------------------------

The reference for Server-Sent events normatively points to the WHATWG HTML
spec, which changes on a continuing basis. I don't think we've really worked
out the mechanics of citing this kind of reference normatively; and JMAP takes
the especially dangerous step of citing a specific *section* of the document,
which may well change at arbitrary and potentially frequent intervals. There
is, in fact, no guarantee that the cited "text/event-stream" mechanism will
continue to exist in future versions of the WHATWG document (cf. the <keygen>
element).

In this particular case, I think we want to reference
https://www.w3.org/TR/eventsource/ instead.


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

§1.1:

>  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
>  "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
>  document are to be interpreted as described in [RFC2119].

Please use the boilerplate from RFC 8174.

---------------------------------------------------------------------------

§1.2:

>  Where "Id" is given as a datatype, it means a "String" of at least 1
>  and maximum 255 octets in size, and MUST only contain characters from
>  the "URL and Filename safe" Base 64 Alphabet, as defined in section 5
>  of [RFC4648].  This is the ASCII alphanumeric characters ("A-Za-
>  z0-9"), hyphen ("-"), and underscore ("_").

This is unclear as to whether "=" is allowed. It is included in the RFC 4648
"URL and Filename safe" alphabet, but not mentioned in this document's
reiteration of that alphabet's definition. If the intention is to exclude "=",
please say so explicitly.

---------------------------------------------------------------------------

§1.2 says:

>  All record ids are assigned by the server, and are immutable.

...in which no exceptions are allowed.

§1.6.3 says:

>  The id of a record is immutable, and normally assigned by the server.

...where "normally" indicates that there will be exceptions. These say different
things. Please change the inaccurate one to match the accurate one.

---------------------------------------------------------------------------

§2.1:

>       "accounts": {
>         "13824": {
>           "name": "john@example.com",
>           "isPersonal": true,
>           "isReadOnly": false,
>           "hasDataFor": [
>             "urn:ietf:params:jmap:mail",
>             "urn:ietf:params:jmap:contacts"
>           ]
>         },

Section 1.2 offers the advice:

>  In particular, it is wise to avoid:
>
...
>
>  o  Ids starting with digits
>
>  o  Ids that contain only digits

It seems that the examples should conform to the document's advice --
implementors often pay more attention to examples than even normative text, much
less non-normative advice.

---------------------------------------------------------------------------

§3.2:

>     3.  A "String" *client id*: an arbitrary string from the client to
>         be echoed back with the responses emitted by that method call

I think the document wants to say a bit more about the scope of uniqueness for
this client ID. Also, the name is a bit confusing, as "Client ID" is most easily
interpreted as "an identifier that identifies a client." This appears to be more
of a "Method ID."

---------------------------------------------------------------------------

§5.7:

>  o  *keywords*: "String[Boolean]" (default: ) A set of keywords that

I think you're missing something after "default:" inside the parentheses.

As an aside -- and I know this is just an example, but people are likely to
follow it when designing things riding on top of JMAP -- I was initially a bit
confused about why this is "String[Boolean]" rather than "String[]",
especially since the only valid value appears to be "true". Is this to allow
for smaller patch operations? If so, text explaining this design decision
would probably be good.

---------------------------------------------------------------------------

§7.1.1:

>  It can wait until the call completes and
>  then compare if the new state string after the /set is the same as
>  was pushed in the StateChange object; if so, it does not need to
>  waste a request asking for changes it already knows.

I think this phrasing may oversimplify things a bit. For example:

 - my current cached notion of state is "A"
 - I send a /set operation
 - I get a "StateChange" that indicates that the new state is "C"
 - I get a response to the /set operation indicating that the state has changed
   from "B" to "C"

The new state after the /set is the same as was pushed in the StateChange
object; however, I'm still missing state that resulted in the change from "A" to
"B".

I think the language in this example needs to be updated to be more precise
about when such requests can be omitted.

---------------------------------------------------------------------------

§7.3:

>  When a new connection is made to the event-source endpoint, a
>  client following the server-sent events specification will send a
>  Last-Event-ID HTTP header

Nit: "...HTTP header field..."



From nobody Mon Feb 25 17:01:49 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5ECD4128B14; Mon, 25 Feb 2019 17:01:48 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=ln5+o46Z; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=e9pWNdDy
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 OyZ_Yr4Ve2I1; Mon, 25 Feb 2019 17:01:47 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A136012867A; Mon, 25 Feb 2019 17:01:47 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 205AE34B7; Mon, 25 Feb 2019 20:01:46 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 20:01:46 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=7CvIkwajIhB5Pd+nRm+MmJtLj lIoLpAxygicBKUEFWs=; b=ln5+o46ZciuojzIURuIfuRbc6PsVeFY/yvDYYD4lt JUoeATX64H8FoJjHhCFdpid+WpPozMA8jVUuw7+TFnYRp6cwkycj++KFMShe89Rc DHOsucp+JEjmu7dkVY+UWsKAiRMrNCD30Kjj3+Gx+N4B8b+b168YtEgNxyUwMYr5 2D9fMUZeIiUX2w6hp9w8UVoiwPIInuYSwwH5Hs1WRn/LrgJgDwS2ZECWamcVDF6p qjFeuydG3qyPC6NFcEpc8/C6QFVfRu/p8UkBret1jAuF2cGJku3qZfhXTkH87jll lRpPeIrdhvgiKTFVVaxaANsf1IEC+LOCx3YyKhulM0jeQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=7CvIkwajIhB5Pd+nR m+MmJtLjlIoLpAxygicBKUEFWs=; b=e9pWNdDyFvSbT0f+XbToHT7BgtJlzcQNg valyvY2YI46MtjsgmDVeUI/Ac41zh1WWFuDVdGC3HyYaWmNLhUDEkr1V3CZrSa1N Efo+d1X0O29a9kz3yUMoHPhIsabLbFOHp06wbUCn9e2eF6SIJUWDYRPmUQP4jPk3 wDHUL+sJdmMeEF0x64hzwsHZ48UHgL3kYOBauzDsnX1eD6g/Fotd+OleefuviVTN 3ombCm+Mws8smNqb4D4hE2jdm1z9H14y7xrgueRLCzpE/gR+0cRHlEV9HJ7+dC7q XTnLNVBL8oxYMXmMdbKpk2olHVxcU7WldDl5g5JjVHHaSgjTn/B/w==
X-ME-Sender: <xms:-I90XGxaLGl4O4sEktyq8MDdbBW2zP40D7rZSzCDWaRS2zOA2M05Fw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudekgddvleculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne curfgrrhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdr tghomhenucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:-I90XFiQLdmZm7j9XSRlEfhzYkAaJeTsVN8n8zEjSzRaIsZS6r3KRw> <xmx:-I90XBwJALKUyqg8bhvqpBydsVO6JwVJRvcfC7kRvhWxIAt89zLyjA> <xmx:-I90XIKEZOqqVuIYBWbUn0GeVwKB4qjc5RK3Li9LPmM_OMfX0x3Ydg> <xmx:-Y90XIL_iMClwaXGYc-DK9yewpVObx0mvAQt3_KWg7dgIlv2pRa43A>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id AA02120320; Mon, 25 Feb 2019 20:01:44 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <993aac32-e530-477d-a261-2d1b36da27da@beta.fastmail.com>
In-Reply-To: <CALaySJK+a8oJRvt6O=Sw==epOon=tKenWG=ssOnx=eiVKdgnPg@mail.gmail.com>
References: <155073799083.8575.5787388551809536097.idtracker@ietfa.amsl.com> <76d94dab-61c9-427d-8050-88471fd5103d@beta.fastmail.com> <CALaySJK+a8oJRvt6O=Sw==epOon=tKenWG=ssOnx=eiVKdgnPg@mail.gmail.com>
Date: Mon, 25 Feb 2019 20:01:44 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Barry Leiba" <barryleiba@computer.org>
Cc: "Adam Roach" <adam@nostrum.com>, iesg <iesg@ietf.org>, draft-ietf-jmap-mail@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=043a46b4d2b94b5f83c929eab98b5516
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/lfOK7fLzvSBluqMrDAyORH3VMss>
Subject: Re: [Jmap]  =?utf-8?q?Adam_Roach=27s_Discuss_on_draft-ietf-jmap-mail-?= =?utf-8?q?14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Feb 2019 01:01:48 -0000

--043a46b4d2b94b5f83c929eab98b5516
Content-Type: text/plain

On Mon, 25 Feb 2019, at 20:12, Barry Leiba wrote:
> I think it's not necessary to put it in the abstract unless it's abstract-worthy material.

Yes. Having considered this and looked at the example Adam gave, it seems clear to me it seems clear to me that in the case of this document it is not necessary to mention the updated RFC in the abstract as it is not core to what the document is about, but rather a minor update to a registry to make it encompass JMAP as well as IMAP.

Cheers,
Neil.
--043a46b4d2b94b5f83c929eab98b5516
Content-Type: text/html

<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Mon, 25 Feb 2019, at 20:12, Barry Leiba wrote:<br></div><blockquote type="cite" id="fastmail-quoted"><div>I think it's not necessary to put it in the abstract unless it's abstract-worthy material.<br></div></blockquote><div><br></div><div>Yes. Having considered this and looked at the example Adam gave, it seems clear to me it seems clear to me that in the case of this document it is not necessary to mention the updated RFC in the abstract as it is not core to what the document is about, but rather a minor update to a registry to make it encompass JMAP as well as IMAP.<br></div><div><br></div><div>Cheers,<br></div><div>Neil.</div></body></html>
--043a46b4d2b94b5f83c929eab98b5516--


From nobody Mon Feb 25 17:47:52 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C4024130DD8; Mon, 25 Feb 2019 17:47:42 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=frMTrMCB; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=y4TYXkrj
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 hMU-wnmXf6fD; Mon, 25 Feb 2019 17:47:39 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AC8151294FA; Mon, 25 Feb 2019 17:47:39 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 974E6311D; Mon, 25 Feb 2019 20:47:38 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 20:47:39 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=oJt/IXDbB33N06tJ66VAGw8D9 xablhXPqpe1nxvvDJE=; b=frMTrMCBV8cVWk6+o9SmUA0UHgVDtRhPtF30XPL8A /7OBob4+kvQfkvwIChzUVVCECeXwTyhZlVefAmjSOgbtnqThZckR9UuvoEhPIAdm lHz3U7wgja/N6A4NxBsqQl1Ze5EZYKZ09AmFI9fee1wrWiQg8ahaIPSEGWrW4QLL bivfFZ6z4nbTrii/d8/UDPvEH6jmSjBENwcm8ovpwU7BVcPm9XHGLLgxkPQ2vpkG HROP5CkqiT180Oh3vo+Ai/AOpgXlk9Z1tKProxN/D1mJJ1G0r5Y8j+NnPloZ038t fC2P739NLOjjm25eHh5w0bcQIFWBGmIYyiIo8mafGC50A==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=oJt/IXDbB33N06tJ6 6VAGw8D9xablhXPqpe1nxvvDJE=; b=y4TYXkrjJGxjjQIu2/pCtoplTgzU/3HpT E7XIq4c+ZZMgK9ZZzNGY0WEDb90Kh7aNjZULmpDAfxGBeqzZGvO5MevmFf38xRX1 3Uw3V6omT2HuFpoLtLMRM8rveSAWyWBRpnICBOd46LlPetVWbtr3MNr2ItV7xJ15 ybksXFnzldgIgwYvM4MpI1jM1g+MRVCEc/v3FfAlj8bK1E/Nw9F5OJ7gF5zQVNJO UV/dUJjsByRSpT5r/Az+m3+uUT4mATcJdL5F8Cw0YDHfjmoO6NqxYDgmfPIr/Qk4 wQebutk2uhKq6yByuzplIGZKsZKprZMA0YHlgBNCY/Kwdl+XuFBew==
X-ME-Sender: <xms:uZp0XOBJEaxJYgqH_LE9cpslHHQN52w4dXqVVZsGt0H195c0_Bqvow>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudekgdefkeculddtuddrgedtledrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfhuthen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfkfgjfhffhffvufgtsegrtderreerreejnecuhfhrohhmpedfpfgvihhl ucflvghnkhhinhhsfdcuoehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomheqne cuffhomhgrihhnpeiffedrohhrghenucfrrghrrghmpehmrghilhhfrhhomhepnhgvihhl jhesfhgrshhtmhgrihhlthgvrghmrdgtohhmnecuvehluhhsthgvrhfuihiivgeptd
X-ME-Proxy: <xmx:uZp0XGCXKaBcdaASt3ivQ2jqNx6CUzYxilFChvZDeN4WW_YD3ZxEQQ> <xmx:uZp0XEOn-_mL1qxG2V-ObPaOVvsHPfO48Kin7_gB-yFBsU-LpDkA_A> <xmx:uZp0XCO3p5vXUu_U9WwphcSZ9_rCAt8UxVdYbdCkbh2me3mV-1v_Fg> <xmx:upp0XJZM5p2u-AKLPlWovE8qnPUx8E5wsJUT3_PDe9bBWroltjS7xw>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 8ABE420385; Mon, 25 Feb 2019 20:47:37 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <6905eeea-f52d-4759-9ed9-8b1a6e9e12d9@beta.fastmail.com>
In-Reply-To: <155113073593.10703.12727745979647687835.idtracker@ietfa.amsl.com>
References: <155113073593.10703.12727745979647687835.idtracker@ietfa.amsl.com>
Date: Mon, 25 Feb 2019 20:47:04 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Adam Roach" <adam@nostrum.com>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=9d7e49d4f3e94c86b19028873b447cb3
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/08ZsbGpXgPJaDz8HwkuULcNQ8Oc>
Subject: Re: [Jmap]  =?utf-8?q?Adam_Roach=27s_Discuss_on_draft-ietf-jmap-core-?= =?utf-8?q?14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Feb 2019 01:47:43 -0000

--9d7e49d4f3e94c86b19028873b447cb3
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thanks again for the detailed feedback Adam.

On Tue, 26 Feb 2019, at 08:39, Adam Roach wrote:
> =C2=A77.3:
>=20
> This form of specification of URI parameters is not allowed
> =E2=80=A6
> Given that the base resource used to bootstrap the JMAP infrastructure=
 already
> uses URI templates, it seems that they would be a good candidate for s=
pecifying
> a means of adding these parameters in a way that respects the basic pr=
inciple
> that URI design ownership belongs to the domain administrator.

Yes, OK. I have changed this to be templated instead of specifying query=
 parameters. It now reads:

The JMAP Session object has an eventSourceUrl property, which is in [@!R=
FC6570] URI Template (level 1) format. The URL MUST contain variables ca=
lled `types`, `closeafter` and `ping`.

To connect to the resource, the client makes an authenticated GET reques=
t to the event-source URL with the appropriate variables substituted in:=


 * `types`: This MUST be either:
   * A comma-separated list of type names, e.g. `Email,CalendarEvent`. T=
he server MUST only push changes for the types in this list.
   * The single character: `*`. Changes to all types are pushed.
 * `closeafter`: This MUST be one of the following values:
   * `state`: The server MUST end the HTTP response after pushing a stat=
e event. This can be used by clients in environments where buffering pro=
xies prevent the pushed data from arriving immediately, or indeed at all=
, when operating in the usual mode.
   * `no`: The connection is persisted by the server as a standard event=
-source resource.
 * `ping`: A positive integer value representing a length of time in sec=
onds, e.g. `300`. If non-zero, the server MUST send an event called `pin=
g` whenever this time elapses since the previous event was sent. This MU=
ST NOT set a new event id. If the value is `0` the server MUST NOT send =
ping events.

The server MAY modify a requested ping interval to be subject to a minim=
um and/or maximum value. For interoperability, servers MUST NOT have a m=
inimum allowed value higher than 30 or a maximum allowed value less than=
 300.

The data for the ping event MUST be a JSON object containing an *interva=
l* property, the value (type `PositiveInt`) being the interval in second=
s the server is using to send pings (this may be different to the reques=
ted value if the server clamped it to be within a min/max value).

Clients can monitor for the ping event to help determine when the closea=
fter mode may be required.

> The reference for Server-Sent events normatively points to the WHATWG =
HTML
> spec, which changes on a continuing basis. I don't think we've really =
worked
> out the mechanics of citing this kind of reference normatively; and JM=
AP takes
> the especially dangerous step of citing a specific *section* of the do=
cument,
> which may well change at arbitrary and potentially frequent intervals.=
 There
> is, in fact, no guarantee that the cited "text/event-stream" mechanism=
 will
> continue to exist in future versions of the WHATWG document (cf. the <=
keygen>
> element).
>=20
> In this particular case, I think we want to reference
> https://www.w3.org/TR/eventsource/ instead.

OK, I have updated the reference to this instead.

> =C2=A71.1:
> Please use the boilerplate from RFC 8174.

Done.

> =C2=A71.2:
>=20
> > Where "Id" is given as a datatype, it means a "String" of at least 1=

> > and maximum 255 octets in size, and MUST only contain characters fro=
m
> > the "URL and Filename safe" Base 64 Alphabet, as defined in section =
5
> > of [RFC4648]. This is the ASCII alphanumeric characters ("A-Za-
> > z0-9"), hyphen ("-"), and underscore ("_").
>=20
> This is unclear as to whether "=3D" is allowed. It is included in the =
RFC 4648
> "URL and Filename safe" alphabet, but not mentioned in this document's=

> reiteration of that alphabet's definition. If the intention is to excl=
ude "=3D",
> please say so explicitly.

Thanks for pointing this out. "=3D" should not be allowed; I have update=
d the text to read:

Where `Id` is given as a datatype, it means a `String` of at least 1 and=
 maximum 255 octets in size, and MUST only contain characters from the "=
URL and Filename safe" Base 64 Alphabet, as defined in section 5 of [@!R=
FC4648], excluding the pad character (`=3D`). This means the allowed cha=
racters are the ASCII alphanumeric characters (`A-Za-z0-9`), hyphen (`-`=
), and underscore (`_`).

> =C2=A71.2 says:
>=20
> > All record ids are assigned by the server, and are immutable.
>=20
> ...in which no exceptions are allowed.
>=20
> =C2=A71.6.3 says:
>=20
> > The id of a record is immutable, and normally assigned by the server=
.
>=20
> ...where "normally" indicates that there will be exceptions. These say=
 different
> things. Please change the inaccurate one to match the accurate one.

=C2=A71.2 is correct; I have removed the word "normally" from =C2=A71.6.=
3.

> ----------------------------------------------------------------------=
-----
>=20
> =C2=A72.1:
>=20
> > "accounts": {
> > "13824": {
> > "name": "john@example.com",
> > "isPersonal": true,
> > "isReadOnly": false,
> > "hasDataFor": [
> > "urn:ietf:params:jmap:mail",
> > "urn:ietf:params:jmap:contacts"
> > ]
> > },
>=20
> Section 1.2 offers the advice:
>=20
> > In particular, it is wise to avoid:
> >
> ...
> >
> > o Ids starting with digits
> >
> > o Ids that contain only digits
>=20
> It seems that the examples should conform to the document's advice --
> implementors often pay more attention to examples than even normative =
text, much
> less non-normative advice.

Good point, I have updated the examples.

> =C2=A73.2:
>=20
> > 3. A "String" *client id*: an arbitrary string from the client to
> > be echoed back with the responses emitted by that method call
>=20
> I think the document wants to say a bit more about the scope of unique=
ness for
> this client ID. Also, the name is a bit confusing, as "Client ID" is m=
ost easily
> interpreted as "an identifier that identifies a client." This appears =
to be more
> of a "Method ID."

I agree the name could be clearer; I have renamed this "method call id".=
 As it is just echoed back by the server, there are no uniqueness requir=
ements, although the client will probably want to make it unique within =
that request if it wants to use it.

> =C2=A75.7:
>=20
> > o *keywords*: "String[Boolean]" (default: ) A set of keywords that
>=20
> I think you're missing something after "default:" inside the parenthes=
es.

Like in JMAP Mail this was a markdown error, now fixed. Should have read=
 `{}`.

> As an aside -- and I know this is just an example, but people are like=
ly to
> follow it when designing things riding on top of JMAP -- I was initial=
ly a bit
> confused about why this is "String[Boolean]" rather than "String[]",
> especially since the only valid value appears to be "true". Is this to=
 allow
> for smaller patch operations? If so, text explaining this design decis=
ion
> would probably be good.

So the datatype is really a Set. Since JSON doesn't have this as a datat=
ype, we can either map it to an Array or to an Object with dummy values =
(all `true` in this case). The latter is better because:
 1. You can use patch syntax to add remove items from it rather than hav=
ing to replace the entire set at once.
 2. Shows that the order of items is unimportant, making it easier to ch=
eck for equality.
I've added a short sentence to the example to note (1), since this is th=
e most important point.

> =C2=A77.1.1:
>=20
> > It can wait until the call completes and
> > then compare if the new state string after the /set is the same as
> > was pushed in the StateChange object; if so, it does not need to
> > waste a request asking for changes it already knows.
>=20
> I think this phrasing may oversimplify things a bit. For example:
>=20
> - my current cached notion of state is "A"
> - I send a /set operation
> - I get a "StateChange" that indicates that the new state is "C"
> - I get a response to the /set operation indicating that the state has=
 changed
>  from "B" to "C"
>=20
> The new state after the /set is the same as was pushed in the StateCha=
nge
> object; however, I'm still missing state that resulted in the change f=
rom "A" to
> "B".

Yes, regardless of the push, a client would have to fetch the changes si=
nce A if it received this response to the /set operation in order to bri=
ng its cache up to date. However, the common case is that the set operat=
ion happened on the state the client currently has cached, so it can do =
this optimisation.

> I think the language in this example needs to be updated to be more pr=
ecise
> about when such requests can be omitted.

Hmm, I'm not convinced it was that unclear to begin with, but anyway I'v=
e added a sub-clause to clarify this:

*If the client is itself making changes, it may receive a StateChange ob=
ject while the /set API call is in flight. It can wait until the call co=
mpletes and then compare if the new state string after the /set is the s=
ame as was pushed in the StateChange object; if so, and the old state of=
 the /set response matches the client's previous state, it does not need=
 to waste a request asking for changes it already knows.*

> =C2=A77.3:
>=20
> > When a new connection is made to the event-source endpoint, a
> > client following the server-sent events specification will send a
> > Last-Event-ID HTTP header
>=20
> Nit: "...HTTP header field..."

Sure, fixed.

Neil.
--9d7e49d4f3e94c86b19028873b447cb3
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>Thanks again fo=
r the detailed feedback Adam.<br></div><div><br></div><div>On Tue, 26 Fe=
b 2019, at 08:39, Adam Roach wrote:<br></div><blockquote type=3D"cite" i=
d=3D"fastmail-quoted"><div>=C2=A77.3:<br></div><div><br></div><div>This =
form of specification of URI parameters is not allowed<br></div><div>=E2=
=80=A6<br></div><div>Given that the base resource used to bootstrap the =
JMAP infrastructure already<br></div><div>uses URI templates, it seems t=
hat they would be a good candidate for specifying<br></div><div>a means =
of adding these parameters in a way that respects the basic principle<br=
></div><div>that URI design ownership belongs to the domain administrato=
r.<br></div></blockquote><div><br></div><div>Yes, OK. I have changed thi=
s to be templated instead of specifying query parameters. It now reads:<=
br></div><div><br></div><div>The JMAP Session object has an eventSourceU=
rl property, which is in [@!RFC6570] URI Template (level 1) format. The =
URL MUST contain variables called <code style=3D"border-radius:3px;borde=
r:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,co=
nsolas,monospace;font-size:90%;">types</code>, <code style=3D"border-rad=
ius:3px;border:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font-fa=
mily:menlo,consolas,monospace;font-size:90%;">closeafter</code> and <cod=
e style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;backg=
round:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">ping<=
/code>.<br></div><div><br></div><div>To connect to the resource, the cli=
ent makes an authenticated GET request to the event-source URL with the =
appropriate variables substituted in:<br></div><div><br></div><ul><li><c=
ode style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;bac=
kground:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">typ=
es</code>: This MUST be either:<br></li><ul><li>A comma-separated list o=
f type names, e.g. <code style=3D"border-radius:3px;border:1px solid #cc=
c;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospac=
e;font-size:90%;">Email,CalendarEvent</code>. The server MUST only push =
changes for the types in this list.<br></li><li>The single character: <c=
ode style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;bac=
kground:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">*</=
code>. Changes to all types are pushed.<br></li></ul><li><code style=3D"=
border-radius:3px;border:1px solid #ccc;padding:1px 3px;background:#f6f6=
f6;font-family:menlo,consolas,monospace;font-size:90%;">closeafter</code=
>: This MUST be one of the following values:<br></li><ul><li><code style=
=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;background:#=
f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">state</code>=
: The server MUST end the HTTP response after pushing a state event. Thi=
s can be used by clients in environments where buffering proxies prevent=
 the pushed data from arriving immediately, or indeed at all, when opera=
ting in the usual mode.<br></li><li><code style=3D"border-radius:3px;bor=
der:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,=
consolas,monospace;font-size:90%;">no</code>: The connection is persiste=
d by the server as a standard event-source resource.<br></li></ul><li><c=
ode style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;bac=
kground:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">pin=
g</code>: A positive integer value representing a length of time in seco=
nds, e.g. <code style=3D"border-radius:3px;border:1px solid #ccc;padding=
:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-si=
ze:90%;">300</code>. If non-zero, the server MUST send an event called <=
code style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;ba=
ckground:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">pi=
ng</code> whenever this time elapses since the previous event was sent. =
This MUST NOT set a new event id. If the value is <code style=3D"border-=
radius:3px;border:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font=
-family:menlo,consolas,monospace;font-size:90%;">0</code>&nbsp;the serve=
r MUST NOT send ping events.<br><br>The server MAY modify a requested pi=
ng interval to be subject to a minimum and/or maximum value. For interop=
erability, servers MUST NOT have a minimum allowed value higher than 30 =
or a maximum allowed value less than 300.<br><br>The data for the ping e=
vent MUST be a JSON object containing an <i>interval</i>&nbsp;property, =
the value (type <code style=3D"border-radius:3px;border:1px solid #ccc;p=
adding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospace;f=
ont-size:90%;">PositiveInt</code>) being the interval in seconds the ser=
ver is using to send pings (this may be different to the requested value=
 if the server clamped it to be within a min/max value).<br><br>Clients =
can monitor for the ping event to help determine when the closeafter mod=
e may be required.<br></li></ul><div><br></div><blockquote type=3D"cite"=
 id=3D"fastmail-quoted"><div>The reference for Server-Sent events normat=
ively points to the WHATWG HTML<br></div><div>spec, which changes on a c=
ontinuing basis. I don't think we've really worked<br></div><div>out the=
 mechanics of citing this kind of reference normatively; and JMAP takes<=
br></div><div>the especially dangerous step of citing a specific *sectio=
n* of the document,<br></div><div>which may well change at arbitrary and=
 potentially frequent intervals. There<br></div><div>is, in fact, no gua=
rantee that the cited "text/event-stream" mechanism will<br></div><div>c=
ontinue to exist in future versions of the WHATWG document (cf. the &lt;=
keygen&gt;<br></div><div>element).<br></div><div><br></div><div>In this =
particular case, I think we want to reference<br></div><div><a href=3D"h=
ttps://www.w3.org/TR/eventsource/">https://www.w3.org/TR/eventsource/</a=
> instead.<br></div></blockquote><div><br></div><div>OK, I have updated =
the reference to this instead.<br></div><div><br></div><blockquote type=3D=
"cite" id=3D"fastmail-quoted"><div>=C2=A71.1:<br></div><div>Please use t=
he boilerplate from RFC 8174.<br></div></blockquote><div><br></div><div>=
Done.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-q=
uoted"><div>=C2=A71.2:<br></div><div><br></div><div>&gt;&nbsp; Where "Id=
" is given as a datatype, it means a "String" of at least 1<br></div><di=
v>&gt;&nbsp; and maximum 255 octets in size, and MUST only contain chara=
cters from<br></div><div>&gt;&nbsp; the "URL and Filename safe" Base 64 =
Alphabet, as defined in section 5<br></div><div>&gt;&nbsp; of [RFC4648].=
&nbsp; This is the ASCII alphanumeric characters ("A-Za-<br></div><div>&=
gt;&nbsp; z0-9"), hyphen ("-"), and underscore ("_").<br></div><div><br>=
</div><div>This is unclear as to whether "=3D" is allowed. It is include=
d in the RFC 4648<br></div><div>"URL and Filename safe" alphabet, but no=
t mentioned in this document's<br></div><div>reiteration of that alphabe=
t's definition. If the intention is to exclude "=3D",<br></div><div>plea=
se say so explicitly.<br></div></blockquote><div><br></div><div>Thanks f=
or pointing this out. "=3D" should not be allowed; I have updated the te=
xt to read:<br></div><div><br></div><div>Where <code style=3D"border-rad=
ius:3px;border:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font-fa=
mily:menlo,consolas,monospace;font-size:90%;">Id</code>&nbsp;is given as=
 a datatype, it means a <code style=3D"border-radius:3px;border:1px soli=
d #ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,mon=
ospace;font-size:90%;">String</code>&nbsp;of at least 1 and maximum 255 =
octets in size, and MUST only contain characters from the "URL and Filen=
ame safe" Base 64 Alphabet, as defined in section 5 of [@!RFC4648], excl=
uding the pad character (<code style=3D"border-radius:3px;border:1px sol=
id #ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,mo=
nospace;font-size:90%;">=3D</code>). This means the allowed characters a=
re the ASCII alphanumeric characters (<code style=3D"border-radius:3px;b=
order:1px solid #ccc;padding:1px 3px;background:#f6f6f6;font-family:menl=
o,consolas,monospace;font-size:90%;">A-Za-z0-9</code>), hyphen (<code st=
yle=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;backgroun=
d:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">-</code>)=
, and underscore (<code style=3D"border-radius:3px;border:1px solid #ccc=
;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospace=
;font-size:90%;">_</code>).<br></div><div><br></div><blockquote type=3D"=
cite" id=3D"fastmail-quoted"><div>=C2=A71.2 says:<br></div><div><br></di=
v><div>&gt;&nbsp; All record ids are assigned by the server, and are imm=
utable.<br></div><div><br></div><div>...in which no exceptions are allow=
ed.<br></div><div><br></div><div>=C2=A71.6.3 says:<br></div><div><br></d=
iv><div>&gt;&nbsp; The id of a record is immutable, and normally assigne=
d by the server.<br></div><div><br></div><div>...where "normally" indica=
tes that there will be exceptions. These say different<br></div><div>thi=
ngs. Please change the inaccurate one to match the accurate one.<br></di=
v></blockquote><div><br></div><div>=C2=A71.2 is correct; I have removed =
the word "normally" from =C2=A71.6.3.<br></div><div><br></div><blockquot=
e type=3D"cite" id=3D"fastmail-quoted"><div>----------------------------=
-----------------------------------------------<br></div><div><br></div>=
<div>=C2=A72.1:<br></div><div><br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; "accounts": {<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; "13824": {<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name": "john@example.com",<br>=
</div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp; "isPersonal": true,<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "isReadOnly": false,<br></div><div>&gt;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "hasDataFor":=
 [<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; "urn:ietf:params:jmap:mail",<br></div><div>&gt;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "u=
rn:ietf:params:jmap:contacts"<br></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br></div><div>&gt;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br></div><div><br></div><div>Sectio=
n 1.2 offers the advice:<br></div><div><br></div><div>&gt;&nbsp; In part=
icular, it is wise to avoid:<br></div><div>&gt;<br></div><div>...<br></d=
iv><div>&gt;<br></div><div>&gt;&nbsp; o&nbsp; Ids starting with digits<b=
r></div><div>&gt;<br></div><div>&gt;&nbsp; o&nbsp; Ids that contain only=
 digits<br></div><div><br></div><div>It seems that the examples should c=
onform to the document's advice --<br></div><div>implementors often pay =
more attention to examples than even normative text, much<br></div><div>=
less non-normative advice.<br></div></blockquote><div><br></div><div>Goo=
d point, I have updated the examples.<br></div><div><br></div><blockquot=
e type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A73.2:<br></div><div><br=
></div><div>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 3.&nbsp; A "String" *client id*=
: an arbitrary string from the client to<br></div><div>&gt;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; be echoed back with the responses em=
itted by that method call<br></div><div><br></div><div>I think the docum=
ent wants to say a bit more about the scope of uniqueness for<br></div><=
div>this client ID. Also, the name is a bit confusing, as "Client ID" is=
 most easily<br></div><div>interpreted as "an identifier that identifies=
 a client." This appears to be more<br></div><div>of a "Method ID."<br><=
/div></blockquote><div><br></div><div>I agree the name could be clearer;=
 I have renamed this "method call id". As it is just echoed back by the =
server, there are no uniqueness requirements, although the client will p=
robably want to make it unique within that request if it wants to use it=
.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quote=
d"><div>=C2=A75.7:<br></div><div><br></div><div>&gt;&nbsp; o&nbsp; *keyw=
ords*: "String[Boolean]" (default: ) A set of keywords that<br></div><di=
v><br></div><div>I think you're missing something after "default:" insid=
e the parentheses.<br></div></blockquote><div><br></div><div>Like in JMA=
P Mail this was a markdown error, now fixed. Should have read <code styl=
e=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;background:=
#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">{}</code>.<=
br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"=
><div>As an aside -- and I know this is just an example, but people are =
likely to<br></div><div>follow it when designing things riding on top of=
 JMAP -- I was initially a bit<br></div><div>confused about why this is =
"String[Boolean]" rather than "String[]",<br></div><div>especially since=
 the only valid value appears to be "true". Is this to allow<br></div><d=
iv>for smaller patch operations? If so, text explaining this design deci=
sion<br></div><div>would probably be good.<br></div></blockquote><div><b=
r></div><div>So the datatype is really a Set. Since JSON doesn't have th=
is as a datatype, we can either map it to an Array or to an Object with =
dummy values (all <code style=3D"border-radius:3px;border:1px solid #ccc=
;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monospace=
;font-size:90%;">true</code>&nbsp;in this case). The latter is better be=
cause:<br></div><ol><li>You can use patch syntax to add remove items fro=
m it rather than having to replace the entire set at once.<br></li><li>S=
hows that the order of items is unimportant, making it easier to check f=
or equality.<br></li></ol><div>I've added a short sentence to the exampl=
e to note (1), since this is the most important point.<br></div><div><br=
></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A77.1.1=
:<br></div><div><br></div><div>&gt;&nbsp; It can wait until the call com=
pletes and<br></div><div>&gt;&nbsp; then compare if the new state string=
 after the /set is the same as<br></div><div>&gt;&nbsp; was pushed in th=
e StateChange object; if so, it does not need to<br></div><div>&gt;&nbsp=
; waste a request asking for changes it already knows.<br></div><div><br=
></div><div>I think this phrasing may oversimplify things a bit. For exa=
mple:<br></div><div><br></div><div>- my current cached notion of state i=
s "A"<br></div><div>- I send a /set operation<br></div><div>- I get a "S=
tateChange" that indicates that the new state is "C"<br></div><div>- I g=
et a response to the /set operation indicating that the state has change=
d<br></div><div>&nbsp;&nbsp; from "B" to "C"<br></div><div><br></div><di=
v>The new state after the /set is the same as was pushed in the StateCha=
nge<br></div><div>object; however, I'm still missing state that resulted=
 in the change from "A" to<br></div><div>"B".<br></div></blockquote><div=
><br></div><div>Yes, regardless of the push, a client would have to fetc=
h the changes since A if it received this response to the /set operation=
 in order to bring its cache up to date. However, the common case is tha=
t the set operation happened on the state the client currently has cache=
d, so it can do this optimisation.<br></div><div><br></div><blockquote t=
ype=3D"cite" id=3D"fastmail-quoted"><div>I think the language in this ex=
ample needs to be updated to be more precise<br></div><div>about when su=
ch requests can be omitted.<br></div></blockquote><div><br></div><div>Hm=
m, I'm not convinced it was that unclear to begin with, but anyway I've =
added a sub-clause to clarify this:<br></div><div><br></div><div><i>If t=
he client is itself making changes, it may receive a StateChange object =
while the /set API call is in flight. It can wait until the call complet=
es and then compare if the new state string after the /set is the same a=
s was pushed in the StateChange object; if so, and the old state of the =
/set response matches the client's previous state, it does not need to w=
aste a request asking for changes it already knows.</i><br></div><div><b=
r></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=C2=A77.3:=
<br></div><div><br></div><div>&gt;&nbsp; When a new connection is made t=
o the event-source endpoint, a<br></div><div>&gt;&nbsp; client following=
 the server-sent events specification will send a<br></div><div>&gt;&nbs=
p; Last-Event-ID HTTP header<br></div><div><br></div><div>Nit: "...HTTP =
header field..."<br></div></blockquote><div><br></div><div>Sure, fixed.<=
br></div><div><br></div><div>Neil.<br></div></body></html>
--9d7e49d4f3e94c86b19028873b447cb3--


From nobody Mon Feb 25 19:24:40 2019
Return-Path: <adam@nostrum.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B537E130E6C; Mon, 25 Feb 2019 19:24:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.679
X-Spam-Level: 
X-Spam-Status: No, score=-1.679 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (message has been altered)" header.d=nostrum.com
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 CwT2GQ7JFr9c; Mon, 25 Feb 2019 19:24:25 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8E8C5130E6B; Mon, 25 Feb 2019 19:24:25 -0800 (PST)
Received: from MacBook-Pro.roach.at (99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228]) (authenticated bits=0) by nostrum.com (8.15.2/8.15.2) with ESMTPSA id x1Q3OIom041459 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Mon, 25 Feb 2019 21:24:19 -0600 (CST) (envelope-from adam@nostrum.com)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=nostrum.com; s=default; t=1551151461; bh=cym1UP9jivjddhOj8oBsTuYFG1vVynHbjePHtDpaQpE=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=PwTX0q2YQiuBj8tRhCzcy7LNvMsJz7vBJuv9pBiiJSGPYBKLEYCBdY5PSl1aIdWi8 R/Urhv8R7qFOdMh40hLmzPfY4J6V/CzROFsmnShMAQf/1ZjMOx/raaHWkyGVSAHFUT tkeQcx8vY1x1jsiwyx6uYgvNw05Kw12v9QByl4E0=
X-Authentication-Warning: raven.nostrum.com: Host 99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228] claimed to be MacBook-Pro.roach.at
To: Neil Jenkins <neilj@fastmailteam.com>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, Bron Gondwana <brong@fastmailteam.com>, jmap-chairs@ietf.org, IETF JMAP Mailing List <jmap@ietf.org>
References: <155113073593.10703.12727745979647687835.idtracker@ietfa.amsl.com> <6905eeea-f52d-4759-9ed9-8b1a6e9e12d9@beta.fastmail.com>
From: Adam Roach <adam@nostrum.com>
Message-ID: <a2c5c28f-4242-d28f-2f2c-7f6e59c25551@nostrum.com>
Date: Mon, 25 Feb 2019 21:24:12 -0600
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.5.0
MIME-Version: 1.0
In-Reply-To: <6905eeea-f52d-4759-9ed9-8b1a6e9e12d9@beta.fastmail.com>
Content-Type: multipart/alternative; boundary="------------A449B067BADDCF870B857C18"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/B4cskpXu0YtlCrvcTnr6ZJsQelc>
Subject: Re: [Jmap] Adam Roach's Discuss on draft-ietf-jmap-core-14: (with DISCUSS and COMMENT)
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Feb 2019 03:24:33 -0000

This is a multi-part message in MIME format.
--------------A449B067BADDCF870B857C18
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Thanks. This all looks good, presuming section 2.1 is updated to match 
the new normative language in section 7.3. I'll clear my discusses when 
the next version of the documents are uploaded to the i-d repository.

/a


On 2/25/19 7:47 PM, Neil Jenkins wrote:
> Thanks again for the detailed feedback Adam.
>
> On Tue, 26 Feb 2019, at 08:39, Adam Roach wrote:
>> §7.3:
>>
>> This form of specification of URI parameters is not allowed
>> …
>> Given that the base resource used to bootstrap the JMAP 
>> infrastructure already
>> uses URI templates, it seems that they would be a good candidate for 
>> specifying
>> a means of adding these parameters in a way that respects the basic 
>> principle
>> that URI design ownership belongs to the domain administrator.
>
> Yes, OK. I have changed this to be templated instead of specifying 
> query parameters. It now reads:
>
> The JMAP Session object has an eventSourceUrl property, which is in 
> [@!RFC6570] URI Template (level 1) format. The URL MUST contain 
> variables called |types|, |closeafter| and |ping|.
>
> To connect to the resource, the client makes an authenticated GET 
> request to the event-source URL with the appropriate variables 
> substituted in:
>
>   * |types|: This MUST be either:
>       o A comma-separated list of type names, e.g.
>         |Email,CalendarEvent|. The server MUST only push changes for
>         the types in this list.
>       o The single character: |*|. Changes to all types are pushed.
>   * |closeafter|: This MUST be one of the following values:
>       o |state|: The server MUST end the HTTP response after pushing a
>         state event. This can be used by clients in environments where
>         buffering proxies prevent the pushed data from arriving
>         immediately, or indeed at all, when operating in the usual mode.
>       o |no|: The connection is persisted by the server as a standard
>         event-source resource.
>   * |ping|: A positive integer value representing a length of time in
>     seconds, e.g. |300|. If non-zero, the server MUST send an event
>     called |ping| whenever this time elapses since the previous event
>     was sent. This MUST NOT set a new event id. If the value is
>     |0| the server MUST NOT send ping events.
>
>     The server MAY modify a requested ping interval to be subject to a
>     minimum and/or maximum value. For interoperability, servers MUST
>     NOT have a minimum allowed value higher than 30 or a maximum
>     allowed value less than 300.
>
>     The data for the ping event MUST be a JSON object containing an
>     /interval/ property, the value (type |PositiveInt|) being the
>     interval in seconds the server is using to send pings (this may be
>     different to the requested value if the server clamped it to be
>     within a min/max value).
>
>     Clients can monitor for the ping event to help determine when the
>     closeafter mode may be required.
>
>
>> The reference for Server-Sent events normatively points to the WHATWG 
>> HTML
>> spec, which changes on a continuing basis. I don't think we've really 
>> worked
>> out the mechanics of citing this kind of reference normatively; and 
>> JMAP takes
>> the especially dangerous step of citing a specific *section* of the 
>> document,
>> which may well change at arbitrary and potentially frequent 
>> intervals. There
>> is, in fact, no guarantee that the cited "text/event-stream" 
>> mechanism will
>> continue to exist in future versions of the WHATWG document (cf. the 
>> <keygen>
>> element).
>>
>> In this particular case, I think we want to reference
>> https://www.w3.org/TR/eventsource/ instead.
>
> OK, I have updated the reference to this instead.
>
>> §1.1:
>> Please use the boilerplate from RFC 8174.
>
> Done.
>
>> §1.2:
>>
>> >  Where "Id" is given as a datatype, it means a "String" of at least 1
>> >  and maximum 255 octets in size, and MUST only contain characters from
>> >  the "URL and Filename safe" Base 64 Alphabet, as defined in section 5
>> >  of [RFC4648].  This is the ASCII alphanumeric characters ("A-Za-
>> >  z0-9"), hyphen ("-"), and underscore ("_").
>>
>> This is unclear as to whether "=" is allowed. It is included in the 
>> RFC 4648
>> "URL and Filename safe" alphabet, but not mentioned in this document's
>> reiteration of that alphabet's definition. If the intention is to 
>> exclude "=",
>> please say so explicitly.
>
> Thanks for pointing this out. "=" should not be allowed; I have 
> updated the text to read:
>
> Where |Id| is given as a datatype, it means a |String| of at least 1 
> and maximum 255 octets in size, and MUST only contain characters from 
> the "URL and Filename safe" Base 64 Alphabet, as defined in section 5 
> of [@!RFC4648], excluding the pad character (|=|). This means the 
> allowed characters are the ASCII alphanumeric characters 
> (|A-Za-z0-9|), hyphen (|-|), and underscore (|_|).
>
>> §1.2 says:
>>
>> >  All record ids are assigned by the server, and are immutable.
>>
>> ...in which no exceptions are allowed.
>>
>> §1.6.3 says:
>>
>> >  The id of a record is immutable, and normally assigned by the server.
>>
>> ...where "normally" indicates that there will be exceptions. These 
>> say different
>> things. Please change the inaccurate one to match the accurate one.
>
> §1.2 is correct; I have removed the word "normally" from §1.6.3.
>
>> ---------------------------------------------------------------------------
>>
>> §2.1:
>>
>> >       "accounts": {
>> >         "13824": {
>> >           "name": "john@example.com",
>> >           "isPersonal": true,
>> >           "isReadOnly": false,
>> >           "hasDataFor": [
>> >             "urn:ietf:params:jmap:mail",
>> >             "urn:ietf:params:jmap:contacts"
>> >           ]
>> >         },
>>
>> Section 1.2 offers the advice:
>>
>> >  In particular, it is wise to avoid:
>> >
>> ...
>> >
>> >  o  Ids starting with digits
>> >
>> >  o  Ids that contain only digits
>>
>> It seems that the examples should conform to the document's advice --
>> implementors often pay more attention to examples than even normative 
>> text, much
>> less non-normative advice.
>
> Good point, I have updated the examples.
>
>> §3.2:
>>
>> >     3.  A "String" *client id*: an arbitrary string from the client to
>> >         be echoed back with the responses emitted by that method call
>>
>> I think the document wants to say a bit more about the scope of 
>> uniqueness for
>> this client ID. Also, the name is a bit confusing, as "Client ID" is 
>> most easily
>> interpreted as "an identifier that identifies a client." This appears 
>> to be more
>> of a "Method ID."
>
> I agree the name could be clearer; I have renamed this "method call 
> id". As it is just echoed back by the server, there are no uniqueness 
> requirements, although the client will probably want to make it unique 
> within that request if it wants to use it.
>
>> §5.7:
>>
>> >  o  *keywords*: "String[Boolean]" (default: ) A set of keywords that
>>
>> I think you're missing something after "default:" inside the parentheses.
>
> Like in JMAP Mail this was a markdown error, now fixed. Should have 
> read |{}|.
>
>> As an aside -- and I know this is just an example, but people are 
>> likely to
>> follow it when designing things riding on top of JMAP -- I was 
>> initially a bit
>> confused about why this is "String[Boolean]" rather than "String[]",
>> especially since the only valid value appears to be "true". Is this 
>> to allow
>> for smaller patch operations? If so, text explaining this design decision
>> would probably be good.
>
> So the datatype is really a Set. Since JSON doesn't have this as a 
> datatype, we can either map it to an Array or to an Object with dummy 
> values (all |true| in this case). The latter is better because:
>
>  1. You can use patch syntax to add remove items from it rather than
>     having to replace the entire set at once.
>  2. Shows that the order of items is unimportant, making it easier to
>     check for equality.
>
> I've added a short sentence to the example to note (1), since this is 
> the most important point.
>
>> §7.1.1:
>>
>> >  It can wait until the call completes and
>> >  then compare if the new state string after the /set is the same as
>> >  was pushed in the StateChange object; if so, it does not need to
>> >  waste a request asking for changes it already knows.
>>
>> I think this phrasing may oversimplify things a bit. For example:
>>
>> - my current cached notion of state is "A"
>> - I send a /set operation
>> - I get a "StateChange" that indicates that the new state is "C"
>> - I get a response to the /set operation indicating that the state 
>> has changed
>>    from "B" to "C"
>>
>> The new state after the /set is the same as was pushed in the StateChange
>> object; however, I'm still missing state that resulted in the change 
>> from "A" to
>> "B".
>
> Yes, regardless of the push, a client would have to fetch the changes 
> since A if it received this response to the /set operation in order to 
> bring its cache up to date. However, the common case is that the set 
> operation happened on the state the client currently has cached, so it 
> can do this optimisation.
>
>> I think the language in this example needs to be updated to be more 
>> precise
>> about when such requests can be omitted.
>
> Hmm, I'm not convinced it was that unclear to begin with, but anyway 
> I've added a sub-clause to clarify this:
>
> /If the client is itself making changes, it may receive a StateChange 
> object while the /set API call is in flight. It can wait until the 
> call completes and then compare if the new state string after the /set 
> is the same as was pushed in the StateChange object; if so, and the 
> old state of the /set response matches the client's previous state, it 
> does not need to waste a request asking for changes it already knows./
>
>> §7.3:
>>
>> >  When a new connection is made to the event-source endpoint, a
>> >  client following the server-sent events specification will send a
>> >  Last-Event-ID HTTP header
>>
>> Nit: "...HTTP header field..."
>
> Sure, fixed.
>
> Neil.



--------------A449B067BADDCF870B857C18
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Thanks. This all looks good, presuming
      section 2.1 is updated to match the new normative language in
      section 7.3. I'll clear my discusses when the next version of the
      documents are uploaded to the i-d repository.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">/a<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 2/25/19 7:47 PM, Neil Jenkins wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:6905eeea-f52d-4759-9ed9-8b1a6e9e12d9@beta.fastmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <title></title>
      <style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
      <div>Thanks again for the detailed feedback Adam.<br>
      </div>
      <div><br>
      </div>
      <div>On Tue, 26 Feb 2019, at 08:39, Adam Roach wrote:<br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§7.3:<br>
        </div>
        <div><br>
        </div>
        <div>This form of specification of URI parameters is not allowed<br>
        </div>
        <div>…<br>
        </div>
        <div>Given that the base resource used to bootstrap the JMAP
          infrastructure already<br>
        </div>
        <div>uses URI templates, it seems that they would be a good
          candidate for specifying<br>
        </div>
        <div>a means of adding these parameters in a way that respects
          the basic principle<br>
        </div>
        <div>that URI design ownership belongs to the domain
          administrator.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Yes, OK. I have changed this to be templated instead of
        specifying query parameters. It now reads:<br>
      </div>
      <div><br>
      </div>
      <div>The JMAP Session object has an eventSourceUrl property, which
        is in [@!RFC6570] URI Template (level 1) format. The URL MUST
        contain variables called <code
          style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">types</code>,
        <code style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">closeafter</code>
        and <code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">ping</code>.<br>
      </div>
      <div><br>
      </div>
      <div>To connect to the resource, the client makes an authenticated
        GET request to the event-source URL with the appropriate
        variables substituted in:<br>
      </div>
      <div><br>
      </div>
      <ul>
        <li><code style="border-radius:3px;border:1px solid
            #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">types</code>:
          This MUST be either:<br>
        </li>
        <ul>
          <li>A comma-separated list of type names, e.g. <code
              style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">Email,CalendarEvent</code>.
            The server MUST only push changes for the types in this
            list.<br>
          </li>
          <li>The single character: <code
              style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">*</code>.
            Changes to all types are pushed.<br>
          </li>
        </ul>
        <li><code style="border-radius:3px;border:1px solid
            #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">closeafter</code>:
          This MUST be one of the following values:<br>
        </li>
        <ul>
          <li><code style="border-radius:3px;border:1px solid
              #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">state</code>:
            The server MUST end the HTTP response after pushing a state
            event. This can be used by clients in environments where
            buffering proxies prevent the pushed data from arriving
            immediately, or indeed at all, when operating in the usual
            mode.<br>
          </li>
          <li><code style="border-radius:3px;border:1px solid
              #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">no</code>:
            The connection is persisted by the server as a standard
            event-source resource.<br>
          </li>
        </ul>
        <li><code style="border-radius:3px;border:1px solid
            #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">ping</code>:
          A positive integer value representing a length of time in
          seconds, e.g. <code style="border-radius:3px;border:1px solid
            #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">300</code>.
          If non-zero, the server MUST send an event called <code
            style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">ping</code>
          whenever this time elapses since the previous event was sent.
          This MUST NOT set a new event id. If the value is <code
            style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">0</code> the
          server MUST NOT send ping events.<br>
          <br>
          The server MAY modify a requested ping interval to be subject
          to a minimum and/or maximum value. For interoperability,
          servers MUST NOT have a minimum allowed value higher than 30
          or a maximum allowed value less than 300.<br>
          <br>
          The data for the ping event MUST be a JSON object containing
          an <i>interval</i> property, the value (type <code
            style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">PositiveInt</code>)
          being the interval in seconds the server is using to send
          pings (this may be different to the requested value if the
          server clamped it to be within a min/max value).<br>
          <br>
          Clients can monitor for the ping event to help determine when
          the closeafter mode may be required.<br>
        </li>
      </ul>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>The reference for Server-Sent events normatively points to
          the WHATWG HTML<br>
        </div>
        <div>spec, which changes on a continuing basis. I don't think
          we've really worked<br>
        </div>
        <div>out the mechanics of citing this kind of reference
          normatively; and JMAP takes<br>
        </div>
        <div>the especially dangerous step of citing a specific
          *section* of the document,<br>
        </div>
        <div>which may well change at arbitrary and potentially frequent
          intervals. There<br>
        </div>
        <div>is, in fact, no guarantee that the cited
          "text/event-stream" mechanism will<br>
        </div>
        <div>continue to exist in future versions of the WHATWG document
          (cf. the &lt;keygen&gt;<br>
        </div>
        <div>element).<br>
        </div>
        <div><br>
        </div>
        <div>In this particular case, I think we want to reference<br>
        </div>
        <div><a href="https://www.w3.org/TR/eventsource/"
            moz-do-not-send="true">https://www.w3.org/TR/eventsource/</a>
          instead.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>OK, I have updated the reference to this instead.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§1.1:<br>
        </div>
        <div>Please use the boilerplate from RFC 8174.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Done.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§1.2:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  Where "Id" is given as a datatype, it means a
          "String" of at least 1<br>
        </div>
        <div>&gt;  and maximum 255 octets in size, and MUST only contain
          characters from<br>
        </div>
        <div>&gt;  the "URL and Filename safe" Base 64 Alphabet, as
          defined in section 5<br>
        </div>
        <div>&gt;  of [RFC4648].  This is the ASCII alphanumeric
          characters ("A-Za-<br>
        </div>
        <div>&gt;  z0-9"), hyphen ("-"), and underscore ("_").<br>
        </div>
        <div><br>
        </div>
        <div>This is unclear as to whether "=" is allowed. It is
          included in the RFC 4648<br>
        </div>
        <div>"URL and Filename safe" alphabet, but not mentioned in this
          document's<br>
        </div>
        <div>reiteration of that alphabet's definition. If the intention
          is to exclude "=",<br>
        </div>
        <div>please say so explicitly.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Thanks for pointing this out. "=" should not be allowed; I
        have updated the text to read:<br>
      </div>
      <div><br>
      </div>
      <div>Where <code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">Id</code> is
        given as a datatype, it means a <code
          style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">String</code> of
        at least 1 and maximum 255 octets in size, and MUST only contain
        characters from the "URL and Filename safe" Base 64 Alphabet, as
        defined in section 5 of [@!RFC4648], excluding the pad character
        (<code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">=</code>).
        This means the allowed characters are the ASCII alphanumeric
        characters (<code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">A-Za-z0-9</code>),
        hyphen (<code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">-</code>),
        and underscore (<code style="border-radius:3px;border:1px solid
          #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">_</code>).<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§1.2 says:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  All record ids are assigned by the server, and are
          immutable.<br>
        </div>
        <div><br>
        </div>
        <div>...in which no exceptions are allowed.<br>
        </div>
        <div><br>
        </div>
        <div>§1.6.3 says:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  The id of a record is immutable, and normally
          assigned by the server.<br>
        </div>
        <div><br>
        </div>
        <div>...where "normally" indicates that there will be
          exceptions. These say different<br>
        </div>
        <div>things. Please change the inaccurate one to match the
          accurate one.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>§1.2 is correct; I have removed the word "normally" from
        §1.6.3.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>---------------------------------------------------------------------------<br>
        </div>
        <div><br>
        </div>
        <div>§2.1:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;       "accounts": {<br>
        </div>
        <div>&gt;         "13824": {<br>
        </div>
        <div>&gt;           "name": <a class="moz-txt-link-rfc2396E" href="mailto:john@example.com">"john@example.com"</a>,<br>
        </div>
        <div>&gt;           "isPersonal": true,<br>
        </div>
        <div>&gt;           "isReadOnly": false,<br>
        </div>
        <div>&gt;           "hasDataFor": [<br>
        </div>
        <div>&gt;             "urn:ietf:params:jmap:mail",<br>
        </div>
        <div>&gt;             "urn:ietf:params:jmap:contacts"<br>
        </div>
        <div>&gt;           ]<br>
        </div>
        <div>&gt;         },<br>
        </div>
        <div><br>
        </div>
        <div>Section 1.2 offers the advice:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  In particular, it is wise to avoid:<br>
        </div>
        <div>&gt;<br>
        </div>
        <div>...<br>
        </div>
        <div>&gt;<br>
        </div>
        <div>&gt;  o  Ids starting with digits<br>
        </div>
        <div>&gt;<br>
        </div>
        <div>&gt;  o  Ids that contain only digits<br>
        </div>
        <div><br>
        </div>
        <div>It seems that the examples should conform to the document's
          advice --<br>
        </div>
        <div>implementors often pay more attention to examples than even
          normative text, much<br>
        </div>
        <div>less non-normative advice.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Good point, I have updated the examples.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§3.2:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;     3.  A "String" *client id*: an arbitrary string
          from the client to<br>
        </div>
        <div>&gt;         be echoed back with the responses emitted by
          that method call<br>
        </div>
        <div><br>
        </div>
        <div>I think the document wants to say a bit more about the
          scope of uniqueness for<br>
        </div>
        <div>this client ID. Also, the name is a bit confusing, as
          "Client ID" is most easily<br>
        </div>
        <div>interpreted as "an identifier that identifies a client."
          This appears to be more<br>
        </div>
        <div>of a "Method ID."<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>I agree the name could be clearer; I have renamed this
        "method call id". As it is just echoed back by the server, there
        are no uniqueness requirements, although the client will
        probably want to make it unique within that request if it wants
        to use it.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§5.7:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  o  *keywords*: "String[Boolean]" (default: ) A set of
          keywords that<br>
        </div>
        <div><br>
        </div>
        <div>I think you're missing something after "default:" inside
          the parentheses.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Like in JMAP Mail this was a markdown error, now fixed.
        Should have read <code style="border-radius:3px;border:1px
          solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">{}</code>.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>As an aside -- and I know this is just an example, but
          people are likely to<br>
        </div>
        <div>follow it when designing things riding on top of JMAP -- I
          was initially a bit<br>
        </div>
        <div>confused about why this is "String[Boolean]" rather than
          "String[]",<br>
        </div>
        <div>especially since the only valid value appears to be "true".
          Is this to allow<br>
        </div>
        <div>for smaller patch operations? If so, text explaining this
          design decision<br>
        </div>
        <div>would probably be good.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>So the datatype is really a Set. Since JSON doesn't have this
        as a datatype, we can either map it to an Array or to an Object
        with dummy values (all <code
          style="border-radius:3px;border:1px solid #ccc;padding:1px
3px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">true</code> in
        this case). The latter is better because:<br>
      </div>
      <ol>
        <li>You can use patch syntax to add remove items from it rather
          than having to replace the entire set at once.<br>
        </li>
        <li>Shows that the order of items is unimportant, making it
          easier to check for equality.<br>
        </li>
      </ol>
      <div>I've added a short sentence to the example to note (1), since
        this is the most important point.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§7.1.1:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  It can wait until the call completes and<br>
        </div>
        <div>&gt;  then compare if the new state string after the /set
          is the same as<br>
        </div>
        <div>&gt;  was pushed in the StateChange object; if so, it does
          not need to<br>
        </div>
        <div>&gt;  waste a request asking for changes it already knows.<br>
        </div>
        <div><br>
        </div>
        <div>I think this phrasing may oversimplify things a bit. For
          example:<br>
        </div>
        <div><br>
        </div>
        <div>- my current cached notion of state is "A"<br>
        </div>
        <div>- I send a /set operation<br>
        </div>
        <div>- I get a "StateChange" that indicates that the new state
          is "C"<br>
        </div>
        <div>- I get a response to the /set operation indicating that
          the state has changed<br>
        </div>
        <div>   from "B" to "C"<br>
        </div>
        <div><br>
        </div>
        <div>The new state after the /set is the same as was pushed in
          the StateChange<br>
        </div>
        <div>object; however, I'm still missing state that resulted in
          the change from "A" to<br>
        </div>
        <div>"B".<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Yes, regardless of the push, a client would have to fetch the
        changes since A if it received this response to the /set
        operation in order to bring its cache up to date. However, the
        common case is that the set operation happened on the state the
        client currently has cached, so it can do this optimisation.<br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>I think the language in this example needs to be updated to
          be more precise<br>
        </div>
        <div>about when such requests can be omitted.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Hmm, I'm not convinced it was that unclear to begin with, but
        anyway I've added a sub-clause to clarify this:<br>
      </div>
      <div><br>
      </div>
      <div><i>If the client is itself making changes, it may receive a
          StateChange object while the /set API call is in flight. It
          can wait until the call completes and then compare if the new
          state string after the /set is the same as was pushed in the
          StateChange object; if so, and the old state of the /set
          response matches the client's previous state, it does not need
          to waste a request asking for changes it already knows.</i><br>
      </div>
      <div><br>
      </div>
      <blockquote type="cite" id="fastmail-quoted">
        <div>§7.3:<br>
        </div>
        <div><br>
        </div>
        <div>&gt;  When a new connection is made to the event-source
          endpoint, a<br>
        </div>
        <div>&gt;  client following the server-sent events specification
          will send a<br>
        </div>
        <div>&gt;  Last-Event-ID HTTP header<br>
        </div>
        <div><br>
        </div>
        <div>Nit: "...HTTP header field..."<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Sure, fixed.<br>
      </div>
      <div><br>
      </div>
      <div>Neil.<br>
      </div>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>

--------------A449B067BADDCF870B857C18--


From nobody Mon Feb 25 19:38:15 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E5CE6130E74; Mon, 25 Feb 2019 19:38:13 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=XbgloQfe; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=50e6SFdO
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 tXA_dZiKF3AE; Mon, 25 Feb 2019 19:38:12 -0800 (PST)
Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C65BA130E6E; Mon, 25 Feb 2019 19:38:12 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id A20563200; Mon, 25 Feb 2019 22:38:11 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Mon, 25 Feb 2019 22:38:12 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=W9dOklSWa61uTegZq1pvsHJEc rT8bjY2Rg4543jJzms=; b=XbgloQfex8lIiYBbtRQF6KMYz+2FoJFqP2Xmw9dro pxXCF92as4ZBHA0MdfEXLIhNipysVQWKVRcqJXyrTza74gneEdNtuhmftrLl6/vA iDfgYDdxT4W5tiUq4IiVwXWEt/aSZcgBCDdSMFnSnBuGiDPTXQfvD3b71kpoLhwy iRxtMWJ2F1S2/J4GCKP8Sx0WumKp/lCXdD6a+112yUm3FesyagWSNu7ofu2iA1ku 6NlNs4bjKsKrk3TkuV4N4dQRmKiS59f+cg5YGwgvT1XipNmtyCUsWjRVKxA7t3x6 9RFpFRzysPfhD3a1VldDqGLK2S+KZEaUaioqPzARS7KrQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=W9dOklSWa61uTegZq 1pvsHJEcrT8bjY2Rg4543jJzms=; b=50e6SFdORl1jA5hgPclmrtxl/5TO+fehL csEJNv83eO17Lta5JpAOu+4a2Ib2fE/yeRMlYhTgithphFZU5UxcvUrAsAJdzBhL w+IxZNDCnMmQ1rKXiC6s2VtXHpo6BlQ3uW7vKZ3kYA5otZxnATGHxWmOaMFPvXnt dIslO+p91IXJ1fR0kq7iERdaYrMdhyZ0RlD8enplV1x9tskTqshBEVgyTCxdyuSF r9sSj0LasNp1nslm4x5Wf4h9uGbMp62+R48Ev7/rlGY/DNYI6Kvy6lOrm4bqrPfW 4GqxxxJF0Bu9UyxaBxOkuUoHNSI/2zBxJMeGgHzs83KKFRAvS5GfA==
X-ME-Sender: <xms:orR0XH8ju7KePUE-4yDZYKSsW5IjDsIK5jY4khtOFVQIZCwP6Xbxpg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrudekgdeivdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgfkjghffffhvffutgesrgdtreerreerjeenucfhrhhomhepfdfpvghilhcu lfgvnhhkihhnshdfuceonhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhmqeenuc ffohhmrghinhepuggvvhhitggvqdhiugdrtghomhdprggtmhgvrdgtohhmnecurfgrrhgr mhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomhenuc evlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:orR0XL6JbuW3OnN8G26pZGHj5tHaviCqCtm0FFC-3eS4HsRUiMG9xQ> <xmx:orR0XMVrQr6d7e2VpuFbnX6vKnkCjarj7qwKFUK2jb1kRGcXayHoUQ> <xmx:orR0XBIHqC6ZKYPNBWtM1LmpcKKtL99LLLvSc62CCs_w2C6FRj5piQ> <xmx:o7R0XGmOz-8VSXeg3qVwW5AHOUYO8-ud_N4HlsWhJ4mFNI9VUgIMfQ>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id A013B20320; Mon, 25 Feb 2019 22:38:10 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-895-g0d23ba6-fmstable-20190213v1
X-Me-Personality: 64588216
Message-Id: <f56b166a-a712-43d0-b6fc-ab9c02f63e19@beta.fastmail.com>
In-Reply-To: <BD06AEA1-AAFC-46BB-ABBA-1C0EC3E50337@cooperw.in>
References: <155069147829.31490.10165764411800945653.idtracker@ietfa.amsl.com> <8f1bad75-13a0-4c66-9c84-eddb5eb3ff41@beta.fastmail.com> <BD06AEA1-AAFC-46BB-ABBA-1C0EC3E50337@cooperw.in>
Date: Mon, 25 Feb 2019 22:38:09 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Alissa Cooper" <alissa@cooperw.in>
Cc: iesg <iesg@ietf.org>, draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=3181dda041ff409bb1ea69ed2260a97c
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/adfLJhuh1NkTjtI5pVjCU4_XNUE>
Subject: Re: [Jmap]  =?utf-8?q?Alissa_Cooper=27s_Discuss_on_draft-ietf-jmap-co?= =?utf-8?q?re-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Feb 2019 03:38:14 -0000

--3181dda041ff409bb1ea69ed2260a97c
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

On Sat, 23 Feb 2019, at 03:43, Alissa Cooper wrote:
>>> Some JMAP servers may have device IDs for other reasons anyway, but =
setting this up this way seems like it opens the door for clients to unn=
ecessarily share device IDs with JMAP servers in other cases.
>>=20
>> The suggestion is to use a secure hash of a vendor string and device =
id, in which case it's unlikely to reveal useful information about the d=
evice id (presuming this id itself has sufficient entropy), but it's pos=
sible clients would do something else.
>=20
> Right, historically this is the kind of thing where some clients just =
send the raw device ID, which becomes a vector for tracking. I would fee=
l more comfortable if there was a normative recommendation to use the sc=
heme you suggest or something with equivalent obfuscation properties. Bu=
t given your =E2=80=98Yes=E2=80=99 above, I don=E2=80=99t see how that w=
orks. Two clients from the same vendor on the same device will send the =
same ID. Isn=E2=80=99t that a problem?

The intention is you would use a string unique to your app that cannot c=
onflict with another vendor. For example, suppose you were ACME Inc, and=
 owned domain acme.com, and produced both a Mail app and a Calendar app.=
 You might do something like this for your mail app:

sha256( device-id . "com.acme.mail" )

and like this for your calendar app:

sha256( device-id . "com.acme.calendar" )

What if I change the current wording:

*A secure hash that includes both a device id and vendor id is one way t=
his could be achieved.*

to a stronger:

*It is RECOMMENDED to use a secure hash of a device id concatenated with=
 a custom vendor/app id. **To protect the privacy of the user, id MUST N=
OT contain an unobfuscated device id.*

Would that work for you?

Neil.
--3181dda041ff409bb1ea69ed2260a97c
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Sat, 23=
 Feb 2019, at 03:43, Alissa Cooper wrote:<br></div><blockquote id=3D"fas=
tmail-quoted" type=3D"cite"><div><blockquote type=3D"cite" class=3D"fast=
mail-quoted-"><div class=3D"fastmail-quoted-"><blockquote id=3D"fastmail=
-quoted-fastmail-quoted" type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:norm=
al;letter-spacing:normal;text-align:start;text-indent:0px;text-transform=
:none;white-space:normal;word-spacing:0px;text-size-adjust:auto;-webkit-=
text-stroke-width:0px;text-decoration-line:none;text-decoration-style:in=
itial;text-decoration-color:initial;" class=3D"fastmail-quoted-"><div cl=
ass=3D"fastmail-quoted-">Some JMAP servers may have device IDs for other=
 reasons anyway, but setting this up this way seems like it opens the do=
or for clients to unnecessarily share device IDs with JMAP servers in ot=
her cases.<br></div></blockquote><div style=3D"font-family:Helvetica;fon=
t-size:12px;font-style:normal;font-variant-caps:normal;font-weight:norma=
l;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:=
none;white-space:normal;word-spacing:0px;-webkit-text-stroke-width:0px;t=
ext-decoration-line:none;text-decoration-style:initial;text-decoration-c=
olor:initial;" class=3D"fastmail-quoted-"><br></div><div style=3D"font-f=
amily:Helvetica;font-size:12px;font-style:normal;font-variant-caps:norma=
l;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:=
0px;text-transform:none;white-space:normal;word-spacing:0px;-webkit-text=
-stroke-width:0px;text-decoration-line:none;text-decoration-style:initia=
l;text-decoration-color:initial;" class=3D"fastmail-quoted-">The suggest=
ion is to use a secure hash of a vendor string and device id, in which c=
ase it's unlikely to reveal useful information about the device id (pres=
uming this id itself has sufficient entropy), but it's possible clients =
would do something else.<br></div></div></blockquote><div><br></div><div=
>Right, historically this is the kind of thing where some clients just s=
end the raw device ID, which becomes a vector for tracking. I would feel=
 more comfortable if there was a normative recommendation to use the sch=
eme you suggest or something with equivalent obfuscation properties. But=
 given your =E2=80=98Yes=E2=80=99 above, I don=E2=80=99t see how that wo=
rks. Two clients from the same vendor on the same device will send the s=
ame ID. Isn=E2=80=99t that a problem?<br></div></div></blockquote><div><=
br></div><div>The intention is you would use a string unique to your app=
 that cannot conflict with another vendor. For example, suppose you were=
 ACME Inc, and owned domain acme.com, and produced both a Mail app and a=
 Calendar app. You might do something like this for your mail app:<br></=
div><div><br></div><pre style=3D"margin-top:7px;margin-right:0px;margin-=
bottom:7px;margin-left:0px;border-top-left-radius:3px;border-top-right-r=
adius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;b=
order-top-width:1px;border-right-width:1px;border-bottom-width:1px;borde=
r-left-width:1px;border-top-style:solid;border-right-style:solid;border-=
bottom-style:solid;border-left-style:solid;border-top-color:rgb(204, 204=
, 204);border-right-color:rgb(204, 204, 204);border-bottom-color:rgb(204=
, 204, 204);border-left-color:rgb(204, 204, 204);border-image-source:ini=
tial;border-image-slice:initial;border-image-width:initial;border-image-=
outset:initial;border-image-repeat:initial;padding-top:7px;padding-right=
:10px;padding-bottom:7px;padding-left:10px;background-image:initial;back=
ground-position-x:initial;background-position-y:initial;background-size:=
initial;background-repeat:initial;background-repeat:initial;background-a=
ttachment:initial;background-origin:initial;background-clip:initial;back=
ground-color:rgb(246, 246, 246);font-family:menlo, consolas, monospace;f=
ont-size:90%;white-space:pre-wrap;overflow-wrap:break-word;">sha256( dev=
ice-id . "com.acme.mail" )<br></pre><div><br></div><div>and like this fo=
r your calendar app:<br></div><div><br></div><pre style=3D"margin-top:7p=
x;margin-right:0px;margin-bottom:7px;margin-left:0px;border-top-left-rad=
ius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;borde=
r-bottom-left-radius:3px;border-top-width:1px;border-right-width:1px;bor=
der-bottom-width:1px;border-left-width:1px;border-top-style:solid;border=
-right-style:solid;border-bottom-style:solid;border-left-style:solid;bor=
der-top-color:rgb(204, 204, 204);border-right-color:rgb(204, 204, 204);b=
order-bottom-color:rgb(204, 204, 204);border-left-color:rgb(204, 204, 20=
4);border-image-source:initial;border-image-slice:initial;border-image-w=
idth:initial;border-image-outset:initial;border-image-repeat:initial;pad=
ding-top:7px;padding-right:10px;padding-bottom:7px;padding-left:10px;bac=
kground-image:initial;background-position-x:initial;background-position-=
y:initial;background-size:initial;background-repeat:initial;background-r=
epeat:initial;background-attachment:initial;background-origin:initial;ba=
ckground-clip:initial;background-color:rgb(246, 246, 246);font-family:me=
nlo, consolas, monospace;font-size:90%;white-space:pre-wrap;overflow-wra=
p:break-word;">sha256( device-id . "com.acme.calendar" )<br></pre><div><=
br></div><div>What if I change the current wording:<br></div><div><br></=
div><div><i>A secure hash that includes both a device id and vendor id i=
s one way this could be achieved.</i><br></div><div><br></div><div>to a =
stronger:<br></div><div><br></div><div><i>It is RECOMMENDED to use a sec=
ure hash of a device id concatenated with a custom vendor/app id.&nbsp;<=
/i><i>To protect the privacy of the user, id MUST NOT contain an unobfus=
cated device id.</i></div><div><br></div><div>Would that work for you?</=
div><div><br></div><div>Neil.</div></body></html>
--3181dda041ff409bb1ea69ed2260a97c--


From nobody Wed Feb 27 07:41:47 2019
Return-Path: <raphael.ouazana@linagora.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0DF8A128CE4 for <jmap@ietfa.amsl.com>; Wed, 27 Feb 2019 07:41:46 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.301
X-Spam-Level: 
X-Spam-Status: No, score=-4.301 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=smtpcorp.com header.b=ZVAxrjna; dkim=pass (2048-bit key) header.d=linagora.com header.b=ayAL+DEt
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 rcV_aqQkZZZ8 for <jmap@ietfa.amsl.com>; Wed, 27 Feb 2019 07:41:43 -0800 (PST)
Received: from e2i64.smtp2go.com (e2i64.smtp2go.com [103.2.140.64]) (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 502BC130FFB for <jmap@ietf.org>; Wed, 27 Feb 2019 07:41:41 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpcorp.com; s=a1-4; h=Feedback-ID:X-Smtpcorp-Track:Message-ID:Subject:To: From:Date:Reply-To:Sender:List-Unsubscribe; bh=wh/UKbLkBOvaIsrQg+THydaH0XMN2xe6S6Ga9nil18I=; b=ZVAxrjna5RGrdMIgnnUF3A3qiU 1w7Pc4ySB2PpL9TqU+Jh++YLSOqqAig6vqnySq9yNJj+ySKJsSau/u7iygmk2sBbGGZHb6y3XboVB wLR9f8wIOzb4uQuJJEmA+0v7ifKBxdzLtnxC5BsUoR8nTGVBwoNTMdaVbsxQmWe/YFvMk3ZRiEFyI /DoTfVQQqPD0Z/ZBtceItjSgxxGWDstmxm+mJJRlR5LpRXwh4MQ+0ry5wJOFytwckFSzjhUkXcZ// EPlUiGIReK0ipM6gR5RUquvnCiyx8oXU6wV/gOVCHBn4AHU5uajiGZ9XqJSqBgFAk7Ola2xEKk2xD k/vL+cRA==;
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linagora.com; i=@linagora.com;  q=dns/txt; s=s266739; t=1551282102; h=from : subject : to : message-id  : date; bh=wh/UKbLkBOvaIsrQg+THydaH0XMN2xe6S6Ga9nil18I=;  b=ayAL+DEt2+7EE1XWj4cD6KA5qZP/PJ1MKIkHuRsB/nuGwzUPn3M3JSS96urc3xMQl8Ya/4 0k7XvOopFHifFcwrUduoWW9BO9SNFXGzQhLB90nJJtMyYYxprY8vZ8QBZ1wc11GcYE/hW9vQ eTJfcQ69mASx9kxjfBl8mBMRkKLeGviv+XXGFK/LoZpCteGU7Edilu0R+ACisHONjksfZRrX 1AafgXRJ7REr35Ghfjjmgv1CX1vzoIk32yDk+U/2n3b46hb7lv/s6KNTyPIrgguq/TEbUykD ybQvhDZYYqvopgeOaW4+DsCWUnqzLMe53MaCLJJuTS621xDW9MzgtTNw==
Received: from [10.66.228.43] (helo=SmtpCorp) by smtpcorp.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.91) (envelope-from <raphael.ouazana@linagora.com>) id 1gz1Ku-cp4Tia-LU; Wed, 27 Feb 2019 15:41:32 +0000
Received: from [10.54.36.8] (helo=smtp.linagora.com) by smtpcorp.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.91) (envelope-from <raphael.ouazana@linagora.com>) id 1gz1Kt-wSEWpQ-Fa; Wed, 27 Feb 2019 15:41:31 +0000
Received: from extranet.linagora.com (obm3-ui.linagora.dc2 [172.24.128.227]) by smtp.linagora.com (Postfix) with ESMTP id 8DD823F0FE; Wed, 27 Feb 2019 16:41:29 +0100 (CET)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Date: Wed, 27 Feb 2019 16:41:29 +0100
X-LINAGORA-Copy-Delivery-Done: 1
From: Raphael OUAZANA <raphael.ouazana@linagora.com>
To: Neil Jenkins <neilj@fastmailteam.com>
Cc: IETF JMAP Mailing List <jmap@ietf.org>
In-Reply-To: <2cf743f3-1c18-4062-848e-f85ca505fa55@sloti7d1t02>
References: <153270520782.32707.4419621555491459322@ietfa.amsl.com> <2cf743f3-1c18-4062-848e-f85ca505fa55@sloti7d1t02>
Message-ID: <0df75c2dd9953f44a106223130be7abf@linagora.com>
X-Sender: raphael.ouazana@linagora.com
User-Agent: Roundcube Webmail/1.1.4
X-Smtpcorp-Track: 1gz1KtwSEWpQFa.dhApn-y2C
Feedback-ID: 266739m:266739aja3LFS:266739sqomqQgQ91
X-Report-Abuse: Please forward a copy of this message, including all headers,  to <abuse-report@smtp2go.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/D3afNVxKDt0bZ4IHloYnZJFzYuA>
Subject: Re: [Jmap] I-D Action: draft-ietf-jmap-mdn-00.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 27 Feb 2019 15:41:46 -0000

Hi,

Thank you for your comments. I handled them and created a pull request:
https://github.com/jmapio/jmap/pull/288

I finally decided to come back to directly send MDN, and not create 
temporary MDN. I also took time to explain other MDN related processes, 
and to add some examples.

I will take some time to handle eventual comments on the pull request 
before resubmitting an IETF draft.

Regards,
Raphaël.

Le 2018-12-05 01:46, Neil Jenkins a écrit :
> Finally sending my feedback on this draft, as promised in Bangkok.
> Sorry for the delay! Generally this looks good, just some comments to
> bring it up to date with the current JMAP conventions and a confusion
> over how you're actually meant to send the MDN!
> 
>> 2 [1].  Email/createMDN
>> 
>> The Email/createMDN method create a [RFC5322 [2]] message from
>> MDN
>> properties.
> 
> Where are these Email objects being created? It's not clear to me
> whether these are intended to be saved to the account's mail store or
> not. If they _are_ being saved to the mail store, we need to give
> mailboxIds and keywords arguments. If they are not being saved, but
> just being sent immediately, that needs to be made clear and the
> method probably renamed to _sendMDN_.
> 
>> It takes the following arguments:
>> 
>> o  *accountId*: "String|null" The id of the account to use for
>> this
>> call.  If "null", defaults to the "urn:ietf:params:jmap:mail"
>> primary account.
> 
> This should be non-optional now to match the same change in the other
> JMAP specs.
> 
>> o  *mdns*: "String[MDN]" A map of creation id (client specified)
>> to
>> MDN objects
>> 
>> An *MDN* object has the following properties:
>> 
>> o  *referencedMessageId*: "String" Message Id of the received
>> message
>> the user wants to create an MDN for.
> 
> Again, to match current JMAP convention this should be
> referencedEmailId, or maybe just forEmailId?
> 
>> o  *subject*: "String" Subject that will be used as "Subject"
>> header
>> for this MDN.
>> 
>> o  *textBody*: "String" Human readable part of the MDN, as plain
>> text.
>> 
>> o  *reportingUA*: "String" Name of the MUA creating this MDN.  It
>> is
>> used to build the MDN Report part of the MDN.
>> 
>> o  *disposition*: "Disposition" Object containing the diverse MDN
>> disposition options.
>> 
>> A *Disposition* object has the following properties:
>> 
>> o  *actionMode*: "String" This MUST be one of the following
>> strings:
>> "manual-action" / "automatic-action"
>> 
>> o  *sendingMode*: "String" This MUST be one of the following
>> strings:
>> "MDN-sent-manually" / "MDN-sent-automatically"
>> 
>> o  *type*: "String" This MUST be one of the following strings:
>> "deleted" / "dispatched" / "displayed" / "processed"
>> 
>> See [RFC8098 [3]] for the exact meaning of these different
>> fields.
> 
> This all looks fine.
> 
>> If the _referencedMessageId_, _subject_, _textBody_,
>> _reportingUA_,
>> _disposition_ properties are invalid (e.g. missing, wrong type,
>> id
>> not found), the server MUST reject the import with an
>> "invalidProperties" SetError.
>> 
>> If the email cannot be created because it would take the account
>> over
>> quota, the creation should be rejected with a "maxQuotaReached"
>> SetError.
> 
> import -> create (I presume this is a copy-paste error) and the
> maxQuotaReached error is now just called overQuota. But rather than
> specify the last two paragraphs, probably better just to say it may
> return any standard SetError that is defined for a _create_ in the
> core spec.
> 
>> The response has the following arguments:
>> 
>> o  *accountId*: "String" The id of the account used for this
>> call.
>> 
>> o  *created*: "String[Email]" A map of the creation id to an
>> object
>> build from the referenced properties.  The _blobId_ field of
>> the
>> Email objects can then be used to effectively send the MDN.
> 
> Again, I'm unclear how you are supposed to use the blobId to send this
> MDN. The EmailSubmission object uses an emailId reference rather than
> a blobId. If it's creating an email object, it also needs to be clear
> about which properties the servers should return for each object in
> the response (e.g. id, threadId, blobId, etc.).
> 
>> o  *notCreated*: "String[SetError]" A map of creation id to a
>> SetError object for each Email that failed to be created.  The
>> possible errors are defined above.
> 
> This document needs a security considerations section at the end.
> 
> Cheers,
> 
> Neil.
> 
> Links:
> ------
> [1] https://tools.ietf.org/html/draft-ietf-jmap-mdn-00#section-2
> [2] https://tools.ietf.org/html/rfc5322
> [3] https://tools.ietf.org/html/rfc8098
> 
> _______________________________________________
> Jmap mailing list
> Jmap@ietf.org
> https://www.ietf.org/mailman/listinfo/jmap


From nobody Wed Feb 27 22:15:00 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2F0F9129508; Wed, 27 Feb 2019 22:14:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.982
X-Spam-Level: 
X-Spam-Status: No, score=-1.982 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=QfAFU76C; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=o7Nw73Xm
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 W6r5K-cEeCog; Wed, 27 Feb 2019 22:14:47 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 83AD8128701; Wed, 27 Feb 2019 22:14:47 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 5F28624393; Thu, 28 Feb 2019 01:14:46 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Thu, 28 Feb 2019 01:14:46 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:in-reply-to:references:date:from :to:cc:subject:content-type; s=fm2; bh=NasyIA1rGbn3ha3DbrVCwiX2Q O0FAtkRnBGlFsBcPtg=; b=QfAFU76C5Efyb3WTXd1KMNVfGU+xmdkupeH9zKkZR tQ1V9ifc4iRYCVmqkqd/f756Cfw3Y3EgeNG3ugHDS2azixnyJbymu2nzdzsJQcb3 suYdsIvYvRUflOcr/67iqV6HrEFbvcq/MQzhOChm2donO+JU8tmOnuTs57YYoJY7 aN1iOgi5hZxNKqxK1TCBNXh5S1srOvOu+15EYuWTQTOdYak79vmPOjTW96WOtJSO 1xMYusYFbKIuSWYQo6sTRVXvFY9veUqGLlo3vMoveugbKf2loGNJeiwc2s+xjgSQ B915BsmaheBsqlKI/Qskj7rWg9QDMiJZLz006hxq9/0Jg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:references:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=NasyIA1rGbn3ha3Db rVCwiX2QO0FAtkRnBGlFsBcPtg=; b=o7Nw73XmtOH1pk1N8jsYdQj+2H6JLs1Sy js+eWdu9ew+HN5ZRFlxafuOhu3BqX7sf8EQTDyU4STGbXbicaj8h5cJe1xYqT+2p JtrZF5czIKh9yyAVE8SviXM0x3XDw4hev/Sn52PtpnpLNhL4+YYMbYLPvzprda7H Qh8yfNX47Jgs+IimIibqK8gX6bYpGe65aUEBrkEUolL1Tvm4StkqhY1bl99hYVcE xycz2NFGvnsJYU3DSBRmflx7ykGDI+pIteeGxAcmTi/bm75R4HhrW9zjqaR5FWH/ gwfeetXf/DL9sadXwAq8TwyJgD9z59u0qwzRw1i61lUp8kDwArscg==
X-ME-Sender: <xms:VXx3XPX02gdXF7EBDelrYZ3Aiw9SBGz0kUVB4JKoqfdJwTcKxmlf5Q>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrvddvgdeklecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgfkjghffffhvffutgesrgdtreerreerjeenucfhrhhomhepfdfpvghilhcu lfgvnhhkihhnshdfuceonhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhmqeenuc ffohhmrghinhepuhhnihgtohguvgdrohhrghdphhhtthhpshhtrghtuhhstghouggvshgr phhprhhophhrihgrthgvlhihrdhishdphhhtthhpfehovhgvrhhquhhitgdrihhtpdhhth htphefqhhuihgtrdhmhidpihgvthhfrdhorhhgpdgvgigrmhhplhgvrdgtohhmnecurfgr rhgrmhepmhgrihhlfhhrohhmpehnvghilhhjsehfrghsthhmrghilhhtvggrmhdrtghomh enucevlhhushhtvghrufhiiigvpedt
X-ME-Proxy: <xmx:VXx3XEyf2itEb-v0x2mTROpFF0U7DeSSIZDOmBOnK30XDqNUR0-3iw> <xmx:VXx3XD9pR26Uuwe2PUWJNaukLSscyl1ud7K0hQc3n_BuIvCJ21rkkQ> <xmx:VXx3XJ8HRn9-a7Rcmg48MRwO-57B6JFFpsIcjASrCTqFqa07bDO2lA> <xmx:Vnx3XDqwjJ0CnW-2KPxEyTRFVnoXVY8tC39bnJmqi_9nFwh-dg8E_w>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 55B0620560; Thu, 28 Feb 2019 01:14:45 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-922-g821e110-fmstable-20190228v3
X-Me-Personality: 64588216
Message-Id: <ebf89939-bf68-4458-a24f-5a37090385fd@beta.fastmail.com>
In-Reply-To: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com>
References: <155072687005.20308.1288342758446844678.idtracker@ietfa.amsl.com>
Date: Thu, 28 Feb 2019 01:14:44 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "Benjamin Kaduk" <kaduk@mit.edu>, iesg <iesg@ietf.org>
Cc: draft-ietf-jmap-core@ietf.org, "Bron Gondwana" <brong@fastmailteam.com>, jmap-chairs@ietf.org, "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=56d5023489bc44edba6b6a89a7d30620
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/DMiuvN0H6WE7U9LWqgZSlMM99tY>
Subject: Re: [Jmap]  =?utf-8?q?Benjamin_Kaduk=27s_Discuss_on_draft-ietf-jmap-c?= =?utf-8?q?ore-14=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 28 Feb 2019 06:14:53 -0000

--56d5023489bc44edba6b6a89a7d30620
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thanks for the detailed feedback Benjamin.

*Discussion points*

> This document (twice) has a MUST requirement for HTTP over TLS, which
> seems to exclude any future usage of HTTP/3 over QUIC. (It's also
> probably not needed to repeat the normative requirement in two places;=
 I
> noted both in the COMMENT section.)

OK, I'm happy to change this to say https:// scheme instead. I've change=
d the text to just say:

*JMAP uses HTTP [@!RFC7230] to expose API, Push, Upload and Download res=
ources. All HTTP requests MUST use the https:// scheme ([@!RFC2818] HTTP=
 over TLS).*

I have moved the minimum TLS requirements to the security considerations=
, and removed the HTTP reference there, so the normative requirements ar=
e no longer duplicated.

> Section 1.6.2 asserts that "all data belong to a single account". And
> yet, we seem to have PushSubscription objects in Sections 7.2.1 and
> 7.2.2 that disclaim any relationship to an account, which seems
> internally inconsistent.=20

Yes, this was inconsistent; PushSubscription objects are special as they=
 are tied to authentication credentials rather than an account. I have r=
emoved just this sentence, since I think the document is clear enough wi=
thout it.

> It's also unclear to me from the text in the
> latter sections what mechanism is used to determine whether a given
> request is authorized to see a given PushSubscription object. Is it
> supposed to be based on the authentication credentials to the API
> service directly, or a user abstraction, or something else?

The authentication credentials. You're right this was not clear; I have =
added explicit statement of this to the document.

> Section 5.3
>=20
>  Some records may hold references to other records (foreign keys).
>  That reference may be set (via create or update) in the same request
>  as the referenced record is created. To do this, the client refers
>  to the new record using its creation id prefixed with a "#". The
>  order of the method calls in the request by the client MUST be such
>  that the record being referenced is created in the same or an earlier=

>  call. The server thus never has to look ahead. Instead, while
>=20
> I think this means you need to specify what order the server does the
> create, update, and destroy lists in -- that is, that all creates are
> done before all updates, etc..

This is only true for objects with references to the same type (e.g. Mai=
lbox). I have added this sentence to the end of that paragraph:

*In the case of records with references to the same type, the server MUS=
T order the creates and updates within a single method call so that crea=
tes happen before their creation ids are referenced by another create/up=
date in the same call.*

There is no need to specify more constraints than this for ordering as i=
t would not be externally visible; servers should have the flexibility t=
o optimise as they see fit.

> Section 5.5
>=20
> The Unicode Collation Algorithm (<http://www.unicode.org/reports/tr10/=
>
> is not listed in the IANA collation registry for internet application
> protocols; since the session object limits the collationAlgorithms to
> those in the registry, at present, it is not permitted to use that
> collation algorithm. It would seem that this document should stimulate=

> the registration of that collation algorithm in some fashion (whether =
by
> explicitly doing so in its IANA Considerations or otherwise).

There is no requirement in the spec for the default algorithm to be one =
of those listed in the collationAlgorithms capability; the server can do=
 whatever it wants in the default case. We will certainly look at regist=
ering UCA, but such a registration doesn't belong in this document and w=
ill not materially change this document so should not block publication.=


> Section 7.1
>=20
>  o *changed*: "Id[TypeState]" A map of _account id_ to an object
>  encoding the state of data types that have changed for that
>  account since the last StateChange object was pushed, for each of
>=20
> I don't see how these semantics provide the properties stated in Secti=
on
> 7, "[i]t doesn't matter if some push events are dropped before they
> reach the client; it will still get all changes next time it syncs." I=
n
> particular, if the client misses a state change for the CalendarEvent
> type, and then no other changes that affect CalendarEvents occur, the
> client will remain unaware of the changes to CalendarEvents, even if
> other push notifications for other types come in. Am I misunderstandin=
g
> one or more of the behavior or stated guarantees?

It's stating that on the next resync, whether that be due to a future pu=
sh for the same type, or the client making any /get or /set for that typ=
e and seeing the different state string returned, will result in the cli=
ent coming fully up to date. Losing the push does not mean there is data=
 the client will now no longer see.

> Section 7.2
>=20
>  As a push subscription causes the JMAP server to make a number of
>  requests to a previously unknown endpoint, it can be used as a vector=

>  for launching a denial of service attack. To prevent this, when a
>  subscription is created the JMAP server immediately sends a
>  PushVerification object to that URL (see section 7.2.2). The JMAP
>  server MUST NOT make any further requests to the URL until the client=

>  receives the push and updates the subscription with the correct
>  verification code.
>=20
> I think the JMAP server also needs to rate-limit even the initial
> PushVerification generation, per-user(?), in order to close the DoS
> and annoyance-vector risks.

Yes, for annoyance mitigation there should be some rate limits here. I d=
on't think we need to be specific on how it is rate-limited; that's up t=
o the server. I'll add a mention of this to the security considerations.=


>=20
>  o *keys*: "Object|null" (immutable) Client-generated encryption
>  keys. If supplied the server MUST use them as specified in
>  [RFC8291] to encrypt all data sent to the push subscription. The
>  object MUST have the following properties:
>=20
>  * *p256dh*: the P-256 ECDH Diffie-Hellman public key as described
>  in [RFC8291], encoded in URL-safe Base64 representation as
>=20
> What's the crypto agility story for these web push encryption keys?
> (See BCP 201.)

There isn't one, because as far as I can see RFC8291 <https://tools.ietf=
.org/html/rfc8291> doesn't have one and that's what this is supporting. =
What do you suggest?

> Also, when these expirations fire (e.g., for Basic Authentication
> credentials), we need a normative requirement to actually destroy the
> private credentials; there's a lot going on here so maybe I missed it,=

> but I don't think I saw one.

I think we already have this. The spec says:

*The push subscription is tied to the credentials used to authenticate t=
he API request that created it. Should these credentials expire or be re=
voked, the push subscription MUST be destroyed by the JMAP server.*

Or were you referring to something else?

*Comments*

>  o "String[A]" - A JSON object where the keys are all "String"s, and
>  the values are of type "A".
>=20
> To avoid confusion about whether String is the only possible map key
> type (vs., e.g., Id), maybe "A[B]" notation is more appropriate?

Sure, done.

> Section 1.2
>=20
> Do we want to give any guidance about when it is (not) advisable to us=
e
> very short identifiers (even the 1-2 character case could be
> noteworthy)? (I don't know what that guidance would be, so "no" is a
> perfectly fine answer!)

Hmm, no. I don't think it really matters; the server can use whatever sc=
heme it likes. (For example, might have monotonically increasing integer=
s which you prefix with a letter for the type, leading to ids like "K1",=
 "J6" etc. in the early cases; this is a perfectly reasonable scheme to =
use).

> W.r.t "NIL", that is the specifc 3-character identifier, right? Or do
> we need to worry about having it embedded as part of a larger string?

Just the exact string "NIL".

> (I don't see how prefixing every ID with an alphabetical character
> avoids the "NIL" case, unless 'N' is disallowed from being that
> character.)

Well, yes true, but this is general advice not a normative requirement, =
and if you might produce the letters "IL" as a suffix, then don't choose=
 "N" as a prefix. Even then though, it should be fine unless these same =
ids are shared with another protocol where this string has special signi=
ficance.

> Section 1.3
>=20
> My math degree obliges me to note that, per trichotomy, zero is not a
> positive integer.

I've renamed this to `UnsignedInt`.

> Section 1.6.1
>=20
> nit: perhaps a "user object", or some broader rewrite like "in this
> document, the keyword 'user' is used to refer to [...]" -- the current=

> text feels like it's dehumanizing, well, humans.

I have reworded this to:

*A user is a person accessing data via JMAP. A user has a set of permiss=
ions determining the data that they can see.*

> Section 1.6.2
>=20
> nit re. "All data belong to a single account": I assume this is "each =
datum
> has a map to its respective account", not "the entire set of data in t=
he
> system is associated with a single privileged account", as that would
> make the account distinction rather useless.

Yes. I have removed this sentence as redundant already based on previous=
 feedback.

> Section 1.7
>=20
> A "MUST" requirement for TLS would seem likely to disallow HTTP/3
> (QUIC).

My understanding is that QUIC will also use TLS <https://datatracker.iet=
f.org/doc/draft-ietf-quic-tls/>.

> Does "MUST confirm with the HTTP Authentication framework" preclude
> other authentication schemes? The RFC 7235 framework has some warts,
> and in many webapp settings there are plausible reasons to prefer
> app-layer authentication schemes. I guess that JMAP as being an
> API-driven model may have a more natural mapping to the 7235 framework=
,
> and I do note the remarks in the shepherd writeup that an authenticati=
on
> scheme was removed from a previous version of this document. So mostly=

> I'm just asking if we are intending to force the 7235 framework to be
> the one and only authentication scheme for JMAP. (Who knows, maybe thi=
s
> will drive adoption of new HTTP Authentication Schemes or prompt renew=
ed
> interest in their development?)

This has been raised by other reviewers too, and I think I'm going to ju=
st cut the line and the requirement. Implementors that want/need to use =
something other than 7235 will almost certainly do so regardless of what=
 we write here.

>  Clients MUST understand and be able to handle standard HTTP status
>  codes appropriately.
>=20
> (Is there a precise definition for "standard HTTP status codes"?)

No, I've cut this line as well. This was recommended text in an early dr=
aft of BCP 56bis <https://datatracker.ietf.org/doc/draft-ietf-httpbis-bc=
p56bis/>, but has since been cut.

>  An authenticated client can fetch the JMAP Session object with
>  details about the data and capabilities the server can provide as
>=20
> nit: maybe this is "a JAMP session object" with the indefinite article=
?

I used the definite article here because the client is authenticated, an=
d therefore has access to one specific JMAP session object associated wi=
th those credentials.

> Section 2
>=20
>  o *username*: "String" The username associated with the given
>  credentials.
>=20
> This seems to implicitly require that all credentialed entities have
> user accounts, denying the possibility for some shared-credential or
> machine-credential models. Is this intended?

Hmm, fair point. I'll change the description to:

*The username associated with the given credentials, or the empty string=
 if none.*

>  o *state*: "String" A string representing the state of this object
>  on the server. If the value of any other property on the session
>  object changes, this string will change. The current value is
>  also returned on the API Response object (see section 3.3),
>  allowing clients to quickly determine if the session information
>  has changed (e.g. an account has been added or removed) and so
>  they need to refetch the object.
>=20
> As written this sounds like a serialized version of the full object
> (without the 'state' field, of course, to avoid recursion), but I
> suspect this is intended to be more like a generation number or hash o=
r
> serialized state, as a short lookup key. Greater clarity would be
> welcome.

Yes, the intention is for this to be a short generation/modification num=
ber or hash. While this is preferred, it is not required to be a short s=
tring for functional operation. I hesitate to put further normative rest=
rictions on it as this may make it harder for existing server implementa=
tions of other APIs with a similar concept but longer strings to impleme=
nt a JMAP interface.

I'm happy to suggest this however; I'll change "A string representing=E2=
=80=A6" to "A (preferably short) string representing=E2=80=A6".

> Section 3.2
>=20
>  o *using*: "String[]" The set of capabilities the client wishes to
>  use. The client MAY include capability identifiers even if the
>  method calls it makes do not utilise those capabilities. The
>  server advertises the set of specifications it supports in the
>  JMAP Session object, as keys on the _capabilities_ property.
>=20
> Are the "capability identifiers" the same as or different from the
> "specifications [the server] supports"?

I have updated this to stick to "capability" as the terminology; a speci=
fication (document) may define more than one capability that can be supp=
orted independently, so the two are not interchangeable.

> Is the "client id" something that could also be called a "request ID"?=

> (I note that RFC 7252 calls a similar thing a "token" but has some tex=
t
> wishing they called it a "request ID".)

Based on feedback from another reviewer I have renamed this "method call=
 id". (A request in JMAP is a bundle of method calls so "request id" wou=
ld not be appropriate.)

> The 'prefixed with a "#"' laguage seems like it has some potential for=

> confusion; is it better to write this like "the first character of the=

> creation ID MUST be octothorpe ('#')"?

The # is not part of the creation id. References to a creation id may be=
 used in a context where an id is expected by prefixing the creation id =
with a #. Since this is not a valid character in an id, it is easy to de=
termine that this must be a creation reference. I have added a reference=
 at this point to the /set definition where this is explained in more de=
tail.

> AFAICT having finished reading the doc, these can only be created by
> explicit client action via a "create" array (or equivalent), where the=

> array keys are the "creation id"s since the client has to use some
> handle before the server has assigned them. It should be possible to
> add a very brief note to that effect here.

I have added cross-references to make this a bit clearer. There is now t=
ext here that says:

*As the server processes API requests, any time it successfully creates =
a new record it adds to this map the creation id (see the *create* argum=
ent to "/set" in section 5.3), with the server-assigned real id as the v=
alue.*

> Given the later usage in Section 3.3, I would consider splitting the
> *Invocation* definition into a subsection.

OK

> Section 3.3
>=20
> (editorial) If the second element of the Invocation tuple is literally=

> "arguments for the method", do we really have enough rope to make
> response objects like this (unless we limit ourselves to conceptually
> "in/out" arguments with no pure-output functionality)?

I think the document as a whole makes the syntax clear enough, but if yo=
u have a suggestion for better wording here I'm happy to consider it.

> Section 3.5
>=20
> I expect that deployment will see differences of opinion as to which
> checks fall under "syntactically valid", but it's unclear whether we
> need to attempt to forestall such debate.

I would consider this to mean something that is valid JSON and when deco=
ded matches the type signature of the Request object. I will clarify thi=
s in the spec, although I don't think small deviations in interpretation=
 are likely to result in significant interoperability issues.

> Section 3.5.1
>=20
>  o "urn:ietf:params:jmap:error:notRequest" The request parsed as JSON
>  but did not match the structure of the Request object.
>=20
> "the Request object" makes me think of "the thing the client stuck in
> the field named "Request", which is probably not the intent. Perhaps
> the key phrase is "type signature"?

Yes, that's clearer; I have changed this.

> Section 3.5.1.1
>=20
> Since there is special handling for "urn:ietf:params:jmap:error:limit"=
,
> do we want an example to show that?

I'll add a second example.

> Section 3.5.2
>=20
>  With the exception of "serverPartialFail", the externally-visible
>  state of the server MUST NOT have changed if an error is returned at
>  the method level.
>=20
> nit: You don't say where in the type signature "serverPartialFail" is
> supposed to be in order to trigger the special handling.

Sorry, I don't understand this comment. serverPartialFail is a method-le=
vel error so it would be returned like any other method-level error:

[ "error", {
  "type": "serverPartialFail"
}, "call-id-1" ]

>  Further general errors MAY be defined in future RFCs. Should a
>  client receive an error type it does not understand, it MUST treat it=

>  the same as the "serverFail" type.
>=20
> Does this imply that "serverPartialFail" is unique in its ability to
> partially modify state?

General errors (that could be returned by any method) are expected to be=
 defined rarely. A partial-fail where the server commits state changes b=
ut then fails part way is also expected to be very rare (because the cli=
ent has to do a full resync to recover).=20

If necessary, it's more likely a future specification could define an er=
ror that partially modifies state but is only returned in very specific =
circumstances and when the client has opted in to that capability, so it=
 knows the client will be able to handle it.

> Section 3.6
>=20
> (Same comment about '"prefixes with "#"' as above.)
>=20
>  If an argument object contains the
>  same argument name in normal and referenced form (e.g. "foo" and
>  "#foo"), the method MUST return an "invalidArguments" error.
>=20
> This "same argument name in normal and referenced form" applies even i=
n
> arbitrarily nested objects, right? It seems like this could potentiall=
y
> be expensive and/or difficult to enforce.

Arguments are not nested. Only the top-level keys in the object are argu=
ments. The value to an argument may be an object, but the keys in there =
are not arguments; they are properties of that object.

> Section 5.1
>=20
>  o *ids*: "Id[]|null" The ids of the Foo objects to return. If
>  "null" then *all* records of the data type are returned, if this
>  is supported for that data type.
>=20
> Maybe note that the "maxObjectsInGet" capability limit might kick in
> here for the "null" case?

OK, done.

>  o *properties*: "String[]|null" If supplied, only the properties
>  listed in the array are returned for each Foo object. If "null",
>  all properties of the object are returned. The id property of the
>  object is *always* returned, even if not explicitly requested. If
>  an invalid property is requested, the call MUST be rejected with
>  an "invalidArguments" error.
>=20
> Because we're constrained to a single type here, there's no way for on=
ly
> some (but not all) of the objects to have any given property, right?

Correct.

> Section 5.3
>=20
>  o *ifInState*: "String|null" This is a state string as returned by
>  the _Foo/get_ method. If supplied, the string must match the
>=20
> So, just to double-check, this applies to the state of all objects of
> the type in question (for the account)?

Yes.

> It might be worth reiterating, since we frequently see this sort of ch=
eck against the current state at
> a per-object granularity, in other systems.

OK, will do.

> Do the "creation id"s in the "create" array include leading "#"?

No. A creation id is of type `Id` which does not allow this character. W=
hen a creation id is referenced from elsewhere, this is signified by pre=
fixing the id with a #.

> Section 5.4
>=20
>  o *destroyFromIfInState*: "String|null" This argument is passed on
>  as the "ifInState" argument to the implicit _Foo/set_ call, if
>  made at the end of this request.
>=20
> This is "the Implicit _Foo/set_ call that effectuates the destruction =
of
> the original", right?

Yes.

>  o *created*: "Id[Foo]|null" A map of the creation id to an object
>  containing any properties of the copied Foo object that are set by
>  the server (such as the _id_ in most object types). This argument
>  is "null" if no Foo objects were successfully copied.
>=20
> Maybe note that the id property will also likely differ from the one
> that was passed in in the create array, since the ids in question are
> from different accounts?

Sure, done.

> Section 5.6
>=20
>  o *upToId*: "Id|null" The last (highest-index) id the client
>  currently has cached from the query results. When there are a
>=20
> Just to double-check: semantically this is an object identifier, but t=
he
> ordering we care about for the "up to" part is the ordering in the que=
ry
> results?

Yes.

>  o *removed*: "Id[]" The _id_ for every foo that was in the query
>  results in the old state and is not in the results in the new
>  state. If the server cannot calculate this exactly, the server
>  MAY return extra foos in addition that may have been in the old
>  results but are not in the new results. If the sort and filter
>  are both only on immutable properties and an _upToId_ is supplied
>  and exists in the results, any ids that were removed but have a
>  higher index than _upToId_ SHOULD be omitted. If the _filter_ or
>  _sort_ includes a mutable property, the server MUST include all
>  foos in the current results for which this property MAY have
>  changed.
>=20
> I'm having a hard time understanding this "MAY have changed" text
> (which, for one, shouldn't be using 2119 language). Taking note that
> this is the "removed" list, this text seems to be saying that I includ=
e
> in the "removed" list any object that *is* in the current query result=
s,
> but which may have had a property change since the previous state. So
> we end up having to do a "remove + add" for this sort of property
> change, is that right?

Yes. If the item may have moved in the list, the client needs to remove =
and then re-add it at its current index to ensure its query results cach=
e is correct. I will add a sentence to explain this.

(I have changed the "MAY" to "may"; this was incorrect use of 2119 langu=
age, you're right.)

> We may need more detail on the "splices in" operation, with respect to=

> the indices in the "added" array reflecting the final state, and the
> local cached indices needing to be updated on the fly during the
> splicing operation in order to get things inserted in the proper place=
s.

Right. I have tried to make this a bit clearer; it now reads:

*The result of this is that if the client has a cached sparse array of f=
oo ids corresponding to the results in the old state:**
*
*
*
*    fooIds =3D [ "id1", "id2", null, null, "id3", "id4", null, null, nu=
ll ]**
*
*
*
*then if it ***splices out*** all ids in the removed array that it has i=
n its cached results:**
*
*
*
*    removed =3D [ "id2", "id31", ... ];
    fooIds =3D> [ "id1", null, null, "id3", "id4", null, null, null ]**
*
*
*
*and ***splices in*** (one-by-one in order, starting with the lowest ind=
ex) all of the ids in the added array:**
*
*
*
*    added =3D [{ id: "id5", index: 0, ... }];
    fooIds =3D> [ "id5", "id1", null, null, "id3", "id4", null, null, nu=
ll ]**
*
*
*
*and ***truncates*** or ***extends*** to the new total length, then the =
results will now be in the new state.**
*
*
*
*Note: splicing in adds the item at the given index, incrementing the in=
dex of all items previously at that or a higher index. Splicing out is t=
he inverse, removing the item and decrementing the index of every item a=
fter it in the array.*

> Section 5.8
>=20
>  2. It must resolve back-references to previous method results that
>  were processed on a different server. This is a relatively
>  simple syntactic substitution, described in section 3.6.
>=20
> Relatively simple, yes, but does require properly parsing the JSON
> (right?).

Yes.

> Section 6.3
>=20
> Why does Blob/copy use 'blobIds' instead of 'create' like generic /cop=
y?

Because it's a different format (just an array of ids rather than a map =
of creation id to object). We considered it clearer if arguments with th=
e same name were of the same type.

>  o *fromAccountId*: "Id" The id of the account emails were copied
>  from.
>=20
>  o *accountId*: "Id" The id of the account emails were copied to.
>=20
> I assme the "emails" are copy/paste bugs.

Yes, good spot. I've fixed this.

> Section 7.2
>=20
>  o *deviceClientId*: "String" (immutable) An id that uniquely
>  identifies the client + device it is running on. The purpose of
>  this is to allow clients to identify which PushSubscription
>  objects they created even if they lose their local state, so they
>  can revoke or update them. This string MUST be different on
>  different devices, and be different from other vendors. It SHOULD
>=20
> What's the first vendor that's the basis for comparison?

Sorry, I'm not quite sure what you're asking here.

>  be easy to re-generate, not depend on persisted state. A secure
>  hash that includes both a device id and vendor id is one way this
>  could be achieved.
>=20
> Easy to re-generate by whom?

The client.

> How does the client get the deviceClientId value the first time?

It generates it from its vendor app id and a device id it gets from the =
OS.

e.g. `sha256( "com.example.mail" . $device-id )`

(where I own example.com and `$device-id` is from the OS).

>  The POST request MUST have a content type of "application/json" and
>  contain the UTF-8 JSON encoded object as the body. The request MUST
>=20
> (editorial) Are we back to what the JMAP server sends to the notificat=
ion URL?

Yes.

>  The push subscription is tied to the credentials used to authenticate=

>  the API request that created it. Should these credentials expire or
>  be revoked, the push subscription MUST be destroyed by the JMAP
>  server.
>=20
> How is the JMAP server expected to learn about credential expiry or
> revocation?

That's implementation dependent.

>  When these credentials have their own expiry (i.e. it is a session
>  with a timeout), the server SHOULD NOT set or bound the expiry time
>=20
> (editorial) A session where?

If your authentication has the concept of a session that expires after a=
 set amount of time, or after a set amount of idle time (rather than, sa=
y, just a BASIC username/password with no expiry time).

> Section 7.2.1
>=20
> I would suggest a section reference to "follows the common /get
> semantics from Section 5.1, with the exceptions that [...]" to more
> clearly incorporate by reference the existing text.

OK, I've added a reference.

> What nature of authorization checking is done for these get requests?

These are standard method calls that are sent like any other, and so aut=
henticated like any other at the HTTP request level.

> Section 7.2.3
>=20
> Given that all of these times are going to be in the past for all
> readers, do we want to say something about what time the client is
> performing these operations at?

Yes, that's reasonable. I have done this (and fixed up the times in the =
examples to make sense relative to one another).

> Section 8.1
>=20
> Again, this (duplicated!) MUST for TLS prevents future HTTP/3 QUIC
> usage.
>=20
> Also, please reference RFC 7525.

I have added a reference to RFC 7525 and removed the duplication.

> Section 8.2
>=20
> Please recommend against Basic. Also, the concept of what a "user's re=
gular password" is seems a bit
> underspecified.

OK. I've modified this to read:

*Use of the Basic authentication scheme is NOT RECOMMENDED. Services tha=
t choose to use this are strongly recommended to require generation of a=
 unique "app password" via some external mechanism for each client they =
wish to connect.*

(I've just cut "user's regular password" since it's redundant.)

> Section 8.3
>=20
> DNS SRV-based autodiscovery seems the only type of autodiscovery
> available that is susceptible to the attack described here; you should=

> probably just state that explicitly.

OK, will do.

> Section 8.4
>=20
> While true, 8529's security considerations are pretty sparse; we could=

> say more here about not overscanning, limiting string length, being
> strict about tokenization, etc.

Do you have any suggested text?

> Section 8.7
>=20
>  and JMAP server the client MUST specify encryption keys when
>  establishing the PushSubscription and ignore any push notification
>  received that is not encrypted and signed with those keys.
>=20
> There's no signing in RFC 8291; there is, however, a separate
> authentication secret.

Right, I will update this text.

> Section 8.8
>=20
> I would be surprised if the propsects for traffic analysis were limite=
d
> to just push. Even regular accesses may still be susceptible to traffi=
c
> analysis.

No doubt something could be gleaned. I will make this slightly more gene=
ric, although push notifications still have the clearer information leak=
.

> Section 9.4.3
>=20
> You probably should document that recourse for non-response after 30
> days is to request action from the IESG.

OK.

Cheers,
Neil.
--56d5023489bc44edba6b6a89a7d30620
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>Thanks for=
 the detailed feedback Benjamin.<br></div><div><br></div><div><b>Discuss=
ion points</b><br></div><div><br></div><blockquote type=3D"cite" id=3D"f=
astmail-quoted"><div>This document (twice) has a MUST requirement for HT=
TP over TLS, which<br></div><div>seems to exclude any future usage of HT=
TP/3 over QUIC.&nbsp; (It's also<br></div><div>probably not needed to re=
peat the normative requirement in two places; I<br></div><div>noted both=
 in the COMMENT section.)<br></div></blockquote><div><br></div><div>OK, =
I'm happy to change this to say https:// scheme instead. I've changed th=
e text to just say:<br></div><div><br></div><div><i>JMAP uses HTTP [@!RF=
C7230] to expose API, Push, Upload and Download resources. All HTTP requ=
ests MUST use the https:// scheme ([@!RFC2818] HTTP over TLS).</i><br></=
div><div><br></div><div>I have moved the minimum TLS requirements to the=
 security considerations, and removed the HTTP reference there, so the n=
ormative requirements are no longer duplicated.<br></div><div><br></div>=
<blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 1.6.2 asse=
rts that "all data belong to a single account".&nbsp; And<br></div><div>=
yet, we seem to have PushSubscription objects in Sections 7.2.1 and<br><=
/div><div>7.2.2 that disclaim any relationship to an account, which seem=
s<br></div><div>internally inconsistent.&nbsp; <br></div></blockquote><d=
iv><br></div><div>Yes, this was inconsistent; PushSubscription objects a=
re special as they are tied to authentication credentials rather than an=
 account. I have removed just this sentence, since I think the document =
is clear enough without it.<br></div><div><br></div><blockquote type=3D"=
cite" id=3D"fastmail-quoted"><div>It's also unclear to me from the text =
in the<br></div><div>latter sections what mechanism is used to determine=
 whether a given<br></div><div>request is authorized to see a given Push=
Subscription object.&nbsp; Is it<br></div><div>supposed to be based on t=
he authentication credentials to the API<br></div><div>service directly,=
 or a user abstraction, or something else?<br></div></blockquote><div><b=
r></div><div>The authentication credentials. You're right this was not c=
lear; I have added explicit statement of this to the document.<br></div>=
<div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Sec=
tion 5.3<br></div><div><br></div><div>&nbsp;&nbsp; Some records may hold=
 references to other records (foreign keys).<br></div><div>&nbsp;&nbsp; =
That reference may be set (via create or update) in the same request<br>=
</div><div>&nbsp;&nbsp; as the referenced record is created.&nbsp; To do=
 this, the client refers<br></div><div>&nbsp;&nbsp; to the new record us=
ing its creation id prefixed with a "#".&nbsp; The<br></div><div>&nbsp;&=
nbsp; order of the method calls in the request by the client MUST be suc=
h<br></div><div>&nbsp;&nbsp; that the record being referenced is created=
 in the same or an earlier<br></div><div>&nbsp;&nbsp; call.&nbsp; The se=
rver thus never has to look ahead.&nbsp; Instead, while<br></div><div><b=
r></div><div>I think this means you need to specify what order the serve=
r does the<br></div><div>create, update, and destroy lists in -- that is=
, that all creates are<br></div><div>done before all updates, etc..<br><=
/div></blockquote><div><br></div><div>This is only true for objects with=
 references to the same type (e.g. Mailbox). I have added this sentence =
to the end of that paragraph:<br></div><div><br></div><div><i>In the cas=
e of records with references to the same type, the server MUST order the=
 creates and updates within a single method call so that creates happen =
before their creation ids are referenced by another create/update in the=
 same call.</i><br></div><div><br></div><div>There is no need to specify=
 more constraints than this for ordering as it would not be externally v=
isible; servers should have the flexibility to optimise as they see fit.=
<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted=
"><div>Section 5.5<br></div><div><br></div><div>The Unicode Collation Al=
gorithm (&lt;http://www.unicode.org/reports/tr10/&gt;<br></div><div>is n=
ot listed in the IANA collation registry for internet application<br></d=
iv><div>protocols; since the session object limits the collationAlgorith=
ms to<br></div><div>those in the registry, at present, it is not permitt=
ed to use that<br></div><div>collation algorithm.&nbsp; It would seem th=
at this document should stimulate<br></div><div>the registration of that=
 collation algorithm in some fashion (whether by<br></div><div>explicitl=
y doing so in its IANA Considerations or otherwise).<br></div></blockquo=
te><div><br></div><div>There is no requirement in the spec for the defau=
lt algorithm to be one of those listed in the collationAlgorithms capabi=
lity; the server can do whatever it wants in the default case. We will c=
ertainly look at registering UCA, but such a registration doesn't belong=
 in this document and will not materially change this document so should=
 not block publication.<br></div><div><br></div><blockquote type=3D"cite=
" id=3D"fastmail-quoted"><div>Section 7.1<br></div><div><br></div><div>&=
nbsp;&nbsp; o&nbsp; *changed*: "Id[TypeState]" A map of _account id_ to =
an object<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encoding the stat=
e of data types that have changed for that<br></div><div>&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp; account since the last StateChange object was pushed, fo=
r each of<br></div><div><br></div><div>I don't see how these semantics p=
rovide the properties stated in Section<br></div><div>7, "[i]t doesn't m=
atter if some push events are dropped before they<br></div><div>reach th=
e client; it will still get all changes next time it syncs."&nbsp; In<br=
></div><div>particular, if the client misses a state change for the Cale=
ndarEvent<br></div><div>type, and then no other changes that affect Cale=
ndarEvents occur, the<br></div><div>client will remain unaware of the ch=
anges to CalendarEvents, even if<br></div><div>other push notifications =
for other types come in.&nbsp; Am I misunderstanding<br></div><div>one o=
r more of the behavior or stated guarantees?<br></div></blockquote><div>=
<br></div><div>It's stating that on the next resync, whether that be due=
 to a future push for the same type, or the client making any /get or /s=
et for that type and seeing the different state string returned, will re=
sult in the client coming fully up to date. Losing the push does not mea=
n there is data the client will now no longer see.<br></div><div><br></d=
iv><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 7.2<br>=
</div><div><br></div><div>&nbsp;&nbsp; As a push subscription causes the=
 JMAP server to make a number of<br></div><div>&nbsp;&nbsp; requests to =
a previously unknown endpoint, it can be used as a vector<br></div><div>=
&nbsp;&nbsp; for launching a denial of service attack.&nbsp; To prevent =
this, when a<br></div><div>&nbsp;&nbsp; subscription is created the JMAP=
 server immediately sends a<br></div><div>&nbsp;&nbsp; PushVerification =
object to that URL (see section 7.2.2).&nbsp; The JMAP<br></div><div>&nb=
sp;&nbsp; server MUST NOT make any further requests to the URL until the=
 client<br></div><div>&nbsp;&nbsp; receives the push and updates the sub=
scription with the correct<br></div><div>&nbsp;&nbsp; verification code.=
<br></div><div><br></div><div>I think the JMAP server also needs to rate=
-limit even the initial<br></div><div>PushVerification generation, per-u=
ser(?), in order to close the DoS<br></div><div>and annoyance-vector ris=
ks.<br></div></blockquote><div><br></div><div>Yes, for annoyance mitigat=
ion there should be some rate limits here. I don't think we need to be s=
pecific on how it is rate-limited; that's up to the server. I'll add a m=
ention of this to the security considerations.<br></div><div><br></div><=
blockquote type=3D"cite" id=3D"fastmail-quoted"><div><br></div><div>&nbs=
p;&nbsp; o&nbsp; *keys*: "Object|null" (immutable) Client-generated encr=
yption<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keys.&nbsp; If suppl=
ied the server MUST use them as specified in<br></div><div>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; [RFC8291] to encrypt all data sent to the push subscri=
ption.&nbsp; The<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object MUS=
T have the following properties:<br></div><div><br></div><div>&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; *&nbsp; *p256dh*: the P-256 ECDH Diffie-Hellman pub=
lic key as described<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; in [RFC8291], encoded in URL-safe Base64 representation as<b=
r></div><div><br></div><div>What's the crypto agility story for these we=
b push encryption keys?<br></div><div>(See BCP 201.)<br></div></blockquo=
te><div><br></div><div>There isn't one, because as far as I can see <a h=
ref=3D"https://tools.ietf.org/html/rfc8291">RFC8291</a> doesn't have one=
 and that's what this is supporting. What do you suggest?<br></div><div>=
<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Also, wh=
en these expirations fire (e.g., for Basic Authentication<br></div><div>=
credentials), we need a normative requirement to actually destroy the<br=
></div><div>private credentials; there's a lot going on here so maybe I =
missed it,<br></div><div>but I don't think I saw one.<br></div></blockqu=
ote><div><br></div><div>I think we already have this. The spec says:<br>=
</div><div><br></div><div><i>The push subscription is tied to the creden=
tials used to authenticate the API request that created it. Should these=
 credentials expire or be revoked, the push subscription MUST be destroy=
ed by the JMAP server.</i><br></div><div><br></div><div>Or were you refe=
rring to something else?<br></div><div><br></div><div><b>Comments</b><br=
></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><=
div>&nbsp;&nbsp; o&nbsp; "String[A]" - A JSON object where the keys are =
all "String"s, and<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the valu=
es are of type "A".<br></div><div><br></div><div>To avoid confusion abou=
t whether String is the only possible map key<br></div><div>type (vs., e=
.g., Id), maybe "A[B]" notation is more appropriate?<br></div></blockquo=
te><div><br></div><div>Sure, done.<br></div><div><br></div><blockquote t=
ype=3D"cite" id=3D"fastmail-quoted"><div>Section 1.2<br></div><div><br><=
/div><div>Do we want to give any guidance about when it is (not) advisab=
le to use<br></div><div>very short identifiers (even the 1-2 character c=
ase could be<br></div><div>noteworthy)?&nbsp; (I don't know what that gu=
idance would be, so "no" is a<br></div><div>perfectly fine answer!)<br><=
/div></blockquote><div><br></div><div>Hmm, no. I don't think it really m=
atters; the server can use whatever scheme it likes. (For example, might=
 have monotonically increasing integers which you prefix with a letter f=
or the type, leading to ids like "K1", "J6" etc. in the early cases; thi=
s is a perfectly reasonable scheme to use).<br></div><div><br></div><blo=
ckquote type=3D"cite" id=3D"fastmail-quoted"><div>W.r.t "NIL", that is t=
he specifc 3-character identifier, right?&nbsp; Or do<br></div><div>we n=
eed to worry about having it embedded as part of a larger string?<br></d=
iv></blockquote><div><br></div><div>Just the exact string "NIL".<br></di=
v><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>(=
I don't see how prefixing every ID with an alphabetical character<br></d=
iv><div>avoids the "NIL" case, unless 'N' is disallowed from being that<=
br></div><div>character.)<br></div></blockquote><div><br></div><div>Well=
, yes true, but this is general advice not a normative requirement, and =
if you might produce the letters "IL" as a suffix, then don't choose "N"=
 as a prefix. Even then though, it should be fine unless these same ids =
are shared with another protocol where this string has special significa=
nce.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-qu=
oted"><div>Section 1.3<br></div><div><br></div><div>My math degree oblig=
es me to note that, per trichotomy, zero is not a<br></div><div>positive=
 integer.<br></div></blockquote><div><br></div><div>I've renamed this to=
 <code style=3D"border-top-left-radius:3px;border-top-right-radius:3px;b=
order-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top-w=
idth:1px;border-right-width:1px;border-bottom-width:1px;border-left-widt=
h:1px;border-top-style:solid;border-right-style:solid;border-bottom-styl=
e:solid;border-left-style:solid;border-top-color:rgb(204, 204, 204);bord=
er-right-color:rgb(204, 204, 204);border-bottom-color:rgb(204, 204, 204)=
;border-left-color:rgb(204, 204, 204);border-image-source:initial;border=
-image-slice:initial;border-image-width:initial;border-image-outset:init=
ial;border-image-repeat:initial;padding-top:1px;padding-right:3px;paddin=
g-bottom:1px;padding-left:3px;background-image:initial;background-positi=
on-x:initial;background-position-y:initial;background-size:initial;backg=
round-repeat:initial;background-repeat:initial;background-attachment:ini=
tial;background-origin:initial;background-clip:initial;background-color:=
rgb(246, 246, 246);font-family:menlo, consolas, monospace;font-size:90%;=
">UnsignedInt</code>.<br></div><div><br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div>Section 1.6.1<br></div><div><br></div><div>n=
it: perhaps a "user object", or some broader rewrite like "in this<br></=
div><div>document, the keyword 'user' is used to refer to [...]" -- the =
current<br></div><div>text feels like it's dehumanizing, well, humans.<b=
r></div></blockquote><div><br></div><div>I have reworded this to:<br></d=
iv><div><br></div><div><i>A user is a person accessing data via JMAP. A =
user has a set of permissions determining the data that they can see.</i=
><br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quote=
d"><div>Section 1.6.2<br></div><div><br></div><div>nit re. "All data bel=
ong to a single account": I assume this is "each datum<br></div><div>has=
 a map to its respective account", not "the entire set of data in the<br=
></div><div>system is associated with a single privileged account", as t=
hat would<br></div><div>make the account distinction rather useless.<br>=
</div></blockquote><div><br></div><div>Yes. I have removed this sentence=
 as redundant already based on previous feedback.<br></div><div><br></di=
v><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 1.7<br><=
/div><div><br></div><div>A "MUST" requirement for TLS would seem likely =
to disallow HTTP/3<br></div><div>(QUIC).<br></div></blockquote><div><br>=
</div><div>My understanding is that QUIC <a href=3D"https://datatracker.=
ietf.org/doc/draft-ietf-quic-tls/">will also use TLS</a>.<br></div><div>=
<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Does "MU=
ST confirm with the HTTP Authentication framework" preclude<br></div><di=
v>other authentication schemes?&nbsp; The RFC 7235 framework has some wa=
rts,<br></div><div>and in many webapp settings there are plausible reaso=
ns to prefer<br></div><div>app-layer authentication schemes.&nbsp; I gue=
ss that JMAP as being an<br></div><div>API-driven model may have a more =
natural mapping to the 7235 framework,<br></div><div>and I do note the r=
emarks in the shepherd writeup that an authentication<br></div><div>sche=
me was removed from a previous version of this document.&nbsp; So mostly=
<br></div><div>I'm just asking if we are intending to force the 7235 fra=
mework to be<br></div><div>the one and only authentication scheme for JM=
AP.&nbsp; (Who knows, maybe this<br></div><div>will drive adoption of ne=
w HTTP Authentication Schemes or prompt renewed<br></div><div>interest i=
n their development?)<br></div></blockquote><div><br></div><div>This has=
 been raised by other reviewers too, and I think I'm going to just cut t=
he line and the requirement. Implementors that want/need to use somethin=
g other than 7235 will almost certainly do so regardless of what we writ=
e here.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail=
-quoted"><div>&nbsp;&nbsp; Clients MUST understand and be able to handle=
 standard HTTP status<br></div><div>&nbsp;&nbsp; codes appropriately.<br=
></div><div><br></div><div>(Is there a precise definition for "standard =
HTTP status codes"?)<br></div></blockquote><div><br></div><div>No, I've =
cut this line as well. This was recommended text in an early draft of <a=
 href=3D"https://datatracker.ietf.org/doc/draft-ietf-httpbis-bcp56bis/">=
BCP 56bis</a>, but has since been cut.<br></div><div><br></div><blockquo=
te type=3D"cite" id=3D"fastmail-quoted"><div>&nbsp;&nbsp; An authenticat=
ed client can fetch the JMAP Session object with<br></div><div>&nbsp;&nb=
sp; details about the data and capabilities the server can provide as<br=
></div><div><br></div><div>nit: maybe this is "a JAMP session object" wi=
th the indefinite article?<br></div></blockquote><div><br></div><div>I u=
sed the definite article here because the client is authenticated, and t=
herefore has access to one specific JMAP session object associated with =
those credentials.<br></div><div><br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>Section 2<br></div><div><br></div><div>&nbsp;&nbs=
p; o&nbsp; *username*: "String" The username associated with the given<b=
r></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; credentials.<br></div><div><=
br></div><div>This seems to implicitly require that all credentialed ent=
ities have<br></div><div>user accounts, denying the possibility for some=
 shared-credential or<br></div><div>machine-credential models.&nbsp; Is =
this intended?<br></div></blockquote><div><br></div><div>Hmm, fair point=
. I'll change the description to:<br></div><div><br></div><div><i>The us=
ername associated with the given credentials, or the empty string if non=
e.</i><br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-=
quoted"><div>&nbsp;&nbsp; o&nbsp; *state*: "String" A string representin=
g the state of this object<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
on the server.&nbsp; If the value of any other property on the session<b=
r></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object changes, this string =
will change.&nbsp; The current value is<br></div><div>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; also returned on the API Response object (see section 3.3),=
<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allowing clients to quickl=
y determine if the session information<br></div><div>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; has changed (e.g. an account has been added or removed) and =
so<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; they need to refetch the=
 object.<br></div><div><br></div><div>As written this sounds like a seri=
alized version of the full object<br></div><div>(without the 'state' fie=
ld, of course, to avoid recursion), but I<br></div><div>suspect this is =
intended to be more like a generation number or hash or<br></div><div>se=
rialized state, as a short lookup key.&nbsp; Greater clarity would be<br=
></div><div>welcome.<br></div></blockquote><div><br></div><div>Yes, the =
intention is for this to be a short generation/modification number or ha=
sh. While this is preferred, it is not required to be a short string for=
 functional operation. I hesitate to put further normative restrictions =
on it as this may make it harder for existing server implementations of =
other APIs with a similar concept but longer strings to implement a JMAP=
 interface.<br></div><div><br></div><div>I'm happy to suggest this howev=
er; I'll change "A string representing=E2=80=A6" to "A (preferably short=
) string representing=E2=80=A6".<br></div><div><br></div><blockquote typ=
e=3D"cite" id=3D"fastmail-quoted"><div>Section 3.2<br></div><div><br></d=
iv><div>&nbsp;&nbsp; o&nbsp; *using*: "String[]" The set of capabilities=
 the client wishes to<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use.&=
nbsp; The client MAY include capability identifiers even if the<br></div=
><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method calls it makes do not utilis=
e those capabilities.&nbsp; The<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; server advertises the set of specifications it supports in the<br><=
/div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMAP Session object, as keys on=
 the _capabilities_ property.<br></div><div><br></div><div>Are the "capa=
bility identifiers" the same as or different from the<br></div><div>"spe=
cifications [the server] supports"?<br></div></blockquote><div><br></div=
><div>I have updated this to stick to "capability" as the terminology; a=
 specification (document) may define more than one capability that can b=
e supported independently, so the two are not interchangeable.<br></div>=
<div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Is =
the "client id" something that could also be called a "request ID"?<br><=
/div><div>(I note that RFC 7252 calls a similar thing a "token" but has =
some text<br></div><div>wishing they called it a "request ID".)<br></div=
></blockquote><div><br></div><div>Based on feedback from another reviewe=
r I have renamed this "method call id". (A request in JMAP is a bundle o=
f method calls so "request id" would not be appropriate.)<br></div><div>=
<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>The 'pre=
fixed with a "#"' laguage seems like it has some potential for<br></div>=
<div>confusion; is it better to write this like "the first character of =
the<br></div><div>creation ID MUST be octothorpe ('#')"?<br></div></bloc=
kquote><div><br></div><div>The # is not part of the creation id. Referen=
ces to a creation id may be used in a context where an id is expected by=
 prefixing the creation id with a #. Since this is not a valid character=
 in an id, it is easy to determine that this must be a creation referenc=
e. I have added a reference at this point to the /set definition where t=
his is explained in more detail.<br></div><div><br></div><blockquote typ=
e=3D"cite" id=3D"fastmail-quoted"><div>AFAICT having finished reading th=
e doc, these can only be created by<br></div><div>explicit client action=
 via a "create" array (or equivalent), where the<br></div><div>array key=
s are the "creation id"s since the client has to use some<br></div><div>=
handle before the server has assigned them.&nbsp; It should be possible =
to<br></div><div>add a very brief note to that effect here.<br></div></b=
lockquote><div><br></div><div>I have added cross-references to make this=
 a bit clearer. There is now text here that says:<br></div><div><br></di=
v><div><i>As the server processes API requests, any time it successfully=
 creates a new record it adds to this map the creation id (see the *crea=
te* argument to "/set" in section 5.3), with the server-assigned real id=
 as the value.</i><br></div><div><br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>Given the later usage in Section 3.3, I would con=
sider splitting the<br></div><div>*Invocation* definition into a subsect=
ion.<br></div></blockquote><div><br></div><div>OK</div><div><br></div><b=
lockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 3.3<br></div=
><div><br></div><div>(editorial) If the second element of the Invocation=
 tuple is literally<br></div><div>"arguments for the method", do we real=
ly have enough rope to make<br></div><div>response objects like this (un=
less we limit ourselves to conceptually<br></div><div>"in/out" arguments=
 with no pure-output functionality)?<br></div></blockquote><div><br></di=
v><div>I think the document as a whole makes the syntax clear enough, bu=
t if you have a suggestion for better wording here I'm happy to consider=
 it.</div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted=
"><div>Section 3.5<br></div><div><br></div><div>I expect that deployment=
 will see differences of opinion as to which<br></div><div>checks fall u=
nder "syntactically valid", but it's unclear whether we<br></div><div>ne=
ed to attempt to forestall such debate.<br></div></blockquote><div><br><=
/div><div>I would consider this to mean something that is valid JSON and=
 when decoded matches the type signature of the Request object. I will c=
larify this in the spec, although I don't think small deviations in inte=
rpretation are likely to result in significant interoperability issues.<=
br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"=
><div>Section 3.5.1<br></div><div><br></div><div>&nbsp;&nbsp; o&nbsp; "u=
rn:ietf:params:jmap:error:notRequest" The request parsed as JSON<br></di=
v><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; but did not match the structure of=
 the Request object.<br></div><div><br></div><div>"the Request object" m=
akes me think of "the thing the client stuck in<br></div><div>the field =
named "Request", which is probably not the intent.&nbsp; Perhaps<br></di=
v><div>the key phrase is "type signature"?<br></div></blockquote><div><b=
r></div><div>Yes, that's clearer; I have changed this.</div><div><br></d=
iv><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 3.5.1.1=
<br></div><div><br></div><div>Since there is special handling for "urn:i=
etf:params:jmap:error:limit",<br></div><div>do we want an example to sho=
w that?<br></div></blockquote><div><br></div><div>I'll add a second exam=
ple.</div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted=
"><div>Section 3.5.2<br></div><div><br></div><div>&nbsp;&nbsp; With the =
exception of "serverPartialFail", the externally-visible<br></div><div>&=
nbsp;&nbsp; state of the server MUST NOT have changed if an error is ret=
urned at<br></div><div>&nbsp;&nbsp; the method level.<br></div><div><br>=
</div><div>nit: You don't say where in the type signature "serverPartial=
Fail" is<br></div><div>supposed to be in order to trigger the special ha=
ndling.<br></div></blockquote><div><br></div><div>Sorry, I don't underst=
and this comment. serverPartialFail is a method-level error so it would =
be returned like any other method-level error:<br></div><div><br></div><=
pre style=3D"margin:7px 0;border-radius:3px;border:1px solid #ccc;paddin=
g:7px 10px;background:#f6f6f6;font-family:menlo,consolas,monospace;font-=
size:90%;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-w=
ord;">[ "error", {
  "type": "serverPartialFail"
}, "call-id-1" ]<br></pre><div><br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>&nbsp;&nbsp; Further general errors MAY be define=
d in future RFCs.&nbsp; Should a<br></div><div>&nbsp;&nbsp; client recei=
ve an error type it does not understand, it MUST treat it<br></div><div>=
&nbsp;&nbsp; the same as the "serverFail" type.<br></div><div><br></div>=
<div>Does this imply that "serverPartialFail" is unique in its ability t=
o<br></div><div>partially modify state?<br></div></blockquote><div><br><=
/div><div>General errors (that could be returned by any method) are expe=
cted to be defined rarely. A partial-fail where the server commits state=
 changes but then fails part way is also expected to be very rare (becau=
se the client has to do a full resync to recover). <br></div><div><br></=
div><div>If necessary, it's more likely a future specification could def=
ine an error that partially modifies state but is only returned in very =
specific circumstances and when the client has opted in to that capabili=
ty, so it knows the client will be able to handle it.<br></div><div><br>=
</div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 3.6<=
br></div><div><br></div><div>(Same comment about '"prefixes with "#"' as=
 above.)<br></div><div><br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If an argument object contains the<br><=
/div><div>&nbsp;&nbsp; same argument name in normal and referenced form =
(e.g. "foo" and<br></div><div>&nbsp;&nbsp; "#foo"), the method MUST retu=
rn an "invalidArguments" error.<br></div><div><br></div><div>This "same =
argument name in normal and referenced form" applies even in<br></div><d=
iv>arbitrarily nested objects, right?&nbsp; It seems like this could pot=
entially<br></div><div>be expensive and/or difficult to enforce.<br></di=
v></blockquote><div><br></div><div>Arguments are not nested. Only the to=
p-level keys in the object are arguments. The value to an argument may b=
e an object, but the keys in there are not arguments; they are propertie=
s of that object.<br></div><div><br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>Section 5.1<br></div><div><br></div><div>&nbsp;&n=
bsp; o&nbsp; *ids*: "Id[]|null" The ids of the Foo objects to return.&nb=
sp; If<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "null" then *all* re=
cords of the data type are returned, if this<br></div><div>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; is supported for that data type.<br></div><div><br></d=
iv><div>Maybe note that the "maxObjectsInGet" capability limit might kic=
k in<br></div><div>here for the "null" case?<br></div></blockquote><div>=
<br></div><div>OK, done.</div><div><br></div><blockquote type=3D"cite" i=
d=3D"fastmail-quoted"><div>&nbsp;&nbsp; o&nbsp; *properties*: "String[]|=
null" If supplied, only the properties<br></div><div>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; listed in the array are returned for each Foo object.&nbsp; =
If "null",<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all properties o=
f the object are returned.&nbsp; The id property of the<br></div><div>&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; object is *always* returned, even if not ex=
plicitly requested.&nbsp; If<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; an invalid property is requested, the call MUST be rejected with<br></=
div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; an "invalidArguments" error.<br>=
</div><div><br></div><div>Because we're constrained to a single type her=
e, there's no way for only<br></div><div>some (but not all) of the objec=
ts to have any given property, right?<br></div></blockquote><div><br></d=
iv><div>Correct.</div><div><br></div><blockquote type=3D"cite" id=3D"fas=
tmail-quoted"><div>Section 5.3<br></div><div><br></div><div>&nbsp;&nbsp;=
 o&nbsp; *ifInState*: "String|null" This is a state string as returned b=
y<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the _Foo/get_ method.&nbs=
p; If supplied, the string must match the<br></div><div><br></div><div>S=
o, just to double-check, this applies to the state of all objects of<br>=
</div><div>the type in question (for the account)?<br></div></blockquote=
><div><br></div><div>Yes.</div><div><br></div><blockquote type=3D"cite" =
id=3D"fastmail-quoted"><div>It might be worth reiterating, since we freq=
uently see this sort of check against the current state at<br></div><div=
>a per-object granularity, in other systems.<br></div></blockquote><div>=
<br></div><div>OK, will do.</div><div><br></div><blockquote type=3D"cite=
" id=3D"fastmail-quoted"><div>Do the "creation id"s in the "create" arra=
y include leading "#"?<br></div></blockquote><div><br></div><div>No. A c=
reation id is of type <code style=3D"border-radius:3px;border:1px solid =
#ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,monos=
pace;font-size:90%;">Id</code>&nbsp;which does not allow this character.=
 When a creation id is referenced from elsewhere, this is signified by p=
refixing the id with a #.<br></div><div><br></div><blockquote type=3D"ci=
te" id=3D"fastmail-quoted"><div>Section 5.4<br></div><div><br></div><div=
>&nbsp;&nbsp; o&nbsp; *destroyFromIfInState*: "String|null" This argumen=
t is passed on<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; as the "ifIn=
State" argument to the implicit _Foo/set_ call, if<br></div><div>&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; made at the end of this request.<br></div><div><=
br></div><div>This is "the Implicit _Foo/set_ call that effectuates the =
destruction of<br></div><div>the original", right?<br></div></blockquote=
><div><br></div><div>Yes.<br></div><div><br></div><blockquote type=3D"ci=
te" id=3D"fastmail-quoted"><div>&nbsp;&nbsp; o&nbsp; *created*: "Id[Foo]=
|null" A map of the creation id to an object<br></div><div>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp; containing any properties of the copied Foo object tha=
t are set by<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the server (su=
ch as the _id_ in most object types).&nbsp; This argument<br></div><div>=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is "null" if no Foo objects were successf=
ully copied.<br></div><div><br></div><div>Maybe note that the id propert=
y will also likely differ from the one<br></div><div>that was passed in =
in the create array, since the ids in question are<br></div><div>from di=
fferent accounts?<br></div></blockquote><div><br></div><div>Sure, done.<=
br></div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"=
><div>Section 5.6<br></div><div><br></div><div>&nbsp;&nbsp; o&nbsp; *upT=
oId*: "Id|null" The last (highest-index) id the client<br></div><div>&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; currently has cached from the query results.=
&nbsp; When there are a<br></div><div><br></div><div>Just to double-chec=
k: semantically this is an object identifier, but the<br></div><div>orde=
ring we care about for the "up to" part is the ordering in the query<br>=
</div><div>results?<br></div></blockquote><div><br></div><div>Yes.<br></=
div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div=
>&nbsp;&nbsp; o&nbsp; *removed*: "Id[]" The _id_ for every foo that was =
in the query<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; results in the=
 old state and is not in the results in the new<br></div><div>&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; state.&nbsp; If the server cannot calculate this ex=
actly, the server<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAY retur=
n extra foos in addition that may have been in the old<br></div><div>&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; results but are not in the new results.&nbsp=
; If the sort and filter<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ar=
e both only on immutable properties and an _upToId_ is supplied<br></div=
><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and exists in the results, any ids =
that were removed but have a<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; higher index than _upToId_ SHOULD be omitted.&nbsp; If the _filter_ or=
<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _sort_ includes a mutable =
property, the server MUST include all<br></div><div>&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; foos in the current results for which this property MAY have<=
br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; changed.<br></div><div><br>=
</div><div>I'm having a hard time understanding this "MAY have changed" =
text<br></div><div>(which, for one, shouldn't be using 2119 language).&n=
bsp; Taking note that<br></div><div>this is the "removed" list, this tex=
t seems to be saying that I include<br></div><div>in the "removed" list =
any object that *is* in the current query results,<br></div><div>but whi=
ch may have had a property change since the previous state.&nbsp; So<br>=
</div><div>we end up having to do a "remove + add" for this sort of prop=
erty<br></div><div>change, is that right?<br></div></blockquote><div><br=
></div><div>Yes. If the item may have moved in the list, the client need=
s to remove and then re-add it at its current index to ensure its query =
results cache is correct. I will add a sentence to explain this.<br></di=
v><div><br></div><div>(I have changed the "MAY" to "may"; this was incor=
rect use of 2119 language, you're right.)<br></div><div><br></div><block=
quote type=3D"cite" id=3D"fastmail-quoted"><div>We may need more detail =
on the "splices in" operation, with respect to<br></div><div>the indices=
 in the "added" array reflecting the final state, and the<br></div><div>=
local cached indices needing to be updated on the fly during the<br></di=
v><div>splicing operation in order to get things inserted in the proper =
places.<br></div></blockquote><div><br></div><div>Right. I have tried to=
 make this a bit clearer; it now reads:<br></div><div><br></div><div><i>=
The result of this is that if the client has a cached sparse array of fo=
o ids corresponding to the results in the old state:</i><i><br></i></div=
><div><i><br></i></div><pre style=3D"margin:7px 0;border-radius:3px;bord=
er:1px solid #ccc;padding:7px 10px;background:#f6f6f6;font-family:menlo,=
consolas,monospace;font-size:90%;white-space:pre-wrap;word-wrap:break-wo=
rd;overflow-wrap:break-word;"><i>    fooIds =3D [ "id1", "id2", null, nu=
ll, "id3", "id4", null, null, null ]</i><i><br></i></pre><div><i><br></i=
></div><div><i>then if it </i><b><i>splices out</i></b><i>&nbsp;all ids =
in the removed array that it has in its cached results:</i><i><br></i></=
div><div><i><br></i></div><pre style=3D"margin:7px 0;border-radius:3px;b=
order:1px solid #ccc;padding:7px 10px;background:#f6f6f6;font-family:men=
lo,consolas,monospace;font-size:90%;white-space:pre-wrap;word-wrap:break=
-word;overflow-wrap:break-word;"><i>    removed =3D [ "id2", "id31", ...=
 ];
    fooIds =3D&gt; [ "id1", null, null, "id3", "id4", null, null, null ]=
</i><i><br></i></pre><div><i><br></i></div><div><i>and </i><b><i>splices=
 in</i></b><i>&nbsp;(one-by-one in order, starting with the lowest index=
) all of the ids in the added array:</i><i><br></i></div><div><i><br></i=
></div><pre style=3D"margin:7px 0;border-radius:3px;border:1px solid #cc=
c;padding:7px 10px;background:#f6f6f6;font-family:menlo,consolas,monospa=
ce;font-size:90%;white-space:pre-wrap;word-wrap:break-word;overflow-wrap=
:break-word;"><i>    added =3D [{ id: "id5", index: 0, ... }];
    fooIds =3D&gt; [ "id5", "id1", null, null, "id3", "id4", null, null,=
 null ]</i><i><br></i></pre><div><i><br></i></div><div><i>and </i><b><i>=
truncates</i></b><i>&nbsp;or </i><b><i>extends</i></b><i>&nbsp;to the ne=
w total length, then the results will now be in the new state.</i><i><br=
></i></div><div><i><br></i></div><div><i>Note: splicing in adds the item=
 at the given index, incrementing the index of all items previously at t=
hat or a higher index. Splicing out is the inverse, removing the item an=
d decrementing the index of every item after it in the array.</i><br></d=
iv><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>=
Section 5.8<br></div><div><br></div><div>&nbsp;&nbsp; 2.&nbsp; It must r=
esolve back-references to previous method results that<br></div><div>&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; were processed on a different server.&=
nbsp; This is a relatively<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; simple syntactic substitution, described in section 3.6.<br></div>=
<div><br></div><div>Relatively simple, yes, but does require properly pa=
rsing the JSON<br></div><div>(right?).<br></div></blockquote><div><br></=
div><div>Yes.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fa=
stmail-quoted"><div>Section 6.3<br></div><div><br></div><div>Why does Bl=
ob/copy use 'blobIds' instead of 'create' like generic /copy?<br></div><=
/blockquote><div><br></div><div>Because it's a different format (just an=
 array of ids rather than a map of creation id to object). We considered=
 it clearer if arguments with the same name were of the same type.<br></=
div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div=
>&nbsp;&nbsp; o&nbsp; *fromAccountId*: "Id" The id of the account emails=
 were copied<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from.<br></div=
><div><br></div><div>&nbsp;&nbsp; o&nbsp; *accountId*: "Id" The id of th=
e account emails were copied to.<br></div><div><br></div><div>I assme th=
e "emails" are copy/paste bugs.<br></div></blockquote><div><br></div><di=
v>Yes, good spot. I've fixed this.<br></div><div><br></div><blockquote t=
ype=3D"cite" id=3D"fastmail-quoted"><div>Section 7.2<br></div><div><br><=
/div><div>&nbsp;&nbsp; o&nbsp; *deviceClientId*: "String" (immutable) An=
 id that uniquely<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; identifie=
s the client + device it is running on.&nbsp; The purpose of<br></div><d=
iv>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this is to allow clients to identify w=
hich PushSubscription<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objec=
ts they created even if they lose their local state, so they<br></div><d=
iv>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; can revoke or update them.&nbsp; This =
string MUST be different on<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
 different devices, and be different from other vendors.&nbsp; It SHOULD=
<br></div><div><br></div><div>What's the first vendor that's the basis f=
or comparison?<br></div></blockquote><div><br></div><div>Sorry, I'm not =
quite sure what you're asking here.</div><div><br></div><blockquote type=
=3D"cite" id=3D"fastmail-quoted"><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; be =
easy to re-generate, not depend on persisted state.&nbsp; A secure<br></=
div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hash that includes both a device=
 id and vendor id is one way this<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp; could be achieved.<br></div><div><br></div><div>Easy to re-genera=
te by whom?<br></div></blockquote><div><br></div><div>The client.</div><=
div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>How =
does the client get the deviceClientId value the first time?<br></div></=
blockquote><div><br></div><div>It generates it from its vendor app id an=
d a device id it gets from the OS.<br></div><div><br></div><div>e.g. <co=
de style=3D"border-radius:3px;border:1px solid #ccc;padding:1px 3px;back=
ground:#f6f6f6;font-family:menlo,consolas,monospace;font-size:90%;">sha2=
56( "com.example.mail" . $device-id )</code></div><div><br></div><div>(w=
here I own example.com and <code style=3D"border-radius:3px;border:1px s=
olid #ccc;padding:1px 3px;background:#f6f6f6;font-family:menlo,consolas,=
monospace;font-size:90%;">$device-id</code> is from the OS).</div><div><=
br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>&nbsp;&nb=
sp; The POST request MUST have a content type of "application/json" and<=
br></div><div>&nbsp;&nbsp; contain the UTF-8 JSON encoded object as the =
body.&nbsp; The request MUST<br></div><div><br></div><div>(editorial) Ar=
e we back to what the JMAP server sends to the notification URL?<br></di=
v></blockquote><div><br></div><div>Yes.</div><div><br></div><blockquote =
type=3D"cite" id=3D"fastmail-quoted"><div>&nbsp;&nbsp; The push subscrip=
tion is tied to the credentials used to authenticate<br></div><div>&nbsp=
;&nbsp; the API request that created it.&nbsp; Should these credentials =
expire or<br></div><div>&nbsp;&nbsp; be revoked, the push subscription M=
UST be destroyed by the JMAP<br></div><div>&nbsp;&nbsp; server.<br></div=
><div><br></div><div>How is the JMAP server expected to learn about cred=
ential expiry or<br></div><div>revocation?<br></div></blockquote><div><b=
r></div><div>That's implementation dependent.<br></div><div><br></div><b=
lockquote type=3D"cite" id=3D"fastmail-quoted"><div>&nbsp;&nbsp; When th=
ese credentials have their own expiry (i.e. it is a session<br></div><di=
v>&nbsp;&nbsp; with a timeout), the server SHOULD NOT set or bound the e=
xpiry time<br></div><div><br></div><div>(editorial) A session where?<br>=
</div></blockquote><div><br></div><div>If your authentication has the co=
ncept of a session that expires after a set amount of time, or after a s=
et amount of idle time (rather than, say, just a BASIC username/password=
 with no expiry time).<br></div><div><br></div><blockquote type=3D"cite"=
 id=3D"fastmail-quoted"><div>Section 7.2.1<br></div><div><br></div><div>=
I would suggest a section reference to "follows the common /get<br></div=
><div>semantics from Section 5.1, with the exceptions that [...]" to mor=
e<br></div><div>clearly incorporate by reference the existing text.<br><=
/div></blockquote><div><br></div><div>OK, I've added a reference.</div><=
div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>What=
 nature of authorization checking is done for these get requests?<br></d=
iv></blockquote><div><br></div><div>These are standard method calls that=
 are sent like any other, and so authenticated like any other at the HTT=
P request level.<br></div><div><br></div><blockquote type=3D"cite" id=3D=
"fastmail-quoted"><div>Section 7.2.3<br></div><div><br></div><div>Given =
that all of these times are going to be in the past for all<br></div><di=
v>readers, do we want to say something about what time the client is<br>=
</div><div>performing these operations at?<br></div></blockquote><div><b=
r></div><div>Yes, that's reasonable. I have done this (and fixed up the =
times in the examples to make sense relative to one another).</div><div>=
<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section =
8.1<br></div><div><br></div><div>Again, this (duplicated!) MUST for TLS =
prevents future&nbsp; HTTP/3 QUIC<br></div><div>usage.<br></div><div><br=
></div><div>Also, please reference RFC 7525.<br></div></blockquote><div>=
<br></div><div>I have added a reference to&nbsp;RFC 7525 and removed the=
 duplication.<br></div><div><br></div><blockquote type=3D"cite" id=3D"fa=
stmail-quoted"><div>Section 8.2<br></div><div><br></div><div>Please reco=
mmend against Basic. Also, the concept of what a "user's regular passwor=
d" is seems a bit<br></div><div>underspecified.<br></div></blockquote><d=
iv><br></div><div>OK. I've modified this to read:<br></div><div><br></di=
v><div><i>Use of the Basic authentication scheme is NOT RECOMMENDED. Ser=
vices that choose to use this are strongly recommended to require genera=
tion of a unique "app password" via some external mechanism for each cli=
ent they wish to connect.</i><br></div><div><br></div><div>(I've just cu=
t "user's regular password" since it's redundant.)</div><div><br></div><=
blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section 8.3<br></di=
v><div><br></div><div>DNS SRV-based autodiscovery seems the only type of=
 autodiscovery<br></div><div>available that is susceptible to the attack=
 described here; you should<br></div><div>probably just state that expli=
citly.<br></div></blockquote><div><br></div><div>OK, will do.</div><div>=
<br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><div>Section =
8.4<br></div><div><br></div><div>While true, 8529's security considerati=
ons are pretty sparse; we could<br></div><div>say more here about not ov=
erscanning, limiting string length, being<br></div><div>strict about tok=
enization, etc.<br></div></blockquote><div><br></div><div>Do you have an=
y suggested text?</div><div><br></div><blockquote type=3D"cite" id=3D"fa=
stmail-quoted"><div>Section 8.7<br></div><div><br></div><div>&nbsp;&nbsp=
; and JMAP server the client MUST specify encryption keys when<br></div>=
<div>&nbsp;&nbsp; establishing the PushSubscription and ignore any push =
notification<br></div><div>&nbsp;&nbsp; received that is not encrypted a=
nd signed with those keys.<br></div><div><br></div><div>There's no signi=
ng in RFC 8291; there is, however, a separate<br></div><div>authenticati=
on secret.<br></div></blockquote><div><br></div><div>Right, I will updat=
e this text.</div><div><br></div><blockquote type=3D"cite" id=3D"fastmai=
l-quoted"><div>Section 8.8<br></div><div><br></div><div>I would be surpr=
ised if the propsects for traffic analysis were limited<br></div><div>to=
 just push.&nbsp; Even regular accesses may still be susceptible to traf=
fic<br></div><div>analysis.<br></div></blockquote><div><br></div><div>No=
 doubt something could be gleaned. I will make this slightly more generi=
c, although push notifications still have the clearer information leak.<=
/div><div><br></div><blockquote type=3D"cite" id=3D"fastmail-quoted"><di=
v>Section 9.4.3<br></div><div><br></div><div>You probably should documen=
t that recourse for non-response after 30<br></div><div>days is to reque=
st action from the IESG.<br></div></blockquote><div><br></div><div>OK.<b=
r></div><div><br></div><div>Cheers,<br></div><div>Neil.</div></body></ht=
ml>
--56d5023489bc44edba6b6a89a7d30620--


From nobody Thu Feb 28 16:47:37 2019
Return-Path: <internet-drafts@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 0CB431310E8; Thu, 28 Feb 2019 16:47:36 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: internet-drafts@ietf.org
To: <i-d-announce@ietf.org>
Cc: jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.92.1
Auto-Submitted: auto-generated
Precedence: bulk
Reply-To: jmap@ietf.org
Message-ID: <155140125601.28740.3399905901977382764@ietfa.amsl.com>
Date: Thu, 28 Feb 2019 16:47:36 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/r8lWMnM3mxSX6WVfAVNZdJacbfY>
Subject: [Jmap] I-D Action: draft-ietf-jmap-core-15.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 01 Mar 2019 00:47:36 -0000

A New Internet-Draft is available from the on-line Internet-Drafts directories.
This draft is a work item of the JSON Mail Access Protocol WG of the IETF.

        Title           : JSON Meta Application Protocol
        Authors         : Neil Jenkins
                          Chris Newman
	Filename        : draft-ietf-jmap-core-15.txt
	Pages           : 77
	Date            : 2019-02-28

Abstract:
   This document specifies a protocol for clients to efficiently query,
   fetch and modify JSON-based data objects, with support for push
   notification of changes and fast resynchronisation, and out-of-band
   binary data upload/download.


The IETF datatracker status page for this draft is:
https://datatracker.ietf.org/doc/draft-ietf-jmap-core/

There are also htmlized versions available at:
https://tools.ietf.org/html/draft-ietf-jmap-core-15
https://datatracker.ietf.org/doc/html/draft-ietf-jmap-core-15

A diff from the previous version is available at:
https://www.ietf.org/rfcdiff?url2=draft-ietf-jmap-core-15


Please note that it may take a couple of minutes from the time of submission
until the htmlized version and diff are available at tools.ietf.org.

Internet-Drafts are also available by anonymous FTP at:
ftp://ftp.ietf.org/internet-drafts/


From nobody Thu Feb 28 16:52:05 2019
Return-Path: <internet-drafts@ietf.org>
X-Original-To: jmap@ietf.org
Delivered-To: jmap@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id D8C9E1310E7; Thu, 28 Feb 2019 16:52:03 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: internet-drafts@ietf.org
To: <i-d-announce@ietf.org>
Cc: jmap@ietf.org
X-Test-IDTracker: no
X-IETF-IDTracker: 6.92.1
Auto-Submitted: auto-generated
Precedence: bulk
Reply-To: jmap@ietf.org
Message-ID: <155140152384.28718.13025040104475494338@ietfa.amsl.com>
Date: Thu, 28 Feb 2019 16:52:03 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/wnwlK_qoukhbFeaPNRY8ycbhDr0>
Subject: [Jmap] I-D Action: draft-ietf-jmap-mail-15.txt
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 01 Mar 2019 00:52:04 -0000

A New Internet-Draft is available from the on-line Internet-Drafts directories.
This draft is a work item of the JSON Mail Access Protocol WG of the IETF.

        Title           : JMAP for Mail
        Authors         : Neil Jenkins
                          Chris Newman
	Filename        : draft-ietf-jmap-mail-15.txt
	Pages           : 90
	Date            : 2019-02-28

Abstract:
   This document specifies a data model for synchronising email data
   with a server using JMAP.  Clients can use this to efficiently
   search, access, organise and send messages, and get pushed
   notifications for fast resynchronisation when new messages are
   delivered or a change is made in another client.


The IETF datatracker status page for this draft is:
https://datatracker.ietf.org/doc/draft-ietf-jmap-mail/

There are also htmlized versions available at:
https://tools.ietf.org/html/draft-ietf-jmap-mail-15
https://datatracker.ietf.org/doc/html/draft-ietf-jmap-mail-15

A diff from the previous version is available at:
https://www.ietf.org/rfcdiff?url2=draft-ietf-jmap-mail-15


Please note that it may take a couple of minutes from the time of submission
until the htmlized version and diff are available at tools.ietf.org.

Internet-Drafts are also available by anonymous FTP at:
ftp://ftp.ietf.org/internet-drafts/


From nobody Thu Feb 28 16:58:19 2019
Return-Path: <neilj@fastmailteam.com>
X-Original-To: jmap@ietfa.amsl.com
Delivered-To: jmap@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 024661310EC for <jmap@ietfa.amsl.com>; Thu, 28 Feb 2019 16:58:18 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.983
X-Spam-Level: 
X-Spam-Status: No, score=-1.983 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MIME_HEADER_CTYPE_ONLY=0.717, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b=ODiycZ38; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=edvNtl6G
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 SQmNhdjoS5vt for <jmap@ietfa.amsl.com>; Thu, 28 Feb 2019 16:58:16 -0800 (PST)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 672481310E8 for <jmap@ietf.org>; Thu, 28 Feb 2019 16:58:16 -0800 (PST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 5B8B127A22 for <jmap@ietf.org>; Thu, 28 Feb 2019 19:58:15 -0500 (EST)
Received: from imap7 ([10.202.2.57]) by compute6.internal (MEProxy); Thu, 28 Feb 2019 19:58:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=message-id:date:from:to:subject :content-type; s=fm2; bh=2vqj7X+qws+BiRJWQqsmtkEceTi/NWTknJxLen8 Vt9k=; b=ODiycZ38dpmJWDfv3LOGFr0USk55x5VfBFU/I5fQLh603vHIXBcESE8 ET0buGfzPRI9JDb0AD4fbw7lU3+agq20zYfr6BWTvS6j+4d55aNk5H3UYaoE3IMW xnttyxzO82+1YenerYISPuL0Jieolf4gR+g2Xw2srsBVkb9nPzVHc2hdUfKoqSS1 +pkkyPiBxh6fv4uNR586dqT7MsDRN87M7jmtTaZKRa0sdd3FeusOJ+elk7UAjIRa Vfey3rVAFl7ul4GIRI8QGJctYRR2Kyugqj9c8Ee2CCfooRg15TSvuw+o+yX7o/Fc r7rpK1LadFAVbRB7lKGlhkfMMBasRfg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id:subject :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=2vqj7X+qws+BiRJWQqsmtkEceTi/NWTknJxLen8Vt9k=; b=edvNtl6G 14cz0JaJOiUVUxx9rOcurCeZSZZIUY7MbrtWyj9cCUpLeCi9xJckkjaDFh0H2OmG lxGRGKGeKyuYSnhMoCqhzyUC0ugwnA8cTceL5Rz4AnLhYmST2ZRgtYX5vgCNQjDz HxlPk3PC/N/AcC4j4Sgf1ppBQ5mciy+szKZL0c92lYvXTtB1YGG3D9ynlFzo66KR vcaQNUTmIqsAdBfveUnbiJzIkIq83E8O5pBDmNvu1+PTcXA22sa4lM9+zAyhN8Z+ WWLjwkz/RaczE9XvxwP6+UbT8vjhvwsb+OYf/BnppFkWwwU6f+7mbL7/RCuHwyfe PkchutweaPDILQ==
X-ME-Sender: <xms:poN4XKBG3ICQNBf3zPLG65wrCbtVbqbYW1Jh4YtLMCoO89U6aloutg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedutddrvdeggdefudcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgfkfffhvffutgesrgdtreerreertdenucfhrhhomhepfdfpvghilhculfgv nhhkihhnshdfuceonhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhmqeenucfrrg hrrghmpehmrghilhhfrhhomhepnhgvihhljhesfhgrshhtmhgrihhlthgvrghmrdgtohhm necuvehluhhsthgvrhfuihiivgeptd
X-ME-Proxy: <xmx:poN4XOWsDe_6D2_Hwl34gjmgM17J0Cn5dLacQJ0g3E5GMfpHJ4aV-A> <xmx:poN4XJBYB9_pIOeBNU0dC5npmZwcohKKh67ycJWvdBIcFsyGu-Cb9Q> <xmx:poN4XFKgJzH-lbjwlI_w-RQ9hz03e3ioeBRpfYD0NApuNUlo8bVCpw> <xmx:p4N4XPE9rTR9fHJJtJvqE6JuYEYiwsP3O5ZGi9_ZekNTiacasfFfKQ>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id AAD062058C; Thu, 28 Feb 2019 19:58:14 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.5-925-g644bf8c-fmstable-20190228v5
X-Me-Personality: 64588216
Message-Id: <8a1bb580-760f-43e8-887b-cf98510e4739@beta.fastmail.com>
Date: Thu, 28 Feb 2019 19:58:14 -0500
From: "Neil Jenkins" <neilj@fastmailteam.com>
To: "IETF JMAP Mailing List" <jmap@ietf.org>
Content-Type: multipart/alternative; boundary=c167802a222046359131009490462fa6
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/ZcLHCsgm9RoRiU5Xwz8bp5tDgNM>
Subject: [Jmap] Core/Mail v15 drafts
X-BeenThere: jmap@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: JSON Message Access Protocol <jmap.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jmap>, <mailto:jmap-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap/>
List-Post: <mailto:jmap@ietf.org>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jmap>, <mailto:jmap-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 01 Mar 2019 00:58:18 -0000

--c167802a222046359131009490462fa6
Content-Type: text/plain

Hi all,

I have just uploaded new drafts which include all the edits addressing the feedback from the IETF last call reviews.

Cheers,
Neil.
--c167802a222046359131009490462fa6
Content-Type: text/html

<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div><div>Hi all,</div><div><br></div><div>I have just uploaded new drafts which include all the edits addressing the feedback from the IETF last call reviews.<br></div><div><div><br></div></div><div>Cheers,<br></div><div>Neil.<br></div></div></body></html>
--c167802a222046359131009490462fa6--

