The rhostutl package includes an implementation of `rsh'/`remsh' that has
the traditional BSD behavior of looking at argv[0] and using that as the
host name if the basename isn't `remsh' or `rsh'.  It reinvokes `rlogin' if
you give it no command.

There is also an `rcmd' client that is like `rsh', only it doesn't look at
argv[0] to decide which host to connect to, since that violates GNU coding
standards.  It also doesn't invoke `rlogin' if you give it no command---a
command is mandatory.

A third program `rexec' connects using "rexecd", which does not do .rhosts
lookup but instead requires a password.

Differences between these programs and BSD `rsh':

  1) Long options.
  2) You can specify the remote user name and a port number via the syntax

        rsh user@host:port command ...

     If you make a symlink to rsh called `user@host' and run it, that
     works.
  3) None of these programs fork to handle I/O anymore; BSD rsh forks to
     handle local input in one process and remote output in the other,
     which is dumb since the output-handling process has to multiplex
     stdout and stderr anyway; I simply made one process handle all three.
  4) These use POSIX signals and socket options instead of old ioctls.
  5) These programs will not exit until all output from the remote process
     has been received; BSD rsh has a potential race condition.

What's missing:

  1) Kerberos support.  I don't have access to any system running kerberos
     which I can use to test my work.
  2) An rlogin client and replacment daemons for the above clients.
  3) An info manual.

Please report bugs to <rhostutl-bugs@splode.com>.  Thanks.
