Schily's USER COMMANDS                                     RMT(1)


NAME

     rmt - remote magnetic tape protocol server


SYNOPSIS

     /opt/schily/sbin/rmt
     /etc/rmt


DESCRIPTION

     This is the description of the enhanced  Schily  version  of
     the  rmt  remote tape server program.  rmt is a program used
     by programs like star and ufsdump that like to access remote
     magnetic  tape drives and files through an interprocess com-
     munication connection.  rmt is normally started up  with  an
     rexec(3) or rcmd(3) call.

     The rmt program accepts open, close, read,  write  and  seek
     requests  as  well as requests that are specific to magnetic
     tapes.  rmt performs the commands and then responds  with  a
     status indication.

     This version of the rmt server gives full  compatibility  to
     the  original  BSD version, the enhanced Sun version and the
     enhanced GNU version.   In  addition  to  the  Sun  and  GNU
     enhancements,  it implements further abstractions for better
     cross platform compliance.  It supports best speed and  best
     compliance  even  when server and client code are running on
     different platforms.  It is prepared to be  installed  as  a
     user shell in the passwd file to create remote tape specific
     logins and security checking.  To use the enhanced  compati-
     bility  features,  you  need  to  either use the remote tape
     client code from star which is available in librmt or  reim-
     plement its features.

     All responses are send back in ASCII. They are in one of the
     following two forms.

     Successful commands have responses of

          Anumber\n

     where number is the ASCII representation of a decimal number
     that  usually is the return code of the corresponding system
     call.  Unsuccessful commands are responded to with

          Eerror-number\nerror-message\n

     where error-number is one  of  the  possible  error  numbers
     described  in intro(2), and error-message is the correspond-

Joerg Schilling      Last change: 2020/09/04                    1


Schily's USER COMMANDS                                     RMT(1)

     ing error string as retrieved by strerror(3).  Note that the
     error  number  is  valid  on the remote system where the rmt
     code runs and may have a different meaning on the local sys-
     tem.

     The protocol implements the following commands:

          Odevice\nmode\n

          Odevice\nmode symbolic_mode\n
                         Open the specified device or file  using
                         the  indicated  mode.   device is a full
                         path  name,  and  mode   is   an   ASCII
                         representation of a decimal number suit-
                         able for being passed as second  parame-
                         ter  to  open(2).  A variant of the open
                         command   includes   the   symbolic_mode
                         string  which  is  a  GNU extension.  If
                         both,   mode   and   symbolic_mode   are
                         present,  they  are separated by a space
                         character; symbolic_mode appears on  the
                         same  line  as  the numeric mode.  It is
                         send using the same notation as used  in
                         a  C  source (e.g.  O_RDWR|O_CREAT).  If
                         the symbolic_mode is send to the server,
                         the  numeric  mode is ignored.  The sym-
                         bolic  notation  allows  to   send   the
                         expected  open mode over the wire, using
                         a system independent  method.   This  is
                         needed  because different operating sys-
                         tems usually define all bits in  a  dif-
                         ferent  way. An exception are the lowest
                         two bits.  The lowest two bits allow  to
                         code  O_RDONLY,O_WRONLY  and O_RDWR.  To
                         prevent unexpected behavior,  rmt  masks
                         the  numeric  open mode with 0x03 before
                         using it  as  argument  to  the  open(2)
                         call.   If  you  need  more  bits in the
                         second parameter ot open(2), you need to
                         use the symbolic mode.

                         If no file /etc/default/rmt exists, only
                         filenames   starting   with   /dev/  are
                         accepted for security reasons.

                         If a  device  is  already  open,  it  is
                         closed before a new open is performed.

                         A RMT protocol VERSION 1  client  should
                         issue a
                         I-1\n0\n
                         command just after  opening  a  file  or

Joerg Schilling      Last change: 2020/09/04                    2


Schily's USER COMMANDS                                     RMT(1)

                         device.  This  is  needed  to  tell  the
                         server that the client is aware  of  the
                         official order of the mt_op codes in the
                         range 0..7 and that  is  maps  deviating
                         values to the official ones.

          Cdevice\n      Close the currently open device or file.
                         The argument device is ignored.

          Rcount\n       Read count bytes of data from  the  open
                         device   or   file.   rmt  performs  the
                         requested read(2) operation and responds
                         with Acount-read\n if the read operation
                         was successful; otherwise  an  error  in
                         standard  format  is  returned.   If the
                         read operation was successful, the  data
                         read is sent directly after the response
                         described above.

          Wcount\n       Write data to the open device  or  file.
                         After reading the command specification,
                         rmt reads count bytes from  the  network
                         connection and aborts if a premature EOF
                         is encountered.  The return  value  from
                         the  write(2)  operation  is returned as
                         reply.

          Lwhence\noffset\n
                         Perform an  lseek(2)  operation  on  the
                         open  device or file using the specified
                         parameters.  The return value  from  the
                         lseek(2) operation is returned as reply.

                         On large file aware  operating  systems,
                         rmt will correctly handle large lseek(2)
                         requests.

                         The following  whence  values  are  sup-
                         ported:

                         0    Mapped to SEEK_SET.

                         1    Mapped to SEEK_CUR.

                         2    Mapped to SEEK_END.

                         3    Mapped to SEEK_DATA If avalable  on
                              the remote system.

                         4    Mapped to SEEK_HOLE If avalable  on
                              the remote system.

Joerg Schilling      Last change: 2020/09/04                    3


Schily's USER COMMANDS                                     RMT(1)

          S              The old non-portable status call.   This
                         call  should not be used anymore, it has
                         been replaced by the  new  RMT  protocol
                         version  1  extended  status call below.
                         If the currently open device is  a  mag-
                         netic  tape,  return  the  magnetic tape
                         status,  as  obtained  with  a  MTIOCGET
                         ioctl call.  If the open device is not a
                         magnetic tape, an error is returned.  If
                         the  MTIOCGET  operation was successful,
                         an "ack" is sent with the  size  of  the
                         status buffer, then the status buffer is
                         sent.  As the status buffer is  sent  in
                         binary,  this command it considered out-
                         dated. Please use  the  extended  status
                         command  instead.   This  command is not
                         terminated by a new-line.

          ssub-command   The new portable status call.  This com-
                         mand is part of the RMT protocol version
                         1.  If the currently open  device  is  a
                         magnetic tape, return a single specified
                         member  of  the  magnetic  tape   status
                         structure,  as  obtained with a MTIOCGET
                         ioctl call.  If the open device is not a
                         magnetic tape, an error is returned.  If
                         the MTIOCGET operation  was  successful,
                         the  numerical  value  of  the structure
                         member is returned in decimal.  The fol-
                         lowing sub commands are supported:

                         T    return the content of the structure
                              member  mt_type  which contains the
                              type of the magnetic tape device.

                         D    return the content of the structure
                              member  mt_dsreg which contains the
                              "drive status register".

                         E    return the content of the structure
                              member  mt_erreg which contains the
                              "error register".

                              This  structure  member   must   be
                              retrieved   first   because  it  is
                              cleared after each  MTIOCGET  ioctl
                              call.    The   librmt  will  always
                              retrieve the member mt_erreg  first
                              when  it is told to retrieve a com-
                              plete status structure.

Joerg Schilling      Last change: 2020/09/04                    4


Schily's USER COMMANDS                                     RMT(1)

                         R    return the content of the structure
                              member  mt_resid which contains the
                              residual count of the last I/O.

                         F    return the content of the structure
                              member mt_fileno which contains the
                              block number of  the  current  tape
                              position.

                         B    return the content of the structure
                              member  mt_blkno which contains the
                              block number of  the  current  tape
                              position.

                         f    return the content of the structure
                              member mt_flags which contains MTF_
                              flags from the driver.

                         b    return the content of the structure
                              member  mt_bf  which  contains  the
                              optimum blocking factor.

                         This command is not  terminated  with  a
                         new-line.

          Ioperation\ncount\n
                         Perform a MTIOCOP ioctl(2) command using
                         the  specified  parameters.  The parame-
                         ters  are  interpreted  as   the   ASCII
                         representations of the decimal values to
                         place in the mt_op and  mt_count  fields
                         of the structure used in the ioctl call.
                         When the  operation  is  successful  the
                         return  value  is  the  count parameter.
                         Only Opcodes 0..7 are unique across dif-
                         ferent  architectures.   In  many  cases
                         Linux does not even follow this rule and
                         could  cause  harm to tape media in case
                         an old non RMT protocol VERSION 1  aware
                         rmt  client  connects from UNIX to Linux
                         or from Linux to UNIX.  If we know  that
                         we  have  been  called by a RMT protocol
                         VERSION 1 client, we may  safely  assume
                         that  the  client is not using the Linux
                         mapping over the wire but  the  standard
                         mapping described below:

                         -1   Retrieve the version number of  the
                              rmt server and tell the server that
                              the client is aware of the official
                              order   of   the  MTIOCOP  ioctl(2)
                              opcodes in the range  0..7.   Local

Joerg Schilling      Last change: 2020/09/04                    5


Schily's USER COMMANDS                                     RMT(1)

                              mt_op codes must be remapped to the
                              official values before sending them
                              over the wire.

                              The answer of the  current  version
                              of  rmt  is 1.  Old rmt implementa-
                              tions send an error code back  when
                              this  command  is used.  Future rmt
                              implementations    with     further
                              enhancements  will  send  an answer
                              with a value > 1.

                         0    Issue a MTWEOF command (write count
                              end-of-file records).

                         1    Issue  a  MTFSF  command   (forward
                              space over count file marks).

                         2    Issue  a  MTBSF  command  (backward
                              space over count file marks).

                         3    Issue  a  MTFSR  command   (forward
                              space count inter-record gaps).

                         4    Issue  a  MTBSR  command  (backward
                              space count inter-record gaps).

                         5    Issue a MTREW command (rewind).

                         6    Issue a MTOFFL command (rewind  and
                              put the drive off-line).

                         7    Issue a MTNOP  command  (no  opera-
                              tion, set status only).

          ioperation\ncount\n
                         Perform a MTIOCOP ioctl(2) command using
                         the  specified parameters.  This command
                         is a RMT protocol  VERSION  1  extension
                         and   implements  support  for  commands
                         beyond MTWEOF..MTNOP (0..7).  The param-
                         eters   are  interpreted  as  the  ASCII
                         representations of  the  decimal  values
                         described  below.   They  are  converted
                         into the local values mt_op and mt_count
                         fields  of  the  structure  used  in the
                         ioctl  call  according  to  the   actual
                         values  found in <sys/mtio.h>.  When the
                         operation is successful the return value
                         is the count parameter.

                         0    Issue  a  MTCACHE  command  (switch

Joerg Schilling      Last change: 2020/09/04                    6


Schily's USER COMMANDS                                     RMT(1)

                              cache on).

                         1    Issue a MTNOCACHE  command  (switch
                              cache off).

                         2    Issue a MTRETEN command  (retension
                              the tape).

                         3    Issue a MTERASE command (erase  the
                              entire tape).

                         4    Issue a MTEOM command (position  to
                              end of media).

                         5    Issue a  MTNBSF  command  (backward
                              space count files to BOF).

          v\n            Return the version of  the  rmt  server.
                         This is currently the decimal number 1.

     Any other command causes rmt to exit.


FILES

     /etc/default/rmt
          The file /etc/default/rmt allows to  set  up  rules  to
          limit  the accessibility of files based on rules.  This
          feature is typically used when the rmt run from  a  non
          personal but task specific login.

          Default values can be set for the following options  in
          /etc/default/rmt.  For example:

          DEBUG=/tmp/rmt.debug
          USER=tape
          ACCESS=tape    myhost.mydomain.org /dev/rmt/*

          All keywords must be on the beginning of a line.

          DEBUG
               If you like to get debug information, set this  to
               a  file  name  where rmt should put debug informa-
               tion.

          USER The name of a user (local  to  the  magnetic  tape
               server)  that  may  use  the  services  of the rmt
               server.  More than one USER=name line is possible.
               A line USER=* grants access to all users.

          ACCESS
               This  keyword  is  followed  by  three  parameters
               separated  by a TAB.  The name of a user (local to
               the magnetic tape server host) that  may  use  the

Joerg Schilling      Last change: 2020/09/04                    7


Schily's USER COMMANDS                                     RMT(1)

               services of the rmt server followed by the name of
               a host from where operation is granted and a  file
               specifier pattern for a file or file sub tree that
               may be accessed if this ACCESS line matches.  More
               than one ACCESS=name host path line is possible.

               If standard input of rmt is not a  socket  from  a
               remote  host, rmt will compare the host entry from
               /etc/default/rmt with the following strings:

               PIPE      If stdin is a UNIX pipe.

                         If you like to allow remote  connections
                         that  use  the ssh protocol, you need to
                         use the word PIPE instead  of  the  real
                         hostname in the matching ACCESS= line.

               ILLEGAL_SOCKET
                         If  getpeername()  does  not  work   for
                         stdin.

               NOT_IP    If getpeername() works for stdin but  is
                         not connected to an internet socket.


SEE ALSO

     star(1),  ufsdump(1),  ufsrestore(1),   intro(2),   open(2),
     close(2),  read(2),  write(2),  ioctl(2), lseek(2), getpeer-
     name(3),  rcmd(3),  rexec(3),  strerror(3),  mtio(7),  rmto-
     pen(3),  rmtclose(3),  rmtread(3),  rmtwrite(3), rmtseek(3),
     rmtioctl(3), rmtstatus(3)


DIAGNOSTICS

     All responses are send to the network connection.  They  use
     the form described above.


NOTES

     To use rmt as a remote file access protocol you need to  use
     the  symbolic  open  modes  as  e.g. the O_CREAT flag is not
     unique between different architectures.

     In order to allow this implementation to be used as a remote
     file access protocol, it accepts file names up to 4096 bytes
     with the open command.  Other rmt implementations  allow  no
     more than 64 bytes.

     The possibility to create a debug file by calling  rmt  file
     has  been  disabled  for  security  reasons.  If you like to
     debug rmt edit /etc/default/rmt and insert a DEBUG entry.

     This implementation of rmt adds some  security  features  to
     the server that make it behave slightly different from older

Joerg Schilling      Last change: 2020/09/04                    8


Schily's USER COMMANDS                                     RMT(1)

     implementations.  Read the  above  documentation  about  the
     file  /etc/default/rmt  to make sure your local installation
     is configured for your needs.

     To grant the same  permissions  as  with  old  rmt  servers,
     create  a  file /etc/default/rmt and add the following lines
     to this file:

     USER=*
     ACCESS=* * *

     Note that the three fields in the ACCESS= line  need  to  be
     separated by a TAB character.

     Be very careful when designing patterns to match path  names
     that  may be accepted for open.  If a pattern would allow to
     include /../ in the path, a possible intruder  could  virtu-
     ally  access any path on your system.  For this reason, /../
     is not allowed to appear in a path regardless  of  the  pat-
     tern.


BUGS

     None known.


HISTORY

     The rmt command first appeared on BSD in  march  1981.  This
     rmt server is a new implementation that tries to be compati-
     ble to all existing implementations.  It is the  only  known
     implementation  that  in  addition  tries  to  fix  the data
     exchange problems between different architectures.

     This rmt implementation has been written in  1994  by  Joerg
     Schilling.   In  2000,  support  for  RMT VERSION 1 has been
     added and a mapping to work around  the  non-standard  Linux
     mtio opcodes in the range 0..7 has been added.  rmt is still
     maintained by Joerg Schilling.


AUTHOR

     Joerg Schilling
     D-13353 Berlin
     Germany

     Mail bugs and suggestions to:

     joerg@schily.net

Joerg Schilling      Last change: 2020/09/04                    9


Man(1) output converted with man2html


FhG Schily's Home VED powered