home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / fish / 891-910 / ff905 / multiuser / multiuser.doc next >
Text File  |  1994-05-04  |  50KB  |  1,221 lines

  1.  
  2.                                                                  
  3.                    / / / /                                       
  4.                   / / / /
  5.             \ \ \ \/ / /      -+*+- MultiUser Release 1.4 -+*+-
  6.              \ \/\ \/ /                                          
  7.               \ \/\ \/                                           
  8.  
  9.  
  10.  
  11. DISCLAIMER
  12.  
  13. WITH  THIS  DOCUMENT  I  MAKE  NO  WARRANTIES  OR  REPRESENTATIONS,  EITHER
  14. EXPRESSED  OR  IMPLIED,  WITH RESPECT TO THE PRODUCT DESCRIBED HEREIN.  THE
  15. INFORMATION  PRESENTED  HEREIN IS BEING SUPPLIED ON AN 'AS IS' BASIS AND IS
  16. EXPRESSLY  SUBJECT TO CHANGE WITHOUT NOTICE.  THE ENTIRE RISK AS TO THE USE
  17. OF  THIS  INFORMATION IS ASSUMED BY THE USER.  IN NO EVENT WILL I BE LIABLE
  18. FOR  DIRECT,  INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES RESULTING FROM
  19. ANY  CLAIM  ARISING OUT OF THE INFORMATION PRESENTED HEREIN, EVEN IF I HAVE
  20. BEEN ADVISED OF THE POSSIBILITIES OF SUCH DAMAGES.
  21.  
  22.  
  23. COPYRIGHT
  24.  
  25.   This  package is shareware.  This means you can copy it freely as long as
  26. you  don't  ask any money for it, except perhaps a nominal fee for copying.
  27. If  you  like  and use this package on a regular base, I'd appreciate it if
  28. you  send  me  a  contribution  of 500 BEF or USD 15.  Please send money by
  29. International  Money  Order, EuroCheck (in BEF!) or Cash, because it's very
  30. difficult for me to cash in other checks.
  31.  
  32.   This  package  should not be spread in any other form than an LhA archive
  33. and  all  parts  of  it  should be spread together.  The package may not be
  34. altered  in  any way and cannot be used for commercial purposes without the
  35. prior  written permission of the author.  This does not apply to the source
  36. of  the  support  commands, they are full public domain, only the copyright
  37. message should be preserved.
  38.  
  39.   The  package is Copyright © Geert Uytterhoeven, All Rights Reserved.  The
  40. author reservers the right to change the status of this package whenever he
  41. may find it appropriate.
  42.  
  43.  
  44.  
  45. 1. Introduction
  46.  
  47.   You've  got an Amiga with Kickstart 2.04 or higher and several people are
  48. regularly  fooling  around  with it ...  Last week your sister deleted your
  49. 20MB JPEG collection by mistake and you don't want this to happen again ...
  50. Well, here's the answer:  MultiUser!
  51.  
  52.   MultiUser allows you to create a *IX-like environment where several users
  53. live  together  in  harmony,  unable to delete each others files, unable to
  54. read  those  private  love-letters  of  other  users  ...  And this even if
  55. several  users  are  working on the machine at the same time (on a terminal
  56. hooked up to the serial port) ...
  57.  
  58.   You  are  the  sole user of your computer?  Well, make sure it stays that
  59. way  by installing MultiUser!  People without a valid login ID and password
  60. won't be able to access files you have made private with MultiUser.  If you
  61. make  all  files  private  (not readable for others), the only useful thing
  62. they could do, is boot from a floppy ...
  63.  
  64.   And ...  you do not have to reformat your hard drive!
  65.  
  66.  
  67.  
  68. 2. System Requirements
  69.  
  70.   Your  Amiga  should be equipped with Kickstart 2.04 (V37+) or higher, and
  71. with  a  hard drive/controller combination that supports the CBM Rigid Disk
  72. Block  protocol (e.g.  an A590 or A2091, an A3000 SCSI controller, an A4000
  73. IDE  controller  and most GVP SCSI controllers).  MultiUser can NOT be used
  74. on floppy drive systems.
  75.  
  76.   You  do  need an original FastFileSystem (V36.102 (release 2.04), V36.104
  77. (release  2.05  or  2.1)  or  V39.27 (release 3.0)), which should have been
  78. included with your system software.
  79.  
  80.   The  package was written on an A4000/040 running Kickstart 39.106 and was
  81. tested on the following configurations:
  82.  
  83.   o A4000/040, 120 MB IDE harddisk, 2 MB chip-ram, 8 MB fast-ram
  84.  
  85.   o A4000/040,  120  MB  IDE harddisk, 2 MB chip-ram, 8 MB fast-ram, Retina
  86.     graphics board, Retina WB emulation
  87.  
  88.   o A3000T  25MHz,  500+  MB  harddisk,  2  MB chip-ram and 16 MB fast ram,
  89.     Kickstart  37.175,  GVP  '040  accel,  Retina graphics board, Retina WB
  90.     emulation,  Vortex  486  SLC  board  (this  is  shit!), Amax II+, IV-24
  91.     graphics board,...  (Not mine :-( A demonstration model in a store Kurt
  92.     frequently visits :^)
  93.  
  94.   o A3000 25MHz,  52 MB + 120 MB harddisk, 2 MB chip-ram and some MB static
  95.     column ram.  Kickstart 39.110 (developer)
  96.  
  97.   o A500,  20 MB harddisk (A590 XT), 512 K chip-ram, 512 K ranger-mem, 2 MB
  98.     fast-ram,  old  chipset,  68010  processor,  Kickstart  2.04 softkicked
  99.     (developer)
  100.  
  101.   o A500,  84  or  105  MB  harddisk  (A590  SCSI),  512  K chip-ram, 512 K
  102.     ranger-mem,  2  MB  fast-ram,  old  chipset,  Kickstart 2.04 softkicked
  103.     (developer)
  104.  
  105.   On all these configuration the package seems to work fine, so I guess you
  106. can run it on almost any machine (with a bit of spare memory).
  107.  
  108.   You  do  need  the  reqtools.library  version  38 or higher.  Reqtools is
  109. Copyright © Nico François.
  110.  
  111.  
  112.  
  113. 3. Installation
  114.  
  115.   WARNING:   Read the installation part completely BEFORE you apply it!  If
  116. you  still don't know what we're talking about, you'd better don't use this
  117. package!   It's  NOT  for the casual user; managing a MultiUser system is a
  118. difficult and tedious task!
  119.   If  anything  fails during the installation, don't forget to restore your
  120. system  to  it's  original state, else you could be surprised in a very bad
  121. way!
  122.  
  123.   o Extract  the  archive and change the current directory to the directory
  124.     MultiUser  located in the directory where you extracted the archive to.
  125.     (Preferably RAM:)
  126.  
  127.   o Install  the  library  and  the  support  commands  with  the following
  128.     commands:
  129.  
  130.                        Copy Libs/multiuser.library LIBS:
  131.                        Copy C/#?                   C:
  132.  
  133.   o The  MultiUserFileSystem  is  distributed  as  a patch for the original
  134.     FastFileSystem.   There  are patches for the FastFileSystems of release
  135.     2.04  (V36.102),  release  2.05  (V36.104),  release  2.1 (V36.104) and
  136.     release  3.0  (V39.27) of the operating system.  Make sure you have one
  137.     of  these  FastFileSystems in the L:  directory!  If it's not there you
  138.     can  copy  it from the L directory on the Install disk of the operating
  139.     system  install disk set.  If you're not sure about the version of your
  140.     FastFileSystem  use the command 'Version L:FastFileSystem'.  Now Create
  141.     a MultiUserFileSystem with the command:
  142.  
  143.        Patch/Patch L:FastFileSystem Patch/MultiUserFileSystem_xxx.patch
  144.                              L:MultiUserFileSystem
  145.  
  146.     where  xxx stands for '2.04', '2.05', '2.1' or '3.0', depending on your
  147.     operating system release.
  148.  
  149.   o Choose  the  partitions you want to protect and the directory where you
  150.     want  to  store  the  MultiUser  configuration  stuff.   Make sure this
  151.     directory  is  located  on  one  of the partitions you want to protect!
  152.     Let's  say  your  configuration  directory  is 'App:MultiUser' (Replace
  153.     'App:MultiUser'   anywhere  in  this  document  by  the  name  of  your
  154.     configuration  directory  if you use another directory name).  Copy the
  155.     configuration stuff to this directory with the following command:
  156.  
  157.                          Copy Config/#? App:MultiUser
  158.  
  159.   o If  you've  installed  the  TCP/IP  package  from Commodore (AS225) you
  160.     already  have  a  valid  password  file  (inet:db/passwd).  The inet:db
  161.     directory must be located on one of the partitions you want to protect!
  162.     Make  sure there's an entry for a 'root' user with '65535' for the user
  163.     and group number, e.g.:
  164.  
  165.     root||65535|65535|The Bastard Operator From Hell|SYS:Homes/Root|cli
  166.           ^^^^^ ^^^^^
  167.  
  168.   o Append the next line to your 'S:User-Startup' file:
  169.  
  170.                                Logout GUI GLOBAL
  171.  
  172.   o Pick  a  name  for  your  computer  ...   This  name will appear in the
  173.     login/logout  requester.   Let's  say  you  want  to  call  your system
  174.     'Pythagoras', then you have to execute the following:
  175.  
  176.                       Echo 'Pythagoras' >ENVARC:HostName
  177.  
  178.   o Let's  say  you  want to protect the partitions 'SYS:' and 'App:'.  You
  179.     can  protect as many partitions as you like, just add their name to the
  180.     list  below.  Create the required Keyfiles on these partitions with the
  181.     following  command  if  you  haven't  installed the TCP/IP package from
  182.     Commodore:
  183.  
  184.               MakeKeyfiles App:MultiUser App:MultiUser SYS: App:
  185.  
  186.     TCP/IP users should use a command line like this:
  187.  
  188.                  MakeKeyfiles inet:db App:MultiUser SYS: App:
  189.  
  190.   o Start  HDToolBox to install the MultiUserFileSystem.  If HDToolBox does
  191.     not  find your hard drive, you probably have to start it from the shell
  192.     with  'HDToolBox  <hddev>',  where  <hddev> stands for the name of your
  193.     hard  drive  controller device (e.g.  'scsi.device' for CBM controllers
  194.     or  'gvpscsi.device' for GVP controllers).  If that fails to, you can't
  195.     use MultiUser on your system.
  196.  
  197.       NOTE: The  following  text  describes  the  use  of  the  version  of
  198.             HDToolBox  that  is  supplied  with  3.0.   Other  versions may
  199.             slightly differ.
  200.  
  201.       x Choose  the drive you want to protect.  If you want to protect more
  202.         than  one  drive,  you  simply  repeat this for each of the drives.
  203.         Select  the  drive  by  clicking  on  it  in the listview where all
  204.         connected drives are displayed.
  205.  
  206.       x Press  the  <Partition  Drive>  button.   Now  a new display should
  207.         appear  containing a large box which may be divided up into several
  208.         partitions ...
  209.  
  210.       x Activate  the  <Advanced  Options>  checkbox.   Now some additional
  211.         options should appear ...
  212.  
  213.       x Press  the <Add/Update...> button in the file system section of the
  214.         HDToolBox    window.     (There's    only    one   gadget   labeled
  215.         <Add/Update...>, so you can't miss it.)
  216.  
  217.       x Now  the  window  should contain a list of currently installed file
  218.         systems  and  some  additional  buttons.   If you are updating your
  219.         MultiUserFileSystem,  there  should  already  be  an entry with the
  220.         0x6d754653  ('muFS' in HEX ASCII) identifier.  If this is the case,
  221.         click  on it and press <Update File System...>, in all other cases,
  222.         press the <Add New File System...> button.
  223.  
  224.       x Now  a  requester  appears.   Enter  'L:MultiUserFileSystem' in the
  225.         string-gadget  of  the requester and '0x6d754653' in the identifier
  226.         (also  called  DosType)  gadget.  If your version of HDToolBox asks
  227.         you to enter a version number, you should use 39.  Some versions of
  228.         HDToolbox  (the  one  with  3.0) uses two requesters for the needed
  229.         information,  so  it  may be necessary to select the <Ok> button of
  230.         the requester before you can fill in the DosType.
  231.  
  232.       x Press  the  <Ok>  button of the requester (if you haven't done this
  233.         yet).  Now you should be back in the File Systems display.  Go back
  234.         to the Partitions display by pressing the <Ok> button.
  235.  
  236.       x Select  the  partition on the drive that you wanna protect.  If you
  237.         want  to  protect  more  than  one  partition (it is recommended to
  238.         protect  all  partitions  on  the  drive),  you  simply  repeat the
  239.         following  stuff  for  every  partition.  You select a partition by
  240.         clicking  on  the  part  of  the  large  box (which represents your
  241.         harddisk) that represents that partition.
  242.  
  243.       x Press the <Change ...> or <Change File System> button.
  244.  
  245.       x Select  the  <Custom  File  System>  gadget  and enter '0x6d754653'
  246.         ('muFS' in HEX ASCII) into the <Identifier> gadget.
  247.  
  248.       x Press  the  <Ok>  button  to return to the Partitions display.  You
  249.         should  repeat  the  above steps for all the partitions you wish to
  250.         protect before continuing ...
  251.  
  252.       x Press the <Ok> button to return to the main HDToolBox display.
  253.  
  254.       x Press  the  <Save  Changes  to Drive> button.  Don't care about the
  255.         warning  that this will destroy the data on your partition, no data
  256.         will  be  lost :-).  If HDToolBox complains that there isn't enough
  257.         space  on  the drive to save all the configuration data, you should
  258.         return  to  the  File  System  Maintenance  section of HDToolBox by
  259.         pressing  <Partition  Drive> and <Add/Update ...> buttons.  Now you
  260.         should  select  another  file  system  than the one with identifier
  261.         0x6d754653,   press  <Delete  File  System>,  return  to  the  main
  262.         HDToolBox  display  and  try  saving the configuration again.  Note
  263.         that  you  should  make  sure  not to delete any file system that's
  264.         still  used  on  any partition!  This is why it is recommended that
  265.         all partitions on the drive should use the MultiUserFileSystem.
  266.  
  267.       x If  everything  went OK, select Exit and confirm the reboot request
  268.         of HDToolBox.  Now your machine should automatically reset.
  269.  
  270.   o After  the  reboot,  a requester should appear.  Simply enter 'root' as
  271.     login  id.   You  should now be logged in as root, having access to all
  272.     files.
  273.  
  274.   o The first thing you should do is to change your password.  This is done
  275.     by  entering  the  Passwd  GUI  command in a shell you open or with the
  276.     <Execute  Command  ...>  option  of the Workbench.  You are prompted to
  277.     enter  your  old password, so simply press enter.  Now you are asked to
  278.     enter  your  new password twice.  If you enter the same password twice,
  279.     this  will from now on (until you change it again) be the password root
  280.     has to enter at a login request.
  281.  
  282.   o Now  you  have  to  protect some important files using the MProtect and
  283.     SetOwner[37]  commands.   We will use SetOwner in this description, but
  284.     if  you  aren't  using  Kickstart  39.xx  or  higher,  you  should  use
  285.     SetOwner37 instead!
  286.     You  should  protect the Keyfiles on all protected partitions.  Execute
  287.     the following commands for every protected partition:
  288.  
  289.                SetOwner <VOL>.MultiUser.keyfile root
  290.                MProtect <VOL>.MultiUser.keyfile R
  291.  
  292.     where  <VOL> stands for a partition name (e.g.  'SYS:' or 'App:' in our
  293.     example.  Protect some other important files, too:
  294.  
  295.                SetOwner App:MultiUser/passwd root
  296.                MProtect App:MultiUser/passwd RWD
  297.                SetOwner App:MultiUser/MultiUser.config root
  298.                MProtect App:MultiUser/MultiUser.config RWD
  299.                SetOwner App:MultiUser/.profile root
  300.                MProtect App:MultiUser/.profile SRWED
  301.                SetOwner S:Startup-Sequence root
  302.                MProtect S:Startup-Sequence SRWED GROUP R OTHER R
  303.                SetOwner S:User-Startup root
  304.                MProtect S:User-Startup SRWED GROUP R OTHER R
  305.                SetOwner SYS:Tools/HDToolBox root
  306.                MProtect SYS:Tools/HDToolBox RWED
  307.  
  308.                 ... and any other files you wish to protect ...
  309.  
  310.     It  is  recommended  to leave most files readable for others, except of
  311.     course  the  files  you really wanna keep to yourself.  .info files and
  312.     .backdrop  files  should  be  readable  for everybody if you don't want
  313.     complications when using the Workbench.
  314.  
  315.  
  316.  
  317. 4. The password file
  318.  
  319.   The  passwd file should be located in your inet:db directory and contains
  320. all  the  information  the  system  needs  on the users that are allowed to
  321. access the system.  Each line of the file contains information on one user.
  322. The syntax of such a line is as follows:
  323.  
  324.        <id>'|'<passwd>'|'<user>'|'<group>'|'<name>'|'<home>'|'<port>
  325.  
  326. <id>      is  the  same  as the name this user will need to give at a login
  327.           request.  This name may be upto 32 characters long.
  328.  
  329. <passwd>  if  the  user has a password, this is his coded password.  If you
  330.           add  new  users, you should make this field empty, this means the
  331.           user  doesn't  have  a password yet.  Then login as that user and
  332.           change his password using the Passwd command.
  333.  
  334. <user>    is  the user identifier, a number between 1 and 65535.  Each user
  335.           should have a different user identifier!  The identifier 65535 is
  336.           reserved for root!
  337.  
  338. <group>   is  the  group  identifier,  a number between 0 and 65535.  Users
  339.           with  the  same group identifier belong to the same group and can
  340.           access  each others files depending on the group-protection bits.
  341.           Users  with  different  group  identifiers can access each others
  342.           files  depending  on  the  other-protection bits.  The identifier
  343.           65535 is reserved for root!
  344.  
  345. <name>    is  the  real  name of the user.  You can enter whatever you like
  346.           for this.  At the moment this is limited to 220 characters.  This
  347.           name  is  displayed  when  user  information  is  asked using the
  348.           UserInfo command.
  349.  
  350. <home>    is the home directory of the user.  When a logout is performed, a
  351.           requester  will appear prompting for a new login.  If a user logs
  352.           in using this requester, the current directory will be changed to
  353.           the  home  of  this  user and the local environment variable HOME
  354.           will  be  set  to  the  name of the home-directory.  This doesn't
  355.           happen when a Login command is used.
  356.  
  357. <port>    is  only  used  by the TCP/IP package from Commodore (AS225).  If
  358.           you  haven't  installed  that package you should leave this field
  359.           empty.
  360.  
  361.   A passwd file could look like this:
  362.  
  363.     root||65535|65535|The Bastard Operator From Hell|SYS:Homes/Root|cli
  364.     geert|Fqhg_IYBiU`|2|1|Geert Uytterhoeven|SYS:Homes/Geert|cli
  365.     kurt|fNXjuAgFBFF|3|1|Kurt Haenen|SYS:Homes/Kurt|cli
  366.     guest||1|0|Anonymous Guest|SYS:Homes/Guest|cli
  367.  
  368.   If there are bad lines in the password file, a warning will be posted and
  369. the  bad  line  will  be  ignored.   The  warning  requester will disappear
  370. automatically after 10 seconds if the user doesn't respond.
  371.  
  372.  
  373.  
  374. 5. The configuration file
  375.  
  376.   The  configuration  file  defines  some settings.  It contains lines with
  377. options  and  values  -  in  the  form  <OPTION>=<VALUE>  -,  and comments.
  378. Comments  must be preceeded with a semicolon.  If an option is missing, the
  379. default value will be taken.  0 is used for OFF, 1 for ON.
  380.   The  'MultiUser.config'  example  delivered with the package reflects the
  381. default settings.
  382.   If  there  are  bad  options in the configuration file, a warning will be
  383. posted  and  the  bad  line  will  be  ignored.  The warning requester will
  384. disappear automatically after 10 seconds if the user doesn't respond.
  385.  
  386.  
  387. 5.1. LIMITDOSSETPROTECTION
  388.  
  389.   If this options is turned on, the protection bits for GROUP and OTHER can
  390. no  longer be changed with the dos.library/SetProtection() call.  Of course
  391. you  can  still  change  the  protection  bits for GROUP and OTHER with the
  392. MProtect  command  (or with the library call muSetProtection()).  It's very
  393. useful because a lot of programs change the protection bits without knowing
  394. about  bits  for  GROUP  and  OTHER.  Defaults to ON.  See also the support
  395. command LimitDOSSetProtection.
  396.  
  397.  
  398. 5.2. PROFILE
  399.  
  400.   If  this option is turned on and there exists a script file '.profile' in
  401. the configuration directory, it will be executed after each login prompt by
  402. the support command Logout.  Defaults to ON.
  403.   The   '.profile'   example   delivered   with   the  package  displays  a
  404. 'Message_Of_The_Day'  if  it  exists in the configuration directory (change
  405. the  directory  in  the  '.profile'  if  you have a different configuration
  406. directory  than  'App:MultiUser') and executes a '.profile' if it exists in
  407. the user's home-directory.
  408.  
  409.  
  410. 5.3. LASTLOGINREQ
  411.  
  412.   If  this  option  is  turned  on, there will appear a lastlogin requester
  413. after each graphical login.  Defaults to ON.
  414.  
  415.  
  416. 5.4. LOGSTARTUP
  417.  
  418.   If  this  option  is  turned on, every startup or reinitialisation of the
  419. MultiUser.server  will  be  logged  to  the  file  'MultiUser.log'  in  the
  420. configuration directory.  Defaults to OFF.
  421.  
  422.  
  423. 5.5. LOGLOGIN
  424.  
  425.   If this option is turned on, every successful login will be logged to the
  426. file 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  427.  
  428.  
  429. 5.6. LOGLOGINFAIL
  430.  
  431.   If  this  option is turned on, every unsuccessful login will be logged to
  432. the file 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  433.  
  434.  
  435. 5.7. LOGPASSWD
  436.  
  437.   If  this  option  is  turned on, every successful password change will be
  438. logged   to  the  file  'MultiUser.log'  in  the  configuration  directory.
  439. Defaults to OFF.
  440.  
  441.  
  442. 5.8. LOGPASSWDFAIL
  443.  
  444.   If  this  option is turned on, every unsuccessful password change will be
  445. logged   to  the  file  'MultiUser.log'  in  the  configuration  directory.
  446. Defaults to OFF.
  447.  
  448. 5.9. LOGCHECKPASSWD
  449.  
  450.   If  this  option  is  turned on, every successful password check (see the
  451. library   function   muCheckPasswd())   will   be   logged   to   the  file
  452. 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  453.  
  454.  
  455. 5.10. LOGCHECKPASSWDFAIL
  456.  
  457.   If  this  option is turned on, every unsuccessful password check (see the
  458. library   function   muCheckPasswd())   will   be   logged   to   the  file
  459. 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  460.  
  461.  
  462. 5.11. PASSWDUIDLEVEL
  463.  
  464.   Users  with  a user identifier greather or equal than the specified value
  465. are  allowed  to  change  their  passwords.   Specify  a value in the range
  466. 0..65535.   E.g.   if  you  specify  a value of 2, a guest user with a user
  467. identifier   of  1  cannot  change  his  password.   See  also  the  option
  468. PASSWDGIDLEVEL.  Defaults to 0.
  469.  
  470.  
  471. 5.12. PASSWDGIDLEVEL
  472.  
  473.   Users  with a group identifier greather or equal than the specified value
  474. are  allowed  to  change  their  passwords.   Specify  a value in the range
  475. 0..65535.   E.g.   if  you specify a value of 1, all users in a guest group
  476. with  a  group identifier of 0 cannot change their passwords.  See also the
  477. option PASSWDUIDLEVEL.  Defaults to 0.
  478.  
  479.  
  480.  
  481. 6. Support Commands
  482.  
  483.   The  support commands are used to login to/logout from the system, change
  484. the  protection  bits  of  a  file,  change the owner of a file, change the
  485. default  protection  bits  for a group of tasks, ...  The number of support
  486. commands  may  grow  in  future  releases.   Here are the commands that are
  487. currently  supported.  They can only be executed from the shell or with the
  488. <Execute Command...> option of the Workbench.
  489.  
  490.  
  491. 6.1. Login
  492.  
  493.   This  command  will  put  a  new owner on top of the current owner of the
  494. task.   *IX users may think of this as the *IX su command.  The effect of a
  495. successful  login  can be reversed with the Logout command.  The owner-list
  496. of a task is sort of a stack:  with Login you put a new owner on top of the
  497. stack,  with  Logout,  you  take an owner of the stack (unless the stack is
  498. empty).
  499.  
  500. Options ...
  501.  
  502. GUI       Normally  the  login  prompt appears in the shell-window that was
  503.           used  to  execute  Login,  but  if  this  option  is specified, a
  504.           requester is used.
  505.  
  506. TASK      Login  another  task  than the one we're currently working in.  A
  507.           task  name  should  be specified after the TASK keyword.  You can
  508.           only login tasks which you own (unless you are root)!
  509.  
  510. OWN       Login  another  task  than  the one we're currently working in by
  511.           changing it's owner to the owner of the current task.  This works
  512.           only  with  tasks that are owner by nobody (unless you are root)!
  513.           This option must be used in conjunction with the TASK option.
  514.  
  515. GLOBAL    Login  all  tasks  connected  to  the  current  task.  It's a bit
  516.           difficult to explain what connected means, but you could say that
  517.           a  parent  task  and all its children are connected unless one of
  518.           them was logged in/out without the GLOBAL option.
  519.  
  520. PROCESS   Login  another  process than the one you're currently working in.
  521.           A  process  number (as displayed by the Status command) should be
  522.           specified   after  the  PROCESS  keyword.   You  can  only  login
  523.           processes which you own (unless you are root)!
  524.  
  525.  
  526. 6.2. Logout
  527.  
  528.   This  command  is  the  inverse  of  Login  if the stack of owners of the
  529. current  task  isn't  empty.   If the stack is empty or becomes empty after
  530. executing the Logout command, a login prompt will appear.  After login, the
  531. current  directory  will  be  changed  to  the  user's  home-directory, and
  532. depending  on  your  configuration  settings,  the '.profile' script in the
  533. configuration directory may be executed.
  534.  
  535. Options ...
  536.  
  537. GUI       If  a  login  request  is  generated  by  Logout, should it use a
  538.           requester?
  539.  
  540. TASK      See Login
  541.  
  542. GLOBAL    This  option  only works when the owner stack is or becomes empty
  543.           when  executing  the Logout command.  If this option is specified
  544.           in such a case, not only this task will change its owner, but all
  545.           connected  task  as  well.   It's a bit difficult to explain what
  546.           connected means, but you could say that a parent task and all its
  547.           children  are connected unless one of them was logged out without
  548.           the  GLOBAL  option.   It's  very useful to logout all your tasks
  549.           from your current session.
  550.  
  551. QUIET     Tells  logout  never  to  generate a login request.  If the owner
  552.           stack  becomes  empty,  you  will  simply be logged in as nobody.
  553.           This may be removed in future releases, but since it isn't really
  554.           useful, this shouldn't be a problem.
  555.  
  556. PROCESS   See Login
  557.  
  558.  
  559. 6.3. Passwd
  560.  
  561.   The  Passwd  command is used to change your password.  Simply type in the
  562. command  in  the  shell and you will be prompted to enter your old password
  563. and type your new password twice.  If you did this correctly, your password
  564. will be changed!
  565.  
  566. Options ...
  567.  
  568. GUI       If this option is specified, Passwd uses requesters to prompt for
  569.           your passwords instead of simple console I/O.
  570.  
  571.  
  572. 6.4. MList
  573.  
  574.   This is a simple list replacement.  It takes none, one or more path-names
  575. as  parameters  and  lists  the  files  in  those path(s) or in the current
  576. directory if no path-name was specified, together with all their protection
  577. bits and some other info.  It recognizes the new 'U' protection bit.
  578.  
  579. Options ...
  580.  
  581. DIR       The pathname(s) or the directory(s) you want information on.  The
  582.           standard AmigaDOS wildcards may be used here.
  583.  
  584.  
  585. 6.5. SetOwner
  586.  
  587.   This  command is used to change the owner of a file.  You can only change
  588. the  owner  of  files  you own or of files that are owned by nobody, unless
  589. you're  root.   If you don't have Kickstart 39.xx or higher, you should use
  590. SetOwner37 instead of SetOwner!
  591.  
  592. Options ...
  593.  
  594. FILE      The  file  or  directory  you  want  to change the owner of.  The
  595.           standard AmigaDOS wildcards may be used here.
  596.  
  597. USER      The  UserID  of the user that should become the owner of the file
  598.           or  directory.   If  no user is specified, the current task owner
  599.           will  be taken.  You're not allowed to change the owner of a file
  600.           to someone else than yourself or nobody, unless you're root.
  601.  
  602. NOBODY    Set the owner of the file or directory to nobody.
  603.  
  604. ALL       Recursively  scan  all  directories  from  within  the  specified
  605.           directory and process all found files and directories.
  606.  
  607. QUIET     Process silently, but do report errors.
  608.  
  609.  
  610. 6.6. MProtect
  611.  
  612.   This command changes the protection flags for files or directories.
  613.  
  614. Options ...
  615.  
  616. FILE      The file or directory you want to change the protection flags of.
  617.           The standard AmigaDOS wildcards may be used here.
  618.           
  619. FLAGS     The protection flags used for the owner of the file.  Valid flags
  620.           are none or some out of:
  621.  
  622.             U   Set  uid  bit:   during  execution, change the owner of the
  623.                 process  to  the  owner of the file (cfr.  *IX).  This even
  624.                 works if you make the program resident.
  625.                 However,  this  only  works after the multiuser.library has
  626.                 been  initialised.  If you put programs with the 'U' bit on
  627.                 in  your  S:User-Startup,  make  sure  you  do it after the
  628.                 'Logout  GLOBAL'  command,  or put 'UserInfo <>NIL:' before
  629.                 the first of them to assure the library has been loaded!
  630.                 If  you  set  the 'U' bit together with 'GROUP W' or 'OTHER
  631.                 W', you will get a warning because this is a very dangerous
  632.                 situation :-)
  633.  
  634.             S   Script bit:  file is a shell script.
  635.  
  636.             P   Pure bit:  program is reentrant and reexecutable.
  637.  
  638.             A   Archive bit:  file has been backed up or archived.
  639.  
  640.             R   Read bit:  file is readable.
  641.  
  642.             W   Write bit:  file is writable.
  643.  
  644.             E   Execute bit:  file is executable.
  645.  
  646.             D   Delete bit:  file is deletable.
  647.  
  648. GROUP     The  protection  flags  used  for  users in the same group as the
  649.           owner  of the file.  Specify them after the GROUP keyword.  Valid
  650.           flags are none or some out of 'R', 'W', 'E' and 'D'.
  651.  
  652. OTHER     The  protection  flags  used for users outside the owner's group.
  653.           Specify  them  after  the OTHER keyword.  Valid flags are none or
  654.           some out of 'R', 'W', 'E' and 'D'.
  655.  
  656. ADD       Add  all specified protection flags to the flags that are already
  657.           set.
  658.  
  659. SUB       Subtract  all  specified protection flags from the flags that are
  660.           already set.
  661.  
  662. ALL       Recursively  scan  all  directories  from  within  the  specified
  663.           directory and process all found files and directories.
  664.  
  665. QUIET     Process silently, but do report errors.
  666.  
  667.  
  668. 6.7. SetDefProtect
  669.  
  670.   This commands sets the default protection bits for the current task.
  671.  
  672. Options ...
  673.  
  674. FLAGS     The  protection  flags  used  for  the  owner  of  the file.  See
  675.           MProtect ('U' is not valid here).
  676.  
  677. GROUP     The  protection  flags  used  for  users in the same group as the
  678.           owner  of  the  file.  Specify them after the GROUP keyword.  See
  679.           MProtect.
  680.  
  681. OTHER     The  protection  flags  used for users outside the owner's group.
  682.           Specify them after the OTHER keyword.  See MProtect.
  683.  
  684. GLOBAL    Change the default protection bits not only for the current task,
  685.           but for all tasks on the same level.
  686.  
  687.  
  688. 6.8. UserInfo
  689.  
  690.   This  command  can  be  used to get some information on the users of this
  691. system.   It  will  display the UserID, uid, gid, home-directory, lastlogin
  692. date  and the contents of a '.plan' file if it exists in the home-directory
  693. of the appropriate user.
  694.  
  695. Options ...
  696.  
  697. ALL       Give information on all the users of this system.  This means all
  698.           users listed in the inet:db/passwd file.
  699.  
  700. USERID    Give  information  on  the  user  with the specified UserID.  The
  701.           UserID  is  the  name  you  have to enter at a login prompt.  The
  702.           standard AmigaDOS wildcards may be used here.
  703.  
  704. UID       Same  as  USERID, but this time info on the user whose user ID is
  705.           specified  is  listed.  The user ID is the number given as second
  706.           entry  in  the inet:db/passwd file.  Specify the userid after the
  707.           UID keyword.
  708.  
  709. GID       Same  thing as UID, but this time for all users in the group with
  710.           the  specified  group  ID.   Specify  the  group ID after the GID
  711.           keyword.
  712.  
  713. NAME      Gives info on the user with the specified real name.  Specify the
  714.           name after the NAME keyword.  The standard AmigaDOS wildcards may
  715.           be used here.
  716.  
  717. QUICK     If  you  add  this  option, only the UserID(s) will be displayed.
  718.           This  is  very  useful  for scripts and aliases.  E.g.  after the
  719.           alias definition
  720.  
  721.                      Alias HCD CD SYS:Homes/`userinfo quick []`
  722.  
  723.           the  command  'HCD  guest'  will  change the current directory to
  724.           guest's   home   directory,   supposed  all  your  users  have  a
  725.           home-directory in SYS:Homes.
  726.  
  727.  
  728. 6.9 Tasks
  729.  
  730.   This command lists the active tasks of a user.
  731.  
  732. Options...
  733.  
  734. USERID    List  the  active  tasks  of  the specified user.  Default is the
  735.           current user.
  736.  
  737. ALL       List all active tasks.
  738.  
  739.  
  740. 6.10 LimitDOSSetProtection
  741.  
  742.   This  command defines whether the protection bits for GROUP and OTHER may
  743. be  changed  via  the  dos.library/SetProtection()  call.  It's very useful
  744. because  a lot of programs change the protection bits without knowing about
  745. bits for GROUP and OTHER.  See also the option LIMITDOSSETPROTECTION in the
  746. configuration file.
  747.  
  748. Options...
  749.  
  750. ON        Turn the limitation on.  This means the protection bits for GROUP
  751.           and    OTHER    no    longer    can    be    changed   with   the
  752.           dos.library/SetProtection() call.  Of course you can still change
  753.           the protection bits for GROUP and OTHER with the MProtect command
  754.           (or with the library call muSetProtection()).
  755.  
  756. OFF       Turn the limitation off.
  757.  
  758.  
  759. [[4m6.11 MakeKeyfiles
  760.  
  761.   This command creates the Keyfiles.  Every partitions you want to use with
  762. the  MultiUserFileSystem must have a Keyfile.  If one of them is missing or
  763. inconsistent,  all  tasks  will  be owned by nobody to prevent unprivileged
  764. accesses, and an alert will be posted.
  765.  
  766. Options...
  767.  
  768. PASSWDDIR The directory where you've put the password file.  This directory
  769.           must be on one of the protected partitions.
  770.  
  771. CONFIGDIR The  directory  where  you've  put  the configuration file.  This
  772.           directory must be on one of the protected partitions.
  773.  
  774. VOLUME    The list of partitions you want to protect.
  775.  
  776.  
  777.  
  778. 7. The log file
  779.  
  780.   Depending  on your configuration file, some actions will be logged to the
  781. file  'MultiUser.log'  in your configuration directory.  The following kind
  782. of  entries may appear therein (<user> stands for a user represented by his
  783. hexadecimal  user/group  identifier, <userid> stands for a user represented
  784. by his UserID):
  785.  
  786.   o <date>, <time>: Startup
  787.  
  788.     MultiUser startup on <date>, <time>.
  789.  
  790.   o <date>, <time>: Login from <user> to <UserID>
  791.  
  792.     <UserID>  was  logged in from a task owned by <user> on <date>, <time>.
  793.     <user>  will  be  '00000000'  if the Logout command was used instead of
  794.     Login.
  795.  
  796.   o <date>, <time>: Login from <user> to <UserID> failed
  797.  
  798.     <UserID> failed to login from a task owned by <user> on <date>, <time>.
  799.     <user>  will  be  '00000000'  if the Logout command was used instead of
  800.     Login.   This  may  indicate an attempt of <user> to do an unauthorized
  801.     login on the account of <UserID>!
  802.  
  803.   o <date>, <time>: Passwd for <user>
  804.  
  805.     <user> changed his password on <date>, <time>.
  806.  
  807.   o <date>, <time>: Passwd for <user> failed
  808.  
  809.     <user> failed to change his password on <date>, <time>.
  810.  
  811.   o <date>, <time>: CheckPasswd for <user>
  812.  
  813.     The  password  check  ((see  the  library  function muCheckPasswd()) on
  814.     <date>, <time> for <user> was successful.
  815.  
  816.   o <date>, <time>: CheckPasswd for <user> failed
  817.  
  818.     The  password  check  ((see  the  library  function muCheckPasswd()) on
  819.     <date>,  <time>  for  <user>  was  unsuccessful.   This may indicate an
  820.     attempt  of an unknown person to make unauthorizedly use of the account
  821.     of <user>!
  822.  
  823.  
  824.  
  825. 8. Caveats
  826.  
  827.   o Unlike  the FastFileSystem, the MultiUserFileSystem returns an error on
  828.     illegal lock modes (i.e.  anything else than ACCESS_READ/SHARED_LOCK or
  829.     ACCESS_WRITE/EXCLUSIVE_LOCK).    This   has   been   done   for  future
  830.     compatibility  reasons.   However,  some  programs do pass illegal lock
  831.     modes - which is an Amiga rule violation - and thus will fail to work.
  832.  
  833.   o Programs  using software interrupts instead of signals for their packet
  834.     I/O  cannot  access files which are not accessible for everybody.  This
  835.     applies  more  specifically  to programs using the ixemul.library (i.e.
  836.     programs compiled with gcc or g++).
  837.  
  838.   o The  .profile  will not be executed under Csh because Csh is not a real
  839.     (Amiga) shell but rather an interactive program.
  840.  
  841.   o Csh  expands wild cards by itself, so quote them (e.g.  "*") if you use
  842.     the support commands.
  843.  
  844.   o Do  not  try  to  use the MultiUserFileSystem on floppy disks (or other
  845.     removables)!   Although  it  is possible, you will almost always get in
  846.     trouble  with  the  Keyfiles.  Keeping your floppies in a safe place is
  847.     still the best protection!
  848.  
  849.   o ARexx  programs  are  always  executed  under the same ownership as the
  850.     RexxMaster  task  -  which  is  started by RexxMast -, so make sure the
  851.     RexxMast  command  is  executed  by  NOBODY  (i.e.   before  the  first
  852.     Login/Logout command) and do not set the set uid bit for RexxMast!
  853.  
  854.  
  855.  
  856. 9. History
  857.  
  858. Release 1.0ß (Library Version 39.134)
  859.  
  860.   First  public release of MultiUser.  All the work on this one was done by
  861. Geert Uytterhoeven.
  862.  
  863.  
  864. Internal Release (Library Version 39.135)
  865.  
  866.   Update  of  the  library and the support programs to allow global logging
  867. out.  (Kurt Haenen)
  868.  
  869.   o The way the library manages the linking of tasks and owners was changed
  870.     to  allow a kind of global control over all tasks of a single user.  It
  871.     still isn't quite the way I'd like it, but it's getting closer ...
  872.  
  873.   o The  GLOBAL option was added to the Logout command to allow the user to
  874.     logout  all  tasks  connected to the same tasknode (private structure).
  875.     This  means  that  you  can logout/login a task and all its children by
  876.     executing a LOGOUT GLOBAL command from one of them.  Very useful 'cause
  877.     now you can logout the Workbench without having to quit it ...
  878.  
  879.   o TASK  option  added  to  Login  and Logout to allow you to Login/Logout
  880.     another  task  (of which you are the owner or that's owned by nobody or
  881.     whatever task if you are root).
  882.  
  883.   o QUIET option added to Logout to force Logout so that nobody will become
  884.     owner  of  the task.  We're still discussing this, so it may be removed
  885.     again in the future ...
  886.  
  887.  
  888. Internal Release (Library Version 39.136)
  889.  
  890.   Update  of  the file system, library and support programs so that default
  891. protection  bits  can  be  set  and  are  used  by the file system.  (Geert
  892. Uytterhoeven)
  893.  
  894.   o The  file  system  and  library  were  updated to keep track of default
  895.     protection bits and to use them whenever a file is created.
  896.  
  897.   o A  new  utility SetDefProtect (name may change in the future) was added
  898.     to  allow  the  user  to  specify  the  default  protection  bits for a
  899.     tasknode.
  900.  
  901.  
  902. Release 1.1 (Library Version 39.137)
  903.  
  904.   Update  of  the  library  to  support  .profiles  and allow hiding of the
  905. password  on  any  terminal (I hope)!  Update to the file system to support
  906. protection of files against locking.  (Geert Uytterhoeven and Kurt Haenen)
  907.  
  908.   o The Logout command now also executes a .profile script after login.
  909.  
  910.   o An  exclusive  lock  can  only  be  taken on a file you have write-, or
  911.     delete-rights  on.   A  shared  lock can be obtained on a file you have
  912.     read-, write-, execute- or delete-rights on or that's owned by you.
  913.  
  914.   o The  UserInfo command can now display the .sig file located in the home
  915.     of  the  user  on which info is demanded.  To do this, you have to give
  916.     the  SIG  option.   The .sig file should be readable for the one asking
  917.     information about the owner of the .sig!
  918.  
  919.  
  920. Release 1.2 (Library Version 39.140)
  921.  
  922.   Starting with this release, all the work was done by Geert Uytterhoeven.
  923.  
  924.   o The  password  file  should  be compatible with the TCP/IP package from
  925.     Commdore (AS225) (I hope :-).
  926.  
  927.   o Wildcards added in some support commands.
  928.  
  929.   o If a user don't have a password he won't be asked for it no more during
  930.     Login/Logout.
  931.  
  932.   o Finally:  autodoc and includes added!!
  933.  
  934.   o .sig renamed to .plan. SIG option renamed to PLAN.
  935.  
  936.   o PURE  bit set for the support commands.  They were also pure in earlier
  937.     releases, but I forgot the magic bit.
  938.  
  939.   o Some other minor changes I can't remember :-)
  940.  
  941.  
  942. Release 1.2a (Library Version 39.141)
  943.  
  944.   Only some bug fixes :-(
  945.  
  946.   o SetOwner37: opened wrong dos.library version.
  947.  
  948.   o Setowner[37]: crashed when bad operating system version.
  949.  
  950.   o Password  encryption  still  wasn't compatible with AS225 because of an
  951.     ambiguity  in the ACrypt() documentation (I passed the UserName instead
  952.     of the UserID).
  953.  
  954.  
  955. Release 1.3 (11/05/93) (Library Version 39.145)
  956.  
  957.   WARNING: THIS  IS  A  MAJOR  UPDATE  WITH SOME FUNDAMENTAL CHANGES!!  YOU
  958.            SHOULD   CHECK   YOUR  OWN  MULTIUSER  APPLICATION  SOURCES  AND
  959.            RECOMPILE THEM!!
  960.  
  961.   o Using  history  after  changing  the  password from the console doesn't
  962.     reveal the entered passwords anymore.
  963.  
  964.   o Bug  fixed:  If you used Passwd before IPrefs installed localization or
  965.     in  case  of  a  pre-2.1 Workbench, a corrupt password file was written
  966.     (RawDoFmt()  patched  by  locale.library  treats  %u different than the
  967.     original).
  968.  
  969.   o New less kludgy, object oriented internal structure.
  970.  
  971.   o Meaning  of  tag  muT_Task  changed.   Now it needs a pointer to a task
  972.     structure rather than the task's name.
  973.  
  974.   o Library function muSetDefProtection() renamed to muSetDefProtectionA():
  975.     its  arguments  are now passed via a taglist using the tag muT_Task and
  976.     the new tag muT_DefProtection.
  977.  
  978.   o If you're already root you won't be asked for a password anymore during
  979.     Login.
  980.  
  981.   o GLOBAL flag added to SetDefProtect.
  982.  
  983.   o PROCESS keyword added for Login/Logout.
  984.  
  985.   o New tags muT_UserID and muT_Password added for muLoginA().
  986.  
  987.   o You  aren't  allowed  anymore  to change the owner of a file to someone
  988.     else than yourself or nobody, unless you're root.
  989.  
  990.   o Owner change during execution (set uid bit, cfr.  *IX) added.
  991.  
  992.   o Source  of  support  commands  added as examples.  They are full public
  993.     domain.   If you develop your own support commands I'd appreciate it if
  994.     you  would  send  me  a  copy (eventually a copy of the source too :-).
  995.     Maybe I could add them to the next release of the package.
  996.  
  997.   o From  now  on the MultiUserFileSystem is distributed as a patch for the
  998.     original FastFileSystem.
  999.  
  1000.   o New support command Tasks.
  1001.  
  1002.   o New  library functions muSetProtection() and muLimitDOSSetProtection().
  1003.     New support command LimitDOSSetProtection.
  1004.  
  1005.  
  1006. Release 1.4 (20/07/93) (Library Version 39.151)
  1007.  
  1008.   o Logout QUIET was broken: fixed!
  1009.  
  1010.   o If  the  password file is corrupt, you will get a warning instead of an
  1011.     inaccessible system.  All invalid lines will be ignored.
  1012.  
  1013.   o The ramlib task isn't owned by root anymore.
  1014.  
  1015.   o UserInfo entered an endless loop if a .plan was read protected:  fixed!
  1016.  
  1017.   o SetOwner37 caused a (harmless) Enforcer hit (thanks Max):  fixed!
  1018.  
  1019.   o New        keytypes       muKeyType_WUserID,       muKeyType_WUserName,
  1020.     muKeyType_WUserIDNext  and  muKeyType_WUserNameNext for muGetUserInfo()
  1021.     to handle wildcards in a UserID or UserName.
  1022.  
  1023.   o UserInfo uses the new keytypes and thus allows wildcards for UserID and
  1024.     UserName.
  1025.  
  1026.   o New library function muCheckPasswd().
  1027.  
  1028.   o The MultiUser.server doesn't spawn AmigaDOS-requesters anymore.
  1029.  
  1030.   o The  support  commands  MList,  MProtect  and  SetOwner[37]  now handle
  1031.     non-matching wildcards correctly and give the right error message.
  1032.  
  1033.   o Enhanced security using Keyfiles.
  1034.  
  1035.   o The (private) library function muSetLibFlush() is obsolete now.
  1036.  
  1037.   o Configuration file and log options added.
  1038.  
  1039.   o The .profile in the configuration directory will be executed (depending
  1040.     on  your  configuration settings), rather than the .profile in a user's
  1041.     home-directory.
  1042.  
  1043.   o New library functions muGetPasswdDirLock() and muGetConfigDirLock().
  1044.  
  1045.   o Patch for the FastFileSystem of release 2.05 (V36.104) added.
  1046.  
  1047.   o QUICK flag added for UserInfo.
  1048.  
  1049.   o If  the user doesn't respond to a warning requester, the requester will
  1050.     disappear  automatically after 10 seconds to allow unattended operation
  1051.     in production environments.
  1052.  
  1053.   o Bug  fixed:   If you specify a nonexistent task name, Login/Logout TASK
  1054.     raises an error now instead of operating on the current task.
  1055.  
  1056.   o Security  hole  fixed:   now  set  uid  only works on volumes using the
  1057.     MultiUserFileSystem.
  1058.  
  1059.   o The .lastlogin file is human readable now (i.e. <Day> <Date> <Time>).
  1060.  
  1061.   o The  PLAN  flag  for UserInfo is obsolete now, UserInfo always displays
  1062.     the  contents  of  the  .plan file (unless you specify the QUICK flag).
  1063.     Now UserInfo displays the lastlogin date too.
  1064.  
  1065.   o Almost  all  of  Kurt's  code  is  gone now (I hope this won't start an
  1066.     AT&T/USL <-> BSD alike war :-).
  1067.  
  1068.   o Finally  Passwd looks fine when used from a Shell on a serial terminal:
  1069.     now  it dumps carriage returns where it should.  I still don't know why
  1070.     muLogin()/Logout()  always  worked  correctly  and  Passwd not (in both
  1071.     cases I used almost the same code!), but who cares??
  1072.  
  1073.  
  1074.  
  1075. 10. Plans for the future
  1076.  
  1077.   o A GUI tool for managing the password and configuration files.
  1078.  
  1079.   o Better compatibility with ixemul.library.
  1080.  
  1081.   o Owner change during execution should work for shell scripts too.
  1082.  
  1083.   o The multiuser.library should be a part of the MultiUserFileSystem.
  1084.  
  1085.   o A  brand  new  File  System:  maybe the Linux file system?  Any help is
  1086.     welcome!
  1087.  
  1088.  
  1089.  
  1090. 11. Credits
  1091.  
  1092.   o Library             :   Geert Uytterhoeven & Kurt Haenen
  1093.  
  1094.   o Support Commands    :   Geert Uytterhoeven & Kurt Haenen
  1095.  
  1096.   o Documentation       :   Geert Uytterhoeven & Kurt Haenen
  1097.  
  1098.   o File System Patches :   Geert Uytterhoeven
  1099.  
  1100.  
  1101.   Starting with Release 1.2, all the work was done by Geert Uytterhoeven.
  1102.  
  1103.  
  1104.  
  1105. 12. Contacts
  1106.  
  1107. How to contact the author ...
  1108.  
  1109.   o E-mail
  1110.  
  1111.                            uytterho@cs.kuleuven.ac.be
  1112.  
  1113.       This  account  is  at least valid 'till end June '93; it may be valid
  1114.       from July to September (but I won't be reading mail on a regular base
  1115.       then) and it will probably be valid again in October.
  1116.  
  1117.  
  1118.   o Fax
  1119.  
  1120.                                   +32-16-535823
  1121.  
  1122.       This is my preferred (fast-'n-easy :-) link to the world from July to
  1123.       September '93.
  1124.  
  1125.  
  1126.   o Snail mail
  1127.  
  1128.                                Geert Uytterhoeven
  1129.                                Huysmansstraat 12
  1130.                                B-3128 BAAL
  1131.                                BELGIUM
  1132.  
  1133.                      or from October '93 'till end June '94
  1134.  
  1135.                                Geert Uytterhoeven
  1136.                                Tervuursevest 119
  1137.                                B-3001 HEVERLEE
  1138.                                BELGIUM
  1139.  
  1140.  
  1141. How to contact the MultiUser mailing list ... (thanks Kai)
  1142.  
  1143.   Mail your comments to
  1144.  
  1145.                            mufs@hactar.hanse.de
  1146.  
  1147.  
  1148.   If you want to subscribe to this mailing list, just send an E-mail to
  1149.  
  1150.                          listserv@hactar.hanse.de
  1151.  
  1152. containing a line like this:
  1153.  
  1154.                             ADD <address> mufs
  1155.  
  1156. where  <address>  stands  for  your  E-mail address.  From then on you will
  1157. receive  a copy of all mails sent to the mailing list.  For more help about
  1158. the  mailing  list, send an E-mail containing only the magic word 'HELP' to
  1159. the list server.
  1160.  
  1161.  
  1162.  
  1163. 13. Special thanks go to ...
  1164.  
  1165.   o Nico François for developing ReqTools.
  1166.  
  1167.   o Jorrit  Tyberghein  for  developing  the  magnificent PowerVisor (We're
  1168.     waiting for release 1.43 :-)
  1169.  
  1170.   o Kurt Haenen, Ives Aerts and Litrik De Roy for beta testing.
  1171.  
  1172.   o Kai  'wusel'  Siering,  Markus  Illenseer, Tako Schotanus, Ralph-Thomas
  1173.     Aussem and Max Hantsch for their comments and tips.
  1174.  
  1175.   o The  Department  of  Computer  Science  at  the Katholieke Universiteit
  1176.     Leuven for allowing me to use the InterNet for this MultiUser project.
  1177.  
  1178.   o Kai 'wusel' Siering for setting up a mailing list for MultiUser.
  1179.  
  1180.  
  1181.  
  1182.                                                     
  1183.                                          /   / /   /
  1184.                                         /   / /   /
  1185.                                        /   / /   /
  1186.                                       /   / /   /
  1187.                           \   \ \   \/   / /   /
  1188.                            \   \ \   \  / /   /
  1189.                             \   \ \   \/ /   /
  1190.                              \   \/\   \/   /
  1191.                               \   \ \   \  /
  1192.                                \   \/\   \/
  1193.  
  1194.  
  1195.                      Only Amiga makes it possible ...
  1196.  
  1197.                    But wouldn't Linux for Amiga be nice!
  1198.  
  1199.  
  1200.                                     /\
  1201.                                    /XX\
  1202.                                   /XXXX\
  1203.                                  /XXXXXX\
  1204.                                 /XXXXXXXX\
  1205.                              /\ \XXXXXXXX/ /\
  1206.                             /XX\ \XXXXXX/ /XX\
  1207.                            /XXXX\ \XXXX/ /XXXX\
  1208.                           /XXXXXX\ \XX/ /XXXXXX\
  1209.                          /XXXXXXXX\ \/ /XXXXXXXX\
  1210.                          \XXXXXXXX/ /\ \XXXXXXXX/
  1211.                           \XXXXXX/ /XX\ \XXXXXX/
  1212.                            \XXXX/ /XXXX\ \XXXX/
  1213.                             \XX/ /XXXXXX\ \XX/
  1214.                              \/ /XXXXXXXX\ \/
  1215.                                 \XXXXXXXX/
  1216.                                  \XXXXXX/
  1217.                                   \XXXX/
  1218.                                    \XX/
  1219.                                     \/
  1220.  
  1221.