[net.mail.headers] A protocol for distribution lists and their managements

Jacob_Palme_QZ%QZCOM.MAILNET@MIT-MULTICS.ARPA (07/10/86)

INTERNET has a defined standard for messaging (RFC821, RFC822 etc.)
but has no defined standard for distribution lists and their management.
Within the AMIGO project, we are working on the definition of such
a standard.

(AMIGO is a joint project between seven European countries.)

The purpose of this message is to outline the main parts of what should
be in such a standard, in order to get comments and ideas.

We are planning to define the standard in such a way, that it will
be usable both for distribution lists in mail networks based on
the X.400 and on the various variants of the internet mail protocols,
and also for connected distribution lists over gateways between
X.400-based and internet mail-based nets, since we expect that
this will occur often in the future.

(We are also working on distribution list facilities specifically
for use in X.400, but that work is not the topic of this message.)

In the text below, I will try to present our thinking in internet
terms rather than X.400 terms in order to make it easier to understand
for the participants of header-people.

One important goal of our standard is that any kind of nesting
of distribution lists should be possible without any risk of loops.

We think that such a standard should cover the following topics:

Distribution list expansion
---------------------------

During expansion, we are considering the following procedure of
modifying the header of a message when sent from one distribution
list to another. The procedure is illustrated by an example of
a message passing four distribution list expansions from the
original sender to the final recipient:

Input from original sender to DL-1 (the first distribution list):

     SMTP-sender: Original sender
     SMTP-rcpt:   DL-1

     From:        Original sender
     To:          DL-1

Output from DL-1:

     SMTP-sender: DL-1-request (=auditor of DL-1)
     SMTP-rcpt:   DL-2

     Resent-from: DL-1
     From:        Original sender
     To:          DL-1

Output from DL-2:

     SMTP-sender: DL-2-request (=auditor of DL-2)
     SMTP-rcpt:   DL-3

     Resent-from: DL-2
     From:        Original sender
     To:          DL-1

Output from DL-3:

     SMTP-sender: DL-3-request (=auditor of DL-3)
     SMTP-rcpt:   DL-4

     Resent-from: DL-3
     Resent-to:   DL-2
     From:        Original sender

Output from DL-4:

     SMTP-sender: DL-4-request (=auditor of DL-4)
     SMTP-rcpt:   Final recipient

     Resent-from: DL-4
     Resent-to:   DL-2, DL-3
     From:        Original sender
     To:          DL-1

In x.400-terms, "SMTP" above is replaced by "P3", "Resent-" by
"Forwarded IPMessageHeader" and the rest of the fields by the
inner "IPMessageHeader".

This procedure could formally described as follows:

- Add the name in the Resent-from field to the Resent-to field
  if that name is not already in any of the recipient fields.

- Put the name of the expanding list in the Resent-from field.

- Put the name of the auditor of the list as SMTP-sender.

The advantage with the procedure shown by the example above
is that all the distribution lists, through which the message
passes will be included in the header, enabling efficient loop
control.

Loop control
------------

With the procedure described above, three kinds of loop control
will be possible, and *all* three should be implemented:

(1) When receiving a message, do not accept it if the name of
    the DL is in the Resent-from or Resent-to fields.

(2) When expanding a list, do not forward the message to those
    members of the list which are in the "To", "From", "Resent-to",
    and "Resent-from" fields.

(3) Store the Message-ID-s of passing messages in a store of
    at least two weeks validity. Do not expand a message if
    its ID is in that list.

    Note: If the message lacks a Message-ID, the list should
    add such an ID, computed by a check-sum method. (In X.400,
    if the IPMessageID lacks an OR-name part, such a part should
    be added using the P2.originator, or, if that is lacking,
    the P1.originator).

Question: Why not put the name of the recipient in the "Resent-to"
fields of outgoing messages from a list.

Answer: (a) For a large list, this would create a very large header
            with all the list members.
        (b) Loop control of type (1) would then not be possible.

Stored propoerties of a distribution list
-----------------------------------------

A distribution list should store the following information about
itself:

- Name of the list
- Textual description of the list
- Whether anyone is allowed to send messages to be expanded by the
  list. Values TRUE or FALSE.
- List of those who are allowed to send messages to the list (if
  the previous value was FALSE).
- List of those who are to recieve messages from the list.
- Name of the auditor of the list, who is to receive conformations
  sent to the list, and who will be SMTP-sender (=P3.originator)
  of outgoing messages from the list.
- Optional name to which messages are to be forwarded if sent by
  someone who is not allowed to send via the list. (Typically this
  can be the moderator of a moderated list. It need not be
  identical with the auditor.)
- Charging algorithm valid for the list. Note that charging the
  sender is probably only reasonable for lists with a restricted
  list of allowed senders. Note that charging the sender in case of
  nested lists is not easy.
- Whether this is a moderated list.
- Whether this is a digested list. (Digesting could, for non-
  moderated lists, be done automatically by the DL software.)

Operations on the list
----------------------

The following list-management operations should be standardized.
It should be possible to transmit them as ASCII-text in the body
of messages. (Other forms, like direct-connection forms, of these
operations may also be possible.)

*Add member*: Adds one or more new members to a list.

*Delete member*: Deletes a member from a list.

*Get description*: Gets description and attributes of the list.
All the attributes described above should be retrievable. It
should be possible to input attributes to this operation to
control what data about the list which is requested. Note that
getting a list of all or some of the members of the list is
a special case of this operation.

*List lists*: Will return a list of all or some of the distribution
lists managed on a certain host.

*List personal mailboxes*: Will return a list of all or some of
the personal mailboxes managed on a certain host.

*Create list*: A newly created list will get default values on
all attributes. The creator will then if needed change these
with the operation "modify attributes".

*Modify attributes*: A general operation for modifying any
of the attributes of the list.

*Delete list*.

Access control
--------------

We are suggesting that in the simplified standard we are defining,
the rules for access control will not be standardized. However,
access control will certainly exist, and might cause some of
the operations described above, for some senders, not to be
performed or be performed only partially. For example, most people
will only be allowed to add and delete themselves from a list,
and a "list lists" operations may not return the names of local
closed lists.

Coding
------

The operations should be coded as ASCII text in the body of messages
sent to a special mailbox called "AMIGO-server" or something like
that, which should exist on each host.

Coding can be done either as human-writeable text (so that anyone
can code such an operation) or as machine-formatted text (requiring
anyone who wants to send such an oepration to have availabe a
program "directory user agent" to produce them).

A further question is whether several operations can be coded in
one message, and if so, if they can refer to each other, e.g.
one operation asking for a list of list names, and a second
operation asking for the description of each of them.

stef@nrtc-gremlin.ARPA (07/12/86)

I am bothered by several things in your proposed standard.  One is the
excessive structure it implies, and the implication that all hosts in
the entire ARPA Internet and the X.400 Internet will all have to
implement list managers that behave as you specify.  If that is a
requirement, then it is not going to be implemented at many sites.  

As I see it, and have repeatedly pointed out once or twice each year for
the last 5 years now, list distribution is something that must occur at
the User Agent Level, with the list distributror operating with the
"Authority of a User Agent".  

I essence, when a message arrives at a distributor, it is regarded by
the MTA as having been delivered.  If it cannot be delivered to the
distributor, then a failure should go to the originator.  If it is
delivered, and is received by the distributor, then failures should not
go to the originator.  So we see that "delivery" suggests that it is now
in the hands of a UA level entity.

Furthermore (and Jacob's proposal includes this idea) the distributor
opens up the 822 headers, or the P2 header, and modifies it in some way.
According to all the rules, this is never to be done by any MTA, so this
must be done by an entity operating with the authority of a UA.  When
the message is ready to be RePosted, then it reappears to the MTA as a
new item, with indications to return failures to the "new originator"
which is our "distributor".  

So, as I see it, if this is really a UA doing something to RePost
modified versions of received mail, it can do anything it wishes in the
way of adding legal new fields or changing the content of old ones to
accomplish its objectives.  In RFC822, it is possible to simply add
fields with new unique names, such as Distributor-ID:  and
Distribution-Item-ID:  to unambiguously identify the distribution agent
and the item that is being distributed.  I would then use this
information to contol looping.  If you see your own ID come back, or
your ecognize your own item ID in a new arrival, you can take whatever
actions seem correct, such as delete forthwith, or refer it to a human
for evaluation, or something.  (Distributor's Choice) 

In short, I would suggest finding a way to totally separate distribution
indicators and controls from MTA operations, to keep from getting them
entangled with each other.  The distributor standard should accept both
RFC822/821 and X.400-P1/P2 to be immutable as given, and work the
problem entirely at the UA level, assuming UA authority as I have
described it above.  I don't think all that structure is needed in this
simplified model.  

Also, I don't think that list management tools should be standardized in
the same document that standardizes on the mechanisms of distribution
9given some list) and the mechanisms for loop control.  These are two
very differenet kinds of standards, and they should be kept totally
separate so one can be replaced without affecting the other.  The
modularity concept is central to the whole idea of these kinds of
standards.  

Cheers - Stef

Jacob_Palme_QZ%QZCOM.MAILNET@MIT-MULTICS.ARPA (07/14/86)

(a) Can you explain more fully what is wrong with using Message-ID-s
for loop control?

I can see one problem. And that is which message-ID to use for
multi-body messages, and also finding the innermost message-ID
when X.400 messages have been converted into RFC-style messages
according to RFC987, where the inner message has become part
of the text body of the RFC822 message. But those problems, I
believe, are solvable.

Another problem is that some people or message systems may be
misusing Message-ID-s, for example by changing a message (e.g.
by adding text) without changing the ID. But that happens so
rarely that I do not see it as a problem.

(b) If we want conformance with X.400, we cannot put anything
into the IPMessageHeaders than is allowed by X.400. It would
be possible to add extra header fields by putting them into the
text of the message, but I intentionally tried to avoid adding
extra header fields when a field occuring in both X.400 headers
and RFC822 headers could be used reasonably well.

(c) I agree with you that "RESENT-" may not be good to use, primarily
because RFC987 does not recommend it in X.400 gateways. Instead,
RFC987 recommends putting inner bodies as text, so I guess that
is what one should do instead. This may cause some trouble for
a DL handler to distinguish between text which are headers of
forwardes messages, and text which is really text, but that problem
is probably solvable.

Jacob_Palme_QZ%QZCOM.MAILNET@MIT-MULTICS.ARPA (07/14/86)

The only part of our proposal which it would be very valuable
if all list expansion tools implemented is the loop controls,
both the creation of loop control info and the use of it for
loop controls. Apart from that, our proposal is intentionally
written such that it could incorporate existing activities. Even
those existing lists which are not willing to implement loop
control could be handled, by just ensuring that they will not
be part of any loops.

I agree with you that it would be much neater to add RFC822 header
fields for loop control. However, I do not believe this is possible.
The reason for this is that the proposal should work also under
X.400, and since CCITT seems to be firmly determined to put distribution
lists in the P1 layer, there is very small changes of getting
them to accept new P2 facilities for handling mailing lists.

stef@nrtc-gremlin.ARPA (07/14/86)

I am glad to hear that you intend for the main force of the Distribution
List Standard to apply to the Looping Controls.  I suggest that you make
this more obvious, with the "Required Optional Facilties" set forth as
being suggestions only.  

As for your problem with 822 vs X.400, I suggest that you do what you
must to comply with X.400, and let that reflect into new RFC822 headers
to be dealt with in the ARPA-X.400 Gateway, which I believe will not
prsent any difficulties on the 822 side, or the X.400 side.

RFC822 is extensible (Good Idea) so lets use the built in extensibility
to solve the problem without requiring any changes to anyting on the
ARPA Internet side.  

If CCITT and ISO want to muck about and make it difficult to do things
at the P2 level, they are only hurting their own products and services.
I am constantly amazed at how the European CCITT/ISO folks seem to feel
a strong need to regulate what I put in my headers.

Stef

Tommy_Ericson_QZ%QZCOM.MAILNET@MIT-MULTICS.ARPA (07/16/86)

I completely agree that distribution should be handled in UAL,
not in MTL. I do however heard another story of who is advocating
DL in MTL, possibly also with respect to restrictions on P2.
But I still think that we can influence the CCITT/ISO work.

Tommy