Internet DRAFT - draft-farrell-ufmrg-sample

draft-farrell-ufmrg-sample







Network Working Group                                         S. Farrell
Internet-Draft                                   Trinity College, Dublin
Intended status: Informational                              19 June 2023
Expires: 21 December 2023


          Usable Formal Methods Research Group Sample Problems
                     draft-farrell-ufmrg-sample-00

Abstract

   This draft provides reasoning as to why the Usable Formal Methods
   research group might benefit from having an IETF-relevant sample
   problem and describes one such (IMAP search).  This is just an
   initial draft aiming to help move discussion forward so may be
   dropped or replaced by other drafts or the research group may prefer
   some non I-D format, or the research group may decide that sample
   problems aren't sufficiently useful.  Early days, basically!

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 21 December 2023.

Copyright Notice

   Copyright (c) 2023 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.





Farrell                 Expires 21 December 2023                [Page 1]

Internet-Draft                 UFM Sample                      June 2023


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Success Criteria  . . . . . . . . . . . . . . . . . . . .   3
     1.2.  Discussion Venues . . . . . . . . . . . . . . . . . . . .   3
   2.  IMAP Search . . . . . . . . . . . . . . . . . . . . . . . . .   3
     2.1.  Background  . . . . . . . . . . . . . . . . . . . . . . .   3
     2.2.  Underlying Specifications . . . . . . . . . . . . . . . .   4
     2.3.  Text from RFC 9051  . . . . . . . . . . . . . . . . . . .   4
   3.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  17
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .  17
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  17
   6.  Informative References  . . . . . . . . . . . . . . . . . . .  17
   Appendix A.  Changes from Earlier Versions  . . . . . . . . . . .  18
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  18

1.  Introduction

   The Usable Formal Methods research group [ufmrg] has discussed the
   idea that having one or more "sample" problems might be useful for a
   number of reasons:

   *  to provide a small but realistic IETF-relevant problem with which
      proponents of particular formal methods can demonstrate their
      preferred methodologies

   *  to produce relatively simple formal methods artefacts that deal
      with a problem familiar to many IETF participants

   *  to allow for comparison between formal methods artefacts so that
      IETF participants can better understand which mechanisms are best
      used when

   *  to possibly discover something new about the sample problems or
      about implementations of those

   The hope is that this should help both sets of people better
   understand how formal methods may be useful for IETF work.

   We posit that the following characteristics will help us identify one
   or more "good" sample problems:

   *  the problem should be well-understood by many IETF participants
      and easy to understand for formal methods people seeing the
      problem description for the first time






Farrell                 Expires 21 December 2023                [Page 2]

Internet-Draft                 UFM Sample                      June 2023


   *  the problem should be simple, so that the formal methods artefacts
      produced don't overwhelm IETF participants and to lower the effort
      required for formal methods people to demonstrate how their
      preferred mechanisms work for that problem

   We provide an initial description of one such problem in the section
   2.  If additional sample problems are proposed, those could be
   documented in other sections of this draft or in other documents.
   (To be clear: the author would welcome such text - the more the
   merrier for now.)

1.1.  Success Criteria

   If this approach succeeds we would expect:

   *  to see formal methods proponents publish analyses of the sample
      problem(s)

   *  to see IETF participants use/reference those analyses

   *  to eventually see teams of IETF participants (with implementation/
      deployment experience) work together with proponents of formal
      method schemes to extend those analyses

   If this approach doesn't get traction, we will most likely hear
   crickets.

1.2.  Discussion Venues

   The github repo for this draft is at:

   https://github.com/sftcd/ufmrg-sample

   PRs, issues etc are welcome.  Substantive discussion however should
   for now at least be directed to the UFMRG mailing list:
   ufmrg@irtf.org

2.  IMAP Search

2.1.  Background

   UFMRG recently [ufmrg-interim] discussed the idea of using IMAP
   search as a sample problem.  The reasons for considering this
   include:

   *  IMAP is familiar to all concerned, and doesn't require specialist
      cryptographic understanding




Farrell                 Expires 21 December 2023                [Page 3]

Internet-Draft                 UFM Sample                      June 2023


   *  IMAP search is widely used, apparently particularly by mobile
      device mail user agents (MUAs)

   *  IMAP search has some complexity, e.g. working for connections from
      multiple MUAs at the same time, and with some statefullness

   *  a description of IMAP search may be relatively easy to extract
      from the relevant RFCs (I'm about to find out if that's true:-)

   The basic problem here is for an MUA to provide search criteria to a
   message store (MS) and to be returned information about the set of
   email messages that match the search criteria.  Further IMAP
   operations may be performed on the search results, e.g. to move all
   matching messages to another folder.  A typical mail account will be
   used by multiple MUAs in parallel, so that the same person may be
   searching, moving or deleting from a mobile MUA and a desktop MUA at
   the same time, possibly leading to interesting implementation or
   protocol failure cases.

2.2.  Underlying Specifications

   IMAP search is primarily defined in [RFC9051], section 6.4.4 but with
   some additional ABNF definitions defined elsewhere required.  We
   reproduce relevant text in the next section.  For simplicity, we omit
   some of the possible search criteria in the description below.

   The text below is a verbatim copy of the text version of RFC9051,
   section 6.4.4.  Future versions of this draft will likely simplify
   this text, and we'll try find a better way to include snippets of RFC
   text.  We've not yet included the references from that text.

   For now, the purpose of this text is really to try help figure out
   what kind of sample problem description might be useful, so this is
   not yet intended to be something that could be used to generate a
   formal analysis of the IMAP search command.

2.3.  Text from RFC 9051

   BEGIN TEXT FROM 9051

6.4.4.  SEARCH Command

   Arguments:    OPTIONAL result specifier

                 OPTIONAL [CHARSET] specification

                 searching criteria (one or more)




Farrell                 Expires 21 December 2023                [Page 4]

Internet-Draft                 UFM Sample                      June 2023


   Responses:    OPTIONAL untagged response:  ESEARCH

   Result:       OK -  search completed
                 NO -  search error: can't search that [CHARSET] or
                    criteria
                 BAD -  command unknown or arguments invalid

   The SEARCH command searches the mailbox for messages that match the
   given searching criteria.

   The SEARCH command may contain result options.  Result options
   control what kind of information is returned about messages matching
   the search criteria in an untagged ESEARCH response.  If no result
   option is specified or empty list of options is specified as "()",
   ALL is assumed (see below).  The order of individual options is
   arbitrary.  Individual options may contain parameters enclosed in
   parentheses.  (However, if an option has a mandatory parameter, which
   can always be represented as a number or a sequence-set, the option
   parameter does not need the enclosing parentheses.  See "Formal
   Syntax" (Section 9) for more details.)  If an option has parameters,
   they consist of atoms and/or strings and/or lists in a specific
   order.  Any options not defined by extensions that the server
   supports MUST be rejected with a BAD response.

   Note that IMAP4rev1 used SEARCH responses [RFC3501] instead of
   ESEARCH responses.  Clients that support only IMAP4rev2 MUST ignore
   SEARCH responses.

   This document specifies the following result options:

   MIN
      Return the lowest message number/UID that satisfies the SEARCH
      criteria.

      If the SEARCH results in no matches, the server MUST NOT include
      the MIN result option in the ESEARCH response; however, it still
      MUST send the ESEARCH response.

   MAX
      Return the highest message number/UID that satisfies the SEARCH
      criteria.

      If the SEARCH results in no matches, the server MUST NOT include
      the MAX result option in the ESEARCH response; however, it still
      MUST send the ESEARCH response.

   ALL
      Return all message numbers/UIDs that satisfy the SEARCH criteria



Farrell                 Expires 21 December 2023                [Page 5]

Internet-Draft                 UFM Sample                      June 2023


      using the sequence-set syntax.  Note that the client MUST NOT
      assume that messages/UIDs will be listed in any particular order.

      If the SEARCH results in no matches, the server MUST NOT include
      the ALL result option in the ESEARCH response; however, it still
      MUST send the ESEARCH response.

   COUNT
      Return the number of messages that satisfy the SEARCH criteria.
      This result option MUST always be included in the ESEARCH
      response.

   SAVE
      This option tells the server to remember the result of the SEARCH
      or UID SEARCH command (as well as any command based on SEARCH,
      e.g., SORT and THREAD [RFC5256]) and store it in an internal
      variable that we will reference as the "search result variable".
      The client can use the "$" marker to reference the content of this
      internal variable.  The "$" marker can be used instead of message
      sequence or UID sequence in order to indicate that the server
      should substitute it with the list of messages from the search
      result variable.  Thus, the client can use the result of the
      latest remembered SEARCH command as a parameter to another
      command.  See Section 6.4.4.1 for details on how the value of the
      search result variable is determined, how it is affected by other
      commands executed, and how the SAVE return option interacts with
      other return options.

      In absence of any other SEARCH result option, the SAVE result
      option also suppresses any ESEARCH response that would have been
      otherwise returned by the SEARCH command.

   Note: future extensions to this document can allow servers to return
   multiple ESEARCH responses for a single extended SEARCH command.
   However, all options specified above MUST result in a single ESEARCH
   response if used by themselves or in combination.  This guarantee
   simplifies processing in IMAP4rev2 clients.  Future SEARCH extensions
   that relax this restriction will have to describe how results from
   multiple ESEARCH responses are to be combined.

   Searching criteria consist of one or more search keys.

   When multiple keys are specified, the result is the intersection (AND
   function) of all the messages that match those keys.  For example,
   the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers to all
   deleted messages from Smith with INTERNALDATE greater than February
   1, 1994.  A search key can also be a parenthesized list of one or
   more search keys (e.g., for use with the OR and NOT keys).



Farrell                 Expires 21 December 2023                [Page 6]

Internet-Draft                 UFM Sample                      June 2023


   Server implementations MAY exclude [MIME-IMB] body parts with
   terminal content media types other than TEXT and MESSAGE from
   consideration in SEARCH matching.

   The OPTIONAL [CHARSET] specification consists of the word "CHARSET"
   followed by the name of a character set from the registry
   [CHARSET-REG].  It indicates the [CHARSET] of the strings that appear
   in the search criteria.  [MIME-IMB] content transfer encodings and
   [MIME-HDRS] strings in [RFC5322]/[MIME-IMB] headers MUST be decoded
   before comparing text.  Servers MUST support US-ASCII and UTF-8
   charsets; other CHARSETs MAY be supported.  Clients SHOULD use UTF-8.
   Note that if CHARSET is not provided, IMAP4rev2 servers MUST assume
   UTF-8, so selecting CHARSET UTF-8 is redundant.  It is permitted for
   improved compatibility with existing IMAP4rev1 clients.

   If the server does not support the specified [CHARSET], it MUST
   return a tagged NO response (not a BAD).  This response SHOULD
   contain the BADCHARSET response code, which MAY list the CHARSETs
   supported by the server.

   In all search keys that use strings, and unless otherwise specified,
   a message matches the key if the string is a substring of the
   associated text.  The matching SHOULD be case insensitive for
   characters within the ASCII range.  Consider using [IMAP-I18N] for
   language-sensitive, case-insensitive searching.  Note that the empty
   string is a substring; this is useful when performing a HEADER search
   in order to test for a header field presence in the message.

   The defined search keys are as follows.  Refer to "Formal Syntax"
   (Section 9) for the precise syntactic definitions of the arguments.

   <sequence set>
      Messages with message sequence numbers corresponding to the
      specified message sequence number set.

   ALL
      All messages in the mailbox; the default initial key for ANDing.

   ANSWERED
      Messages with the \Answered flag set.

   BCC <string>
      Messages that contain the specified string in the envelope
      structure's Blind Carbon Copy (BCC) field.

   BEFORE <date>
      Messages whose internal date (disregarding time and timezone) is
      earlier than the specified date.



Farrell                 Expires 21 December 2023                [Page 7]

Internet-Draft                 UFM Sample                      June 2023


   BODY <string>
      Messages that contain the specified string in the body of the
      message.  Unlike TEXT (see below), this doesn't match any header
      fields.  Servers are allowed to implement flexible matching for
      this search key, for example, by matching "swim" to both "swam"
      and "swum" in English language text or only performing full word
      matching (where "swim" will not match "swimming").

   CC <string>
      Messages that contain the specified string in the envelope
      structure's CC field.

   DELETED
      Messages with the \Deleted flag set.

   DRAFT
      Messages with the \Draft flag set.

   FLAGGED
      Messages with the \Flagged flag set.

   FROM <string>
      Messages that contain the specified string in the envelope
      structure's FROM field.

   HEADER <field-name> <string>
      Messages that have a header field with the specified field-name
      (as defined in [RFC5322]) and that contain the specified string in
      the text of the header field (what comes after the colon).  If the
      string to search is zero-length, this matches all messages that
      have a header field with the specified field-name regardless of
      the contents.  Servers should use a substring search for this
      SEARCH item, as clients can use it for automatic processing not
      initiated by end users.  For example, this can be used when
      searching for Message-ID or Content-Type header field values that
      need to be exact or for searches in header fields that the IMAP
      server might not know anything about.

   KEYWORD <flag>
      Messages with the specified keyword flag set.

   LARGER <n>
      Messages with an RFC822.SIZE larger than the specified number of
      octets.

   NOT <search-key>
      Messages that do not match the specified search key.




Farrell                 Expires 21 December 2023                [Page 8]

Internet-Draft                 UFM Sample                      June 2023


   ON <date>
      Messages whose internal date (disregarding time and timezone) is
      within the specified date.

   OR <search-key1> <search-key2>
      Messages that match either search key.

   SEEN
      Messages that have the \Seen flag set.

   SENTBEFORE <date>
      Messages whose [RFC5322] Date: header field (disregarding time and
      timezone) is earlier than the specified date.

   SENTON <date>
      Messages whose [RFC5322] Date: header field (disregarding time and
      timezone) is within the specified date.

   SENTSINCE <date>
      Messages whose [RFC5322] Date: header field (disregarding time and
      timezone) is within or later than the specified date.

   SINCE <date>
      Messages whose internal date (disregarding time and timezone) is
      within or later than the specified date.

   SMALLER <n>
      Messages with an RFC822.SIZE smaller than the specified number of
      octets.

   SUBJECT <string>
      Messages that contain the specified string in the envelope
      structure's SUBJECT field.

   TEXT <string>
      Messages that contain the specified string in the header
      (including MIME header fields) or body of the message.  Servers
      are allowed to implement flexible matching for this search key,
      for example, matching "swim" to both "swam" and "swum" in English
      language text or only performing full-word matching (where "swim"
      will not match "swimming").

   TO <string>
      Messages that contain the specified string in the envelope
      structure's TO field.

   UID <sequence set>
      Messages with unique identifiers corresponding to the specified



Farrell                 Expires 21 December 2023                [Page 9]

Internet-Draft                 UFM Sample                      June 2023


      unique identifier set.  Sequence-set ranges are permitted.

   UNANSWERED
      Messages that do not have the \Answered flag set.

   UNDELETED
      Messages that do not have the \Deleted flag set.

   UNDRAFT
      Messages that do not have the \Draft flag set.

   UNFLAGGED
      Messages that do not have the \Flagged flag set.

   UNKEYWORD <flag>
      Messages that do not have the specified keyword flag set.

   UNSEEN
      Messages that do not have the \Seen flag set.

   Example:

     C: A282 SEARCH RETURN (MIN COUNT) FLAGGED
         SINCE 1-Feb-1994 NOT FROM "Smith"
     S: * ESEARCH (TAG "A282") MIN 2 COUNT 3
     S: A282 OK SEARCH completed

   Example:

     C: A283 SEARCH RETURN () FLAGGED
         SINCE 1-Feb-1994 NOT FROM "Smith"
     S: * ESEARCH (TAG "A283") ALL 2,10:11
     S: A283 OK SEARCH completed

   Example:

     C: A284 SEARCH TEXT "string not in mailbox"
     S: * ESEARCH (TAG "A284")
     S: A284 OK SEARCH completed
     C: A285 SEARCH CHARSET UTF-8 TEXT {12}
     S: + Ready for literal text
     C: отпуск
     S: * ESEARCH (TAG "A285") ALL 43
     S: A285 OK SEARCH completed


   The following example demonstrates finding the first unseen message
   in the mailbox:



Farrell                 Expires 21 December 2023               [Page 10]

Internet-Draft                 UFM Sample                      June 2023


   Example:

     C: A284 SEARCH RETURN (MIN) UNSEEN
     S: * ESEARCH (TAG "A284") MIN 4
     S: A284 OK SEARCH completed

   The following example demonstrates that if the ESEARCH UID indicator
   is present, all data in the ESEARCH response is referring to UIDs;
   for example, the MIN result specifier will be followed by a UID.

   Example:

     C: A285 UID SEARCH RETURN (MIN MAX) 1:5000
     S: * ESEARCH (TAG "A285") UID MIN 7 MAX 3800
     S: A285 OK SEARCH completed

   The following example demonstrates returning the number of deleted
   messages:

   Example:

     C: A286 SEARCH RETURN (COUNT) DELETED
     S: * ESEARCH (TAG "A286") COUNT 15
     S: A286 OK SEARCH completed

6.4.4.1.  SAVE Result Option and SEARCH Result Variable

   Upon successful completion of a SELECT or an EXAMINE command (after
   the tagged OK response), the current search result variable is reset
   to the empty sequence.

   A successful SEARCH command with the SAVE result option sets the
   value of the search result variable to the list of messages found in
   the SEARCH command.  For example, if no messages were found, the
   search result variable will contain the empty sequence.

   Any of the following SEARCH commands MUST NOT change the search
   result variable:

      a SEARCH command that caused the server to return the BAD tagged
      response,

      a SEARCH command with no SAVE result option that caused the server
      to return NO tagged response, and

      a successful SEARCH command with no SAVE result option.

   A SEARCH command with the SAVE result option that caused the server



Farrell                 Expires 21 December 2023               [Page 11]

Internet-Draft                 UFM Sample                      June 2023


   to return the NO tagged response sets the value of the search result
   variable to the empty sequence.

   When a message listed in the search result variable is EXPUNGEd, it
   is automatically removed from the list.  Implementors are reminded
   that if the server stores the list as a list of message numbers, it
   MUST automatically adjust them when notifying the client about
   expunged messages, as described in Section 7.5.1.

   If the server decides to send a new UIDVALIDITY value while the
   mailbox is opened, it causes the resetting of the search variable to
   the empty sequence.

   Note that even if the "$" marker contains the empty sequence of
   messages, it must be treated by all commands accepting message sets
   as parameters as a valid, but non-matching, list of messages.  For
   example, the "FETCH $" command would return a tagged OK response and
   no FETCH responses.  See also Example 5 in Section 6.4.4.4.

   The SAVE result option doesn't change whether the server would return
   items corresponding to MIN, MAX, ALL, or COUNT result options.

   When the SAVE result option is combined with the MIN or MAX result
   option, and both ALL and COUNT result options are absent, the
   corresponding MIN/MAX is returned (if the search result is not
   empty), but the "$" marker would contain a single message as returned
   in the MIN/MAX return item.

   If the SAVE result option is combined with both MIN and MAX result
   options, and both ALL and COUNT result options are absent, the "$"
   marker would contain zero messages, one message, or two messages as
   returned in the MIN/MAX return items.

   If the SAVE result option is combined with the ALL and/or COUNT
   result option(s), the "$" marker would always contain all messages
   found by the SEARCH or UID SEARCH command.

   The following table summarizes the additional requirement on ESEARCH
   server implementations described in this section.

           +==============================+====================+
           | Combination of Result Option |  "$" Marker Value  |
           +==============================+====================+
           |           SAVE MIN           |        MIN         |
           +------------------------------+--------------------+
           |           SAVE MAX           |        MAX         |
           +------------------------------+--------------------+
           |         SAVE MIN MAX         |     MIN & MAX      |



Farrell                 Expires 21 December 2023               [Page 12]

Internet-Draft                 UFM Sample                      June 2023


           +------------------------------+--------------------+
           |          SAVE * [m]          | all found messages |
           +------------------------------+--------------------+

                                  Table 4

   where '*' means "ALL" and/or "COUNT", and '[m]' means optional "MIN"
   and/or "MAX"

   Implementation note: server implementors should note that "$" can
   reference IMAP message sequences or UID sequences, depending on the
   context where it is used.  For example, the "$" marker can be set as
   a result of a SEARCH (SAVE) command and used as a parameter to a UID
   FETCH command (which accepts a UID sequence, not a message sequence),
   or the "$" marker can be set as a result of a UID SEARCH (SAVE)
   command and used as a parameter to a FETCH command (which accepts a
   message sequence, not a UID sequence).  Server implementations need
   to automatically map the "$" marker value to message numbers or UIDs,
   depending on the context where the "$" marker is used.

6.4.4.2.  Multiple Commands in Progress

   Use of a SEARCH RETURN (SAVE) command followed by a command using the
   "$" marker creates direct dependency between the two commands.  As
   directed by Section 5.5, a server MUST execute the two commands in
   the order they were received.

   A client MAY pipeline a SEARCH RETURN (SAVE) command with one or more
   commands using the "$" marker, as long as this doesn't create an
   ambiguity, as described in Section 5.5.  Examples 7-9 in
   Section 6.4.4.4 explain this in more details.

6.4.4.3.  Refusing to Save Search Results

   In some cases, the server MAY refuse to save a SEARCH (SAVE) result,
   for example, if an internal limit on the number of saved results is
   reached.  In this case, the server MUST return a tagged NO response
   containing the NOTSAVED response code and set the search result
   variable to the empty sequence, as described in Section 6.4.4.1.

6.4.4.4.  Examples Showing Use of the SAVE Result Option

   Only in this section: explanatory comments in examples that start
   with // are not part of the protocol.

   1.  The following example demonstrates how the client can use the
       result of a SEARCH command to FETCH headers of interesting
       messages:



Farrell                 Expires 21 December 2023               [Page 13]

Internet-Draft                 UFM Sample                      June 2023


       Example 1:

        C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994
            NOT FROM "Smith"
        S: A282 OK SEARCH completed, result saved
        C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])
        S: * 2 FETCH (UID 14 ...
        S: * 84 FETCH (UID 100 ...
        S: * 882 FETCH (UID 1115 ...
        S: A283 OK completed

       The client can also pipeline the two commands:

       Example 2:

        C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994
            NOT FROM "Smith"
        C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])
        S: A282 OK SEARCH completed
        S: * 2 FETCH (UID 14 ...
        S: * 84 FETCH (UID 100 ...
        S: * 882 FETCH (UID 1115 ...
        S: A283 OK completed

   2.  The following example demonstrates that the result of one SEARCH
       command can be used as input to another SEARCH command:

       Example 3:

        C: A300 SEARCH RETURN (SAVE) SINCE 1-Jan-2004
            NOT FROM "Smith"
        S: A300 OK SEARCH completed
        C: A301 UID SEARCH UID $ SMALLER 4096
        S: * ESEARCH (TAG "A301") UID ALL 17,900,901
        S: A301 OK completed

       Note that the second command in Example 3 can be replaced with:

        C: A301 UID SEARCH $ SMALLER 4096

       and the result of the command would be the same.

   3.  The following example shows that the "$" marker can be combined
       with other message numbers using the OR SEARCH criterion.

       Example 4:

        C: P282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994



Farrell                 Expires 21 December 2023               [Page 14]

Internet-Draft                 UFM Sample                      June 2023


            NOT FROM "Smith"
        S: P282 OK SEARCH completed
        C: P283 SEARCH CHARSET UTF-8 (OR $ 1,3000:3021) TEXT {8+}
        C: мать
        S: * ESEARCH (TAG "P283") ALL 882,1102,3003,3005:3006
        S: P283 OK completed

   4.  The following example demonstrates that a failed SEARCH sets the
       search result variable to the empty list.  The server doesn't
       implement the KOI8-R charset.

       Example 5:

        C: B282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994
            NOT FROM "Smith"
        S: B282 OK SEARCH completed
        C: B283 SEARCH RETURN (SAVE) CHARSET KOI8-R
            (OR $ 1,3000:3021) TEXT {4}
        C: XXXX
        S: B283 NO [BADCHARSET UTF-8] KOI8-R is not supported
       //After this command, the saved result variable contains
       //no messages.  A client that wants to reissue the B283
       //SEARCH command with another CHARSET would have to reissue
       //the B282 command as well.  One possible workaround for
       //this is to include the desired CHARSET parameter
       //in the earliest SEARCH RETURN (SAVE) command in a
       //sequence of related SEARCH commands, to cause
       //the earliest SEARCH in the sequence to fail.
       //A better approach might be to always use CHARSET UTF-8
       //instead.

       Note: Since this document format is restricted to 7-bit ASCII
       text, it is not possible to show actual KOI8-R data.  The "XXXX"
       is a placeholder for what would be 4 octets of 8-bit data in an
       actual transaction.

   5.  The following example demonstrates that it is not an error to use
       the "$" marker when it contains no messages.

       Example 6:

        C: E282 SEARCH RETURN (SAVE) SINCE 28-Oct-2006
            NOT FROM "Eric"
        C: E283 COPY $ "Other Messages"
       //The "$" contains no messages
        S: E282 OK SEARCH completed
        S: E283 OK COPY completed, nothing copied




Farrell                 Expires 21 December 2023               [Page 15]

Internet-Draft                 UFM Sample                      June 2023


       Example 7:

        C: F282 SEARCH RETURN (SAVE) KEYWORD $Junk
        C: F283 COPY $ "Junk"
        C: F284 STORE $ +FLAGS.Silent (\Deleted)
        S: F282 OK SEARCH completed
        S: F283 OK COPY completed
        S: F284 OK STORE completed

       Example 8:

        C: G282 SEARCH RETURN (SAVE) KEYWORD $Junk
        C: G283 SEARCH RETURN (ALL) SINCE 28-Oct-2006
            FROM "Eric"
       // The server can execute the two SEARCH commands
       // in any order, as they don't have any dependency.
       // For example, it may return:
        S: * ESEARCH (TAG "G283") ALL 3:15,27,29:103
        S: G283 OK SEARCH completed
        S: G282 OK SEARCH completed

       The following example demonstrates that the result of the second
       SEARCH RETURN (SAVE) always overrides the result of the first.

       Example 9:

        C: H282 SEARCH RETURN (SAVE) KEYWORD $Junk
        C: H283 SEARCH RETURN (SAVE) SINCE 28-Oct-2006
            FROM "Eric"
        S: H282 OK SEARCH completed
        S: H283 OK SEARCH completed
       // At this point "$" would contain results of H283

       The following example demonstrates behavioral difference for
       different combinations of ESEARCH result options.

       Example 10:

        C: C282 SEARCH RETURN (ALL) SINCE 12-Feb-2006
            NOT FROM "Smith"
        S: * ESEARCH (TAG "C283") ALL 2,10:15,21
      //$ value hasn't changed
        S: C282 OK SEARCH completed

        C: C283 SEARCH RETURN (ALL SAVE) SINCE 12-Feb-2006
            NOT FROM "Smith"
        S: * ESEARCH (TAG "C283") ALL 2,10:15,21
      //$ value is 2,10:15,21



Farrell                 Expires 21 December 2023               [Page 16]

Internet-Draft                 UFM Sample                      June 2023


        S: C283 OK SEARCH completed

        C: C284 SEARCH RETURN (SAVE MIN) SINCE 12-Feb-2006
            NOT FROM "Smith"
        S: * ESEARCH (TAG "C284") MIN 2
      //$ value is 2
        S: C284 OK SEARCH completed

        C: C285 SEARCH RETURN (MAX SAVE MIN) SINCE
            12-Feb-2006 NOT FROM "Smith"
        S: * ESEARCH (TAG "C285") MIN 2 MAX 21
      //$ value is 2,21
        S: C285 OK SEARCH completed

        C: C286 SEARCH RETURN (MAX SAVE MIN COUNT)
            SINCE 12-Feb-2006 NOT FROM "Smith"
        S: * ESEARCH (TAG "C286") MIN 2 MAX 21 COUNT 8
      //$ value is 2,10:15,21
        S: C286 OK SEARCH completed

        C: C286 SEARCH RETURN (ALL SAVE MIN) SINCE
            12-Feb-2006 NOT FROM "Smith"
        S: * ESEARCH (TAG "C286") MIN 2 ALL 2,10:15,21
      //$ value is 2,10:15,21
        S: C286 OK SEARCH completed

   END TEXT FROM 9051

3.  Acknowledgments

   TBD

4.  Security Considerations

   The security properties of the sample problem(s) are of course of
   interest but this draft itself will hopefully introduce no new
   security considerations unless we omit something from the description
   of the sample problem(s) that leads to erroneous conclusions about
   those security properties.

5.  IANA Considerations

   No changes to IANA processes are made by this memo.

6.  Informative References






Farrell                 Expires 21 December 2023               [Page 17]

Internet-Draft                 UFM Sample                      June 2023


   [RFC9051]  Melnikov, A., Ed. and B. Leiba, Ed., "Internet Message
              Access Protocol (IMAP) - Version 4rev2", RFC 9051,
              DOI 10.17487/RFC9051, August 2021,
              <https://www.rfc-editor.org/info/rfc9051>.

   [ufmrg]    IRTF, "Usable Formal Methods Research Group", 2023,
              <https://datatracker.ietf.org/rg/ufmrg/about/>.

   [ufmrg-interim]
              IRTF, "May 2023 UFMRG online Interim meeting", 2023,
              <https://datatracker.ietf.org/doc/minutes-interim-2023-
              ufmrg-01-202305241500/>.

Appendix A.  Changes from Earlier Versions

   RFC editor: please remove this section.

   Draft -00:

   *  Initial revision

Author's Address

   Stephen Farrell
   Trinity College, Dublin
   Ireland
   Email: stephen.farrell@cs.tcd.ie
























Farrell                 Expires 21 December 2023               [Page 18]