What is new in V3.00

New Programs

Cl_type (Part A)

    For use in a BAT file to determine the type of client being used.
    It returns the following error levels:
      0  No client is loaded
      1  NETX.EXE (or one of its predecessors) is loaded
      2  VLMs are loaded
      3  Client32 is loaded

Jberrtxt (Part A)

    Accepts a NetWare error code in decimal or hexadecimal, looks it
    up in JRBERR.MSG (the file of error code translations used by all
    of JRButils) and displays the description if found. Currently,
    JRBERR.MSG does not contain descriptions for the error codes
    returned by print servers.

Move_obj (Part C)

    This program moves NDS objects from one container to another. Objects
    can be moved individually, can be selected using wild cards, all
    members of a group may be moved, or a list of objects in a file
    may be moved.

Openfile (Parts B and C)

    Openfile can
      o  Display open files by object name or connection number
      o  Display who has a particular file or files open
    Features include
      o  Can display open files for all logged in objects on a
         server
      o  Can display open files for any type of object
      o  Can display open files in any name space
      o  Can sort the output as follows
            o  by connection number
            o  by directory name
            o  by file name
            o  by object name
            o  data from multiple files, users, or connections can
               be merged before sorting
            o  the sort order can be reversed
      o  Can display the total number of open files on the server
      o  When doing a merged sort by directory, it gives the number
         of unique files open

Pqcopy (Part B)

    Copies bindery queues, possibly to another server, and will
    optionally retain all queue operators, users, servers, and print
    jobs.

Pqmovjob (Parts B and C)

    Pqmovjob allows print jobs to be copied from one bindery or NDS
    queue to another possibly on a different server. The jobs may
    optionally be deleted from the source server.

Pqreljob (Parts B and C)

    Pqreljob allows jobs to be released from user and/or operator hold
    on bindery or NDS queues. It may optionally be used to place existing
    jobs on user or operator hold.

Pradd (Part C)

    Adds one or more queues to NDS printers.

Prdel (Part C)

    Removes one or more queues from NDS printers.

Profiles (Part C)

    Adds, removes and replaces profiles for NDS users

Pscopy (Part B)

    Pscopy can replicate print servers on the same file server, or
    copy print servers to another file server. By default, it copies
    all attributes including the description, operators, printer
    definitions, server and users, but copying each of these may be
    individually suppressed.

Requests (Parts A and C)

    Requests continuously displays the total requests, bytes read and
    bytes written for up to 20 connections on a NW 4.x server since the
    program began running (the information is not available under earlier
    versions). This allows easy identification of workstations loading a
    server. The output is sorted into descending order by whichever
    column you select, and the column on which you are sorting can be
    changed without restarting the program.

Sparse (Parts B and C)

    Sparse identifies sparse files. These are files with 'holes' in
    them where no data exists, and so NetWare has not allocated disk
    blocks for these parts of the file. Many sparse files are created
    accidentally by misbehaving applications, and appear as large files
    when listed using 'dir'. However, they can have as little as one
    block of disk space allocated. These files can cause problems
    when copied, or backed up. If the program reading the sparse file
    reads it as an ordinary file, NetWare returns zero values for the
    missing data, and if the data is written to tape or disk, the new
    file will have all blocks allocated. This can cause problems such
    as:
      o  Copies failing because a directory quota or volume quota
         has been reached.
      o  User's being over quota if the application transfers quotas
         after copying the files.
      o  Running out of space on a volume
      o  Slow backups as multi-megabytes of zeroed data is transferred
         to tape.

    Sparse has the following features:

      o  Can scan all files in a directory tree
      o  Can scan all volumes on a server
      o  Can display the block bit map for each sparse file
      o  Can specify a minimise size for files to be checked
      o  Reports both the physical size (bytes of disk used)
         and logical size (reported by 'dir') for each sparse
         file.
      o  Can restore the 'last access date' on files which are
         checked. Because it has to open the file to determine
         if it is sparse, the 'last access date' is updated by
         default.

Vol_info (Part A)

    Displays information about all volumes on a server, or selected
    volumes, under NW 2.x, 3.x and 4.x. The information includes

      o  Name spaces loaded
      o  Volume size, space used, space available and percentage full
      o  Free (purged) blocks, purgeable blocks and not yet purgeable
         blocks (NW 3.x and 4.x)
      o  Number of directory entries allocated, used and available
         (NW 3.x and 4.x)
      o  All information available from the 'volumes' option in
         SERVMAN (NW 4.x)

Changes common to multiple programs

o   Added support for escaped characters in NDS object names. NDS
    requires that the period (.), plus (+) and equals (=) be 'escaped'
    by a '\' e.g. member\.1, and all programs in JRButils v2.31 were
    treating the '\' as a separator between a server name and an
    object name.

o   Altered so that when processing a single NDS object, the object
    name is displayed in the case in which it appears in the NDS.
    Previously the object name was displayed in uppercase.

o   Modified the in-built help so that it is now possible to exit and
    retain the help display on the screen. Previously, the original
    screen display was always restored upon exit from the help.

o   Added support for prefixing each line of output with the date
    and/or time. This is intended for use with log files, but also
    applies to the output to the screen. The keywords 'date' and
    'time' may now be used with /l and /e.

o   Every program now returns an error level of 1 when the error count
    is non-zero. Previously an error level of 1 was returned when errors
    occurred in processing of parameters and options, but most programs
    did not return an error level when processing errors occurred.

o   Added another value for /y for formatting NDS object names. It is
    now possible to use 'u' to force replacement of spaces in names
    with underscores. This is useful when saving output to a file for
    input to another program.

o   Fixed a problem where the reason given for errors (from
    jrberr.msg) was not being wrapped correctly when it did not
    fit on a single line.

Changes to individual programs

Copyuser

o  The problem described in problems.txt in jrb231b.zip when copying
   files and directories where the DOS name associated with a non-DOS
   file or directory may change when the first 8 characters of the
   DOS name did not match the first 8 characters of the long name has
   been fixed under NW 3.12 and NW 4.x. The solution used is not
   available for versions of NetWare earlier than 3.12.

o  Added /n=o to suppress copying of objects and setting of any bindery
   properties, allowing only the home and/or mail directories to be copied.
    
o  Added /n=w to suppress warnings when copying files owned by name
   spaces other than DOS and MAC.

o  Added /n=x to do an incremental copy of files in a user's home or
   mail directory. This may be useful, for example, if a user has been
   transferred to another server, but incoming mail has continued to be
   delivered to the users as yet undeleted account on the old server.

Creatobj

o  Added support for creating profile objects. The login script must
   be specified via /m.

o  Added support for creating NDS queue objects. The NDS volume
   object pointing to the volume on which the queue directory is
   created, must be given using /d.

o  Fixed a problem where it was giving an error when trying to copy
   bindery properties of the user_template object (e.g. HOME_DIR). It
   seems that these cannot be copied using NDS functions, so they are
   now ignored.

o  Fixed a similar problem with "Back link" attributes of the
   user_template attribute.

o  Added support for NDS volume objects and directory maps in paths
   given via /d or /m.

o  Modified to create NDS objects in the case used on the command
   line or in the input file.

o  Added /x to allow a time delay in seconds to be specified in NDS
   mode. The delay occurs immediately after object creation and allows
   time for the object to be replicated to other servers before
   proceeding. This is a workaround for a problem where the creation
   request can be sent to a replica on one server (this is decided by
   the VLMs not by the programmer), then when an attempt is made to
   assign file/directory rights (e.g. to the home directory) on another
   server, this other server does not yet know of the object's existence
   because insufficient time has elapsed for the updates to be
   transmitted.

o  Modified the use of /n so that in addition to specifying that
   attributes of the container user_template object are not to be
   copied, it can also be given the value of an alternative template
   object.

o  Modified so that /z has a broader use than just indicating passwords
   are in the input file. It now indicates that when creating aliases,
   the alias object name and aliased object name appear on each line,
   when creating NDS queues, the queue name and NDS volume object on
   which the queue directory will exist appear on each line.

Delobj

o  Implemented deleting of NDS queues.

o  Fixed a bug where it was dereferencing aliases and deleting the
   aliased object instead of the alias.

Dquota

o  Added /p, /e and /l which should have been done several years ago!

o  Removed a limit where it could handle only 64 volumes per server
   (NW 4.10 supports 255).

o  Modified both versions to allow the units to be specified as part of
   a warning threshold e.g. /w=10mb.

Fsupdate

o  Added support for retaining compression when copying compressed
   files to a volume supporting compression.

o  Fixed a problem where /c did not work.

o  Modified so that when using /a, both 's' and 'sh' can be used
   to indicate 'shareable'. 'sh' is required by FLAG.EXE in NW 4.x,
   but 's' is used by FLAG.EXE from NW 3.x and 2.x.

o  The problem described in problems.txt in jrb231b.zip when copying
   files and directories where the DOS name associated with a non-DOS
   file or directory may change when the first 8 characters of the DOS
   name did not match the first 8 characters of the long name has been
   fixed under NW 3.12 and NW 4.x. The solution used is not available
   for versions of NetWare earlier than 3.12.

o  Modified to not prompt for an alternative username/password when the
   first login attempt failed due to reasons such as no free connection
   slots.

o  Added /m to ensure that each target directory is a mirror of the
   source. This does an update as per /u, then removes any files from
   the target directory which do not appear in the source directory,
   plus any subdirectories and their contents which do not appear in
   the source.

o  Changed the previous usage of /c to /h.

o  Added /c to allow creation of target directories. Using /c for this
   makes fsupdate consistent with netcopy.

Getequiv

o  Added /u to output usernames only (i.e. suppress other text)
   except when listing security equivalences.

o  Added /w to output server/usernames only (i.e suppress other text)
   except when listing security equivalences.

Getquota

o  Modified both versions to allow the units to be specified as part of
   a quota value e.g. 10mb.

o  Can now use NDS objects (volumes, directory maps or aliases) in paths.

Getrest

o  Added support for displaying both the most recent login time and the
   2nd most recent login time. As previously, 'lld' displays the most
   recent, and now 'pld' displays the previous login date and time.
   Under NW 2.x and 3.x, the 2nd most recent login may not be recorded
   if you are using a very old version of login.exe.

o  Added /a to allow control of the order and width of output fields.

o  Fixed a problem in the NDS version when using an input file, where
   it sometimes reported insufficient rights for the 2nd and subsequent
   objects in the file.

o  Modified the NDS version to treat password expiration dates and
   account expiration dates as dates and times under NDS. In the
   bindery, these are dates, but in NDS they are stored in seconds
   from a reference date allowing a date and time to be set.

o  Added /x for use with NDS to process users in the specified
   container and all containers below it.

o  Added support for the TZ environment variable when determining the
   GMT offset for displaying date/times in NDS mode.

o  Fixed a millenium bug where a 2 digit year in a date given on the
   command line was treated as being relative to 1900 if less than 70.
   Now 1-jan-00 is treated as 1-jan-2000.

Grpadd

o  Fixed a problem in the NDS version where it sometimes reported a user
   had insufficient rights to add a member to a group when the user
   had less than supervisory rights but still had sufficient rights to
   perform the task.

o  Fixed a problem where when creating a group via /c in NDS mode, case
   was not preserved in the group name and it was converted to uppercase.

Grpdel

o  Fixed a problem in the NDS version where it sometimes reported a
   user had insufficient rights to remove a group member when the user
   had less than supervisory rights but still had sufficient rights to
   perform the task.

o  Fixed a problem where when using 'grpdel group *' in the NDS version,
   it was reporting that the group was invalid.

Grpmemb

o  Added /v (verbose mode) to display error messages or a success
   message.

o  Added /a to use alternative error levels. This was in response to
   feedback that the original levels were inconvenient to use. The
   alternative set use 0 for failure for all reasons, 1 for success.

Home2

o  Added /r to allow map rooting to the home or mail directory.

Is_vlms

o  Added /v (verbose mode) so that the results can be displayed in
   addition to an error level being set.

Jrbmap

o  Added support for mapping to the user's home directory e.g.
   'jrbmap p:=rata/~home'.

Killconn

o  Added /c to indicate that all entites on the command line are
   connection numbers. Use when there are bindery or NDS objects with
   matching numeric names as killconn by default checks first for a
   matching object, then if this fails and entity is numeric, it
   checks for a matching connection.

o  Added /z to allow specification of objects whose connections are
   not to be cleared. Either a comma separated list may be given, or
   the name of a file containing object names, one per line.

o  Added /s as a suicide option for use with /a or /i. This removes
   the user's own connection to the server after clearing the others.
   It actually logs out rather than clears the connection which is
   quicker and tidier.

Killzero

o  Added support for specifying users or groups on the command line.
   Killzero will then process either the home or mail directories for
   each user.

o  Added /w to allow control over how killzero processes home or mail
   directories for each user.

o  Added /r to allow retention of some zero length files. A comma
   separated list may be specified, and wild cards may be used.

o  Added /m to force processing of mail directories. In NDS mode, /m
   may be used to process the PMAIL subdirectories of user's home
   directories as used by the NDS version of Pegasus Mail, instead of
   the subdirectories of SYS:MAIL.

Listobj

o  Fixed a problem where the NDS version was rejecting names containing
   periods (e.g. j.baird) under all versions of NetWare. When using
   periods in names in bindery mode, they must either be escaped by
   preceding the period with a '\' as per the NDS convention (e.g.
   j\.baird), or /3 must be used.

o  Fixed a problem where when using /x and there was an ou below the
   starting ou with the same name (e.g. starting the search at test.jrb
   and test.test.jrb exists), the names of the objects in the lower ou
   (i.e. test.test.jrb) were displayed incorrectly when /y=d or /y=c was
   used. Instead of showing as xx.test.test.jrb, they were displayed as
   xx.test.jrb. The bug is in the SDK's NWDSSearch API, but I have
   worked around it.

o  Added /h to force listobj to set an error level of 1 if no matching
   objects were found.

Lscripts

o  Added support for setting and viewing scripts for NDS profile,
   organization and organizational unit objects.

o  Can now copy any file into mail directories retaining the file name
   (use /a=file /m/z)

o  Can now use an NDS volume name in a path given using /a.

Makememb

o  Fixed a problem in the NDS versions of these programs
   where they sometimes reported a user had insufficient rights to add
   or remove a group member when the user had less than supervisory
   rights but still had sufficient rights to perform the task.

Netcopy

o  Fixed a problem in netcopy-nds where it failed to copy anything when
   a file name was specified in the root of a volume e.g. vol1:fred.*.

o  Added support for copying to and from local drives.

o  Modified both versions of netcopy to retain compression when copying
   files to a volume with compression enabled. A new option /n=r
   allows decompression of compressed files.

o  Changed the function used to retrieve volume quotas as Developer
   Support have reported the original sometimes misbehaves.

o  Fixed a problem with removing quotas where the file storing the quotas
   sometimes had extra characters on the end of lines.

o  Added /n=s to suppress checking that there is sufficient space before
   copying each file. This will make it a little faster when copying lots
   of files.

o  Made allowances for compressed files when checking if there is
   sufficient space before copying a file.

o  Added support for use of NDS objects (volume objects, directory map
   objects and alias objects) in paths given on the command line.

o  Fixed a problem where netcopy would not copy Macintosh files or
   directories with a '/' or '\' in the name.

Pqdeljob

o  Fixed a problem where it would not accept job numbers between 32767
   and 65535 (job numbers may range up to 65535).

o  Fixed a problem where it would delete only the first 125 jobs in the
   queue each time it was run.

Pqlist

o  Fixed a problem where it would list only the first 125 jobs in a
   queue.

o  Fixed a problem where it was removing the first character of the
   enqueued job's file name when using /f=q.

Psadd

o  Added support for adding printers to NDS print servers.

Psdel

o  Added support for removing printers from NDS print servers.

Psusers

o  Added support for listing printers of NDS print servers.

Setacl

o  Corrected a problem when verifying object names, where if the object
   name was given without typing, and the object did not have a type of
   cn=, the object name was regarded as invalid e.g. ou=csc.o=lu worked
   correctly but csc.lu would fail. The problem was actually due to the
   behaviour of the SDK's canonicalization routine which assumes for the
   left-most component of the name, if no typing is present, the typing
   is 'cn='. Dumb huh!

o  Allowed use of a attribute or property parameter with /v so that
   only ACLs for this property are shown.

o  Allowed use of a subject with /v, so that only ACLs for this subject
   are shown. As the subject parameter follows the property parameter,
   a property value must be specified. Specify '*' as the property
   value if you want to filter by subject but not by property.

o  Changed the terminology in the in-built help so that the term
   'trustee' is used instead of 'subject', which is more consistent
   with Novell's usage (except in the SDK docs from which the original
   terminolgy was taken).

o  Fixed a problem where if [Entry Rights] was specified as an attribute
   (as an alternative to using /n), the rights parameter was parsed
   as attribute rather than entry rights.

Setcx

o  Modified to allow a 2nd parameter specifying the context at which
   to begin the search.

o  Modified so that it would still scan the tree if the workstation is
   connected to a 3.x server. Of course, NDS servers must be present on
   the network!

o  Added /t so that a tree can be specified. This cannot be used to
   change the tree if one is already set, but can be used when there is
   no preferred tree defined in net.cfg.

Setequiv

o  Added support for input files.

o  Added /q to query whether to process each user.

Sethome2

o  Fixed a problem in NDS mode where it failed if the target directory
   was on a different server from your current drive.

o  Modified so that the path can now contain a volume object or alias,
   or can comprise a directory map object or alias.

o  Changed the way in which it locates an NDS volume object when a
   physical volume is specified in the path. Sethome2 now
    a. Attempts to find the associated volume object from the volume
       configuration. However this is not always set correctly (and I
       have not figured out how to set it when it is incorrect).
    b. Searches the context in which the server object is located.
    c. Searches the tree from [Root] (can be very slow).

o  In NDS mode the server on which the home path resides is determined
   as follows:
    a. If an NDS object (volume, or directory map) is specified, the
       object will point to a specific server.
    b. When a server is included in the path e.g. yogi/sys:users, that
       server is used.
    c. If a server is specified indirectly i.e. via a drive letter
       (e.g. p:) that server is used.
    d. When the path has no associated server, any server specified as
       part of <entity> is used.
    e. When neither the path nor <entity> reference a specific server,
       the default server associated with the NDS object is used. Or,
       in bindery mode, the current server is used.

o  Fixed a problem where it always reported "Cannot verify existence of
   server XXX" when using /w with an input file.

Setname

o  Modified setname-NDS so that it can now set any text attribute
   associated with any object type. This does not include attribute
   values comprising object names such as the "Message Server". Setname
   can add multiple values where they are allowed, and can delete
   selected values.

o  Fixed both versions of setname so that /b will remove trailing blanks
   enclosed in double quotes.

o  Fixed a problem in the NDS version when using an input file, where
   it sometimes reported insufficient rights for the 2nd and subsequent
   names in the file.

Setowner

o  Fixed a problem when using /c to change ownership of files and
   directories owned by a particular user, it was functioning correctly
   for files, but was changing the ownership of all directories.

Setpword

o  Fixed a problem where the NDS version was rejecting names containing
   periods (e.g. j.baird) under all versions of NetWare. When using
   periods in names in bindery mode, they must either be escaped by
   preceding the period with a '\' as per the NDS convention (e.g.
   j\.baird), or /3 must be used.

Setquota

o  Modified both versions to allow the units to be specified as part
   of a quota value e.g. 10mb.

o  Can now use NDS objects (volumes, directory maps or aliases) in
   paths.

o  Changed its behaviour when increasing or decreasing a quota (i.e.
   the quota value is preceded by '+' or '-'), so that it returns an
   error if there is not an existing quota. Previously, setquota
   returned an error when decreasing a quota and no quota existed,
   but when increasing a quota and no quota existed, it would set the
   quota to the amount by which it was to be increased.

Setrest

o  Added support for 'ae' and 'pe' to be consistent with getrest.

o  Allowed the optional use of operators 'eq' and '=' so that the syntax
   is consistent with getrest.

o  Fixed a problem in the NDS version where an error was given when
   setting certain restrictions AND using an input file.

o  Fixed another problem in the NDS version when using an input file,
   where it sometimes reported insufficient rights for the 2nd and
   subsequent names in the file.

o  Added support for setting both the most recent login time and the
   2nd most recent login time. As previously, 'lld' sets the most
   recent, and now 'pld' sets the previous login date and time.
   Under NW 2.x and 3.x, the 2nd most recent login may not be recorded
   if you are using a very old version of login.exe. Note that NW 4.x
   does not allow setting of the 2nd most recent login time either in
   bindery or NDS mode (it appears that only the server itself can
   change the "Last Login Time" attribute).

o  Modified the NDS version to treat password expiration dates and
   account expiration dates as dates and times under NDS. In the bindery,
   these are dates, but in NDS they are stored in seconds from a
   reference date allowing a date and time to be set.

o  Added /x for use with NDS to process users in the specified container
   and all containers below it.

o  Added support for the TZ environment variable when determining the GMT
   offset for setting date/times in NDS mode.

o  Fixed a millenium bug where a 2 digit year in a date given on the
   command line was treated as being relative to 1900 if less than 70.
   Now 1-jan-00 is treated as 1-jan-2000.

Trstlist

o  Modified to allow the use of [Public] as an object name.

o  Added support for volume or directory map objects in paths.

o  Modified so that when /a is used to list trustee assignments for
   objects security equivalent to the named object, in NDS mode it
   also lists trustee assignments for container objects forming part
   of the distinguished name (an object is security equivalent to
   these objects). In this case, trustee assignments are also displayed
   for [Root].

Users

o  Removed the limit on the number of addresses and locations. The
   only limit now is the available memory below 640 KB in which to
   store them.

o  Users can now display the total NCP requests, total bytes read and
   total bytes written under 4.x (this information is not available from
   a workstation under 3.x). Console operator status is required to
   retrieve these values.

o  Entries with wild cards ('*' and '?') can now be used in addresses in
   the LOCATION.SRT file. They can be placed anywhere in the file, but
   the non-wild carded entries must still be in sorted order. If a work-
   station address is not matched against non-wild card entries, it is
   them matched against each wild card entry. Wild cards may occur in
   the network or workstation portion of the address.

Whodidit

o  Increased the range of possible output values to include:
     o  archive date and time
     o  creation date and time
     o  update date and time
     o  last access date
     o  physical file size (for sparse or compressed files)
     o  size as shown by dir
   The output values now appear in the order given via /o whereas
   previously the owner always preceded the updater which always
   preceded the archiver.

o  Added support for the use of NDS volume objects and directory map
   objects when specifying a path.


Fixes in v2.31

Various

o	Some minor programs e.g. pwdexp would not accept /p as an option
	because they do not produce enough output to require paging. This
	caused a problem when /p was used globally e.g. in the environmental
	variable JRBUTILS. I have modified all programs to accept /p as well
	as /j, /e and /l even though these options will not have any effect.
o	I have modified the bindery based versions of the Part C utils to
	accept but ignore most of the options specific to Part C. In
	particular, this affects /3 and /y. Those options which are not
	accepted in the bindery versions are those which could lead to the
	wrong action being taken e.g. /a in setname if ignored could lead to
	overwriting full names when the intention was to modify another
	attribute.

Accexp

o	Modified to return the following error levels
	  0  No account expiry date, or not within the specified days of
	     expiry.
	  1  The account is within the specified number of days of expiration.
          2  The account has expired.
          3  Failed to obtain the account expiration date.

Copyuser

o	When assigning trustee rights to a mail directory, it was always
	setting the rights to [ RWCEMF ], rather than using the actual
	rights of the user being copied.
o	Added /n=o to suppress copying of objects and their attributes
	allowing copying of mail directories, home directories or volume 
	quotas from one user to	another.

Creatobj-NDS

o	It was sometimes giving the error "Cannot verify existence of
	server (null)" when /i was not used.
o       A '#' preceding an object name was not resulting in a group
        being created in NDS mode.
o       Fixed various memory leaks.

Getrest

o	Added field 'al' (Account Locked) which had previously been added to
	getrest-nds.

Getrest-NDS

o	Added checks for a missing object name in NDS mode. 'getrest server/
	/z' is valid in bindery mode but not in NDS mode.
o	Fixed a problem with it reporting password expiry dates and account
	expiry dates as expired when they were not.

Grplist

o	In v2.30 a bug previously fixed in v2.21 recurred where enclosing a
	group in double quotes didn't allow the use of '&' etc as valid
	characters in a group name. Now "A&B" represents the group name A&B
	whereas A&B represents group A and group B.

Grplist-NDS

o	In v2.30 a bug previously fixed in v2.21 recurred where enclosing a
	group in double quotes didn't allow the use of '&' etc as valid
	characters in a group name. Now "A&B" represents the group name A&B
	whereas A&B represents group A and group B.
o	When /u was used, all users in the tree were listed, rather than
        those in the current context which is the documented behaviour
        of /u.

Home2

o	Can now precede a username with a server name, and if you are not
	already attached to the server, home2 will prompt for a username
	and password for logging in.

Jrbmap

o       Fixed a problem where /x was ignored.
o	When using /x and restoring mappings to multiple servers, it was
	prompting for a username/password on each server rather than re-using
	the information for each server.

Killconn

o	Modified to detect NLM connections under 4.x and to not attempt to
	clear them. The Netware function for clearing connections returns
	'success' when attempting to clear an NLM connection even though the
	attempt fails.

Lscripts

o       Fixed a problem when using /b and /w and specifying server/ i.e. no
        username. This resulted in it trying to verify a null username which
        sometimes caused it to complain, but other times it worked ok.
o       Minor corrections and clarifications in the in-built help.

Mattach and Mattach-NDS

o	Fixed minor problems with /r and /w when run from sys:login when
        not logged in.
o	Fixed a problem where for /w it was listing an unlicensed NDS
        connection as licensed.

Pwdexp

o	Modified to return the following error levels
	  0  No password expiry date, or not within the specified days of
	     expiry.
	  1  The password is within the specified number of days of 
	     expiration.
          2  The password has expired.
          3  Failed to obtain the password expiration date.

Setacl

o	Added /i to allow the setting of an object's rights to one of its
	own properties. For example 'setacl comp "login script" r /i'
	would grant each member of group comp read access to his/her own
	login script.
o	When <entity> was a group and all members of the group were being
	processed, setacl was validating the property against object type
	'group' instead of object type 'user'.

Setname and Setname-NDS

o	When a full name was enclosed in double quotes, the closing double
	quote was not being removed.

Setowner-NDS

o	/c was functioning in NDS mode only when the current owner was given
	in typed distinguished form. A partial name is now expanded and types
	added.

Setrest

o	Added field 'al' (Account Locked) which had previously been added to
	setrest-nds.

Setrest-NDS

o	Added checks for a missing object name in NDS mode. 'setrest server/
	/z' is valid in bindery mode but not in NDS mode.

Users

o	Was not showing the peak connection count for /c under NW 4.x

Whodidit

o       The default output was not /o=oua as the in-built help claimed. The
        default is now /o=oua.
o       Fixed a problem with header alignment.
o       Fixed a couple of minor errors in the in-built help.


New features and bug fixes in v2.30 (the ones I can recall)

Changes common to multiple programs

   o	Rewrote the command line parsing in all programs. This allows
	double quotes to be used anywhere to prevent a dash or slash being
	treated as the beginning of an option e.g. '/l="my-log.dat"'. This
	also allows abbreviations of logging options to be used as file
	names, but requires double double quotes e.g. /l=""app"" creates
	a log file named APP, whereas without the double quotes, it would
	be treated as an abbreviation of the 'append' keyword.
   o    Can now use '-?' or '/?' anywhere in the command line, provided
	they are preceded by a space. This is useful when you get part
	way through typing a command and realise you need to use the
	in-built help.
   o	Modified all programs so that options may be obtained from multiple
	sources, and options may be negated by following the letter with a
	'-' e.g. -p-. Options may be obtained from the following and are
	processed in the order given:
	   (a) From an environment variable JRBUTILS e.g. JRBUTILS=/p
	   (b) From a file in the current directory or search path named
	       JRBUTILS.INI
	   (c) From the command line.
	   (d) From a file specified on the command line via /@.
	A file may contain both global and program specific settings. The
	latter are preceded by 'program:' at the beginning of the line e.g.
	   /p
	   setowner: /v/l=owners.log
	   getquota: /sur /e=none
   o	Fixed a bug in the logging facilities of all programs where you
	could not specify a log file on a server other than the one to
	which your current drive was mapped. There was not a problem opening
	log files on local drives.
   o	When /e was used to write an error log, all programs previously
	started by writing a blank line to the error log. This was useful
	when appending to an existing error log as it left a blank line
	between previous and current output. But it also resulted in
	numerous blank lines at	the end of the file when consecutive runs
	of a program appended to the file, but no errors were logged. I've
	suppressed writing this blank line.
   o	Fixed a problem in a number of programs which allow you	to specify
	multiple servers. When /k was used and servers were excluded using
	'!', you were sometimes logged out of your current server.
   o	Fixed a problem in most programs where results were unpredictable
	when used by a manager on a managed object with more than 100
	managers (!).
   o	Modified programs which display a user's full name to display the
	last name attribute under NW 4.x if a full name has not been set.
   o	Modified all programs to support the 4 byte error codes returned by
	NDS functions. All descriptive text for error codes is now in an
	external file named JRBERR.MSG. Place this file preferably in the
	same directory as JRButils, otherwise somewhere in the search paths.
   o	Added critical error handling into all programs. This is mainly of
	use when repeatedly running programs and appending to the same log
	file, and prevents the infamous Abort, Retry Ignore message if
	backup has the file locked.
   o	All error messages now begin with the program name instead of
	"Error:". A number of users who use JRButils in batch files have
	had difficulties identifying which program is producing a
	particular error message.
   o	Fixed a problem in many programs where when validating a path,
	they failed to distinguish between a path and a file, causing
	more obscure errors later on.
   o	In all programs which obtain a user's home directory from the
	HOME_DIR bindery property, I now do various checks on the path
	following reports of problems where the path was not stored
	in a useable form i.e. in lowercase, using '\' instead of '/', or
	with a trailing '/'.
   o	Changed the use of '/y' in all programs where it was previously
	used, to another letter. This is so /y can be reserved for use
	in the NDS versions. Programs affected are setpword, dquota,
	getquota, creatobj, netcopy and copyuser. Users also used /y but
	as the option was obsolete, it was removed rather than changed.

New (non-NDS) programs

   is_vlms
	For use in a BAT file to determine whether NETX or the VLMs are
	in use. It returns the following error levels:
	  0  Neither NETX nor VLMs are loaded
	  1  NETX.EXE (or one of its predecessors) is loaded
	  2  VLMs including REDIR.VLM and NETX.VLM are loaded
	  3  VLMs including REDIR.VLM but not NETX.VLM are loaded
	  4  VLMs are loaded but REDIR.VLM and NETX.VLM are not

   grpmemb
	For use in a BAT file to determine if a specific user is a member
	of a particular group. It returns the following error levels:
	  0  Success (user is a member)
	  1  Failure (user is not a member)
	  2  No such group
	  3  No such user
	  4  Any other error

   killzero
	Deletes and optionally purges all zero length files from a
	directory tree. It was written to fix a problem with thousands
	of zero length files accumulating in student mail directories when
	they ran out of space.

   mattach
	Attaches and detaches to/from multiple servers in a single command.
	You may specify one or more servers separated by commas, may use
	wild cards in server names, and may precede server names by '!'
	to exclude them. Mattach may also perform whoami and slist
	functions with optional sorting by server name. The slist function
	will optionally display the Netware version of each server.

Changes to existing programs

   Accexp
   o	Modified so that a file server name can be given on the command
	line allowing impending account expiry to be checked on other
	servers when attaching to other servers at login.
   o	Removed an arbitary restriction where you could not specifiy a
	value greater than 100 for /d (I have no idea why I imposed that
	restriction in the first place!).

   Copyuser (was moveuser)
   o	Moveuser has become copyuser as it can now replicate users on the
	same server. This allows you to create new users using an existing
	user as a template. As part of this change, new options have been
	added to /n: (f = dont copy full names, l = copy only the login
	script from the mail directory, r = dont copy trustees other than
	those for the home and mail directories, u = dont copy user
	specific info such as the last login date and time, bad login
	address etc).
   o	Modified so that /b allows truncation of usernames when creating
	home paths. The previous usage of /b is now /i.
   o	Modified to retain the last access date on files. This was
	previously being lost as Netware updates it to the current date
	when the file is copied, and I copy the file attributes after
	copying the file.
   o	Copyuser was failing to copy the inherited rights mask for
	directories (I'm sure that was working ok a few versions back!)
   o	Modified to allow copying of Mac files and directories even when
	Copyuser cannot create them with the same DOS name.

   Delobj
   o	No longer gives an error when a user's home directory obtained
	from the HOME_DIR property, or via /d on the command line, does
	not exist.

   Dquota
   o	Fixed a problem where large values (> 8 GB) were displayed as
	negative values when output in MB.
   o	Added /n=m to suppress output for directory quotas at higher levels
	than the specified directory.

   Fsupdate
   o	Modified to retain the last access date on files. This was
	previously being lost as Netware updates it to the current date
	when the file is copied, and I copy the file attributes after
	copying the file.
   o	Fsupdate was failing to copy the inherited rights mask for
	directories (I'm sure that was working ok a few versions back!)
   o	Modified to allow copying of Mac files and directories even when
	Fsupdate cannot create them with the same DOS name.

   Getequiv
   o  When using /c, getequiv previously failed to make allowance for
      the fact that Wolfgang Schreiber's SUPER functions differently
      under NW 3.12. It now detects NW 3.12 and makes the appropriate
      checks.
   o  When using /c under NW 3.11 and earlier, getequiv now warns if
      a user is a manager of his/her own account. Any such user may
      grant themselves supervisor equivalence at any time.

   Getquota
   o	Fixed a problem where large values (> 8 GB) were displayed as
	negative values when output in MB.
   o	Fixed a problem where it hung under NW 4.1. This was caused
	by 4.1 supporting 255 volumes and I had allowed for a maximum
	of 64.

   Jrbmap
   o	Fixed a few obscure problems when displaying current drive mappings.
   o	Modified to allow multiple drives to be mapped in a single
	invocation e.g. 'jrbmap p:=q:=sys:users'.
   o	Modified to allow mapping of a network drive to a local drive under
	the VLMs (this is not possible under NETX as the DOS drive table
	extends only to LASTDRIVE which excludes network drives). Mapping
	a network drive to a local drive is the equivalent of using SUBST
	on an unused network drive.
   o	Modified to display the paths associated with local drives when
	displaying drive mappings.
   o	Added /p to page output when displaying current drive mappings.
   o	Added /b to JRBMAP to truncate the lowest level directory
	to 8 chars to allow '#jrbmap p:=sys:users\%LOGIN_NAME' in
	a login script to work for usernames longer than 8 chars.
   o	Fixed a bug where /r and /s would not save/restore map rooted
	paths correctly.
   o	Added /u and /v to allow a username/password combination to be
	specified.
   o	Added /x and /z to save all network drive mappings to a file and
	to subsequently restore them. If /x and /z are used together,
	current mappings are saved before the new lot are read from a file
	allowing toggling between two sets of mappings.
   o	Added the ability to do 'jrbmap next := sys:public'.

   Jrbpurge
   o	Fixed /a which when used, resulted in an "Invalid option" message.
   o	Modified so that a list of files separated by commas can be given
	as part of the directory or via /f e.g. /f=*.obj,a.*,fred.dat,*.bak.

   Listobj
   o	Fixed a bug where it was not displaying server names when 'A' was
	used indicating all servers to which you are currently attached.
   o	Listobj can now accept input from a file.
   o	Added /w to suppress full names.
   o	Added /v to give output as setname commands.
   o	Added /d to prevent truncation of names.

   Netcopy
   o	Modified to use a 20 KB buffer when copying files across servers
	which allows packet burst to come into play, resulting in fewer
	packets and faster copying.
   o	Netcopy was failing to copy the inherited rights mask for
	directories (I'm sure that was working ok a few versions back!)
   o	Fixed a problem with /u and /q where it was prompting to all copy
	files rather than just those which had been updated.
   o	Added /u=n to copy any files which do not have an exact match (size
	and last update date) in the target directory.
   o	Modified to allow copying of Mac files and directories even when
	Netcopy cannot create them with the same DOS name.

   Pqadd
   o	Added /b allowing you to operate on both operators and users at
	the same time.
   o	Modified to support the use of wild cards in queue names.

   Pqdel
   o	Added /b allowing you to operate on both operators and users at
	the same time.
   o	Modified to support the use of wild cards in queue names.

   Pqlist
   o	Modified to allow output of the form number (this was an oversight).

   Pqusers
   o	Added /z to give the output as pqadd commands.

   Psadd
   o	Added /b allowing you to operate on both operators and users at
	the same time.
   o	Modified to support the use of wild cards in print server names.

   Psdel
   o	Added /b allowing you to operate on both operators and users at
	the same time.
   o	Modified to support the use of wild cards in print server names.

   Psusers
   o	Added /z to give the output as psadd commands.

   Pwdexp
   o	Modified so that a file server name can be given on the command
	line allowing impending password expiry to be checked on other
	servers when attaching to other servers at login.
   o	Removed an arbitary restriction where you could not specifiy a
	value greater than 100 for /d (I have no idea why I imposed that
	restriction in the first place!).

   Setbal
   o    Fixed a problem where when a negative balance was set from a file,
        all subsequent balances were set to a negative value.

   Sethome2
   o	Modified to optionally truncate usernames to 8 chars before
	appending to the root path to obtain the user's home directory
	(/b).
   o	Modified to process MAKEUSER .usr files (/m).
   o	Fixed a problem when combining /a and /c.

   Setname
   o	Fixed a bug where it was chopping off the last character of the
	full name when using /r with an input file.
   o	Modified to accept wild cards in object names.
   o	Modified to allow processing of all members of a group via /i.
   o	Modified so that /p, is now used for paging output (this makes
	it consistent with every other program), /r now indicates
	an object is a print server, and /b removes trailing blanks from
	full names (this was previously /r).
   o	Added /c to convert existing full names to lowercase.
   o	Added /d to delete full names.

   Setowner
   o	Modified the behaviour so that when a directory is specified, it
	does not process the entire tree by default. I have added /d=t to
	allow this and removed /n to suppress processing of subdirectories
	of the designated directory. This makes setowner consistent with
	other programs.
   o	Added /c to allow you to specify the name of the current owner of
	files. Only files owned by matching objects will have their ownership
	changed.

   Setpword
   o	Now displays the object type when it is not 'user' for each
	object whose password is changed.
   o	Added /b to force updating of the password expiry date by the
	password expiration interval (if set) when supervisor or a
	manager sets another user's password. By default Netware will
	change the password expiry date to 1-Jan-85.
   o	Added /c to force retention of the password expiry date (if set)
	when supervisor or a manager sets another user's password. By
	default Netware will change the password expiry date to 1-Jan-85.

   Trstlist
   o	Modified to allow output to be spread over two lines (/z). This
	allows for long paths, and when /z is used, the object's full
	name is displayed.
   o	Added values 'r' and 'g' to /b to force output of either 'rights'
	commands for NW 4.x, or 'grant' commands for 2.x/3.x.
   o	Added values 'r' and 'g' to /m to force output of either 'rights'
	commands for NW 4.x, or 'remove' commands for 2.x/3.x.
   o	Added /a to include trustee assignments for objects to which a user
	is security equivalent. This includes group membership (a user is
	security equivalent to groups belonged to).

   Users
   o	Fixed a problem where it reported insufficent memory to
	store locations when a record was encountered in LOCATION.SRT
	containing an address only.

Whats not fixed

1.   I've received one report of NETCOPY misbehaving when
     copying MAC directories with graphics characters in the
     MAC name. This is almost certainly a bug in Novell's
     API's.
2.   Programs which copy directories and their contents will
     give an error when a log file is created within a
     directory to be copied and the program attempts to copy
     the log file which is already open.
3.   DELOBJ and FSUPDATE (with /d) will delete a log file if
     it is created within a directory whose contents are being
     deleted (the fact that the file is open does not prevent
     it being deleted).


JRBUTILS v2.21  7-Dec-1994

A number of bugs in v2.20 have been fixed and a few new features added.

   Most programs
   o	Fixed a bug where an error log file was created whenever /e=none was
	used. Nothing was written to the error log.
   o	Allowed truncation of the logging keywords to the minimum number of
	unique letters, and provided a single letter alternative for those
	beginning 'no'. This was to reduce the problem of exceeding the DOS
	command line length limit with programs like moveuser.
   o	Misc corrections to the in-built help.

   Creatobj
   o	Creatobj was returning a non-zero error level regardless of whether
	an error occurred. It now returns an error level based on the success
	or failure of the last user created. Zero if successful, non-zero for
	failure.
   o	Was not setting grace logins remaining to equal grace logins allowed
        when a user is created.
   o	Fixed problems with /m and /d when creating users on another server.
   o	New feature. Added /v to enable verbose mode to list directories and
	files created, trustee assignments granted.
   o	New feature. Added /c to allow creation of the directory specified
	via /d.

   Delobj
   o	When using /x under NW 3.12, the names of purged files were displayed
	with extra characters appended. It appears that when scanning for
	deleted files under NW 3.12 each file name is returned without a
	terminating null byte. The same problem occurred in fsupdate.

   Fsupdate
   o	Was giving 'Divide error' on volumes with a 64 K block size.
   o	Was failing to detect when the source and destination path were
	the same when copying files.

   Getbal
   o	Now displays totals for most columns. These can be suppressed.

   Grplist
   o	Some group names were dropped when 4 or more group names were given
	without parentheses e.g 'grplist abc ~ def ~ ghi ~ jkl'.
   o	In v3.10 it was impossible to operate on groups where '&', '~' or '!'
	formed part of the group name. These can now be enclosed in double
	quotes e.g. 'grplist "a&b"' wil list members of group A&B, whereas
	'grplist a&b' will list users who are members of both groups A and B.
   o	Some valid characters in group names e.g. '.' were being rejected as
	invalid.

   Jrbpurge
   o	Fixed a problem where when checking a date given using /m, it was
	using the number of days in the following month.

   Mgrlist
   o	Was not removing duplicate managers when /u used.

   Moveuser
   o	Was giving 'Divide error' on volumes with a 64 K block size.
   o	When using a group translation file and /b, it was creating all
        groups (including those on the source server) on the target server.

   Netcopy
   o	Was giving 'Divide error' on volumes with a 64 K block size.

   Pqdeljob
   o	Can now specify usernames as well as job numbers. All jobs submitted
	by the specified users are deleted.
   o	Added /u. This provides an alternative to entering a username on the
	command line. When used without specifying a username, all jobs
	belonging to the user running pqdeljob are deleted.

   Pqlist
   o	Can now specify a username on the command line. Only jobs submitted
	this user are displayed.
   o	Added /u. This provides an alternative to entering a username on the
	command line. When used without specifying a username, only jobs
	belonging to the user running pqlist are displayed.
   o	Added /z to force pqlist to return an error level equal to the
	number of jobs displayed.

   Salvlist
   o	Fixed a problem where when checking a date given using /m, it was
	using the number of days in the following month.

   Sethome2
   o	Added a new feature /d to allow deletion of HOME_DIR properties.

   Setpword
   o	Added /a to prevent setting of passwords. May be useful with /g
	and /w.

   Setrest
   o	When setting password expiration intervals, both for users and for
	the server default via /z, the values(s) were set correctly, but were
	displayed incorrectly. The displayed value was in byte-swapped order.
   o	Fixed a problem when deleting the only station restriction for a user
	via /d. The restriction was removed, but the bindery property was not
	deleted which caused getrest to display "No restrictions" twice. The
	problem did not occur when using /w.

   Users
   o	Users would not accept /s=l for sorting by location.
   o	Users was not correctly sorting by network address.


JRBUTILS v2.20	20-Oct-1994

Part A has been expanded to 30 programs (27 was never an aesthetically
pleasing number!) by the following changes:

   o	Retired Setxonly.
   o	Moved Usergrps from Part B to Part A so that all group management
	utilities are in Part A.
   o	Added Makememb which allows adding/removing users to/from multiple
	groups.
   o	Added Accexp which can be used in a login script to warn of impending
	account expiration.
   o	Added Sethome2 which is an extended version of David Harris' Sethome,
	written with David's permission.

New features, changes and bug fixes in v2.20 (the ones that I can recall!)

   All (or most) programs

   o	Updated the help display to allow arrow-up, arrow-down, top,
	bottom etc.
   o	Added /l to control whether non error output is written to the screen,
	and/or to a log file. Output may optionally be appended to an
	existing log file.
   o	Added /e to control whether error output is written to the screen,
	the log fle optionally created via /l, to an error only log file,
	or is discarded. Output may optionally be appended to an
	existing error log file.
   o	Fixed a problem in programs accepting a path as input where the
	path was reported to be invalid when it was a local drive mapped
	to a network drive.

   Chkhome
   o	Added /h to list only the home directories. This can be useful when
	preparing a BAT file to perform some operation on the directories.

   Creatobj
   o	Now creates the MISC_LOGIN_CONTROL property for users. This property
	is rarely used, but the lastlgn program below can use it.
   o	Now gives a sensible error when it cannot create a home directory
	for usernames exceeding 8 characters in length.
   o    Changed the previous /l (for pointing to a login script) to /m so
	that /l is now used across all programs to log all output to a file.

   Delobj
   o	DELOBJ simply exited when a valid path was supplied via /d (It was
	treating a return code of OK from the checking routine as an error).
   o	Added /x to purge files as they are deleted.

   Dquota
   o	Now adjusts output units as needed to avoid integer overflow (e.g.
	for values > 4.3 GB)
   o	Now gives the free space as the smaller of quota - used and the free
	space on the volume.
   o	Added substitution parameter %p for user supplied text files. %p
	waits for a key to be pressed before continuing.
   o	Fixed various minor bugs.

   Getbal
   o	Added sorting by value.
   o	Added filtering of output e.g. balances < $10.00.
   o	Can now select which variables are displayed and in what order
	(balance, credit limit etc).
   o	Can now display the default account balance and credit limit given to
	users created using SYSCON and CREATOBJ (displayed under SYSCON's
	"Supervisor Options", "Default Account Balance/Restrictions").
   Getequiv
   o	Can now use ! to exclude servers e.g. '*,!fred/*' would process all
	users on all servers except server FRED.

   Getquota
   o	Now adjusts output units as needed to avoid integer overflow (e.g.
	for values > 4.3 GB).
   o	Now gives the free space as the smaller of quota - used and the free
	space on the volume.
   o	Added /dt to display quotas etc for all directories in a tree.
   o	Added /di for use with dt to display usage inclusive of
	subdirectories.
   o	Added /y to process entire directory trees for users.
   o	Added /w to control space available for printing directories,
	usernames etc.

   Getrest
   o	Renamed from getacres (getrest = GET RESTrictions).
   o	Added /t to output only the total users.
   o	Added /u (output usernames only).
   o	Added /n (dont output the full names).
   o	Added /v (output values only).
   o	Added /z to display the default account restrictions for users
	created using SYSCON (displayed under SYSCON's "Supervisor Options",
	"Default Account Balance/Restrictions").

   Grpadd
   o	Renamed from grpaddu.
   o	Server names may now precede all user or group names, but obviously
	all must be the same.

   Grpdel
   o	Renamed from grpdelu.
   o	Server names may now precede all user or group names, but obviously
	all must be the same.

   Grplist
   o	Can now specify wild cards in the group name when an expression
	is not used.
   o	Can now give expressions to list users whose membership meets
	criteria across one or more groups e.g. '(A & B) ~ !C' would list
	those users who are members of both groups A and B, or are not a
	member of group C.
   o	Added /u to indicate that all users on the server should be listed.
	This was previously done by giving '*' instead of a group name, but
	'*' will now list membership of all groups on the server.
   o	Changed previous /l to /b so that /l is now used across all programs
	to control non error output.

   Killconn
   o	Worked around a bug in a Netware function call causing loss of
	connection to the server when a user was specified and packet
	signatures are in use.
   o	Can now give a server name followed by a slash (e.g. PUHA/) as
	the first parameter to force /a, /i or /n to operate on a server
	other than the one to which your current drive is mapped.

   Listobj
   o	Added ! to exclude servers e.g. *,!fred/* would list all objects
	of the nominated type on all servers except server FRED.
   o	Added /n to force searching through the full name field as well as
	object names e.g. 'listobj */john /n' would list all users named
	'john' plus any others with 'john' appearing as a separate word in
	the full names. Wild card searching in the full name is supported.
   o	Changed previous /l to /m so that /l is now used consistently across
	all programs to control non error output.
   o	Added /b to list only static bindery objects.
   o	Added /c to list only dynamic (temporary) bindery objects.

   Mgradd
   o	Renamed from uamadd.
   o	Removed the need for supervisor equivalence, so that it can be
	used by managers to manipulate managed objects. Supervisor
	equivalence is still required to create a work group manager.

   Mgrdel
   o	Renamed from uamdel.

   Mgrlist
   o	Renamed from uamlist.

   Netcopy
   o	Lots of minor improvements.
   o	Fixed bug in /u where it was comparing the update dates incorrectly.
   o	Modified to allow copying of files only, added /s to copy subdirs.
   o	Added support for other name spaces, and for extended attributes as
	used by OS/2. I believe OS/2 files are copied correctly, NFS files
	appear to be copied correctly so long as /t is used. Netcopy has
	not been tested with FTAM files but will attempt to preserve their
	name space attributes.
   o	Added facility to adjust vol and dir quotas as they are copied.
	This is primarily for use when copying to a volume with a larger
	block size.
   o	Now checks that there is sufficient space before copying each file.
	This allows for volume space, volume quotas and directory quotas.
   o	Can now remove volume and dir quotas before copying, and restore
	afterwards. The quotas removed are logged to a file as Setquota
	commands so that in the event of abnormal termination of netcopy,
	the quotas removed can be easily restored.
   o	Fixed a problem overwriting files which were flagged 'delete inhibit'
	rather than 'read only'.
   o	No longer leaves zero length files in the destination directory
	when the source file is in use and can't be opened.
   o	Added option /n=b to not copy hidden directories.
   o	Added option /n=c to not copy hidden files.
   o	Added /a to copy only those files with the archive bit set.
   o	Added /b to reset the archive bit on the copy of the file.
   o	Added /i to reset the archive bit on the original file.
   o	Added /c to allow creation of the lowest level of the destination
	directory e.g. if copying to vol1:data\temp, netcopy can create
	the temp subdirectory.
   o	Now correctly handles copying a directory tree to a subdirectory
	of itself.
   o	Added /q to query whether or not to copy each file.
   o	Worked around an intermittent bug copying volume quotas which
	appears to be caused by an incorrect buffer size in a Netware
	function call.
   o	Now deletes files in the destination directory rather than simply
	overwriting them. This allows them to be subsequently salvaged.

   Pqadd
   o	Added /r to allow addition of print servers to a queue.

   Pqdel
   o	Added /r to allow removal of print servers from a queue.

   Pqdeljob
   o	Can now specify a range of jobs to be deleted e.g. 1-25.

   Pqlist
   o	Fixed bug where output was out of alignment when the owner of a
	queued job no longer existed.

   Pqusers
   o	Can now display print servers associated with the queue.
   o	Can now display both users and operators, or users, operators
	and print servers in one invocation of the program.
   o	Can now expand user and/or operator groups to list all users who
	are users or operators.
   o	Auto-sorts the queues into alphabetical order.

   Psusers
   o	Added auto-sorting of print server names when wild cards are
	used.

   Salvlist
   o	Added /z to search on file size.
   o	Added /m to search on deletion date/time.
   o	Added operators =, !=, >, >=, <, <= to filter by file name, size,
	owner, deletor, deletion date/time.
   o	Can now specify a filename as part of the path.
   o	Added support for wild cards in file names.
   o	Added /r to recover files matching the search criteria. These will
	automatically be renamed to a unique name if a file already exists
	with the original name. An existing file with the same name as the
	file being recovered may optionally be replaced (the existing file
	deleted). An option exists to replace existing read-only files.
   o	Added the ability to process a list of directories/files in a file.
   o	Added /n to recover the newest file where there are multiple
	deleted files with the same name. A value may be given e.g. /n=2
	recovers the newst file but two i.e. the 3rd newest.

   Setbal
   o	Added /z to set the default balance or credit limit used by SYSCON
	(displayed under SYSCON's "Supervisor Options",	"Default Account
	Balance/Restrictions").

   Setequiv
   o	Fixed a bug where it was not detecting work group or user account
	managers correctly.

   Setname
   o    Renamed from setfname.
   o	Added /m to process MAKEUSER input files. Makeuser always converts
	the fullname to uppercase, so after running Makeuser, feed the same
	file to Setname and the full name will be set exactly as specified.

   Setowner
   o	Removed requirement for /o when setting ownership on individual files.
   o	Added (new) /o to specify the object type of the new owner. You can
	now set ownership to any object type.
   o	Lots of minor changes and tidying of output.

   Setpword
   o    Now operates across multiple servers.
   o	Can use ! to skip servers e.g. '*,!fred/supervisor' would set the
	supervisor password on all servers except FRED.
   o	Changed range code to allow ranges with unequal numbers of digits
	e.g. aa1-aa10.
   o	Can now change passwords for any type of object.
   o	Can now be used by anyone, but the old password is required if you
	are not supervisor equivalent, or a manager of the object whose
	password is being changed.
   o	Can now generate random passwords of any length.
   o	Passwords may be logged to a file with user control over the file
	format. This is intended for use with, but is not limited to, random
	password generation.

   Setquota
   o 	Added /c to control output units.
   o	Output units now default to same as the input units.
   o	Added autochange of units to avoid integer overflow for large quotas.
   o	Added /dt to set/remove a quota on all directories in a tree.

   Setrest
   o	Renamed from setacres (setrest = SET RESTrictions).
   o	Fixed a bug where when deleting station restrictions from a user
	with more than 12 restrictions, every 12th was corrupted.
   o	Can now set the default account restrictions for users created
	using SYSCON (these are usually set under SYSCON's "Supervisor
	Options", "Default Account Balance/Restrictions".

   Trstlist
   o	Added /o to specify any object type.
   o	Added /r to specify print servers.
   o	Added /m to output as REMOVE commands.
   o	Added sorting by object, path or rights.
   o	Added filtering of output e.g. list only trustees including the S
	right.
   o	Added autodetection of files given on the command line, removing
	the need to use /f, which now functions as per other programs to
	indicate a file containing users, directories or files for which
	the ownership is to be changed.

   Usergrps
   o	Added optional sorting of the groups.

   Usermgrs
   o	Renamed from useruams.
   o	Added optional sorting of managers.

   Users
   o	Added ! to exclude servers e.g. *,!fred/*.
   o	Can now output object ID's.
   o	Changed previous /l (used to specify a location) to /m so that /l
	could be used consistently across all programs to control non
	error output.


New programs in JRB220 Part B.

   Moveuser

   Copies users and groups from one server to another retaining all bindery
   properties and their contents where possible, and copies the contents of
   mail and home directories, retaining all attributes, trustees, quotas etc
   as per NETCOPY. Quotas can be adjusted during the copy (for larger block
   sizes on the dest volume), and groups can be substituted. Password may be
   left NULL or set to the username. The home directory path may be altered
   during copying  (e.g. from VOL1:USERS to USERS:ECON). Groups can be
   created on the destination server as required when moving users who belong
   to these groups on the source server. Ownership of files can be set to
   the user regardless of original owner. A translation file may be given
   to change group membership on the destination server.

   FSUpdate

   Multi-server file maintenance utility. Copies individual files, files
   selected via wild cards, or entire directory trees to multiple servers.
   Useful for software updates. Can also delete or rename multiple files
   across multiple servers. Can purge files upon deletion. Has the usual
   range of options. Correctly handles MAC name space, I believe it
   handles OS/2 correctly, and should handle NFS files provided the -t
   switch is used.

   PQStatus

   Allows you to view and alter the status of multiple print queues across
   multiple servers. Alterable values (these may be toggled or set to a
   specific value) are (a) jobs can be submitted to the queue, (b) servers
   can attach to the queue, and (c) servers can service the queue.

   Con_ops

   Allows you to add, delete and list console operators.

   JRBMap

   (was to be called NETMAP but someone else has recently released a program
   with this name). A replacement for Novell's MAP, primarily for use in
   BAT files where it will map drives without fuss and piping in 'y's and
   'n's. Can specify alternative paths so that in the event of one being
   unavailable it will try the next (We use this for all applications at
   Lincoln University so that in the event of an APPS volume failing, the
   application will simply be retrieved from the corresponding volume on
   another server). Can save existing mappings in the DOS master environment
   and subsequently restore from there. Supports map root.

   JRBPurge

   Allows selective purging of files - has many of the options of salvlist.
   Supports purging by name, size, owner, deletor and deletion date and time.

   Lastlgn

   Can be used in a login script to display the user's previous login date
   and time. This provides a useful indication of when the account was last
   used. This may not work under NW 4.x. Lastlgn requires that each user
   have a MISC_LOGIN_INFO property and it can be used to create these
   and copy the previous login date and time from the LOGIN_CONTROL
   property by a supervisor equivalent user or a manager. The last
   login date and time in the LOGIN_CONTROL property is overwritten
   with the current date/time by the login process, and so has been
   changed by the time LOGIN begins executing the login script. LOGIN
   does not update the date/time in the MISC_LOGIN_INFO property until
   immediately prior to exit, thereby making the previous login time
   available during execution of the login script.

JRBUTILS v2.12	24-Mar-1994

1. New features

   o	In all programs, a line beginning with ';' in a input file is
	treated as a comment line.
   o	In GETQUOTA, added option /nc to suppress commas in numeric values.
   o	In GETQUOTA, added option /us to display the subdirectory name
	rather than the full path, which could be truncated if too long for
	the available space.
   o	In GETQUOTA, /v is now superflous - it is no longer required when
	a volume appears on the command line.
   o	A similar change has been made in SETQUOTA, but /v must be used if
	a volume name appears in an input file.
   o	In GRPLIST, the group name may be preceded by '!' meaning list all users
	not a member of the group.

2. Bug fixes (ignoring the most obscure ones)

   o	In all programs, fixed a problem with detection of output redirection
	which was introduced in v2.11. A very small number of sites were
	unable to display the in-built help.
   o	In many programs, when using an input file, the last character of
	the last line could be lost if there was no <CR><LF> at the end
	of the file.
   o	In SETQUOTA, RENOBJ, SETFNAME fixed a problem where blank lines in
	input files were producing error messages.
   o	GETQUOTA, SETQUOTA, GETACRES and SETACRES previously required that
	all options appear after the parameters, whereas in all other
	programs, options could appear anywhere on the command line. These
	4 programs now accept options anywhere on the command line.
   o	DELOBJ. The protection on the HOME_DIR bindery property created by
	David Harris' SETHOME is such that users can change the contents of
	this property. This makes it possible for a user to set it to some
	other directory e.g. SYS:PUBLIC. As DELOBJ will delete the directory
	found in the HOME_DIR property, this was a potential hazard. DELOBJ
	now checks the user's rights to the directory found in the HOME_DIR
	property. If the user does not explicitly have a trustee assignment
	granting [ RWECMFA], DELOBJ will now query whether or not to delete
	the directory. To avoid this check, use /a.
   o	In CREATOBJ, removed a limitation where when specifying a login
	script file, it previously had to be on the same server as the user
	being created.
   o	When using /c in CHKHOME, error messages about being unable to
	allocate a directory handle because there was no such directory,
	some times appeared. These occurred when scanning for a matching
	directory on other volumes when the user's home directory did not
	exist. They have been suppressed.
   o	In DQUOTA, if any of the total quota, total usage, or total space
	available exceeded 2.1 GB, when using /v, the output was messed up.
   o	In DQUOTA, when a directory was specified, and that directory had
	less than the warning threshold of free space, dquota displayed
	" has less than xxx Bytes available". It now inserts the directory
	name.
   o	In DQUOTA, when /cm was combined with /nc, the output was incorrect.
	The decimal point was overwriting one of the digits.
   o	In GRPADDU, when /q was used, the server name, group name and user
	name in the prompt were in the wrong order.
   o	In GRPDELU, the wrong server name appeared in an error message when
	trying to add an non-existant user on another server.
   o	Fixed a bug in GETQUOTA where /t gave zero totals.
   o	Modified GETQUOTA to display totals even when there was only one
	line of output. I had previously suppressed totals in this case as
	the totals equalled the values in the single line and were therefore
	superflous. But some folks are running automated procedures which
	redirect output to a file then use grep to find the totals line.
	Therefore I've decided it is better to be consistent and always
	output a totals line.

JRBUTILS v2.11	18-Dec-1993

1. New features

   o	In USERS, you can now specify the connections you want displayed
	using /c.
   o	GETQUOTA now allows you to suppress quotas, space used and space
	available using /o=n.
   o	LISTOBJ, RENOBJ, CREATOBJ, DELOBJ and KILLCONN now allow you to
	specify the object type in hexadecimal using /o. This removes an
	inconsistency where LISTOBJ displays object types in hex (using /a)
	but other programs required the object type in decimal.
   o	Added /a to GRPLIST to list the group members by an alternative
	and slower method. This avoids a limitation in the
	NWReadPropertyValue function which is reached when a group has
	more than about 8,000 members. All programs using this function now
	produce a warning if the limitation is reached when processing the
	members of a group. Use GRPLIST /a/l to produce a file, and use this
	file as input to other programs.

2. Unfixed bugs

   o	A user has reported DQUOTA hanging under NW 2.15. I have had no
	luck whatsoever identifying this problem.

3. Bug fixes (ignoring the most obscure ones)

   o	/p did not work in SETACRES
   o	SETACRES didn't create a user's LOGIN_CONTROL property when
	necessary.
   o	Preceding a username with a '$' in SETFNAME did not work.
   o	Preceding object names with '$' and '#' in DELOBJ did not work.
   o	TRSTLIST, GETEQUIV and GETACRES did not allow you to display
	information for objects to which the user was security equivalent
	e.g. TRSTLIST did not allow a member of a group to display trustee
	assignments for the group.
   o	KILLCONN did not allow a manager to clear connections for managed
	objects. NW 3.11 does not seem to allow this anyway, athough its
	documented as being possible.
   o	GETACRES would more often than not fail to display all users when
	sorting by value due to a bug in the sub-sorting code.
   o	USERS would display the location in uppercase when selecting by
	location.
   o	SETQUOTA failed to release directory handles when setting directory
	quotas and the quota being set equalled the existing quota. This
	could result in it running out of directory handles.
   o	Full names for users and groups should be limited to 48 characters
	but SYSCON allows them to be set longer. This caused output to be
	screwed up in USERS and LISTOBJ.
   o	Fixed a couple of minor errors in the help for USERS.
   o	/w in CREATOBJ could not be used to specify a password for a
	print server.
   o	/g was missing from UAMDEL.
   o	DELOBJ misbehaved when using an input file with records longer than
	48 characters.
   o	DELOBJ was not deleting subdirectories of a users home directory.
   o	DQUOTA contained a superfluous printf statement outputting the
	username when /y was used.
   o	SETOWNER would sometimes hang when it encountered a file with
	characters in the name with the eighth bit set. This was a bug
	in the Client SDK and I've avoided it by using a different function
	call.
   o	DQUOTA, GETQUOTA, SETQUOTA, SETOWNER, SETXONLY, CHKHOME, CREATOBJ,
	TRSTLIST and SALVLIST all had a problem with processing hidden
	directories. This is fixed.
   o	NETCOPY would hang intermittantly.
   o	When GRPADDU created a group but did not add any members (grpaddu
	group /c) the group was left without a GROUP_MEMBERS property. This
	did not cause problems when subsequently using GRPADDU, but less
	elegant programs <grin> such as SYSCON and MAKEUSER then could not
	add members.



