home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / dec93 / os20 / util / multiuser.lha / MultiUser / MultiUser.doc < prev    next >
Encoding:
Text File  |  1993-12-21  |  59.4 KB  |  1,515 lines

  1.  
  2.                                                                  
  3.                    / / / /                                       
  4.                   / / / /
  5.             \ \ \ \/ / /      -+*+- MultiUser Release 1.5 -+*+-
  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.   The rules above do not apply to the external utilities, for which I don't
  44. give  any  warranties.   Read the appropriate documentation for information
  45. about their disclaimers, distributability and copyright notices.
  46.  
  47.  
  48. CONTENTS
  49.  
  50.   Introduction
  51.   System Requirements
  52.   Installation
  53.   The password file
  54.   The configuration file
  55.   The group file
  56.   Support Commands
  57.   The log file
  58.   Caveats
  59.   External utilities
  60.   Other software supporting MultiUser
  61.   History
  62.   Plans for the future
  63.   Credits
  64.   Contacts
  65.   Special thanks go to ...
  66.  
  67.  
  68.  
  69. 1. Introduction
  70.  
  71.   You've  got an Amiga with Kickstart 2.04 or higher and several people are
  72. regularly  fooling  around  with it ...  Last week your sister deleted your
  73. 20MB JPEG collection by mistake and you don't want this to happen again ...
  74. Well, here's the answer:  MultiUser!
  75.  
  76.   MultiUser allows you to create a *IX-like environment where several users
  77. live  together  in  harmony,  unable to delete each others files, unable to
  78. read  those  private  love-letters  of  other  users  ...  And this even if
  79. several  users  are  working on the machine at the same time (on a terminal
  80. hooked up to the serial port) ...
  81.  
  82.   You  are  the  sole user of your computer?  Well, make sure it stays that
  83. way  by installing MultiUser!  People without a valid login ID and password
  84. won't be able to access files you have made private with MultiUser.  If you
  85. make  all  files  private  (not readable for others), the only useful thing
  86. they could do, is boot from a floppy ...
  87.  
  88.   And ...  you do not have to reformat your hard drive!
  89.  
  90.  
  91.  
  92. 2. System Requirements
  93.  
  94.   Your  Amiga  should be equipped with Kickstart 2.04 (V37+) or higher, and
  95. with  a  hard drive/controller combination that supports the CBM Rigid Disk
  96. Block  protocol (e.g.  an A590 or A2091, an A3000 SCSI controller, an A4000
  97. IDE  controller  and most GVP SCSI controllers).  MultiUser can NOT be used
  98. on floppy drive systems.
  99.   If  you  have  a  controller  which does not fully support the Rigid Disk
  100. Block  protocol  (e.g.  a Supra Wordsync), please read 'Supra_Wordsync.doc'
  101. in the 'Supra_Wordsync' directory before installing.
  102.  
  103.   You  do  need an original FastFileSystem (V36.102 (release 2.04), V36.104
  104. (release  2.05 or 2.1), V39.27 (release 3.0) or V40.1 (release 3.1)), which
  105. should have been included with your system software.
  106.  
  107.   The  package was written on an A4000/040 running Kickstart 39.106 and was
  108. tested on the following configurations:
  109.  
  110.   o A4000/040, 120 MB IDE harddisk, 2 MB chip ram, 8 MB fast ram
  111.  
  112.   o A4000/040,  120  MB  IDE harddisk, 2 MB chip ram, 8 MB fast ram, Retina
  113.     graphics board, Retina WB emulation
  114.  
  115.   o A3000T  25MHz,  500+  MB  harddisk,  2  MB chip ram and 16 MB fast ram,
  116.     Kickstart  37.175,  GVP  '040  accel,  Retina graphics board, Retina WB
  117.     emulation,  Vortex  486  SLC  board  (this  is  shit!), Amax II+, IV-24
  118.     graphics board,...  (Not mine :-( A demonstration model in a store Kurt
  119.     frequently visits :^)
  120.  
  121.   o A3000  25MHz, 52 MB + 120 MB harddisk, 2 MB chip ram and some MB static
  122.     column ram.  Kickstart 39.110 (developer)
  123.  
  124.   o A500,  20 MB harddisk (A590 XT), 512 K chip ram, 512 K ranger mem, 2 MB
  125.     fast  ram,  old  chipset,  68010  processor,  Kickstart 2.04 softkicked
  126.     (developer)
  127.  
  128.   o A500,  84  or 105 MB harddisk (A590 SCSI), 512 K chip ram, 512 K ranger
  129.     mem, 2 MB fast ram, old chipset, Kickstart 2.04 softkicked (developer)
  130.  
  131.  
  132.   On all these configuration the package seems to work fine, so I guess you
  133. can run it on almost any machine.
  134.  
  135.   You  do  need  the  reqtools.library  version  38 or higher.  Reqtools is
  136. Copyright © Nico François.
  137.  
  138.  
  139.  
  140. 3. Installation
  141.  
  142.   WARNING:   Read the installation part completely BEFORE you apply it!  If
  143. you  still don't know what we're talking about, you'd better don't use this
  144. package!   It's  NOT  for the casual user; managing a MultiUser system is a
  145. difficult and tedious task!
  146.   If  anything  fails during the installation, don't forget to restore your
  147. system  to  it's  original state, else you could be surprised in a very bad
  148. way!
  149.   If  you're  upgrading  from  release  1.4  or  1.3 (or even from an older
  150. version), please read 'MultiUser.upgrade' first.
  151.  
  152.   o Extract  the  archive and change the current directory to the directory
  153.     MultiUser  located in the directory where you extracted the archive to.
  154.     (Preferably RAM:)
  155.  
  156.   o Install  the  library  and  the  support  commands  with  the following
  157.     commands:
  158.  
  159.                        Copy Libs/multiuser.library LIBS:
  160.                        Copy C/#?                   C:
  161.  
  162.   o The  MultiUserFileSystem  is  distributed  as  a patch for the original
  163.     FastFileSystem.   There  are patches for the FastFileSystems of release
  164.     2.04  (V36.102), release 2.05 (V36.104), release 2.1 (V36.104), release
  165.     3.0  (V39.27)  and  release  3.1 (V40.1) of the operating system.  Make
  166.     sure  you  have  one of these FastFileSystems in the L:  directory!  If
  167.     it's not there you can copy it from the L directory on the Install disk
  168.     of the operating system install disk set.  If you're not sure about the
  169.     version    of    your   FastFileSystem   use   the   command   'Version
  170.     L:FastFileSystem'.  Now Create a MultiUserFileSystem with the command:
  171.  
  172.        Patch/Patch L:FastFileSystem Patch/MultiUserFileSystem_xxx.patch
  173.                              L:MultiUserFileSystem
  174.  
  175.     where  xxx  stands for '2.04', '2.05', '2.1', '3.0' or '3.1', depending
  176.     on your operating system release.
  177.  
  178.     If you get the message
  179.  
  180.                           Checksum error in old file
  181.                           Patch failed
  182.  
  183.     you  used  the  wrong  patchfile or you have an original FastFileSystem
  184.     which  is  not  supported  (or  your  original  FastFileSystem has been
  185.     corrupted).
  186.  
  187.   o Choose  the  partitions you want to protect and the directory where you
  188.     want  to  store  the  MultiUser  configuration  stuff.   Make sure this
  189.     directory  is  located  on  one  of the partitions you want to protect!
  190.     Let's  say  your  configuration  directory  is 'App:MultiUser' (Replace
  191.     'App:MultiUser'   anywhere  in  this  document  by  the  name  of  your
  192.     configuration  directory  if you use another directory name).  Copy the
  193.     configuration stuff to this directory with the following command:
  194.  
  195.                          Copy Config/#? App:MultiUser
  196.  
  197.   o If  you've  installed  the  TCP/IP  package  from Commodore (AS225) you
  198.     already  have  a  valid  password  file  (inet:db/passwd).  The inet:db
  199.     directory must be located on one of the partitions you want to protect!
  200.     Make  sure there's an entry for a 'root' user with '65535' for the user
  201.     and primary group number, e.g.:
  202.  
  203.     root||65535|65535|The Bastard Operator From Hell|SYS:Homes/Root|cli
  204.           ^^^^^ ^^^^^
  205.  
  206.   o Append the next line to your 'S:User-Startup' file:
  207.  
  208.                                Logout GUI GLOBAL
  209.  
  210.   o Pick  a  name  for  your  computer  ...   This  name will appear in the
  211.     login/logout  requester.   Let's  say  you  want  to  call  your system
  212.     'Pythagoras', then you have to execute the following:
  213.  
  214.                       Echo 'Pythagoras' >ENVARC:HostName
  215.  
  216.   o Let's  say  you  want to protect the partitions 'SYS:' and 'App:'.  You
  217.     can  protect as many partitions as you like, just add their name to the
  218.     list  below.  Create the required Keyfiles on these partitions with the
  219.     following  command  if  you  haven't  installed the TCP/IP package from
  220.     Commodore:
  221.  
  222.               MakeKeyfiles App:MultiUser App:MultiUser SYS: App:
  223.  
  224.     TCP/IP users should use a command line like this:
  225.  
  226.                  MakeKeyfiles inet:db App:MultiUser SYS: App:
  227.  
  228.   o Start  HDToolBox to install the MultiUserFileSystem.  If HDToolBox does
  229.     not  find your hard drive, you probably have to start it from the shell
  230.     with  'HDToolBox  <hddev>',  where  <hddev> stands for the name of your
  231.     hard  drive  controller device (e.g.  'scsi.device' for CBM controllers
  232.     or 'gvpscsi.device' for GVP controllers).  If that fails too, you can't
  233.     use MultiUser on your system.
  234.  
  235.       NOTE: The  following  text  describes  the  use  of  the  version  of
  236.             HDToolBox  that  is  supplied  with AmigaOS Release 3.0.  Other
  237.             versions may slightly differ.
  238.  
  239.       x Choose  the drive you want to protect.  If you want to protect more
  240.         than  one  drive,  you  simply  repeat this for each of the drives.
  241.         Select  the  drive  by  clicking  on  it  in the listview where all
  242.         connected drives are displayed.
  243.  
  244.       x Press  the  <Partition  Drive>  button.   Now  a new display should
  245.         appear  containing a large box which may be divided up into several
  246.         partitions ...
  247.  
  248.       x Activate  the  <Advanced  Options>  checkbox.   Now some additional
  249.         options should appear ...
  250.  
  251.       x Press  the <Add/Update...> button in the file system section of the
  252.         HDToolBox    window.     (There's    only    one   gadget   labeled
  253.         <Add/Update...>, so you can't miss it.)
  254.  
  255.       x Now  the  window  should contain a list of currently installed file
  256.         systems  and  some  additional  buttons.   If you are updating your
  257.         MultiUserFileSystem,  there  should  already  be  an entry with the
  258.         0x6d754653  ('muFS' in HEX ASCII) identifier.  If this is the case,
  259.         click  on it and press <Update File System...>, in all other cases,
  260.         press the <Add New File System...> button.
  261.  
  262.       x Now  a  requester  appears.   Enter  'L:MultiUserFileSystem' in the
  263.         string-gadget  of  the requester and '0x6d754653' in the identifier
  264.         (also  called  DosType)  gadget.  If your version of HDToolBox asks
  265.         you to enter a version number, you should use 39.  Some versions of
  266.         HDToolbox  (the  one  with  3.0) uses two requesters for the needed
  267.         information,  so  it  may be necessary to select the <Ok> button of
  268.         the requester before you can fill in the DosType.
  269.  
  270.       x Press  the  <Ok>  button of the requester (if you haven't done this
  271.         yet).  Now you should be back in the File Systems display.  Go back
  272.         to the Partitions display by pressing the <Ok> button.
  273.  
  274.       x Select  the  partition on the drive that you wanna protect.  If you
  275.         want  to  protect  more  than  one  partition (it is recommended to
  276.         protect  all  partitions  on  the  drive),  you  simply  repeat the
  277.         following  stuff  for  every  partition.  You select a partition by
  278.         clicking  on  the  part  of  the  large  box (which represents your
  279.         harddisk) that represents that partition.
  280.  
  281.       x Press the <Change ...> or <Change File System> button.
  282.  
  283.       x Select  the  <Custom  File  System>  gadget  and enter '0x6d754653'
  284.         ('muFS' in HEX ASCII) into the <Identifier> gadget.
  285.  
  286.       x Press  the  <Ok>  button  to return to the Partitions display.  You
  287.         should  repeat  the  above steps for all the partitions you wish to
  288.         protect before continuing ...
  289.  
  290.       x Press the <Ok> button to return to the main HDToolBox display.
  291.  
  292.       x Press  the  <Save  Changes  to Drive> button.  Don't care about the
  293.         warning  that this will destroy the data on your partition, no data
  294.         will  be  lost :-).  If HDToolBox complains that there isn't enough
  295.         space  on  the drive to save all the configuration data, you should
  296.         return  to  the  File  System  Maintenance  section of HDToolBox by
  297.         pressing  <Partition  Drive> and <Add/Update ...> buttons.  Now you
  298.         should  select  another  file  system  than the one with identifier
  299.         0x6d754653,   press  <Delete  File  System>,  return  to  the  main
  300.         HDToolBox  display  and  try  saving the configuration again.  Note
  301.         that  you  should  make  sure  not to delete any file system that's
  302.         still  used  on  any partition!  This is why it is recommended that
  303.         all partitions on the drive should use the MultiUserFileSystem.
  304.  
  305.       x If  everything  went OK, select Exit and confirm the reboot request
  306.         of HDToolBox.  Now your machine should automatically reset.
  307.  
  308.   o After  the  reboot,  a requester should appear.  Simply enter 'root' as
  309.     login  id.   You  should now be logged in as root, having access to all
  310.     files.
  311.  
  312.   o The first thing you should do is to change your password.  This is done
  313.     by  entering  the  Passwd  GUI  command in a shell you open or with the
  314.     <Execute  Command  ...>  option  of the Workbench.  You are prompted to
  315.     enter  your  old password, so simply press enter.  Now you are asked to
  316.     enter  your  new password twice.  If you enter the same password twice,
  317.     this  will from now on (until you change it again) be the password root
  318.     has to enter at a login request.
  319.  
  320.   o Now  you  have  to  protect some important files using the MProtect and
  321.     SetOwner[37]  commands.   We will use SetOwner in this description, but
  322.     if  you  aren't  using  Kickstart  39.xx  or  higher,  you  should  use
  323.     SetOwner37 instead!
  324.     You  should  protect the Keyfiles on all protected partitions.  Execute
  325.     the following commands for every protected partition:
  326.  
  327.                SetOwner <VOL>.MultiUser.keyfile root
  328.                MProtect <VOL>.MultiUser.keyfile R
  329.  
  330.     where  <VOL> stands for a partition name (e.g.  'SYS:' or 'App:' in our
  331.     example).  Protect some other important files, too:
  332.  
  333.              SetOwner App:MultiUser/passwd root
  334.              MProtect App:MultiUser/passwd RWD
  335.              SetOwner App:MultiUser/MultiUser.config root
  336.              MProtect App:MultiUser/MultiUser.config RWD
  337.              SetOwner App:MultiUser/MultiUser.group root
  338.              MProtect App:MultiUser/MultiUser.group RWD
  339.              SetOwner App:MultiUser/.profile root
  340.              MProtect App:MultiUser/.profile SRWED GROUP R OTHER R
  341.              SetOwner S:Startup-Sequence root
  342.              MProtect S:Startup-Sequence SRWED GROUP R OTHER R
  343.              SetOwner S:User-Startup root
  344.              MProtect S:User-Startup SRWED GROUP R OTHER R
  345.              SetOwner SYS:Tools/HDToolBox root
  346.              MProtect SYS:Tools/HDToolBox RWED
  347.  
  348.                 ... and any other files you wish to protect ...
  349.  
  350.     It  is  recommended  to leave most files readable for others, except of
  351.     course  the  files  you really wanna keep to yourself.  .info files and
  352.     .backdrop  files  should  be  readable  for everybody if you don't want
  353.     complications when using the Workbench.
  354.  
  355.   o Do  NOT  forget  to  make a backup of all Keyfiles, in case an accident
  356.     occurs!
  357.  
  358.  
  359.  
  360. 4. The password file
  361.  
  362.   The  password  file  contains all the information the system needs on the
  363. users  that  are  allowed to access the system.  This file (named 'passwd')
  364. must  be  located  in  the  PASSWDDIR  directory,  as  specified  with  the
  365. 'MakeKeyFiles'  command.  Each line of the file contains information on one
  366. user.  The syntax of such a line is as follows:
  367.  
  368.       <userid>'|'<passwd>'|'<uid>'|'<gid>'|'<name>'|'<home>'|'<port>
  369.  
  370. <userid>  is  the  same  as the name this user will need to give at a login
  371.           request.  This name may be upto 31 characters long.
  372.  
  373. <passwd>  if  the  user has a password, this is his coded password.  If you
  374.           add  new  users, you should make this field empty, this means the
  375.           user  doesn't  have  a password yet.  Then login as that user and
  376.           change his password using the Passwd command.
  377.  
  378. <uid>     is  the user identifier, a number between 1 and 65535.  Each user
  379.           should have a different user identifier!  The identifier 65535 is
  380.           reserved for root!
  381.  
  382. <gid>     is  the  primary  group identifier, a number between 0 and 65535.
  383.           Users with the same group identifier belong to the same group and
  384.           can  access  each  others files depending on the group-protection
  385.           bits.   Users  with  different  group identifiers can access each
  386.           others   files  depending  on  the  other-protection  bits.   The
  387.           identifier  65535  is  reserved for root!  For users belonging to
  388.           more than one group, see the group file section.
  389.  
  390. <name>    is  the  real  name of the user.  You can enter whatever you like
  391.           for this.  At the moment this is limited to 219 characters.  This
  392.           name  is  displayed  when  user  information  is  asked using the
  393.           UserInfo command.
  394.  
  395. <home>    is the home-directory of the user.  When a logout is performed, a
  396.           requester  will appear prompting for a new login.  If a user logs
  397.           in using this requester, the current directory will be changed to
  398.           the  home  of  this  user and the local environment variable HOME
  399.           will  be  set  to  the  name of the home-directory.  This doesn't
  400.           happen when a Login command is used.
  401.  
  402. <port>    is  only  used  by the TCP/IP package from Commodore (AS225).  If
  403.           you  haven't  installed  that package you should leave this field
  404.           empty.
  405.  
  406.   A passwd file could look like this:
  407.  
  408.     root||65535|65535|The Bastard Operator From Hell|SYS:Homes/Root|cli
  409.     geert|Fqhg_IYBiU`|2|1|Geert Uytterhoeven|SYS:Homes/Geert|cli
  410.     kurt|fNXjuAgFBFF|3|2|Kurt Haenen|SYS:Homes/Kurt|cli
  411.     guest||1|0|Anonymous Guest|SYS:Homes/Guest|cli
  412.  
  413.   If there are bad lines in the password file, a warning will be posted and
  414. the  bad  line  will  be  ignored.   The  warning  requester will disappear
  415. automatically after 10 seconds if the user doesn't respond.
  416.  
  417.  
  418.  
  419. 5. The configuration file
  420.  
  421.   The   configuration   file  defines  some  settings.   This  file  (named
  422. 'MultiUser.config')   must  be  located  in  the  CONFIGDIR  directory,  as
  423. specified  with the 'MakeKeyFiles' command.  It contains lines with options
  424. and  values  - in the form <OPTION>=<VALUE> -, and comments.  Comments must
  425. be  preceeded with a semicolon.  If an option is missing, the default value
  426. will be taken.  0 is used for OFF, 1 for ON.
  427.   The  'MultiUser.config'  example  delivered with the package reflects the
  428. default settings.
  429.   If  there  are  bad  options in the configuration file, a warning will be
  430. posted  and  the  bad  line  will  be  ignored.  The warning requester will
  431. disappear automatically after 10 seconds if the user doesn't respond.
  432.  
  433.  
  434. 5.1. LIMITDOSSETPROTECTION
  435.  
  436.   If this options is turned on, the protection bits for GROUP and OTHER can
  437. no  longer be changed with the dos.library/SetProtection() call.  Of course
  438. you  can  still  change  the  protection  bits for GROUP and OTHER with the
  439. MProtect  command  (or with the library call muSetProtection()).  It's very
  440. useful because a lot of programs change the protection bits without knowing
  441. about  bits  for  GROUP  and  OTHER.  Defaults to ON.  See also the support
  442. command LimitDOSSetProtection.
  443.  
  444.  
  445. 5.2. PROFILE
  446.  
  447.   If  this option is turned on and there exists a script file '.profile' in
  448. the configuration directory, it will be executed after each login prompt by
  449. the support command Logout.  Defaults to ON.
  450.   The   '.profile'   example   delivered   with   the  package  displays  a
  451. 'Message_Of_The_Day'  if  it  exists in the configuration directory (change
  452. the  directory  in  the  '.profile'  if  you have a different configuration
  453. directory  than  'App:MultiUser') and executes a '.profile' if it exists in
  454. the user's home-directory.
  455.  
  456.  
  457. 5.3. LASTLOGINREQ
  458.  
  459.   If  this  option  is  turned  on, there will appear a lastlogin requester
  460. after each graphical login.  Defaults to ON.
  461.  
  462.  
  463. 5.4. LOGSTARTUP
  464.  
  465.   If  this  option  is  turned on, every startup or reinitialisation of the
  466. MultiUser.server  will  be  logged  to  the  file  'MultiUser.log'  in  the
  467. configuration directory.  Defaults to OFF.
  468.  
  469.  
  470. 5.5. LOGLOGIN
  471.  
  472.   If this option is turned on, every successful login will be logged to the
  473. file 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  474.  
  475.  
  476. 5.6. LOGLOGINFAIL
  477.  
  478.   If  this  option is turned on, every unsuccessful login will be logged to
  479. the file 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  480.  
  481.  
  482. 5.7. LOGPASSWD
  483.  
  484.   If  this  option  is  turned on, every successful password change will be
  485. logged   to  the  file  'MultiUser.log'  in  the  configuration  directory.
  486. Defaults to OFF.
  487.  
  488.  
  489. 5.8. LOGPASSWDFAIL
  490.  
  491.   If  this  option is turned on, every unsuccessful password change will be
  492. logged   to  the  file  'MultiUser.log'  in  the  configuration  directory.
  493. Defaults to OFF.
  494.  
  495. 5.9. LOGCHECKPASSWD
  496.  
  497.   If  this  option  is  turned on, every successful password check (see the
  498. library   function   muCheckPasswd())   will   be   logged   to   the  file
  499. 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  500.  
  501.  
  502. 5.10. LOGCHECKPASSWDFAIL
  503.  
  504.   If  this  option is turned on, every unsuccessful password check (see the
  505. library   function   muCheckPasswd())   will   be   logged   to   the  file
  506. 'MultiUser.log' in the configuration directory.  Defaults to OFF.
  507.  
  508.  
  509. 5.11. PASSWDUIDLEVEL
  510.  
  511.   Users  with  a  user identifier greater or equal than the specified value
  512. are  allowed  to  change  their  passwords.   Specify  a value in the range
  513. 0..65535.   E.g.   if  you  specify  a value of 2, a guest user with a user
  514. identifier  of  1  cannot  change  his  password,  unless his primary group
  515. identifier  is  greater  than  the  PASSWDGIDLEVEL.   See  also  the option
  516. PASSWDGIDLEVEL.  Defaults to 0.
  517.  
  518.  
  519. 5.12. PASSWDGIDLEVEL
  520.  
  521.   Users with a primary group identifier greater or equal than the specified
  522. value  are allowed to change their passwords.  Specify a value in the range
  523. 0..65535.   E.g.   if  you specify a value of 1, all users in a guest group
  524. with  a primary group identifier of 0 cannot change their passwords, unless
  525. their  user  identifiers are greater than the PASSWDUIDLEVEL.  See also the
  526. option PASSWDUIDLEVEL.  Defaults to 0.
  527.  
  528.  
  529.  
  530. 6. The group file
  531.  
  532.   The group file contains more information about the groups and defines the
  533. secondary  groups  a  user  belongs to, and thus allows a user to belong to
  534. more  than  one group.  This file (named 'MultiUser.group') must be located
  535. in  the  CONFIGDIR directory, as specified with the 'MakeKeyFiles' command.
  536. This file exists out of two parts, separated by a blank line.
  537.   Each  line  in  the  first  part  of the file contains information on one
  538. group.   Note however that not every group should have a line in this file,
  539. but at least one must have one.  The syntax of such a line is as follows:
  540.  
  541.                    <GroupID>|<gid>|<MgrUid>|<GroupName>
  542.  
  543. <GroupID>   is  the  short  name  of  the  group.  This name may be upto 31
  544.             characters long.
  545.  
  546. <gid>       is  the group identifier for this group, a number between 0 and
  547.             65535.
  548.  
  549. <MgrUid>    is  the  user identifier of this group's manager.  If the group
  550.             doesn't  have  a  manager,  you  should  specify  0.  It is not
  551.             necessary that a group's manager belongs to the group.
  552.  
  553. <GroupName> is  the  full  name  of  the  group.  This name may be upto 219
  554.             characters long.
  555.  
  556.   Each line in the second part of the file contains information on one user
  557. (there  may  exist more than one line for each user).  The syntax of such a
  558. line is as follows (max.  about 1024 characters):
  559.  
  560.                           <uid>:<gid>[,<gid>...]
  561.  
  562. <uid>     is the user identifier of a user.
  563.  
  564. <gid>     is  the  group  identifier of a secondary group to which the user
  565.           belongs.  It is NOT necessary to specify the primary group number
  566.           (as specified in the passwd file) as one of the secondary groups.
  567.  
  568.   A group file could look like this:
  569.  
  570.                        root|65535|65535|System
  571.                        dev|1|65535|Developers
  572.                        stud|2|2|Students
  573.                        guest|0|65535|Anonymous Guest
  574.  
  575.                        2:2,65535
  576.                        3:1
  577.  
  578.   If  there  are  bad lines in the group file, a warning will be posted and
  579. the  bad  line  will  be  ignored.   The  warning  requester will disappear
  580. automatically after 10 seconds if the user doesn't respond.
  581.  
  582.  
  583.  
  584. 7. Support Commands
  585.  
  586.   The  support commands are used to login to/logout from the system, change
  587. the  protection  bits  of  a  file,  change the owner of a file, change the
  588. default  protection  bits  for a group of tasks, ...  The number of support
  589. commands  may  grow  in  future  releases.   Here are the commands that are
  590. currently  supported.  They can only be executed from the shell or with the
  591. <Execute Command...> option of the Workbench.
  592.  
  593.  
  594. 7.1. LimitDOSSetProtection
  595.  
  596.   This  command defines whether the protection bits for GROUP and OTHER may
  597. be  changed  via  the  dos.library/SetProtection()  call.  It's very useful
  598. because  a lot of programs change the protection bits without knowing about
  599. bits for GROUP and OTHER.  See also the option LIMITDOSSETPROTECTION in the
  600. configuration file.
  601.  
  602. Options ...
  603.  
  604. ON        Turn the limitation on.  This means the protection bits for GROUP
  605.           and    OTHER    no    longer    can    be    changed   with   the
  606.           dos.library/SetProtection() call.  Of course you can still change
  607.           the protection bits for GROUP and OTHER with the MProtect command
  608.           (or with the library call muSetProtection()).
  609.  
  610. OFF       Turn the limitation off.
  611.  
  612.  
  613. 7.2. Login
  614.  
  615.   This  command  will  put  a  new owner on top of the current owner of the
  616. task.   *IX users may think of this as the *IX su command.  The effect of a
  617. successful  login  can be reversed with the Logout command.  The owner-list
  618. of a task is sort of a stack:  with Login you put a new owner on top of the
  619. stack,  with  Logout,  you  take an owner of the stack (unless the stack is
  620. empty).
  621.  
  622. Options ...
  623.  
  624. GUI       Normally  the  login  prompt appears in the shell-window that was
  625.           used  to  execute  Login,  but  if  this  option  is specified, a
  626.           requester is used.
  627.  
  628. TASK      Login  another  task  than the one we're currently working in.  A
  629.           task  name  should  be specified after the TASK keyword.  You can
  630.           only login tasks which you own (unless you are root)!
  631.  
  632. OWN       Login  another  task  than  the one we're currently working in by
  633.           changing it's owner to the owner of the current task.  This works
  634.           only  with  tasks that are owner by nobody (unless you are root)!
  635.           This option must be used in conjunction with the TASK option.
  636.  
  637. GLOBAL    Login  all  tasks  connected  to  the  current  task.  It's a bit
  638.           difficult to explain what connected means, but you could say that
  639.           a  parent  task  and all its children are connected unless one of
  640.           them was logged in/out without the GLOBAL option.
  641.  
  642. PROCESS   Login  another  process than the one you're currently working in.
  643.           A  process  number (as displayed by the Status command) should be
  644.           specified   after  the  PROCESS  keyword.   You  can  only  login
  645.           processes which you own (unless you are root)!
  646.  
  647.  
  648. 7.3. Logout
  649.  
  650.   This  command  is  the  inverse  of  Login  if the stack of owners of the
  651. current  task  isn't  empty.   If the stack is empty or becomes empty after
  652. executing the Logout command, a login prompt will appear.  After login, the
  653. current  directory  will  be  changed  to  the  user's  home-directory, and
  654. depending  on  your  configuration  settings,  the '.profile' script in the
  655. configuration directory may be executed.
  656.  
  657. Options ...
  658.  
  659. GUI       If  a  login  request  is  generated  by  Logout, should it use a
  660.           requester?
  661.  
  662. TASK      See Login
  663.  
  664. GLOBAL    This  option  only works when the owner stack is or becomes empty
  665.           when  executing  the Logout command.  If this option is specified
  666.           in such a case, not only this task will change its owner, but all
  667.           connected  task  as  well.   It's a bit difficult to explain what
  668.           connected means, but you could say that a parent task and all its
  669.           children  are connected unless one of them was logged out without
  670.           the  GLOBAL  option.   It's  very useful to logout all your tasks
  671.           from your current session.
  672.  
  673. QUIET     Tells  logout  never  to  generate a login request.  If the owner
  674.           stack  becomes  empty,  you  will  simply be logged in as nobody.
  675.           This may be removed in future releases, but since it isn't really
  676.           useful, this shouldn't be a problem.
  677.  
  678. PROCESS   See Login
  679.  
  680. ALL       Remove  all  users  from  the  stack  of owners.  Specifying this
  681.           option  has  the  same  effect  as using 'Logout' until you get a
  682.           login request.
  683.  
  684.  
  685.  
  686. 7.4. MakeKeyfiles
  687.  
  688.   This command creates the Keyfiles.  Every partitions you want to use with
  689. the  MultiUserFileSystem  must have a Keyfile ('.MultiUser.keyfile') in its
  690. root  directory.  If one of them is missing or inconsistent, all tasks will
  691. be  owned  by nobody to prevent unprivileged accesses, and an alert will be
  692. posted!
  693.   Do  NOT  forget  to  make  a  backup of all Keyfiles, in case an accident
  694. occurs!
  695.  
  696. Options ...
  697.  
  698. PASSWDDIR The directory where you've put the password file.  This directory
  699.           must be on one of the protected partitions.
  700.  
  701. CONFIGDIR The  directory where you've put the configuration and group file.
  702.           This directory must be on one of the protected partitions.
  703.  
  704. VOLUME    The list of partitions you want to protect.
  705.  
  706.  
  707. 7.5. MAssign
  708.  
  709.   This command lets you create non-binding assigns (i.e.  assigns which are
  710. evaluated each time you use them) for a template path.  You should start it
  711. from  a  shell  using  'Run'  (since MAssign won't return until you send an
  712. ACTION_DIE DosPacket).  MAssign must be run by root, so change its owner to
  713. root and set its 'U'-bit (see MProtect).
  714.  
  715. Options ...
  716.  
  717. NAME      The  logical device name for the assignment to create.  It should
  718.           end  with  a  colon  (':').   This  name will show up in ReqTools
  719.           requesters  too,  but unfortunately not in asl requesters, so use
  720.           RTPatch (© Nico François)!
  721.  
  722. TARGET    Template   path  for  the  assignment.   It  may  contain  option
  723.           specifiers  which  are  replaced  by  a string - depending on the
  724.           calling user - on every usage.
  725.  
  726.             %u  UserId of the calling user
  727.  
  728.             %h  Home directory of the calling user
  729.  
  730.             %g  GroupID of the calling user
  731.  
  732.             %%  %
  733.  
  734. E.g.  after the command
  735.  
  736.                            Run MAssign HOME: %h
  737.  
  738. every  user  can refer to his/her home directory simply by using HOME:.  If
  739. you  want  a  separate  ENVARC:   directory  for every user you can use the
  740. following two commands:
  741.  
  742.                           Assign ENVARC: DISMOUNT
  743.                Run MAssign ENVARC: SYS:Prefs/Env-Archive/%u
  744.  
  745. This  technique can easily be extended to ENV:, S:, MAIL:, ...  The 'Assign
  746. ...   DISMOUNT'  is  only necessary if you want to redefine an assign which
  747. already exists.
  748.  
  749.  
  750. 7.6. MList
  751.  
  752.   This is a simple list replacement.  It takes none, one or more path-names
  753. as  parameters  and  lists  the  files  in  those path(s) or in the current
  754. directory if no path-name was specified, together with all their protection
  755. bits and some other info.  It recognizes the new 'U' protection bit.
  756.  
  757. Options ...
  758.  
  759. DIR       The pathname(s) or the directory(s) you want information on.  The
  760.           standard AmigaDOS wildcards may be used here.
  761.  
  762. GROUPS    Display the GroupIDs for the files.
  763.  
  764.  
  765. 7.7. MProtect
  766.  
  767.   This command changes the protection flags for files or directories.
  768.  
  769. Options ...
  770.  
  771. FILE      The file or directory you want to change the protection flags of.
  772.           The standard AmigaDOS wildcards may be used here.
  773.  
  774. FLAGS     The protection flags used for the owner of the file.  Valid flags
  775.           are none or some out of:
  776.  
  777.             U   Set  uid  bit:   during  execution, change the owner of the
  778.                 process  (i.e.   the  uid and gid) to the owner of the file
  779.                 (cfr.   *IX).   This  even  works  if  you make the program
  780.                 resident.     However,    this   only   works   after   the
  781.                 multiuser.library   has   been  initialised.   If  you  put
  782.                 programs  with  the 'U' bit on in your S:User-Startup, make
  783.                 sure  you  do  it after the 'Logout GLOBAL' command, or put
  784.                 'UserInfo  <>NIL:'  before  the first of them to assure the
  785.                 library  has  been loaded!  If you set the 'U' bit together
  786.                 with 'GROUP W' or 'OTHER W', you will get a warning because
  787.                 this is a very dangerous situation :-)
  788.  
  789.             S   Script bit:  file is a shell script.
  790.  
  791.             P   Pure bit:  program is reentrant and reexecutable.
  792.  
  793.             A   Archive bit:  file has been backed up or archived.
  794.  
  795.             R   Read bit:  file is readable.
  796.  
  797.             W   Write bit:  file is writable.
  798.  
  799.             E   Execute bit:  file is executable.
  800.  
  801.             D   Delete bit:  file is deletable.
  802.  
  803. GROUP     The  protection  flags  used  for  users in the same group as the
  804.           owner  of the file.  Specify them after the GROUP keyword.  Valid
  805.           flags are none or some out of 'R', 'W', 'E' and 'D'.
  806.  
  807. OTHER     The  protection  flags  used for users outside the owner's group.
  808.           Specify  them  after  the OTHER keyword.  Valid flags are none or
  809.           some out of 'R', 'W', 'E' and 'D'.
  810.  
  811. ADD       Add  all specified protection flags to the flags that are already
  812.           set.
  813.  
  814. SUB       Subtract  all  specified protection flags from the flags that are
  815.           already set.
  816.  
  817. ALL       Recursively  scan  all  directories  from  within  the  specified
  818.           directory and process all found files and directories.
  819.  
  820. QUIET     Process silently, but do report errors.
  821.  
  822.  
  823. 7.8. Passwd
  824.  
  825.   The  Passwd  command is used to change your password.  Simply type in the
  826. command  in  the  shell and you will be prompted to enter your old password
  827. and type your new password twice.  If you did this correctly, your password
  828. will be changed!
  829.  
  830. Options ...
  831.  
  832. GUI       If this option is specified, Passwd uses requesters to prompt for
  833.           your passwords instead of simple console I/O.
  834.  
  835.  
  836. 7.9. SetDefProtect
  837.  
  838.   This commands sets the default protection bits for the current task.
  839.  
  840. Options ...
  841.  
  842. FLAGS     The  protection  flags  used  for  the  owner  of  the file.  See
  843.           MProtect ('U' is not valid here).
  844.  
  845. GROUP     The  protection  flags  used  for  users in the same group as the
  846.           owner  of  the  file.  Specify them after the GROUP keyword.  See
  847.           MProtect.
  848.  
  849. OTHER     The  protection  flags  used for users outside the owner's group.
  850.           Specify them after the OTHER keyword.  See MProtect.
  851.  
  852. GLOBAL    Change the default protection bits not only for the current task,
  853.           but for all tasks on the same level.
  854.  
  855.  
  856. 7.10. SetOwner
  857.  
  858.   This  command is used to change the owner of a file.  You can only change
  859. the  owner  of  files  you own or of files that are owned by nobody, unless
  860. you're  root.   If you don't have Kickstart 39.xx or higher, you should use
  861. SetOwner37 instead of SetOwner!
  862.  
  863. Options ...
  864.  
  865. FILE      The  file  or  directory  you  want  to change the owner of.  The
  866.           standard AmigaDOS wildcards may be used here.
  867.  
  868. USER      The  UserID  of the user that should become the owner of the file
  869.           or  directory.   If  no user is specified, the current task owner
  870.           will  be taken.  You're not allowed to change the owner of a file
  871.           to someone else than yourself or nobody, unless you're root.
  872.  
  873. GROUP     The GroupID of the group for the file or directory owner.  If you
  874.           don't  specify any group, the user's primary group will be taken.
  875.           Of  course  you  must  specify a group you belongs to (i.e.  your
  876.           primary  group  or  one  of your secondary groups), unless you're
  877.           root.
  878.  
  879. NOBODY    Set the owner of the file or directory to nobody.
  880.  
  881. ALL       Recursively  scan  all  directories  from  within  the  specified
  882.           directory and process all found files and directories.
  883.  
  884. QUIET     Process silently, but do report errors.
  885.  
  886.  
  887. 7.11. Tasks
  888.  
  889.   This command lists the active tasks of a user.
  890.  
  891. Options ...
  892.  
  893. USERID    List  the  active  tasks  of  the specified user.  Default is the
  894.           current user.
  895.  
  896. ALL       List all active tasks.
  897.  
  898.  
  899. 7.12. UserInfo
  900.  
  901.   This  command  can  be  used to get some information on the users of this
  902. system.   It  will  display  the  UserID  and  uid,  GroupID and gid, name,
  903. home-directory,  lastlogin  date  and  the contents of a '.plan' file if it
  904. exists in the home-directory of the appropriate user.
  905.  
  906. Options ...
  907.  
  908. USERID    Give  information  on  the  user  with the specified UserID.  The
  909.           UserID  is  the  name  you  have to enter at a login prompt.  The
  910.           standard  AmigaDOS  wildcards  may  be used here.  Default is the
  911.           current user.
  912.  
  913. UID       Same  as USERID, but this time information on the user whose user
  914.           ID  is  specified  is listed.  The user ID is the number given as
  915.           second  entry  in  the passwd file.  Specify the userid after the
  916.           UID keyword.
  917.  
  918. GID       Same  thing as UID, but this time for all users in the group with
  919.           the  specified  group  ID.   Specify  the  group ID after the GID
  920.           keyword.
  921.  
  922. NAME      Gives  information  on  the  user  with  the specified real name.
  923.           Specify  the  name after the NAME keyword.  The standard AmigaDOS
  924.           wildcards may be used here.
  925.  
  926. GROUPID   Gives  information  on  all  the  users  in  the  group  with the
  927.           specified   GroupID.   Specify  the  GroupID  after  the  GROUPID
  928.           keyword.
  929.  
  930. GROUPNAME Gives  information  on  all  the  users  in  the  group  with the
  931.           specified Group Name.  Specify the Group Name after the GROUPNAME
  932.           keyword.
  933.  
  934. ALL       Give information on all the users of this system.  This means all
  935.           users listed in the passwd file.
  936.  
  937. Q=QUICK   If  you  add  this  option, only the UserID(s) will be displayed.
  938.           This  is  very  useful  for scripts and aliases.  E.g.  after the
  939.           alias definition
  940.  
  941.                     Alias HCD CD SYS:Homes/*`UserInfo QUICK []*`
  942.  
  943.           the  command  'HCD  guest'  will  change the current directory to
  944.           guest's   home   directory,   supposed  all  your  users  have  a
  945.           home-directory in SYS:Homes.
  946.  
  947. GROUPS    If  you  add  this option, the secondary groups a user belongs to
  948.           will be displayed too.
  949.  
  950.  
  951.  
  952. 7.13. Who
  953.  
  954.   This  command  lists the names and UserIDs of all users who are logged in
  955. currently.
  956.  
  957. Options ...
  958.  
  959. AM I      Display only the name and UserID of the current user.
  960.  
  961. Q=QUICK   If you add this option, only the UserID(s) will be displayed.
  962.  
  963.  
  964.  
  965. 8. The log file
  966.  
  967.   Depending  on your configuration file, some actions will be logged to the
  968. file  'MultiUser.log'  in your configuration directory.  The following kind
  969. of  entries may appear therein (<user> stands for a user represented by his
  970. user identifier, <userid> stands for a user represented by his UserID):
  971.  
  972.   o <date>, <time>: Startup
  973.  
  974.     MultiUser startup on <date>, <time>.
  975.  
  976.   o <date>, <time>: Login from <user> to <UserID>
  977.  
  978.     <UserID>  was  logged in from a task owned by <user> on <date>, <time>.
  979.     <user> will be '0000' if the Logout command was used instead of Login.
  980.  
  981.   o <date>, <time>: Login from <user> to <UserID> failed
  982.  
  983.     <UserID> failed to login from a task owned by <user> on <date>, <time>.
  984.     <user>  will be '0000' if the Logout command was used instead of Login.
  985.     This  may  indicate an attempt of <user> to do an unauthorized login on
  986.     the account of <UserID>!
  987.  
  988.   o <date>, <time>: Passwd for <user>
  989.  
  990.     <user> changed his password on <date>, <time>.
  991.  
  992.   o <date>, <time>: Passwd for <user> failed
  993.  
  994.     <user> failed to change his password on <date>, <time>.
  995.  
  996.   o <date>, <time>: CheckPasswd for <user>
  997.  
  998.     The  password  check  ((see  the  library  function muCheckPasswd()) on
  999.     <date>, <time> for <user> was successful.
  1000.  
  1001.   o <date>, <time>: CheckPasswd for <user> failed
  1002.  
  1003.     The  password  check  ((see  the  library  function muCheckPasswd()) on
  1004.     <date>,  <time>  for  <user>  was  unsuccessful.   This may indicate an
  1005.     attempt  of an unknown person to make unauthorizedly use of the account
  1006.     of <user>!
  1007.  
  1008.  
  1009.  
  1010. 9. Caveats
  1011.  
  1012.   o Unlike  the FastFileSystem, the MultiUserFileSystem returns an error on
  1013.     illegal lock modes (i.e.  anything else than ACCESS_READ/SHARED_LOCK or
  1014.     ACCESS_WRITE/EXCLUSIVE_LOCK).    This   has   been   done   for  future
  1015.     compatibility  reasons.   However,  some  programs do pass illegal lock
  1016.     modes - which is a violation of the Amiga rules - and thus will fail to
  1017.     work.
  1018.  
  1019.   o The  .profile  will not be executed under Csh because Csh is not a real
  1020.     (Amiga) shell but rather an interactive program.
  1021.  
  1022.   o Csh  expands wild cards by itself, so quote them (e.g.  "*") if you use
  1023.     the support commands.
  1024.  
  1025.   o Do  not  try  to  use the MultiUserFileSystem on floppy disks (or other
  1026.     removables)!   Although  it  is possible, you will almost always get in
  1027.     trouble  with  the  Keyfiles.  Keeping your floppies in a safe place is
  1028.     still the best protection!
  1029.  
  1030.   o ARexx  programs  are  always  executed  under the same ownership as the
  1031.     RexxMaster  task  -  which  is  started by RexxMast -, so make sure the
  1032.     RexxMast  command  is  executed  by  NOBODY  (i.e.   before  the  first
  1033.     Login/Logout command) and do not set the set uid bit for RexxMast!
  1034.  
  1035.   o The protection bits for a directory are not used to check if a user has
  1036.     access  to  objects  in  the directory.  They do are used to check if a
  1037.     user  can Lock() the directory, so you can't CD to a directory you have
  1038.     no access to.
  1039.  
  1040.  
  1041.  
  1042. 10. External utilities
  1043.  
  1044.   The  Extern  subdirectory  in  the  archive contains utilities written by
  1045. other  programmers  who  allowed  me  to  distribute  them in the MultiUser
  1046. package.   Some  may  have  the  source included, other not.  Although I've
  1047. tested them and they seemed to work, I don't give any warranties!  For more
  1048. information about their usages, disclaimers, distributability and copyright
  1049. notices, refer to the appropriate documentation.
  1050.  
  1051.   Currently the following external utilities are included:
  1052.  
  1053.   o UserID by Fabian Nuñez (fnunez@cs.uct.ac.za)
  1054.  
  1055.   There's also an announce for a soon-to-release utility:
  1056.  
  1057.   o MuMu by Litrik De Roy
  1058.  
  1059.   If  you  write an interesting piece of software you want me to distribute
  1060. as  an  external  utility,  please  send  it  to  me and I'll add it to the
  1061. package.
  1062.  
  1063.  
  1064.  
  1065. 11. Other software supporting MultiUser
  1066.  
  1067.   o ReOrg V3.1: disk optimizer by Holger Kruse (kruse@cs.ucf.edu)
  1068.  
  1069.   o newlist8: 'ls' clone by Phil Dietz (pdietz@cse.unl.edu)
  1070.  
  1071.   If  you  write  an interesting piece of software that supports MultiUser,
  1072. please let me know and I'll add it to the list above.
  1073.  
  1074.  
  1075.  
  1076. 12. History
  1077.  
  1078. Release 1.0ß (Library Version 39.134)
  1079.  
  1080.   First  public release of MultiUser.  All the work on this one was done by
  1081. Geert Uytterhoeven.
  1082.  
  1083.  
  1084. Internal Release (Library Version 39.135)
  1085.  
  1086.   Update  of  the  library and the support programs to allow global logging
  1087. out.  (Kurt Haenen)
  1088.  
  1089.   o The way the library manages the linking of tasks and owners was changed
  1090.     to  allow a kind of global control over all tasks of a single user.  It
  1091.     still isn't quite the way I'd like it, but it's getting closer ...
  1092.  
  1093.   o The  GLOBAL option was added to the Logout command to allow the user to
  1094.     logout  all  tasks  connected to the same tasknode (private structure).
  1095.     This  means  that  you  can logout/login a task and all its children by
  1096.     executing a LOGOUT GLOBAL command from one of them.  Very useful 'cause
  1097.     now you can logout the Workbench without having to quit it ...
  1098.  
  1099.   o TASK  option  added  to  Login  and Logout to allow you to Login/Logout
  1100.     another  task  (of which you are the owner or that's owned by nobody or
  1101.     whatever task if you are root).
  1102.  
  1103.   o QUIET option added to Logout to force Logout so that nobody will become
  1104.     owner  of  the task.  We're still discussing this, so it may be removed
  1105.     again in the future ...
  1106.  
  1107.  
  1108. Internal Release (Library Version 39.136)
  1109.  
  1110.   Update  of  the file system, library and support programs so that default
  1111. protection  bits  can  be  set  and  are  used  by the file system.  (Geert
  1112. Uytterhoeven)
  1113.  
  1114.   o The  file  system  and  library  were  updated to keep track of default
  1115.     protection bits and to use them whenever a file is created.
  1116.  
  1117.   o A  new  utility SetDefProtect (name may change in the future) was added
  1118.     to  allow  the  user  to  specify  the  default  protection  bits for a
  1119.     tasknode.
  1120.  
  1121.  
  1122. Release 1.1 (Library Version 39.137)
  1123.  
  1124.   Update  of  the  library  to  support  .profiles  and allow hiding of the
  1125. password  on  any  terminal (I hope)!  Update to the file system to support
  1126. protection of files against locking.  (Geert Uytterhoeven and Kurt Haenen)
  1127.  
  1128.   o The Logout command now also executes a .profile script after login.
  1129.  
  1130.   o An  exclusive  lock  can  only  be  taken on a file you have write-, or
  1131.     delete-rights  on.   A  shared  lock can be obtained on a file you have
  1132.     read-, write-, execute- or delete-rights on or that's owned by you.
  1133.  
  1134.   o The  UserInfo command can now display the .sig file located in the home
  1135.     of  the  user  on which info is demanded.  To do this, you have to give
  1136.     the  SIG  option.   The .sig file should be readable for the one asking
  1137.     information about the owner of the .sig!
  1138.  
  1139.  
  1140. Release 1.2 (Library Version 39.140)
  1141.  
  1142.   Starting with this release, all the work was done by Geert Uytterhoeven.
  1143.  
  1144.   o The  password  file  should  be compatible with the TCP/IP package from
  1145.     Commdore (AS225) (I hope :-).
  1146.  
  1147.   o Wildcards added in some support commands.
  1148.  
  1149.   o If a user don't have a password he won't be asked for it no more during
  1150.     Login/Logout.
  1151.  
  1152.   o Finally:  autodoc and includes added!!
  1153.  
  1154.   o .sig renamed to .plan. SIG option renamed to PLAN.
  1155.  
  1156.   o PURE  bit set for the support commands.  They were also pure in earlier
  1157.     releases, but I forgot the magic bit.
  1158.  
  1159.   o Some other minor changes I can't remember :-)
  1160.  
  1161.  
  1162. Release 1.2a (Library Version 39.141)
  1163.  
  1164.   Only some bug fixes :-(
  1165.  
  1166.   o SetOwner37: opened wrong dos.library version.
  1167.  
  1168.   o Setowner[37]: crashed when bad operating system version.
  1169.  
  1170.   o Password  encryption  still  wasn't compatible with AS225 because of an
  1171.     ambiguity  in the ACrypt() documentation (I passed the UserName instead
  1172.     of the UserID).
  1173.  
  1174.  
  1175. Release 1.3 (11/05/93) (Library Version 39.145)
  1176.  
  1177.   WARNING: THIS  IS  A  MAJOR  UPDATE  WITH SOME FUNDAMENTAL CHANGES!!  YOU
  1178.            SHOULD   CHECK   YOUR  OWN  MULTIUSER  APPLICATION  SOURCES  AND
  1179.            RECOMPILE THEM!!
  1180.  
  1181.   o Using  history  after  changing  the  password from the console doesn't
  1182.     reveal the entered passwords anymore.
  1183.  
  1184.   o Bug  fixed:  If you used Passwd before IPrefs installed localization or
  1185.     in  case  of  a  pre-2.1 Workbench, a corrupt password file was written
  1186.     (RawDoFmt()  patched  by  locale.library  treats  %u different than the
  1187.     original).
  1188.  
  1189.   o New less kludgy, object oriented internal structure.
  1190.  
  1191.   o Meaning  of  tag  muT_Task  changed.   Now it needs a pointer to a task
  1192.     structure rather than the task's name.
  1193.  
  1194.   o Library function muSetDefProtection() renamed to muSetDefProtectionA():
  1195.     its  arguments  are now passed via a taglist using the tag muT_Task and
  1196.     the new tag muT_DefProtection.
  1197.  
  1198.   o If you're already root you won't be asked for a password anymore during
  1199.     Login.
  1200.  
  1201.   o GLOBAL flag added to SetDefProtect.
  1202.  
  1203.   o PROCESS keyword added for Login/Logout.
  1204.  
  1205.   o New tags muT_UserID and muT_Password added for muLoginA().
  1206.  
  1207.   o You  aren't  allowed  anymore  to change the owner of a file to someone
  1208.     else than yourself or nobody, unless you're root.
  1209.  
  1210.   o Owner change during execution (set uid bit, cfr.  *IX) added.
  1211.  
  1212.   o Source  of  support  commands  added as examples.  They are full public
  1213.     domain.   If you develop your own support commands I'd appreciate it if
  1214.     you  would  send  me  a  copy (eventually a copy of the source too :-).
  1215.     Maybe I could add them to the next release of the package.
  1216.  
  1217.   o From  now  on the MultiUserFileSystem is distributed as a patch for the
  1218.     original FastFileSystem.
  1219.  
  1220.   o New support command Tasks.
  1221.  
  1222.   o New  library functions muSetProtection() and muLimitDOSSetProtection().
  1223.     New support command LimitDOSSetProtection.
  1224.  
  1225.  
  1226. Release 1.4 (20/07/93) (Library Version 39.151)
  1227.  
  1228.   o Logout QUIET was broken: fixed!
  1229.  
  1230.   o If  the  password file is corrupt, you will get a warning instead of an
  1231.     inaccessible system.  All invalid lines will be ignored.
  1232.  
  1233.   o The ramlib task isn't owned by root anymore.
  1234.  
  1235.   o UserInfo entered an endless loop if a .plan was read protected:  fixed!
  1236.  
  1237.   o SetOwner37 caused a (harmless) Enforcer hit (thanks Max):  fixed!
  1238.  
  1239.   o New        keytypes       muKeyType_WUserID,       muKeyType_WUserName,
  1240.     muKeyType_WUserIDNext  and  muKeyType_WUserNameNext for muGetUserInfo()
  1241.     to handle wildcards in a UserID or UserName.
  1242.  
  1243.   o UserInfo uses the new keytypes and thus allows wildcards for UserID and
  1244.     UserName.
  1245.  
  1246.   o New library function muCheckPasswd().
  1247.  
  1248.   o The MultiUser.server doesn't spawn AmigaDOS-requesters anymore.
  1249.  
  1250.   o The  support  commands  MList,  MProtect  and  SetOwner[37]  now handle
  1251.     non-matching wildcards correctly and give the right error message.
  1252.  
  1253.   o Enhanced security using Keyfiles.
  1254.  
  1255.   o The (private) library function muSetLibFlush() is obsolete now.
  1256.  
  1257.   o Configuration file and log options added.
  1258.  
  1259.   o The .profile in the configuration directory will be executed (depending
  1260.     on  your  configuration settings), rather than the .profile in a user's
  1261.     home-directory.
  1262.  
  1263.   o New library functions muGetPasswdDirLock() and muGetConfigDirLock().
  1264.  
  1265.   o Patch for the FastFileSystem of AmigaOS Release 2.05 (V36.104) added.
  1266.  
  1267.   o QUICK flag added for UserInfo.
  1268.  
  1269.   o If  the user doesn't respond to a warning requester, the requester will
  1270.     disappear  automatically after 10 seconds to allow unattended operation
  1271.     in production environments.
  1272.  
  1273.   o Bug  fixed:   If you specify a nonexistent task name, Login/Logout TASK
  1274.     raises an error now instead of operating on the current task.
  1275.  
  1276.   o Security  hole  fixed:   now  set  uid  only works on volumes using the
  1277.     MultiUserFileSystem.
  1278.  
  1279.   o The .lastlogin file is human readable now (i.e. <Day> <Date> <Time>).
  1280.  
  1281.   o The  PLAN  flag  for UserInfo is obsolete now, UserInfo always displays
  1282.     the  contents  of  the  .plan file (unless you specify the QUICK flag).
  1283.     Now UserInfo displays the lastlogin date too.
  1284.  
  1285.   o Almost  all  of  Kurt's  code  is  gone now (I hope this won't start an
  1286.     AT&T/USL <-> BSD alike war :-).
  1287.  
  1288.   o Finally  Passwd looks fine when used from a Shell on a serial terminal:
  1289.     now  it dumps carriage returns where it should.  I still don't know why
  1290.     muLogin()/Logout()  always  worked  correctly  and  Passwd not (in both
  1291.     cases I used almost the same code!), but who cares??
  1292.  
  1293.  
  1294. Release 1.5 (14/10/93) (Library Version 39.157)
  1295.  
  1296.   o Patch for the FastFileSystem of AmigaOS Release 3.1 (V40.1) added.
  1297.  
  1298.   o Bug  fixed:   If  the  multiuser.library  hasn't been loaded yet or the
  1299.     owner  of  a  DosPacket can't be found, the default protection bits are
  1300.     now RWED GROUP R OTHER R instead of RWED.
  1301.  
  1302.   o New support command Who.
  1303.  
  1304.   o External utility UserID added.
  1305.  
  1306.   o Now  MultiUser works fine with programs using Soft Interrupts for their
  1307.     packet I/O, especially programs using ixemul.library (i.e.  gcc/g++ and
  1308.     programs compiled with gcc/g++).  Thanks Markus!
  1309.  
  1310.   o Bug  fixed:  If the LASTLOGINREQ option is turned off, Logout GUI won't
  1311.     output to a console window anymore.
  1312.  
  1313.   o Autodoc   bug   fixed:    muLogoutA()  executes  the  .profile  in  the
  1314.     configuration   directory  rather  than  the  .profile  in  the  user's
  1315.     home-directory.
  1316.  
  1317.   o New tag muT_All for muLogoutA(), new flag ALL for Logout.
  1318.  
  1319.   o The library functions muGetPasswdDirLock() and muGetConfigDirLock() are
  1320.     now callable by everybody instead of root only.
  1321.  
  1322.   o Partitions  formatted  under  the MultiUserFileSystem for more security
  1323.     (which results in a format equivalent to FFS INTL) can now be converted
  1324.     to any other MultiUserFileSystem equivalent of the standard file system
  1325.     (e.g.  OFS or FFS DC) using ReOrg 3.1.  Thanks Holger!
  1326.  
  1327.   o Group file added, new structure muGroupInfo, new according keytypes and
  1328.     new   library   functions   muAllocGroupInfo(),  muFreeGroupInfo()  and
  1329.     muGetGroupInfo().
  1330.  
  1331.   o New  flag GROUPS for MList, new flag GROUPS and new options GROUPID and
  1332.     GROUPNAME for UserInfo, new option GROUP for SetOwner and SetOwner37.
  1333.  
  1334.   o New structure muExtOwner, new library functions muGetTaskExtOwner() and
  1335.     muUserInfo2ExtOwner(), new macros muSecGroups() and muExtOwner2ULONG().
  1336.  
  1337.   o New library function muGetRelationshipA() for easier access control.
  1338.  
  1339.   o Bug  fixed:  If you called SetOwner(), SetProtection(), SetComment() or
  1340.     SetFileDate() too many times on files or directories you have no access
  1341.     to,  the  file  system  crashed.   This  bug appeared in all subsequent
  1342.     releases!
  1343.  
  1344.   o New   structures   muMonitor   and   muMonMsg,  new  library  functions
  1345.     muAddMonitor() and muRemMonitor() for system monitoring.
  1346.  
  1347.   o Minor changes in the format of the log file.
  1348.  
  1349.   o New support command MAssign.
  1350.  
  1351.   o Bug fixed:  the .lastlogin file wasn't recognized using some languages.
  1352.  
  1353.   o Installation method for Supra Wordsync controllers added.  Thanks René!
  1354.  
  1355.  
  1356.  
  1357. 13. Plans for the future
  1358.  
  1359.   o A GUI tool for managing the password and configuration files.
  1360.  
  1361.   o A mail utility.
  1362.  
  1363.   o A console lock.
  1364.  
  1365.   o The multiuser.library should be a part of the MultiUserFileSystem.
  1366.  
  1367.   o A 'safe' backdoor for emergency situations.
  1368.  
  1369.   o Owner change during execution should work for shell scripts too.
  1370.  
  1371.   o A  brand  new  File  System:  maybe the Linux file system?  Any help is
  1372.     welcome!
  1373.  
  1374.  
  1375.  
  1376. 14. Credits
  1377.  
  1378.   o Library             :   Geert Uytterhoeven & Kurt Haenen
  1379.  
  1380.   o Support Commands    :   Geert Uytterhoeven & Kurt Haenen
  1381.  
  1382.   o Documentation       :   Geert Uytterhoeven & Kurt Haenen
  1383.  
  1384.   o File System Patches :   Geert Uytterhoeven
  1385.  
  1386.  
  1387.   Starting with Release 1.2, all the work was done by Geert Uytterhoeven.
  1388.  
  1389.  
  1390.  
  1391. 15. Contacts
  1392.  
  1393. How to contact the author ...
  1394.  
  1395.   o E-mail
  1396.  
  1397.                            uytterho@cs.kuleuven.ac.be
  1398.  
  1399.       However,  I  won't  read  mail  on  a  regular  base  from July 'till
  1400.       September '93.
  1401.  
  1402.  
  1403.   o Fax
  1404.  
  1405.                                   +32-16-535823
  1406.  
  1407.       This is my preferred (fast-'n-easy :-) link to the world from July to
  1408.       September '93.
  1409.  
  1410.  
  1411.   o Snail mail
  1412.  
  1413.       - My home address
  1414.  
  1415.                                Geert Uytterhoeven
  1416.                                Huysmansstraat 12
  1417.                                B-3128 BAAL
  1418.                                BELGIUM
  1419.  
  1420.       - My study address (from October '93 'till end June '94)
  1421.  
  1422.                                Geert Uytterhoeven
  1423.                                Tervuursevest 119
  1424.                                B-3001 HEVERLEE
  1425.                                BELGIUM
  1426.  
  1427.  
  1428. How to contact the MultiUser mailing list ... (thanks Kai)
  1429.  
  1430.   Mail your comments to
  1431.  
  1432.                            mufs@hactar.hanse.de
  1433.  
  1434.   If you want to subscribe to this mailing list, just send an E-mail to
  1435.  
  1436.                          listserv@hactar.hanse.de
  1437.  
  1438. containing a line like this:
  1439.  
  1440.                             ADD <address> mufs
  1441.  
  1442. where  <address>  stands  for  your  E-mail address.  From then on you will
  1443. receive  a copy of all mails sent to the mailing list.  For more help about
  1444. the  mailing  list, send an E-mail containing only the magic word 'HELP' to
  1445. the list server (i.e. listserv@hactar.hanse.de).
  1446.  
  1447.  
  1448.  
  1449. 16. Special thanks go to ...
  1450.  
  1451.   o Nico François for developing ReqTools.
  1452.  
  1453.   o Jorrit  Tyberghein  for  developing  the  magnificent PowerVisor (We're
  1454.     waiting for release 1.43 :-)
  1455.  
  1456.   o Kurt  Haenen,  Ives  Aerts,  Litrik  De  Roy and Nico François for beta
  1457.     testing.
  1458.  
  1459.   o Kai  'wusel'  Siering,  Markus  Illenseer, Tako Schotanus, Ralph-Thomas
  1460.     Aussem,  Max  Hantsch,  Markus Wild and Jason Gouger for their comments
  1461.     and/or tips.
  1462.  
  1463.   o The  Department  of  Computer  Science  at  the Katholieke Universiteit
  1464.     Leuven for allowing me to use the InterNet for this MultiUser project.
  1465.  
  1466.   o Kai 'wusel' Siering for setting up a mailing list for MultiUser.
  1467.  
  1468.   o Fabian Nuñez for supplying an external utility.
  1469.  
  1470.   o Holger Kruse and Phil Dietz for supporting MultiUser in their programs.
  1471.  
  1472.   o René Laederach for the Supra Wordsync installation tip.
  1473.  
  1474.  
  1475.  
  1476.                                                     
  1477.                                          /   / /   /
  1478.                                         /   / /   /
  1479.                                        /   / /   /
  1480.                                       /   / /   /
  1481.                           \   \ \   \/   / /   /
  1482.                            \   \ \   \  / /   /
  1483.                             \   \ \   \/ /   /
  1484.                              \   \/\   \/   /
  1485.                               \   \ \   \  /
  1486.                                \   \/\   \/
  1487.  
  1488.  
  1489.                      Only Amiga makes it possible ...
  1490.  
  1491.                    But wouldn't Linux for Amiga be nice!
  1492.  
  1493.  
  1494.                                     /\
  1495.                                    /XX\
  1496.                                   /XXXX\
  1497.                                  /XXXXXX\
  1498.                                 /XXXXXXXX\
  1499.                              /\ \XXXXXXXX/ /\
  1500.                             /XX\ \XXXXXX/ /XX\
  1501.                            /XXXX\ \XXXX/ /XXXX\
  1502.                           /XXXXXX\ \XX/ /XXXXXX\
  1503.                          /XXXXXXXX\ \/ /XXXXXXXX\
  1504.                          \XXXXXXXX/ /\ \XXXXXXXX/
  1505.                           \XXXXXX/ /XX\ \XXXXXX/
  1506.                            \XXXX/ /XXXX\ \XXXX/
  1507.                             \XX/ /XXXXXX\ \XX/
  1508.                              \/ /XXXXXXXX\ \/
  1509.                                 \XXXXXXXX/
  1510.                                  \XXXXXX/
  1511.                                   \XXXX/
  1512.                                    \XX/
  1513.                                     \/
  1514.  
  1515.