home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc1756 < prev    next >
Text File  |  1995-01-23  |  22KB  |  620 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                          T. Rinne
  8. Request for Comments: 1756                                          HUT
  9. Category: Experimental                                     January 1995
  10.  
  11.  
  12.                   REMOTE WRITE PROTOCOL - VERSION 1.0
  13.  
  14. Status of this Memo
  15.  
  16.    This memo defines an Experimental Protocol for the Internet
  17.    community.  This memo does not specify an Internet standard of any
  18.    kind.  Discussion and suggestions for improvement are requested.
  19.    Distribution of this memo is unlimited.
  20.  
  21. 1. Background
  22.  
  23.    It is often convenient to use electronic communication somewhat
  24.    lighter than electronic mail.  Sometimes even the use of the talk(1)
  25.    *) program seems like overkill.  We like to offer to user something
  26.    like UNIX **) command write(1) ***) except that it can also pass
  27.    messages through the network instead of the single host.
  28.  
  29.    There have been few programs offering this kind of service, but they
  30.    have either based on SUN-RPC protocol or used a strictly undocumented
  31.    protocol.
  32.  
  33.    This document describes a simple Remote Write Protocol (RWP) that
  34.    should have been documented at least 10 years ago.  But late is
  35.    better than never.  Version number of the RWP protocol in this
  36.    document is 1.0.
  37.  
  38. 2. Overview
  39.  
  40.    RWP is a simple protocol that can be used to relay short messages
  41.    through the network to other users.  RWP looks pretty much like
  42.    Simple Mail Transfer Protocol (SMTP) ****) though it is a bit more
  43.    complicated due to the interactive nature of the RWP session.
  44.  
  45.    The idea behind the RWP session is that client program that is
  46.    relaying message to the host in which the target user is logged in
  47.    opens the tcp or udp connection to the server program running in the
  48.    target machine  Then the client gives the sender's and recipient's
  49.    identification (usually login ids), actual message body and tells the
  50.    server to deliver a message to the user.  On tcp-connection server
  51.    returns a status from each action taken.  On udp-connection no
  52.    responses are sent.  RWP sessions through udp are implemented to
  53.    support message broadcasting.
  54.  
  55.  
  56.  
  57.  
  58. Rinne                                                           [Page 1]
  59.  
  60. RFC 1756                 Remote Write Protocol              January 1995
  61.  
  62.  
  63.    Message delivering methods are not defined within this document, but
  64.    the basic method could be a simple write to users terminal.  This is
  65.    basically what UNIX command write(1) does.  Depending on server
  66.    implementation, the delivery method could be configurable personally
  67.    by each user.
  68.  
  69. 3. Description
  70.  
  71.    Server program answers to each command submitted by a response.  All
  72.    responses have two parts: three number unique response code and a
  73.    short textual explanation of the response.  Also whenever the server
  74.    is ready to accept new commands a notification is submitted to the
  75.    client.
  76.  
  77.    There are three kinds of commands in RWP.  The first group is for
  78.    querying a status of the server.  The second group is actual message
  79.    handling commands and the last set of commands are for RWP session
  80.    control.
  81.  
  82.    When the server is ready to receive a command from the client, it
  83.    sends a message code 100 to the client.  This message is for example
  84.    as follows:
  85.  
  86.                     100 Ready.
  87.  
  88.     Server commands are as follows:
  89.  
  90.     Status Query
  91.  
  92.         HELP    Gives a short help message that contains legal
  93.                 RWP commands.  Help lines have code 510.  Example RWP
  94.                 implementation *****) gives a following response to
  95.                 HELP command:
  96.  
  97.                     510 Valid commands are:
  98.                     510     BYE,    DATA,   HELP,   HELO,
  99.                     510     RSET,   SEND,   PROT,   QUIT,
  100.                     510     VRFY,   VER
  101.                     510     FROM senderlogin
  102.                     510     FHST senderhost
  103.                     510     TO   recipentlogin [tty]
  104.                     510     FWDS current_hop_count
  105.  
  106.         HELO    Says hello to the server.  Server response to HELO
  107.                 command has code 500.  For example:
  108.  
  109.                     500 Hello remote.host.  This is local.host speaking.
  110.  
  111.  
  112.  
  113.  
  114. Rinne                                                           [Page 2]
  115.  
  116. RFC 1756                 Remote Write Protocol              January 1995
  117.  
  118.  
  119.         PROT    Asks the RWP protocol version from the server.
  120.                 Response code to PROT command is 502.  Protocol
  121.                 version described in this document is RWP 1.0 and the
  122.                 response is as follows:
  123.  
  124.                     502 RWP version 1.0.
  125.  
  126.         VRFY    After the recipient of the message is set by to command
  127.                 described later, the possibility of message delivery
  128.                 can be queried by VRFY command.  If message can be
  129.                 delivered the response code is 108.  If message is
  130.                 about to be forwarded the response code is 110 and
  131.                 message is either form:
  132.  
  133.                     110 Recipient ok to forward.
  134.  
  135.                 or if the server can tell the destination of the
  136.                 forwarding:
  137.  
  138.                     110 Recipient ok to forward <user@host.domain>.
  139.  
  140.                 Other possible response codes are 669, 670, 671, 674
  141.                 and 677 and they all indicate that message delivery is
  142.                 by one way or another currently impossible.
  143.                 Description of the codes is later in this document.
  144.  
  145.                 After the SEND command the server may also give
  146.                 autoreply from the remote user before the actual
  147.                 response code.  Autoreply lines are ones of code 300.
  148.  
  149.         VER     Asks the version of the server program.  Response code
  150.                 to VER command is 501 and the textual part of the
  151.                 response is the name and the version number of the RWP
  152.                 server, for example:
  153.  
  154.                     501 Rwrited version 1.0.
  155.  
  156.     Message Handling:
  157.  
  158.         FROM senderlogin
  159.                 Tells the server the identification information of the
  160.                 sender of the message.  Usually this id information is
  161.                 user's login id.  Response code to successful FROM
  162.                 command is 105, for example:
  163.  
  164.                     105 Sender ok.
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Rinne                                                           [Page 3]
  171.  
  172. RFC 1756                 Remote Write Protocol              January 1995
  173.  
  174.  
  175.         TO recipentlogin [tty]
  176.                 Tells the server the identification information of the
  177.                 intended recipient of the message.  Usually this id
  178.                 information is user's login id.  If tty is submitted,
  179.                 the message is delivered to that tty.  If tty is
  180.                 submitted between brackets '[]' the tty given is
  181.                 treated as a hint only.  Response code to successful
  182.                 TO command is 106.
  183.  
  184.         FHST original.host [forwarder1.host forwarder2.host ...]
  185.                 Tells the server the host name that the message
  186.                 originates to and the path of the hosts that has
  187.                 forwarded the message.  The host name of the machine
  188.                 that is currently submitting the message to the server
  189.                 should not be in the path list.
  190.  
  191.                 This information is relevant if message is forwarded
  192.                 and it is not originally coming from the host that is
  193.                 forwarding it.  Response code to successful FHST
  194.                 command is 111.
  195.  
  196.         DATA    Tells the server to start receive the body of the
  197.                 message.  Response code to DATA command is 200, for
  198.                 example:
  199.  
  200.                 200 Enter message.  Single dot '.' on line terminates.
  201.  
  202.                 After response 200 the message lines are submitted to
  203.                 the server one after another.  Message is terminated
  204.                 by the line that contains a single dot '.'.  The
  205.                 termination of the message is acknowledged by the
  206.                 server with the response code 107.  Server does not
  207.                 notify client about receiving the single message
  208.                 lines.  If empty message is submitted (i.e. single dot
  209.                 is on the first line) the response code is 672 and
  210.                 DATA command only cancels possible previous DATA
  211.                 command.  Because of this all dots or at least dots
  212.                 that are standing alone in the line have to be quoted.
  213.  
  214.         SEND    Sends the message.  If commands FROM, TO and DATA are
  215.                 successfully given before SEND command, the message is
  216.                 delivered to the target user.  If delivery is
  217.                 successful the response code is 103.  If message is
  218.                 not delivered directly to the target user but instead
  219.                 forwarded to another host the response code is 104.
  220.                 Response codes 669, 670 and 671, 677 indicate an error
  221.                 on message delivery and codes 673, 674, 675 indicate
  222.                 that either command FROM, TO or DATA has not been
  223.  
  224.  
  225.  
  226. Rinne                                                           [Page 4]
  227.  
  228. RFC 1756                 Remote Write Protocol              January 1995
  229.  
  230.  
  231.                 successfully given before SEND command.  After the
  232.                 SEND command the server may also give autoreply from
  233.                 the remote user before the actual response code.
  234.                 Autoreply lines are ones of code 300.
  235.  
  236.         FWDS n  Tells the server that message has been forwarded n
  237.                 times.  If the server forwards the message to the
  238.                 another server, it increments the counter and tells
  239.                 the remote server the current count of forwards.
  240.                 Response code to the FWDS command is 110 if n is less
  241.                 than the server specific forward limit.  If this limit
  242.                 is exceeded the response code is 676.  If the response
  243.                 code is 676 the client can either quit the session and
  244.                 fail the message or it can give the message to the
  245.                 server despite the fact that the forward limit is
  246.                 exceeded.  If the message is given when forward limit
  247.                 is exceeded, the server tries to deliver it, but does
  248.                 not forward it to another server.  If forward count is
  249.                 given as -1, the message is considered as a autoreply
  250.                 and never forwarded.
  251.  
  252.     Session Control:
  253.  
  254.         RSET    Resets the RWP session.  FROM, TO and DATA -commands
  255.                 that are given before are canceled and they have to
  256.                 be given again before SEND command can be used.  Also
  257.                 possible FWDS and FHST commands are canceled.
  258.  
  259.         BYE     Terminates the RWP session.  Server gives a response
  260.                 code 101 and closes the connection.
  261.  
  262.         QUIT    Is the synonym to bye, but it's a lot more impolite.
  263.                 Response code is however 101 as in bye.
  264.  
  265.     Server specific command:
  266.  
  267.         QUOTE command
  268.  
  269.                 Relay a command to the server.  If the QUOTE command
  270.                 is successfully completed response code 112 is
  271.                 returned.  If QUOTE command is failed the response
  272.                 code is 678.  If RWP server doesn't recognize the
  273.                 given QUOTE command the response code is 679.
  274.  
  275.                 Currently reserved QUOTE commands are AGENT, CHARSET,
  276.                 IDENT, KEY and KEYID.
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Rinne                                                           [Page 5]
  283.  
  284. RFC 1756                 Remote Write Protocol              January 1995
  285.  
  286.  
  287. 4. Response Codes
  288.  
  289.    Here are all legal response codes of RWP server followed by short
  290.    textual explanation.  Only the numeral codes are important and texts
  291.    can contain practically anything, however in response code 110 there
  292.    is possibly useful information between '<' and '>' characters.  No
  293.    characters '<' or '>' should be present in other responses.  Also
  294.    response 502 has possibly interesting information about the RWP
  295.    protocol version the server supports.
  296.  
  297.     100 Ready.
  298.  
  299.         The RWP server is ready to accept next command.
  300.  
  301.     101 Goodbye.
  302.  
  303.         The RWP server is closing connection.
  304.  
  305.     103 Message delivered.
  306.  
  307.         The SEND command is successfully completed and the message is
  308.         delivered directly to its destination.
  309.  
  310.     104 Message forwarded.
  311.  
  312.         The SEND command is completed and message is forwarded to the
  313.         user.
  314.  
  315.     105 Sender ok.
  316.  
  317.         The FROM command successful.
  318.  
  319.     106 Recipient ok.
  320.  
  321.         The TO command successful.
  322.  
  323.     107 Message ok.
  324.  
  325.         The DATA command successful.
  326.  
  327.     108 Recipient ok to send.
  328.  
  329.         The VRFY command successful and direct message delivery is
  330.         possible.
  331.  
  332.     109 RSET ok.
  333.  
  334.         The RWP server has received the RSET command and reset itself.
  335.  
  336.  
  337.  
  338. Rinne                                                           [Page 6]
  339.  
  340. RFC 1756                 Remote Write Protocol              January 1995
  341.  
  342.  
  343.     110 Ok to forward.
  344.  
  345.         or
  346.  
  347.     110 Ok to forward <user@host.domain>.
  348.  
  349.         The VRFY command successful and direct message delivery by
  350.         forwarding is possible.  If response has also forwarding
  351.         address the client can either forward the message itself or
  352.         give it to server for forwarding.
  353.  
  354.     111 Original sender host ok.
  355.  
  356.         The FHST command successful and original sender host is set as
  357.         given by the client.
  358.  
  359.     200 Enter message.  Single dot '.' on line terminates.
  360.  
  361.         The RWP server is ready to receive the message. Single dot on
  362.         message line terminates the message.
  363.  
  364.  
  365.     300 |I'm not in right now but I'll be back tomorrow
  366.     300 |at 8 o'clock a.m.
  367.  
  368.         Automatical response to the delivered message.  Every line of
  369.         this user defined reply message is delivered in its own 300
  370.         line.  Response code 300 lines may appear only after SEND
  371.         command before response code 103 (message delivered).  Client
  372.         receiving autoreply 300 should show the text of the autoreply
  373.         to the user.  Actual autoreply line begins after the '|'
  374.         -character in the line.
  375.  
  376.     500 Hello remote.host.  This is local.host speaking.
  377.  
  378.         Response to the HELO command.  This message can also occur in
  379.         the beginning of the conversation without the VER command and
  380.         it can be ignored.
  381.  
  382.     501 Rwrited version X.X.
  383.  
  384.         Response to the VER command.  This message can also occur in
  385.         the beginning of the conversation without the VER command and
  386.         it can be ignored.
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Rinne                                                           [Page 7]
  395.  
  396. RFC 1756                 Remote Write Protocol              January 1995
  397.  
  398.  
  399.     502 RWP version 1.0.
  400.  
  401.         Response to the VER command.  This message can also occur in
  402.         the beginning of the conversation without the VER command and
  403.         it can be ignored.
  404.  
  405.     510 Valid commands are:
  406.     510     BYE,    DATA,   HELP,   HELO,
  407.     510     RSET,   SEND,   PROT,   QUIT,
  408.     510     VRFY,   VER
  409.     510     FROM senderlogin
  410.     510     FHST senderhost
  411.     510     TO   recipentlogin
  412.     510     FWDS current_hop_count
  413.  
  414.         Response to the HELP command.
  415.  
  416.     511 Information to the user.
  417.  
  418.         Server specific informational response.  These responses may
  419.         occur anytime during the conversation.  The client can ignore
  420.         them.
  421.  
  422.     512 Debug information to the user.
  423.  
  424.         Server specific informational response.  Reserved for server
  425.         debugging.  These messages may occur anytime during the
  426.         conversation.  The client can ignore them.
  427.  
  428.     666 FATAL ERROR!
  429.  
  430.         The RWP server got into the fatal error situation and is about
  431.         to exit immediately.  Client programs are strongly encouraged
  432.         to close the connection.
  433.  
  434.     668 Syntax error.
  435.  
  436.         The RWP server has received an invalid command.
  437.  
  438.     669 Permission denied.
  439.  
  440.         The RWP server is unable to deliver the message because the
  441.         target user has denied the send permission.
  442.  
  443.     670 User not logged in.
  444.  
  445.         The RWP server is unable to deliver the message because the
  446.         target user is not logged in.
  447.  
  448.  
  449.  
  450. Rinne                                                           [Page 8]
  451.  
  452. RFC 1756                 Remote Write Protocol              January 1995
  453.  
  454.  
  455.     671 No such user.
  456.  
  457.         The RWP server is unable to deliver the message because the
  458.         target user does not exist.  Error code 670 can be used to
  459.         replace this message.
  460.  
  461.     672 No message.
  462.  
  463.         The DATA command is terminated with empty message body.  No
  464.         SEND command can be executed before a new DATA command is
  465.         given.
  466.  
  467.     673 FROM command required.
  468.  
  469.         Tried to give the SEND command before FROM.
  470.  
  471.     674 TO command required.
  472.  
  473.         Tried to give the SEND command before TO.
  474.  
  475.     675 DATA command required.
  476.  
  477.         Tried to give the SEND command before DATA.
  478.  
  479.     676 Forward limit exceeded.
  480.  
  481.         Response to the FWDS command that had an argument that
  482.         exceeded the server specific limit of message forwarding
  483.         steps.
  484.  
  485.     677 Unable to forward message.
  486.  
  487.         or
  488.  
  489.     677 Unable to forward message to <user@host.domain>.
  490.  
  491.         Response to the SEND or VRFY command if message forwarding is
  492.         attempted and the server specific limit of message forwarding
  493.         steps has been exceeded or if message forwarding has otherwise
  494.         failed.  If message forwarding fails with message 669, 670 or
  495.         671, server will not use response 667 but gives response but
  496.         instead it gives the response analogous with the error
  497.         occured.  If message 677 includes address the message was to
  498.         be forwarded, the client may try to deliver it itself.
  499.  
  500.     698 Unknown error.
  501.  
  502.         RWP server has faced an internal error that is not fatal.
  503.  
  504.  
  505.  
  506. Rinne                                                           [Page 9]
  507.  
  508. RFC 1756                 Remote Write Protocol              January 1995
  509.  
  510.  
  511.     699 Unknown error.
  512.  
  513.         RWP server has faced an unknown error that is not fatal.
  514.  
  515. 5. RWP Compliant Software
  516.  
  517.    Simple RWP 1.0 compliant server and client software RWrite-1.1 will
  518.    be available during the fall 1994.
  519.  
  520. 6. Security of RWP
  521.  
  522.    RWP version 1.0 does not offer any mean to verify the identity of the
  523.    user connecting the RWP server program.  It's possible to identify
  524.    the sender using ident-service, but not all hosts currently support
  525.    that.  This vulnerability is analogous with the weakness of the SMTP
  526.    protocol.  Cryptographic user verification and message hiding method
  527.    is under development and is to be defined in RWP version 2.0 during
  528.    the year 1995.
  529.  
  530.    RWP server also may offer a way to the intruder to get to know user
  531.    ids within the target host by trying the TO and VRFY commands.  This
  532.    vulnerability is also present in SMTP.  It is however possible to
  533.    build servers so that they never give message 671 (no such user) but
  534.    use response 670 (user not logged in) instead.
  535.  
  536.    Another way to increase security even within RWP-1.0 described in the
  537.    document is to design RWP servers so that they do not deliver
  538.    messages directly to user but instead connect to some kind of RWP
  539.    agent process that is executed by each user willing to receive RWP
  540.    messages.  This user configurable message agent could then decide
  541.    whether to deliver the message to the user and which way of delivery
  542.    to use.  Message agent is the best way to prevent hostile user from
  543.    sending uncontrolled message flood to the user's terminal.
  544.  
  545.    Sample implementation (RWrite-1.0) of the RWP server includes the
  546.    support for user configuration files in which each user can either
  547.    allow or deny messages from some user(s), host(s) or network
  548.    domains(s).  Support for message agents is currently under
  549.    development.
  550.  
  551.    The user that is receiving the message should be able to define
  552.    characters to be stripped from the incoming messages to prevent
  553.    terminal mess-up.
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Rinne                                                          [Page 10]
  563.  
  564. RFC 1756                 Remote Write Protocol              January 1995
  565.  
  566.  
  567. 7. RWP Connection Type
  568.  
  569.    It is suggested that tcp (and udp) port 18 should be allocated for
  570.    rwp in future versions of RFCs listing the reserved tcp/udp/rpc
  571.    ports.  Currently port 18 is assigned to the service called Message
  572.    Send Protocol (msp) that is not known to be implemented.  Actually
  573.    port 18 is not currently defined at all in the /etc/services -file of
  574.    the any common UNIX-like system.  Entry for /etc/services -file is as
  575.    follows
  576.  
  577.        rwrite    18/udp       # RWP rwrite
  578.        rwrite    18/tcp       # RWP rwrite
  579.  
  580.    Given that RWP compliant daemon program is /usr/sbin/rwrited the
  581.    entry for /etc/inetd.conf -file would be:
  582.  
  583.        rwrite  stream  tcp  nowait  nobody  /usr/sbin/rwrited rwrited
  584.  
  585. 8. Character quotation
  586.  
  587.    To offer a safe method to transfer various character sets RWP defines
  588.    a method to quote characters in both message and autoreply.  RWP uses
  589.    quotation similar to MIME `quoted-printable' encoding.  Quoted
  590.    character is presented as a '=' -sign followed by a two character hex
  591.    code.  This means also that all '='-signs have to be quoted.
  592.    Quotation is also needed when message contains a line with only a
  593.    single dot '.' in it.
  594.  
  595.     For example:
  596.                     '.'  ->  =2E
  597.                     '='  ->  =3D
  598.                     '\a' ->  =07
  599.                     '\t' ->  =09
  600.  
  601. 9. Security Considerations
  602.  
  603.    Security issues are not discussed in this memo.
  604.  
  605. 10. Author's Address
  606.  
  607.    Timo J. Rinne
  608.    Helsinki University of Technology.
  609.    Cirion oy
  610.    PO-BOX 250
  611.    FIN-00121
  612.    Helsinki, Finland
  613.  
  614.    EMail: Timo.Rinne@hut.fi
  615.  
  616.  
  617.  
  618. Rinne                                                          [Page 11]
  619.  
  620.