[comp.mail.headers] ! and @ -- which RFC ?

WCSWR%CARLETON.BITNET@MITVMA.MIT.EDU (Walter Roberson) (04/02/88)

Someone has recently asked me where the 'rule' governing the
interpretation of '!' and '@', both in the same address, may be
found. If you have the address <aaa!bbb@ccc.uucp>, should
this be interpreted as aaa!bbb!ccc or ccc!aaa!bbb ? As far as I
know, the latter is correct -- but that is simply my experience,
and not something I've seen documented. Could someone please
point me to the appropriate RFC or other document?

   Thank you,

   Walter Roberson <WCSWR@CARLETON.BITNET>

diamant@hpfclp.HP.COM (John Diamant) (04/03/88)

> If you have the address <aaa!bbb@ccc.uucp>, should
> this be interpreted as aaa!bbb!ccc or ccc!aaa!bbb ? As far as I
> know, the latter is correct -- but that is simply my experience,
> and not something I've seen documented. Could someone please
> point me to the appropriate RFC or other document?

You are right about the correct interpretation.  RFC822 and RFC976 are
the places to look.  By RFC822 terminology, anything to the left of the
"@" that is not a recognized routing character by the standard ("!" is
not) is part of the local part.  That gives ccc precendence.  RFC976 says
that you should never have mixed addresses, but in case you do, the "@"
has precedence (to maintain compatibility with RFC822).  The right answer
is to use "@" precedence when there is an ambiguity, but to never generate
a mixed address yourself.


John Diamant
SDE				UUCP:  {hplabs,hpfcla}!hpfclp!diamant
Hewlett-Packard Co.		ARPA Internet: diamant%hpfclp@hplabs.HP.COM
Fort Collins, CO

SRA@XX.LCS.MIT.EDU (Rob Austein) (04/04/88)

    Date: Saturday, 2 April 1988  09:17-EST
    From: Walter Roberson <WCSWR%CARLETON.BITNET@MITVMA.MIT.EDU>

    Someone has recently asked me where the 'rule' governing the
    interpretation of '!' and '@', both in the same address, may be
    found. If you have the address <aaa!bbb@ccc.uucp>, should
    this be interpreted as aaa!bbb!ccc or ccc!aaa!bbb ? As far as I
    know, the latter is correct -- but that is simply my experience,
    and not something I've seen documented. Could someone please
    point me to the appropriate RFC or other document?

You lose.  There's no RFC because the community that uses RFCs as
their standards doesn't (formally) recognize "!" syntax.

In other words, the precedence is determined by whoever wrote the mail
code that you are using, and you can't count on any particular
combination of "!" and "@" being universally acceptable.

Now you know why even the usenet is moving away from use of "!" where
possible (q.v. the "smail" mailer program).

--Rob

craig@NNSC.NSF.NET (Craig Partridge) (04/04/88)

Look at RFC 976 by Mark Horton -- which makes recommendations on this subject.

Craig

rick@seismo.CSS.GOV (Rick Adams) (04/05/88)

The defacto standard is that RFC822 rules. That means that the
@ get precedence because the ! is in the "local part". Nothing
should look at the local part other than the host to the
right of the @.

You want to avoid mixing ! and @ if at all possible (and it is
almost always possible)

netinfo%garnet.Berkeley.EDU@violet.berkele (Postmaster & BITINFO) (04/05/88)

In reply to:

	X-Msg-Id: <02104116_CU00>
	Date:     02 Apr 88 10:17:00 EDT
	From: Walter Roberson <WCSWR%CARLETON.BITNET@mitvma.mit.edu>
	To: <header-people@mc.lcs.mit.edu>
	Subject:  ! and @ -- which RFC ?
	
	Someone has recently asked me where the 'rule' governing the
	interpretation of '!' and '@', both in the same address, may be
	found.

"xxx!yyy@zzz" is interpreted differently in UUCP mail and Internet
mail. In UUCP addresses the "!" takes precedence, in Internet mail
addresses the "@" take precedence.  This can be confusing to Internet/
UUCP hosts unless the appropriate address conversion is done going
both in and out of the local mail transport system. There are also
separate address conversion rules for addressees (To, Cc, etc) and
originating addresses (From, Sender, etc.). And a separate sets of
rules for each type of mail network address handled by the mail
gateway (mail exchanger).
	
	If you have the address <aaa!bbb@ccc.uucp>, should
	this be interpreted as aaa!bbb!ccc or ccc!aaa!bbb ? As far as I
	know, the latter is correct -- but that is simply my experience,
	and not something I've seen documented. Could someone please
	point me to the appropriate RFC or other document?
	
	   Thank you,
	
	   Walter Roberson <WCSWR@CARLETON.BITNET>
	
I believe ucbvax.berkeley.edu was the first to implement the
aaa!bbb@ccc.UUCP local addressing convention.

You will find it documented in the mailaddr(7) section
of the "Unix Programmer's Manual, 4.2 Berkeley Software Distribution,
Virtual VAX-11 Version" dated August 1983 and in Unix manuals based
on BSD Unix.

QUOTE

     Compatibility. Certain old address formats are converted to
     the new format to provide compatibility with the previous
     mail system.  In particular,

                    host:user

     is converted to

                    user@host

     to be consistent with the rcp(1c) command.

     Also, the syntax:

                    host!user

     is converted to:

                    user@host.UUCP

     This is normally converted back to the ``host!user'' form
     before being sent on for compatibility with older UUCP
     hosts.

     The current implementation is not able to route messages
     automatically through the UUCP network.  Until that time
     you must explicitly tell mail system which hosts to send
     your message through to get to your final destination.

UNQUOTE

UUCP mail now supports "domain" instead of "host" at many sites.
So this manual section is out-of-date. The new UUCP address convention
is "domain!user" or "uucp-host-domain-list!domain!user".

On an Internet mail host that is a UUCP gateway the local address
<aaa!bbb@ccc.uucp> should be converted UUCP address "ccc!aaa!bbb"
for messages being send to UUCP.  If going to an Internet site,
that local UUCP address be converted to the Internet mail address:
<ccc!aaa!bbb@gateway-domain-name> where "gateway-domain-name" is
a valid internet domain name. Note that these rules are for
addressees (To, Cc, etc.) only. 

Bill Wells, Postmaster

------------------------------------------------------------------------
| William Wells      Telephone: COML: +1 415-642-9801, ATSS: 582-9801  |
| Data Communication & Network Services  postmaster@jade.berkeley.edu  |
| University of California at Berkeley   netinfo@garnet.berkeley.edu   |
| 291 Evans Hall                         NETINFO at UCBGARNE (PUN/PRT) |
| Berkeley, CA 94720                     ucbvax!jade!netinfo    (UUCP) |
------------------------------------------------------------------------

les@chinet.UUCP (Leslie Mikesell) (04/05/88)

In article <12798@brl-adm.ARPA> rick@seismo.CSS.GOV (Rick Adams) writes:
>
>You want to avoid mixing ! and @ if at all possible (and it is
>almost always possible)

What if you have a bunch of uucp machines that only know ! addresses
and you don't want to store routing info on all of them anyway.  One
machine can talk to the rest of the world, and some of the others are
two (local) hops away.
Where you have machines a!b!c, is there an acceptable way for machine 
a to request machine c to do its routing, assuming a and b only know
uucp ! addresses?  Does the answer depend on b not knowing about @?

Leslie Mikesell
                    ...ihnp4!chinet!les

jbuck@epimass.EPI.COM (Joe Buck) (04/05/88)

In article <12798@brl-adm.ARPA> rick@seismo.CSS.GOV (Rick Adams) writes:
>>You want to avoid mixing ! and @ if at all possible (and it is
>>almost always possible)

In article <4557@chinet.UUCP> les@chinet.UUCP (Leslie Mikesell) writes:
>What if you have a bunch of uucp machines that only know ! addresses
>and you don't want to store routing info on all of them anyway.  One
>machine can talk to the rest of the world, and some of the others are
>two (local) hops away.

For the most part, UUCP machines that do routing run the smail
program and handle the domain!user convention (all the official
UUCP-Internet gateways do).  So yes, you can mail to an ARPA site
using all-bang paths.  Mail to me using ...!uunet!epimass.epi.com!jbuck,
for example.  This type of address is completely unambiguous (unless
it goes through a rerouting mailer but that's another war); the details
are discussed in the RFC by Mark Horton (forget the number).

>Where you have machines a!b!c, is there an acceptable way for machine 
>a to request machine c to do its routing, assuming a and b only know
>uucp ! addresses?  Does the answer depend on b not knowing about @?

See above.  If c is your gateway machine and runs smail or other
software that supports host.domain!user, you can just mail to
a!b!c!host.domain!user.




-- 
- Joe Buck  {uunet,ucbvax,sun,<smart-site>}!epimass.epi.com!jbuck
	    Old Internet mailers: jbuck%epimass.epi.com@uunet.uu.net

tgt@cblpf.ATT.COM (Tim Thompson) (04/06/88)

In article <2052@epimass.EPI.COM> jbuck@epimass.EPI.COM (Joe Buck) writes:
>

>In article <4557@chinet.UUCP> les@chinet.UUCP (Leslie Mikesell) writes:
>>What if you have a bunch of uucp machines that only know ! addresses
>>and you don't want to store routing info on all of them anyway.  One
>>machine can talk to the rest of the world, and some of the others are
>>two (local) hops away.

For one thing, why would your have a bunch of uucp machines that only know
! addresses (which are probably actually routes, NOT addresses)? With
the free smail package, and the ease with which it can be installed, there
just doesn't seem to be a reason why a uucp machine can not understand
the "@" syntax.


>
>For the most part, UUCP machines that do routing run the smail
>program and handle the domain!user convention (all the official
>UUCP-Internet gateways do).  So yes, you can mail to an ARPA site
>using all-bang paths.  Mail to me using ...!uunet!epimass.epi.com!jbuck,
>for example.  This type of address is completely unambiguous (unless
>it goes through a rerouting mailer but that's another war); the details
>are discussed in the RFC by Mark Horton (forget the number).

One clarification:

   ...!uunet!epimass.epi.com!jbuck is NOT an address, it is a route. Using
this type of syntax depends on where you are sending the mail from. For one
person, the route might be ihnp4!rutgers!uunet!epimass.epi.com!jbuck, and
for someone else, it might be ucbvax!harvard!uunet!epimess.epi.com!jbuck.
It's not an address if it depends on where the mail is being sent from.


   An address would be:

	jbuck@epimass.epi.com
		or
	epimass.epi.com!jbuck

provided your are running smart mailer. This address will get mail to Joe
no matter where it is being sent from, including UUCP machines running 
smart mailers, and the DDN.

Mark Horton gave a good example somewhere, which I forget, that gives a good
example of the difference between a route and an address. If you think of
an address in the sense of a postal address, it makes sense: No matter where
you mail a letter from, the address for the recipient always stays the same,
regardless of if you're in New York, California, or even (God forbid!)
Columbus, Ohio.

					Tim Thompson
					tgt@cblpf.att.com

dhesi@bsu-cs.UUCP (Rahul Dhesi) (04/06/88)

In article <1121@cblpf.ATT.COM> tgt@cblpf.ATT.COM (45264-Tim Thompson) writes:
>   ...!uunet!epimass.epi.com!jbuck is NOT an address, it is a route. Using
>this type of syntax depends on where you are sending the mail from...
...
>It's not an address if it depends on where the mail is being sent from.

Not so.

The string "uunet!epimass.epi.com!jbuck" is an address if you are on a
system that recognizes the host "uunet".  This is the case if you are
running smail and have a pathalias database built from the UUCP maps.

The string "uunet!epimass.epi.com!jbuck" is a route if your system has
a direct connection with uunet.  This is the case for a large number of
sites.

Whether a string is a route or an address or both depends to a large
extent on what kind of software you are running.  On a system with
BITNET access only, which does not understand UUCP path syntax,
"uunet!epimass.epi.com!jbuck" is neither an address nor a route.
Fortunately such machines are rare (though not rare enough).
-- 
Rahul Dhesi         UUCP:  <backbones>!{iuvax,pur-ee,uunet}!bsu-cs!dhesi

les@chinet.UUCP (Leslie Mikesell) (04/07/88)

In article <1121@cblpf.ATT.COM> tgt@cblpf.ATT.COM (45264-Tim Thompson) writes:
>For one thing, why would your have a bunch of uucp machines that only know
>! addresses (which are probably actually routes, NOT addresses)? With
>the free smail package, and the ease with which it can be installed, there
>just doesn't seem to be a reason why a uucp machine can not understand
>the "@" syntax.

Two reasons:
  The machines are small and fairly loaded as is; I don't want each of
them to have to store the names of all the machines in the known universe
or to search such a table every time mail is sent.
  Also, the machines are either on a network or connected by dedicated
lines. Most do not have modems, so mail to the rest of the world must be
routed through a machine that has modems (and fewer users).

>One clarification:
>
>   ...!uunet!epimass.epi.com!jbuck is NOT an address, it is a route. Using
>   An address would be:
>	jbuck@epimass.epi.com

The all ! route should work for me, if the gateway machine is set up to
reroute.  However, it seems like this would be a common problem and that
there should be a defined syntax to force a route to a known machine and
request it to interpret the remaining part as an address (perhaps this
is it?).
          Les Mikesell

jbuck@epimass.EPI.COM (Joe Buck) (04/08/88)

In article <1121@cblpf.ATT.COM> Tim Thompson writes:
>With
>the free smail package, and the ease with which it can be installed, there
>just doesn't seem to be a reason why a uucp machine can not understand
>the "@" syntax.

In article <4634@chinet.UUCP> Leslie Mikesell writes:
>Two reasons:
>  The machines are small and fairly loaded as is; I don't want each of
>them to have to store the names of all the machines in the known universe
>or to search such a table every time mail is sent.

This is unnecessary.  Assign one of the machines in your organization to
be the gateway to the world; give the remaining machines a paths file
that only knows about your local machine topology; make smart-host
point to your gateway machine.  Even your smart-host machine doesn't
have to use the full map; you could just give it the d.* files from
comp.mail.maps to crunch on so it knows about domain gateways.

>  Also, the machines are either on a network or connected by dedicated
>lines. Most do not have modems, so mail to the rest of the world must be
>routed through a machine that has modems (and fewer users).

Then my above proposal is perfect for you.  Your internal machines
can be set up to hand everything but local mail to your smart host.



-- 
- Joe Buck  {uunet,ucbvax,sun,<smart-site>}!epimass.epi.com!jbuck
	    Old Internet mailers: jbuck%epimass.epi.com@uunet.uu.net

jay@splut.UUCP (Jay Maynard) (04/12/88)

In article <4634@chinet.UUCP> les@chinet.UUCP (Leslie Mikesell) writes:
>In article <1121@cblpf.ATT.COM> tgt@cblpf.ATT.COM (45264-Tim Thompson) writes:
>>With the free smail package, and the ease with which it can be installed,
>>there just doesn't seem to be a reason why a uucp machine can not understand
>>the "@" syntax.
>  The machines are small and fairly loaded as is; I don't want each of
>them to have to store the names of all the machines in the known universe
>or to search such a table every time mail is sent.

This is the reason I haven't installed smail on splut yet. I don't want
to maintain a humongous database (if my 286 machine could even handle
it, and one neighbor indicates it can't), and I have not one but two
well-connected neighbors and one fairly-well-connected neighbor that I
haven't figured out how to use to their fullest (i.e. I want stuff that
can go through ihnp4 to the destination machine but not through uunet
easily to go via tness1, while I want stuff that can go directly through
uunet to go via nuchat...)

(Anyone with a solution to this one will earn my undying thanks!)
-- 
Jay Maynard, EMT-P, K5ZC...>splut!< | GEnie: JAYMAYNARD  CI$: 71036,1603
uucp: {uunet!nuchat,hoptoad!academ!uhnix1,{ihnp4,bellcore}!tness1}!splut!jay
Never ascribe to malice that which can adequately be explained by stupidity.
Pledge #29: Vote for Kent Paul Dolan and the Birthright Party in '88!

chip@ateng.UUCP (Chip Salzenberg) (04/14/88)

[Note that this has been crossposted to comp.mail.uucp and comp.unix.xenix]

In article <472@splut.UUCP> jay@splut.UUCP (Jay Maynard) writes:
>In article <4634@chinet.UUCP> les@chinet.UUCP (Leslie Mikesell) writes:
>>  The machines are small and fairly loaded as is; I don't want each of
>>them to have to store the names of all the machines in the known universe
>>or to search such a table every time mail is sent.
>
>This is the reason I haven't installed smail on splut yet. I don't want
>to maintain a humongous database (if my 286 machine could even handle
>it, and one neighbor indicates it can't) [...]

Well, you can run pathalias under Xenix/286 -- I do so on ateng.
But let me make one thing perfectly clear:

    >>  You don't need a complete paths file to run smail.  <<

Smail is a very useful program even without a global paths file.  Its
aliasing facility is nice (much better than SCO's in my opinion),
and it supports the ".forward" file for user-controller forwarding.

If you don't have the space or inclination to run pathalias, just make a
paths file by hand which contains the hosts you talk to often; then smail
will route those hosts and you can spell out a bang path from there.

>(Anyone with a solution to this one will earn my undying thanks!)

Okay, so what are your thanks worth?    :-)

-- 
Chip Salzenberg                "chip@ateng.UU.NET" or "codas!ateng!chip"
A T Engineering                My employer may or may not agree with me.
  "I must create a system or be enslaved by another man's." -- Blake

rpw3@amdcad.AMD.COM (Rob Warnock) (04/15/88)

In article <472@splut.UUCP> jay@splut.UUCP (Jay Maynard) writes:
+---------------
| This is the reason I haven't installed smail on splut yet. I don't want to
| maintain a humongous database ... and I have not one but two well-connected
| neighbors and one fairly-well-connected neighbor... I want stuff that
| can go through ihnp4 to the destination machine but not through uunet
| easily to go via tness1, while I want stuff that can go directly through
| uunet to go via nuchat...)
| (Anyone with a solution to this one will earn my undying thanks!)
+---------------

I had exactly the same need when the first "smail" came out, and came up with
a one-line hack that fixed it all for me.  I haven't upgraded to smail2.5 on
that machine yet, so can't tell you how to do it to the current source, but it
should be easy from the description below. (It may be that the "partial
resolution" added in smail 2.5 makes this moot.)

It was well worth it. The "paths" file on that machine is now ~4 Kbytes,
rather than 400K+.

In (original) smail, there is a place where a match has been found, and smail
is about to rewrite the address.  The hack is this: If the "right-hand-side"
(what we are about to substitute for the "host" or "domain") starts with an
asterisk "*", the RHS (minus the asterisk) is PREPENDED to the original
host/domain, rather than replacing it.  That's it!

The effective benefit of the hack is to allow you multiple "smart-hosts",
selected by domain. This means you can default any of your traffic at one
level to one host, but at a lower level can selectively route some sub-domains
to other links. For example, if you wanted to (say) default ".COM" to go
through "uunet" (via "nuchat"), but knew that AT&T sites would be better
served by "ihnp4" (through "tness1"), you paths file could look like:

	.att.com	*tness1!ihnp4!%s
	.com		*nuchat!uunet!%s
	.il43c.att.com	some!special!path!to!ATT!site!il43c!%s

The last path is thrown in to show a non-"*" path that overrides even
the ".att.com" default. (Remember, smail will try the most specific
domain first, only going to the more general if it fails to find a match.)

To "compress" your paths file, you start with a full paths file built by
pathalias for your host (as noted elsewhere, this can be done on another
system), then replace any path which includes a known "smart host" with
a "*"-path which stops at the smart-host. For example, you can change all
paths like:

	.foo.com	nuchat!uunet!some!funky!path!...!foo!%s
to
	.foo.com	*nuchat!uunet!%s

(Note: This DOESN'T assume "nuchat" is smart, but that uunet is.)

Now when you've done that, you'll notice an awful lot of domains
that now have the same right hand side. All of those can be collapsed
into a single entry. So that:

	.alpha.foo.com	nuchat!uunet!some!funky!path!...!alpha!%s
	.beta.foo.com	nuchat!uunet!some!other!weird!path!...!beta!%s
	.gamma.foo.com	nuchat!uunet!still!a!third!strange!path!gamma!%s

can be collapsed to

	.foo.com	*nuchat!uunet!%s

So you end up with a default (primary) route for each top-level
domain (.com, .edu, &c.), and a few special routes for broad
classes you know how to route better.

Yes, this costs manual work, but for a really small site it's worth it, for
two reasons: (1) The paths file is *MUCH* smaller, and (2) since you only
store the best outgoing stub path to the nearest smart host (for that
particular (sub)domain), the paths data tends to change MUCH less frequently. 
(The path from uunet to a random host may change, but the path from you to
uunet is much more stable.)

Hope this helps...


Rob Warnock
Systems Architecture Consultant

UUCP:	  {amdcad,fortune,sun,attmail}!redwood!rpw3
ATTmail:  !rpw3
DDD:	  (415)572-2607
USPS:	  627 26th Ave, San Mateo, CA  94403