AD review of draft-ietf-imapapnd-rfc2088bis-03

Barry Leiba <[email protected]> Fri, 4 Mar 2016 18:03:20 -0500
Newsgroups gmane.ietf.imapext
Message-ID <CALaySJJxkYW+w1wY7NNH73P5qXoxutYz2VeM4E23BG0U_U5p5g@mail.gmail.com>
Here's my review of draft-ietf-imapapnd-rfc2088bis-03.  Much of this
is editorial, but there are a couple of substantive things here.

-- Introduction --

"(RFC 3501)" should be a citation, "[RFC3501]".  (And then you can
remove the citation at the beginning of Section 3, if you like (or
leave it, if you prefer).)

-- Section 3 --

   If the server does
   not advertise either of the above capabilities, the client must use
   synchronizing literals instead.

Minor point, but I'd word this like this (because I find "instead" to
be a bit inapt):

NEW
   If the server does
   not advertise either of the above capabilities, the client can only
   use synchronizing literals.
END

   The protocol receiver of an IMAP server must check the end of every
   received line

That "must" should probably be "MUST".

We probably should also take this opportunity to fix a bit of
confusion that's come up with respect to this paragraph in the past.
How about this?:

OLD
   The protocol receiver of an IMAP server must check the end of every
   received line (a sequence of octets that end with a CRLF) for an open
   brace ('{') followed by an octet count, a plus ('+'), and a close
   brace ('}') immediately preceeding the CRLF.  If it finds this
   sequence, it is the octet count of a non-synchronizing literal and
   the server MUST treat the specified number of following octets and
   the following line as part of the same command.  A server MAY still
   process commands and reject errors on a line-by-line basis, as long
   as it checks for non-synchronizing literals at the end of each line.

NEW
   The protocol receiver of an IMAP server MUST check the end of every
   received line (a sequence of octets that ends with a CRLF) for an
   open brace ('{') followed by an octet count, a plus ('+'), and a
   close brace ('}') immediately preceeding the CRLF.  If it finds this
   sequence, it is the octet count of a non-synchronizing literal and
   the server MUST treat the specified number of following octets and
   the following octets through the next CRLF as part of the same
   command.

   It's important to note that the literal is not delimited by CRLF.
   It ends after the number of bytes specified by the octet count, and
   the current command continues from there.  There might be a CRLF
   immediately after, which ends the command.  Or there might be more
   octets, specifying other command parameters, before the CRLF.  If
   a SPACE character is needed between parameters, it's important that
   the SPACE appear after the literal, in its appropriate place.

   A server MAY still process commands and reject errors on a
   line-by-line basis, as long as it checks for non-synchronizing
   literals at the end of each line.

END

...and...

OLD
  Example:

   C: A001 LOGIN {11+}
   C: FRED FOOBAR {7+}
   C: fat man
   S: A001 OK LOGIN completed

NEW
   Example:

   C: A001 LOGIN {11+}
   C: FRED FOOBAR {7+}
   C: fat man
   S: A001 OK LOGIN completed

   This is semantically equivalent to this version that uses quoted
   strings instead of literals:

   C: A001 LOGIN "FRED FOOBAR" "fat man"
   S: A001 OK LOGIN completed

   Note that the SPACE after FOOBAR in the first version corresponds
   to the SPACE between the two quoted strings in the second.
END

I used to get questions from implementors about the CRLF and SPACE
things.  If you really think this is unnecessary, feel free to opt out
of this suggestion.

-- Section 4 --

   a compliant LITERAL+ server
   implementation has to make a choice between several non-optimal
   choices:

There are only two choices, and in no one's reckoning does two count
as "several".  Maybe change "several" to "two"?

In bullet 1:

       (The server is allowed to send the tagged BAD/NO response before
       reading the whole non-synchronizing literal.)

Substantive: Shouldn't that be "the server is not allowed" (missing "not")?

Please change "most of commands" to "most commands".

"Denial Of Service attacks" shouldn't be capitalized, but should be
hyphenated; make it "denial-of-service attacks" (and similarly, remove
the capitals in Section 9).

-- Section 5 --
Substantive: Shouldn't references to "APPEND" be removed from here,
since we re-spun LITERAL- as applying to all commands?  Also, the last
sentence doesn't really make sense.  In order to reject the command
with BAD and TOOBIG, the server has to read (and discard) the literal
-- that is, it's already processing according to bullet 1 in Section
4.

So:

OLD
   The "LITERAL-" extension is almost identical to "LITERAL+", with one
   exception: when "LITERAL-" is advertised, non-synchronizing literals
   used in any command MUST NOT be larger than 4096 bytes.  Any literal
   larger than 4096 bytes MUST be sent as an RFC 3501 synchronizing
   literal.  A "LITERAL-" compliant server that encounters a non-
   synchronizing literal in APPEND larger than 4096 bytes MUST reject
   such APPEND command with a tagged BAD response that contains the
   TOOBIG response code [RFC4469].  It then MAY proceed as described in
   Section 4.

NEW
   The "LITERAL-" extension is almost identical to "LITERAL+", with one
   exception: when "LITERAL-" is advertised, non-synchronizing literals
   used in any command MUST NOT be larger than 4096 bytes.  Any literal
   larger than 4096 bytes MUST be sent as an RFC 3501 synchronizing
   literal.  A "LITERAL-" compliant server that encounters a non-
   synchronizing literal larger than 4096 bytes MUST read (and discard)
   the literal, and then reject the command with a tagged BAD response
   that contains the TOOBIG response code [RFC4469].

END

Substantive: I also suggest adding this paragraph, to make things
perfectly clear:

INSERT
   Note that the form of the non-synchronizing literal does not change:
   it still uses the "+" in the literal itself, even if the applicable
   extension is "LITERAL-".
END

-- Section 9 --

   Section 4 motivates creation of the "LITERAL-" extension
   that partially improves the situation.

I would just say 'The "LITERAL-" extension partially improved this situation.'

-- Section 10 --

OLD
   This document requests that IANA updates the above registry to
   include the entry for LITERAL+ capability pointing to this document.

NEW
   This document requests that IANA update the above registry to
   replace the reference for LITERAL+ to point to this document.

END

(And as a nit, change "adds" to "add" in the next paragraph; it should
be subjunctive mood.)

-- 
Barry, ART Director

_______________________________________________
imapext mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/imapext