                              ==Phrack Magazine==

                 Volume Four, Issue Forty-Four, File 14 of 27

()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()

                 A Guide to Data General Corporation's

                             AOS/VS System
                                 PART I

                             by Herd Beast


INTRODUCTION
~~~~~~~~~~~

This file is a full (as full as such a file can get) guide to the AOS/VS
system.  The main reason for writing it is that from what I've seen,
there is practically no info (in the form of files or otherwise) about
it.  I won't say I'm the only one who knows anything about it, but I had
a hell of a time getting any sort of help when I started hacking these
systems (I didn't get that help, in case you were wondering, and wrote
this file all by myself 'cause I'm a MAN!  Hahaha! <snort> <snort>).

I will explain a little about AOS/VS and then explain some of the
commands and security features in it.  This file is not a buffer of any
help facility, although much information can and will be found in the
help facility.

I can be contacted (hopefully) at hbeast@mindvox.phantom.com.  If you
want a nice start, and a front page on Newsweek, some Texaco ("Star of
the American Road") systems run AOS/VS.

I cannot, will not, and do not assume liability for ANY of the effects
of the use of this file.  Also, I cannot guarantee that EVERYTHING will
work EVERYWHERE, so treat this file as a reference.  This file by no
means covers everything about AOS/VS.

IDENTIFYING THE SYSTEM
~~~~~~~~~~~~~~~~~~~~~

Should you just fall at the system prompt, you might mistake it for a
VMS.  However, blank prompts like that are rare.  An AOS/VS will
identify itself like this: (this and all other buffered info in this
file are from an AOS/VS II with CLI32.  Only the best for Phrack)

AOS/VS II 2.20.00.12 / EXEC-32 2.20.00.07       31-May-93 22:51:25      @CON177

Username:
Password:

Another thing different will be the incorrect login message:

Invalid username - password pair

The header line lists the system version, current time/date and the console
you are using.

When you reach the maximum incorrect logins defined in the system, it
will show the line below and disconnect:

Too many attempts, console locking for 10 seconds

When you do succeed to log on, the system will display:

------
        Copyright (C) Data General Corporation, 1980 - 1992
        All rights reserved.
        Licensed material -- property of Data General Corporation
        This software is made available solely pursuant to the
        terms of a DGC license agreement which governs its use.

((NOTE: Or something else.  This is the default))
--------
Most recent logon        1-Jan-93       10:10:01

Very clear.  Before you do anything, type CHARACTERISTICS.  You will
then get output like this:

/605X/LPP=24/CPL=80/BREAK=BMOB/TCC=40000/TCD=5000/TDW=1000/THC=2000/TLT=2000
/ON/ST/EB0/ULC/WRP/CTD
/OFF/SFF/EPI/8BT/SPO/RAF/RAT/RAC/NAS/OTT/EOL/UCO/MRI/FF/EB1/PM/NRM/MOD/TO/TSP/
C/FKT/VAL/HOFC/SHR/OFC/IFC/16B/ACC/SRDS/XLT/AUTOBAUD/CALLOUT/MDUA/HDPX/SMCD/RT
D/HIFC/G1G0/DKHW/NLX

Look for "/NAS".  It stands for non ANSI standard, which means that if
you are using ANSI (probably you are), you needs to issue
CHARACTERISTICS/OFF/NAS, should you find "/NAS" listed after "/ON".

Upon logging off from the system (BYE), you will see:

AOS/VS II  CLI   Terminating     1-JAN-93       11:11:01
Process 180 Terminated
Elapsed Time   0:16:26, CPU Time   0:00:02.447, I/O Blocks  281
(Other console jobs, same USERNAME --  16)
User 'HBT' logged off @CON228   1-Jan-93       11:11:01

SYSTEM DEFAULTS
~~~~~~~~~~~~~~

These are accounts I usually found existing.  As usual, they are really
similar to those of any other system.

USERNAME
--------
((Privileged accounts))
OP                                 EXEC default username
SYSMGR                             System manager
CEO_MGR                            If the system is running CEO
OPER
OPERATOR
((Regular accounts))
CEO.xxxxx                          If the system is running CEO, a CEO
                                   user, xxxxx being his number.

As for password guessing, well, it's all been said.  Try the username,
with some modification, you might get in.  As dumb as it sounds, yes,
people do have weak passwords, even today, although not everywhere.

SYSTEM STRUCTURE
~~~~~~~~~~~~~~~

In this section I'll try to describe the real basics of AOS/VS.  I will
describe a few commands HERE, and not under "Command List", these
commands will be the basic commands: change directory, list files, etc,
needed to survive in any system.

The AOS "shell" is called CLI (Command Line Interpreter).  There are
two versions of CLI, CLI16 and CLI32, with CLI32 being more advanced.
The CLI version affects the system prompt, the way commands are handled
by the system and by the user, and more.  For example, some command
switches do not exist under CLI16 (unless very important, I omitted
switches that work only under CLI32 from this file).

Here are the privilege levels available under AOS/VS:

          CLI16 PROMPT   CLI32 PROMPT  PRIVILEGES MODES
          -------------+--------------+--------------------------
          )              )             None
                         Sm)           System Manager
          +)             Sp)           Superprocess
          *)             Su)           Superuser
                         SmSp)         System Manager and Superprocess
                         SmSu)         System Manager and Superuser
          #)             SpSu)         Superprocess and Superuser
                         SmSpSu)       System Manager, Superprocess, Superuser

AOS/VS doesn't grant privileges upon logon.  A user's profile may state
the user can access privilege level So-And-So, and if the user later
needs that level, he calls upon a SUPER utility to grant him that
level.  This is the place to explain how several different utilities
work.  OPERATOR grants the user the ability to access diskettes in dump
or load sessions (see the section titled "System Commands") in sequential
order, instead of accessing them one by one.  SUPERUSER turns off all
access checking, enabling the user to do anything with any file on the
system.  SUPERPROCESS gives the user the ability to terminate, block,
unblock, or change priorities of any process on the system.  The last
command, PRIVILEGE, which is available only under CLI32, enables the user
to set both SUPERUSER and SUPERPROCESS access.  It also offers the only
way to set SYSTEMMANAGER access, which is required for operations like
changing time or date.

Command are executed by calling their names, or any part of their name
that only fits them.  For example, SUPERUSER can be abbreviated as
SUPERU.  It is important to remember that command switches MUST follow
the command without any space, or else the command will try to process
the switches!  For example, CHARACTERISTICS /OFF/NAS will result in an
"Error: Illegal filename character characteristics,/off/nas".

The root directory directory is called ':'.  Any other directories are
under it, for example ':OUT' and ':OUT:RALF'.  If, for example, you FTP
into an AOS/VS and use "cd /" you will be moved in ':'.  If you use "cd
/out/ralf" you will be moved into ':OUT:RALF'.  To make this much more
clearer (right):

                                   :
                                  HBT
                                   |
                                   |
                                  TEXT
                                  /  \
                             PHRACK  SEX

Legal characters in file or directory names are all the alphabet and
numbers, plus '$', '_', '.' and '?'.

Moving from directory to directory is done by using the "DIRECTORY"
command.  Without any arguments, DIRECTORY shows the current path.  With
an argument, DIRECTORY changes to that directory.

DIRECTORY [directory]
---------------------

/I        Changes to the initial directory
/I path   Changes the initial directory to "path"
/P        Changes to the previous directory

To list files in a directory, use "FILESTATUS".  Without arguments,
FILESTATUS lists files in the current directory.  With a path argument,
FILESTATUS lists file in that path.

FILESTATUS [directory]
----------------------

/[AFTER|BEFORE]/[TCR|TLA|TLM]=date and/or time

          Shows files matching the selection date or time.  The
          selections are: time created (TCR); time last accessed (TLA);
          and time last modified (TLM).  The difference between accessed
          and modified is pretty clear, for example if the file is an
          executable.  The date/time format is: for TIME - hour-minute-sec
          (xx-xx-xx); for DATE - day-month-year (xx-xxx-xx); for BOTH -
          dd-mmm-yy:hh:mm:ss.  Example command lines will be

          FILESTATUS/AFTER/TCR=11             Created after 11 AM
          FILESTATUS/BEFORE/TLM=01-JAN-90     Modified before 01/01 1990
          FILESTATUS/AFTER/TLA=01-JAN-90:11   Accessed after 11 AM,
                                              01/01, 1990

/ASSORTMENT

          Normally, FILESTATUS output is just file name.  With
          /ASSORTMENT, FILESTATUS shows file type, time/date of
          creation, and length in bytes.  Similar to Unix, if the file
          is a link, the file type is set to LNK and FILESTATUS shows
          its path.

/COUNT    Tells how many files are in the directory.   [CLI32]

/[DCR|DLA|DLM]

          Shows date of creation (DCR); date last accessed (DLA); and
          date last modified (DLM).

/LENGTH   Displays file length in bytes.

/LINKNAME

          If the file is a link, FILESTATUS displays the information
          about the file that it's linked too.  For example, if BOB is
          linked to RON, FILESTATUS/LINKNAME BOB would display RON's
          details.  Otherwise, nothing happens.

/TYPE=[\]type

          Displays files of type, or all files not of that type (if
          \type) was used.  See below for valid file types.

/UDA      If the file has a UDA (user data area), its presence is displayed.

The CLI's wildcards (sort of), are '=', '^', ':' and '@.  '=' means the
current directory.  '^' means the parent directory.  ':' is (as already
said) the root directory.  '@' means the devices directory (where
consoles, tape drives, modems, etc are.  Similar to /dev on Unix).  Note
that when talking about directories, the ':' is already included.  For
example, if you're in :UDD:HBT:TEXT, and want to move to :UDD:HBT:BIN,
you'd type DIRECTORY ^BIN, and not DIRECTORY ^:BIN.  File wildcards are
'+', which is equivalent to '*' at DOS, and '#' which is equivalent to
'*.*' at DOS.  For example, FILE +.CLI will show all the files whose
names end with ".CLI"; FILE :UDD:# will display all the files in UDD
(which won't happen if you just issue FILE :UDD -- in that case, you'll
see only information about the directory UDD, and not the files within
it).

As with Unix, you can enter more than one command on a line if you
separate the commands with a ';' (a semicolon).  If you need more than a
line for your commands, type an '&' before pressing Return, and the CLI
will just keep on reading, instead of processing the command line and
try to run it.  This goes ONLY for a sequence like this: "&<Return>", an
'&' anywhere else acts just like any other character.

There are several control characters the CLI takes and uses:

                 CONTROL CHAR               WHAT IT DOES
                 ------------------+-------------------------------
                 Ctrl-C              Begins a Ctrl char sequence.

                 Ctrl-D              End of file.

                 Ctrl-L              Clear screen.

                 Ctrl-P              Don't interpret the following
                                     character in any special way.

                 Ctrl-S              Stops output to the terminal.

                 Ctrl-Q              Resumes output to the terminal.

                 Ctrl-U              Cancel (delete) current input line.

                 Ctrl-C Ctrl-A       Interrupt current process.

                 Ctrl-C Ctrl-B       Terminates current process.

                 Ctrl-C Ctrl-C       Empties the input buffer.

                 Ctrl-C Ctrl-E       Terminates current process and
                                     create a break file (where
                                     termination message is stored).

If the CLI is run with a /NOCA switch, it will ignore Ctrl-C Ctrl-A
sequences, so if put in the start of a macro file, it won't allow you to
break that macro and enter the CLI.

AOS/VS had many file types.  File types are three letter acronyms
(although not always) for the file; the same way DOS and VMS have
extensions, the file type controls what the file is (it can have any
extension in its name).  File types have a decimal numbers assigned to
them, as well.  There are 70 file types, although the operating
system reserves space for 128.  The user can define his own file types.
These are some of the he AOS/VS file types:

                     TYPE NUMBER     TYPECODE       MEANING
                    -------------+------------+-----------------
All these types  /      11        LDU        Logical disk unit
are directories -|      12        CPD        Control point directory
                 \      10        DIR        Directory
                         0        LNK        Link
                        68        TXT        Text
                         1        SDF        System data file
                         2        MTF        Magnetic tape file
                        13        MTV        Magnetic tape volume
                        22        MTU        Magnetic tape unit
                        49        CON        Console
                        51        RMA        Remote host (RMA)
                        52        HST        Remote host (X.25 SVC)
                        54        PVC        Remote host (X.25 PVC)
                        64        UDF        User data file
                        69        LOG        System log file
                        74        PRV        AOS/VS program file
                        75        WRD        Word processing file
                        87        UNX        Unix file (created on a Unix)
                        95        SPD        Spreadsheet file
                       104        PIP        Pipe
                       105        TTX        Teletex file


"Generic files" are actually pointers that help using devices and files.
For example, the @NULL generic file functions like /dev/null on Unix.
Here are the generic files:

     @CONSOLE       The process' (user's) console.

     @DATA          A long file created by the user that will be used as
                    data by a program.  @DATA is set using DATAFILE.

     @INPUT         A short file created by the user that will be used
                    as input by a program.  @INPUT is set using
                    PROCESS/INPUT=.

     @NULL          Well, null.

     @LIST          A long output file that will be used as a program's
                    output.  @LIST is set using LISTFILE.

     @OUTPUT        A short output file for a program.  @OUTPUT is set
                    using PROCESS/OUTPUT=.

When a program is run, it will sometime try to open one of these generic
files.  If they're not set, it will fail on error 21 (non existent
file).  But if the file is set, it can use it.  So, for example, you can
use PROCESS/OUTPUT=@CONSOLE PROGRAM for output to go to you, or
PROCESS/OUTPUT=OUT_FILE PROGRAM for it to go to OUT_FILE.

"Device files" are files the connect to hardware parts, such as modems,
printers, tapes, diskette drives, FAX machines, etc.  In due time, a
program called EXEC makes a connection between processes and devices and
utilizes those devices (see the section titled "The 'EXEC' Program").
Some devices are also used by the backup related programs DUMP and LOAD,
and more.  Some of these are:

     @MTB0:x        The magnetic tape unit #0, x being a dumpfile on the
                    tape (x starts from 0).

     @DPJ           A diskette device name.

     @LFD           A generic labeled diskette file name.


The equivalent of a PATH (usually environment variable) in other systems
is called SEARCHLIST in AOS/VS.  When you call a command, or ask for
help, the CLI looks through your SEARCHLIST for the files.  So, assuming
you typed HELP MODEM, and somewhere in your searchlist there exists a
file called MODEM.CLI, HELP will show you,
modem           - Macro, File :UTIL:COMM:MODEM.CLI
The same goes for other commands, even TYPE (TYPE MODEM.CLI from
:UDD:HBT, if :UTIL:COMM is in your searchlist and there's no MODEM.CLI
in :UDD:HBT will work).

To display your searchlist, just use plain SEARCHLIST.  To change it,
use SEARCHLIST path,path,path ...

It's possible to set a password for your current CLI session.  This
password is not the password used upon login!  It's a password the user
sets to protect his session.  He then types LOCK, and from then, anyone
wishing to use the user's CLI (from the user's console), must enter the
password first.  Legal passwords are up to 32 characters long, not
including Ctrl characters.

The CLI offers several levels to the user.  It starts on the highest
level, 0, and the user may create other level, and use POP to move up a
level, and PUSH to go down a level.  When a user POPs to a level,
the CLI environment of the older (higher) level remains (the environment
of the level he was in until that time is therefore changed).  When he
PUSHes, the current level's environment is copied to the lower level.
To display the current CLI level, use LEVEL.  To display the level's
environment, use CURRENT.  To display an upper level's environment
(except when at the highest level), use PREVIOUS.

When you want to print a file, or run something in the background, you
have to submit it as a job.  The submit a printing job, use the QPRINT
command (will print the file).  To submit a batch job, which is for
executing a command, use QBATCH (for example, QBATCH MASM ASMPROG).

AOS/VS had a facility called "queues", managed by the EXEC program (see
"The 'EXEC' Program").  A queue is a place where file transfer, batch,
and printing jobs are stored until the right process can take them and
execute them.  The standard queues are:

          QUEUE NAME       JOB TYPE                 CONTENTS
          --------------+------------+----------------------------------
          BATCH_INPUT        Batch       Batch input files.
                                         Submitted by QBATCH or QSUBMIT.

          BATCH_OUTPUT       Printing    Output files from finished
                                         batch jobs (usually sent to a
                                         line printer).

          BATCH_LIST         Printing    List files from finished batch
                                         jobs (usually sent to a line
                                         printer).

              ((Batch jobs are submitted through QBATCH.))

          LPT                Printing    Print jobs submitted by QSUBMIT.

          MOUNTQ             Mount       Tape mount requests.
                                         Submitted by MOUNT.

After a job has been submitted, use QDISPLAY to show its status.  Use
QHOLD to hold jobs and QUNHOLD to release them.  Last, to display the
status of all queues, use QDISPLAY as well.

AOS/VS also has an extensive help facility.  For help on broad topics,
use HELP (to list topics) and then HELP *TOPIC.  For help on system
commands, use HELP COMMAND (for a list of switches) or HELP/V COMMAND for
more details.

CLI MACRO PROGRAMMING
~~~~~~~~~~~~~~~~~~~~

Macro filenames usually end with ".CLI" are usually text files (filetype
TXT).  A macro is a file that will be executed when called (adding .CLI
to the name when calling isn't necessary), and perform the commands (or
other macros) in it.  If the macro matches the name of a CLI command,
the macro must be called together with the .CLI part of its name.  Macros
expand arguments in the following way:

Range Arguments (like filenames):

%x%       Argument number x, with its switches.  %0% is the macro's
          name.
%-%       All the arguments, with their switches, except for %0%.
%x-y,i%   Arguments x through y, in jumps of i.  If x or i are missing,
          the CLI assumes 1.  If y is omitted, 32767 is assumed.  For
          example, if the arguments were "1 2 3 4 5 6 7", a %2-6,2% call
          expands to "2 4 6".

Switch Arguments:

%x/%      All the switches of argument x.
%x\%      Argument x, without its switches.
%x/y%     Argument x, with switch number y.
%x/y=%    The value of argument's x switch number y.
%x\y%     All the switches of argument x, including their values, except
          for switch number y.

Conditionals are used in the form of [CONDITIONAL,ARGS].  If a
conditional returns TRUE, the CLI executes everything after it until it
reaches an ELSE or an END.  Otherwise, it skips to an ELSE or an END
(basic programming).

!EQUAL    True if both arguments equal alphabetically.
!NEQUAL   True if both arguments don't equal alphabetically.
!UEQ      True if both arguments equal numerically.

These are called pseudo macros, and are usually built like conditionals,
although sometimes they just substitute for a part of the environment.
There are about 60 of them, but I'll only list a selected few for
brevity.

[!ACL path]         Expands for the ACL of path.
[!ASCII octnum]     Expands to the ASCII character with the octnum octal
                    number.  For example, newline is octal 12.
[!CLI]              Expands to CLI32 or CLI16, according to the CLI.
[!DATE]             Date, like 01-Jan-93.
[!SYSTEM]           Expands to the type of OS.
[!SEARCHLIST]       Expands to the search list.
[!LEVEL]            Expands to the current CLI level.
[!CLI]              Expands to the CLI type.
[!EXPLODE args]     Puts a comma between each pair of character in args.
                    When used with STRING, in converts spaces and tabs
                    too.  When used with WRITE, in converts into space.
[!LISTFILE]         Expands to the path of the listfile.
[!USERNAME]         Expands to the username of the person running the
                    macro.
[!LOGON]            Returns CONSOLE if logged on to a terminal or BATCH
                    if logged in on a batch stream (only works for EXEC
                    logons).
[!DATAFILE]         Expands to the path of the datafile.
[!HID [host]]       Returns the host ID.  With [host] return the host ID
                    of [host].
[!HOST [host]]      Returns the host name.
[!STRING]           Expands to the value of the CLI string.

A more complex pseudo macro is !READ:
[!READ[/args] text]

!READ prints text to the output and then expands to what was received
from the input (which is considered finished when a newline is
received).  !READ's args are functional only under CLI32 and are:

/EOF=str

          The string that will be returned if EOF is met.

/FILEID=file

          Reads from file instead of @OUTPUT.  The file must be already
          opened using OPEN.

/LENGTH=x

          Read until x characters were typed.

/S

          Discards all typed after a semicolon (';') or a left bracket
          ('[').  Otherwise, that text must be a valid CLI command or
          macro, or a pseudo macro or macro ending with a right bracket
          if following the left bracket.

Note that all pseudo macros, including !READ can be used at the command
line and not just in CLI macro files.


Here's an example:

COMMENT -------------------------------------------------
COMMENT Examples of the use of conditionals and arguments
COMMENT in macros.
COMMENT This macro was invoked like this:
COMMENT HMAC 9 0 000
COMMENT -------------------------------------------------

[!EQUAL,%1%,]
     WRITE,,,,Execute with arguments please!
[!ELSE]
     [!EQUAL,%2%,%3%]
          WRITE,,,,%2% and %3% do match ALPHABETICALLY.
     [!ELSE]
          WRITE,,,,%2% and %3% don't match ALPHABETICALLY.
     [!END]
     [!UEQ,%2%,%3]
          WRITE,,,,%2% and %3% do match NUMERICALLY.
     [!ELSE]
          WRITE,,,,%2% and %3% don't match ALPHABETICALLY.
     [!END]
     [!UEQ,%1%,%2%]
          WRITE,,,,%1% and %2% do match NUMERICALLY.
     [!ELSE]
          WRITE,,,,%1% and %2% don't match NUMERICALLY.
     [!END]
[!END]

COMMENT -------------------------------------------------
COMMENT The output would be:
COMMENT 0 and 000 don't match ALPHABETICALLY.
COMMENT 0 and 000 do match NUMERICALLY.
COMMENT 9 and 0 don't math NUMERICALLY.
COMMENT -------------------------------------------------

[!EQUAL,[!READ What's your name?,,],HBT]
     WRITE,,,,[!ASCII 12]You're HBT.
[!ELSE]
     WRITE,,,,[!ASCII 12]You're not HBT.
[!END]

[!EQUAL,[!CLI],CLI16]
     WRITE,,,,[!ASCII 12]I was going to show you something else.
     WRITE,,,,Too bad you're using CLI16 which won't let READ take arguments.
[!ELSE]
     STRING [!READ/LENGTH=1 Continue? (Y/N)]
     [!EQUAL,[!STRING],N]
          WRITE,,,,[!ASCII 12]Good man [!USERNAME].
     [!ELSE]
          [!EQUAL,[!STRING],Y]
               WRITE,,,,[!ASCII 12]Too bad Mister I-Use-[!SYSTEM]
          [!ELSE]
               WRITE,,,,[!ASCII 12]Learn English guy.
          [!END]
     [!END]
[!END]
WRITE,,,,Thank you for using %0%.

AOS/VS can also be programmed in 16 bit and 32 bit Assembly (and
compiled using MASM), BASIC, Fortran, C, Pascal and probably others.

This second program is actually quite simple.  I do not even read the
UPF type file directly; I just feed text into the PREDITOR (see the next
section).

COMMENT -------------------------------------------------
COMMENT Delete the little help screen if you are under
COMMENT CLI16.  Or just run CLI32.
COMMENT -------------------------------------------------

[!EQUAL,%1%,]
     WRITE,,,,[!ASCII 12]Format is: %0%/A NAME
     WRITE,,,,,,,,,,,,or      /L NAME
[!ELSE]
     [!EQUAL,%1%,]
               WRITE,,,,,,,Which user exactly?
     [!ELSE]
          [!NEQUAL,%0/L%,]
               WRITE/L=?USER.TMP  L
               WRITE/L=?USER.TMP  %1%
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP  b
               PROC/DEF/IOC/IN=?USER.TMP/BLOCK PREDITOR
               DEL ?USER.TMP
          [!ELSE]
               WRITE/L=?USER.TMP  c
               WRITE/L=?USER.TMP  %1%
               WRITE/L=?USER.TMP  y
               WRITE/L=?USER.TMP  %1%
               WRITE/L=?USER.TMP  n
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP
               WRITE/L=?USER.TMP  b
               PROC/DEF/IOC/IN=?USER.TMP/BLOCK PREDITOR
               DEL ?USER.TMP
          [!END]
     [!END]
[!END]

SYSTEM SECURITY
~~~~~~~~~~~~~~

The AOS/VS login is performed in the following manner.

Every username has a file associated with it in the :UPD directory.
That file is its profile, and contains the account profile.  Once the
user has entered a correct username/password pair, the operating system
loads the user's profile (which includes how much memory and disk space
the user is allowed to use and the user's allowed privileges) into its
internal tables.  Several privileges which can be set are the initial
user directory and initial program that will be executed upon completion
of the login (eg, the CLI); how many processes the user may run; what
process priorities the user has; and what SUPER privileges the user has
(eg, SUPERUSER, SUPERPROCESS).

As mentioned, if the user has SUPER privileges, he must activate them
himself (using the right command, or PRIVILEGE if using CLI32).

An important thing to know about password security is that if the system
is running Data General's XODIAC networking software, user's might not
be able to access remote machines through the network if the passwords
are encrypted.  Therefore, if you are on a XODIAC host, chances are the
passwords won't be encrypted.  The ACL of the :UPD directory doesn't let
every user can access it, though.

Passwords are changed by the user by pressing Ctrl-L immediately after
entering the password at login.  This will only work for users that have
the privilege to set their own passwords.  Legal passwords are 6 to 15
characters.

This the format (the fields) of the AOS/VS profiles:

* Password
* Initial program          To be executed after login
* Initial IPC file         The LOGON file
* Initial directory
* Default user priority    The user's process priority
* Maximum queue priority   The highest queue priority which the user can
                           set for a batch job.  The lower the number, the
                           higher the priority (1-255).
* Unlimited son processes
* Maximum son processes    If the above option if off.
* Disk quota in blocks
* Logical address space    Allows the user to control the size of the
(batch)                    logical address space in which his programs
                           will be executed.  If -1, the system sets.
* Minimum working set      The minimum number of pages a user can have in
(batch)                    their active processes.  If -1, the system
                           determines the value according to the program's
                           demands.
* Maximum working set
(batch)
* Logical address space
(non batch)
* Minimum working set
(non batch)
* Maximum working set
(non batch)
* Encrypt password
* Superuser
* Superprocess
* Use IPC                  Allows the user to make IPC calls.
* Use console
* Use batch
* Use virtual console      Virtual consoles are created by networked
                           logins.
* Use modem                A modem is a console with the characteristic of
                           /MOD on.
* Change password
* Change priority
* Change type
* Change username          Allows user to become another username without
                           actually logging in into that user's profile.
* Access devices           Allows user to directly issue Assembly
                           instructions to devices.
* Create without block     Allows the user to start a son process without
                           blocking the father process.
* System manager privileges
* Access local devices remotely
* Change addr. space type  Allows 32 bit processes to be called from 16
                           bit processes (usually on, since there is a
                           CLI16, but most programs are 32 bit).
* Change working set limit Allows user to change the working set size of
                           programs.
* Comments

User profiles can be created, deleted, read, and modified from the
AOS/VS User Profile Editor: PREDITOR.  PREDITOR gives you a prompt
from which you can read any account and the values of its fields.
PREDITOR does not, however, display the password field, whether it's
encrypted or not -- just an indication of what the Encrypt Password
field is set to.  This is easily overcome, since if you can execute the
PREDITOR, you can just as well SED the :UPD:USERNAME file and look at
the password (it's right up there) -- PREDITOR can only be loaded by a
user that can become Superuser.

Legal commands for the PREDITOR are Create, Delete, Edit, List,
Question, Rename, and Use.  They can all be abbreviated to their first
letter.  When CREATE is called, it first asks if you want to set the
password, and depending on the answer asks you to enter a password.  It
then queries about the other fields, giving you three options (usually):
YES, NO, and NL, the system's default.  DELETE just asks for a
confirmation on deleting the user, and also his home directory.  EDIT is
just like CREATE, allowing you to modify any field in the user's profile
(including the password).  LIST lists the status of every field in the
profile (by using a template profile, such as '+', one could view every
user on the system).  QUESTION sets the system defaults, which will later
be used by CREATE and EDIT.  RENAME allows you to rename a user to another
name, and USE changes the value in the !DEFAULT variable (your username).

Logins are handled by a program called EXEC (that's what the EXEC-32
x.xx.xx.xx part in the login message means).  EXEC just reads the
username/password and if correct, logs the user in.  After EXEC has been
completed, the Initial Program from the profile is run.  The commands for
logins are CONTROL @EXEC DISABLE and ENABLE.  See "The 'EXEC' Program"
for more information about EXEC.

When using ENABLE, the console receives login capabilities; apart from
actually logging in, EXEC will also display :UTIL:LOGON.BANNER.SCREEN.

ENABLE
------

/ALL      Gives all the consoles the said capabilities.

/TRIES=x  Sets maximum login tries to x.

/STOP     This will have the same result as if an operator issued
          CONTROL @EXEC DISABLE <console> after the maximum login tries
          was exceeded.

/CONTINUE

          Lock console for 10 seconds and then continue.

/FORCE    Change the other parameters while the console is enabled.


SYSTEM COMMANDS
~~~~~~~~~~~~~~

Every command has its own switches.  However, all commands accept the
/1, /2, /L and /Q switches (and /STR=string and /ESTR=string under
/CLI32).

/1=ERROR|ABORT|IGNORE|WARNING
/2=WARNING|ERROR|ABORT|IGNORE

          Controls what the program will do under a class 1 or 2 error.
          The first option listed is the default.  ERROR displays
          "Error: something" and stops command execution.  ABORT aborts
          the command.  IGNORE ignores the error, and WARNING displays
          "Warning: something" and continues with the command.

/L=path   The command will store all its output in 'path'.

/Q        Display output in columns with on space separating them (an
          exception to this switch is TYPE).

/STR=string
/ESTR=string

          The command will store its output in the 'string' string
          variable, which can be viewed later using the STRING command.
          If there is no output or the command is TYPE or COPY the string
          is set to null.  /ESTR is for error output, /STR is for
          regular output.

Some important AOS/VS commands are listed next.  I included information
about the DUMP and LOAD commands for information purposes only; as they
require diskettes, I don't think you'll use them daily.  However, I
didn't go into diskette handling, etc in detail.

Sorted alphabetically:


ACL <path>
----------

ACL is a utility to control the ACL (Access Control List).  An ACL is
just what is sounds like: it includes a list of usernames and what kind
of access they have to the file.  ACL used one-letter access code, as
follows.

         LETTER                 TYPE/FILE                    TYPE/DIR
      -----------+---------------------------------+------------------------
       A(ppend)     Append to a file.                 Create files in the
                                                      directory or move files
                                                      into it.

       E(xecute)   Execute the program.               Allows access to
                                                      the directory
                                                      (changing into it,
                                                      reading, etc).

       O(wner)      Allows the user to change the ACL or erase the file/dir.

       R(ead)       Read a file.                      List the files in
                                                      the directory.

       W(rite)      Write to a file.                  Create, delete or
                                                      change ACLs of files
                                                      in the directory.

The default ACL for any file is OWARE for the user.

ACL <path> shows the ACL.  To modify the ACL:

ACL <path> [user,access] [...]

Access being one of the OWARE group, for example:

ACL PHRACK43 HBT,OWARE       (There is NO space between 'username' and
                             'access'!)

ACL PHRACK42 HBT,OWARE +,R   (In this example, the '+' template was
used, '+' standing for all the users.  This means that HBT has full
access to the file, while the rest of the users can only read it.
If templates are used, they should be used last, with specific usernames
before them.)

Under CLI32 group access is also available in the format of:

ACL <path> [user:group,access] [...]

Switches:

/[BEFORE|AFTER]/[TCR|TLA|TLM]=date and/or time

/TYPE=type

          These function just like the same switches in FILESTATUS.

/D        Use the default settings (OWARE).  Defaults may be changed
          using DEFCAL.

/K        Delete ACL - no one but a superuser will be able to access the
          file.

/V        Show each file changed.


BROWSE
------

BROWSE is a program to browse (view, search, scroll in any direction)
through any number of ASCII or binary files.  While in BROWSE help is
available by using 'H' or '?'.  BROWSE starts at the end of file and
lets you move backward (but you can change this).

No further details are included since BROWSE can run only on CRT
terminals (the actual terminals the employees usually sit at), and I
didn't have the pleasure of using one of these (nor do I think will the
information be of any use).


CHARACTERISTICS
---------------

CHARACTERISTICS displays or sets the characteristics of a device
attached to a terminal (not a printer, for example).  To change
characteristics of a device permanently and not just for the current CLI
level, you must be PID 2 (local console) or have SYSTEMMANAGER privilege
on.  To this, you must use EXEC first to DISABLE the device, use
CHARACTERISTICS, and then use EXEC to ENABLE the device (see the section
titled "The 'EXEC' Program").  The CHARACTERISTICS switch will be
/DEFAULT/[default device characteristics] device.  "device" for example,
is @CON100.

CHARACTERISTICS switches look like this:
CHARACTERISTICS /[ON|OFF]/SWITCH.  It's self explanatory.

/8BT

          Interpret all 8 bits of an ASCII char as data.  (For use with
          8 bit character sets, of course.)

/16B      For Asian language translation.

/4010I    Device is a DG model 4010I terminal.

/6012     Device is a DG model 6012 terminal.

/605X     Device is a DG DASHER model 6052, 6053, D210 or D211 terminal.

/6130     Device is a DG DASHER model 6130, D410 or D460 terminal.

/ACC      Line requires modem access control (only users with the Use
          Modem privilege may login).

/AUTOBAUD

          The system will automatically determine the terminal's baud
          (it's bps, damnit!) rate.

/BAUD=b

          Sets a device's bps rate to b.  b can be 45.5, 50, 75, 110,
          134.5, 150, 300, 600, 1200, 1800, 2400, 3600, 4800, 7200,
          9600, 19200, 38400.

/BREAK=[BMOB|CAOB|CBOB|CFOB|DCOB]

          How the system will respond to a BREAK:
          BMOB (default) Clears binary mode and restore normal character
                         handling
          CAOB           Issues Ctrl-C Ctrl-A
          CBOB           Issues Ctrl-C Ctrl-B
          CFOB           Issues Ctrl-C Ctrl-F
          DCOB           Disconnect user

/CALLOUT  Allow host initiated calls (outside calls).

/CHARLEN=[5|6|7|8]

          Character length in bits, *including* stop bit.

/CONTYPE=connection type

          Connection types are:
          BITMAPPED      Windowing terminal
          DIRECT         Standard connection
          PAD            From PAD hardware
          PBX            From a PBX controller
          PCVT           From a DG/PC*i controller
          TERMSERVER     From terminal server hardware
          TELNET         Through telnet
          VIRTUAL        Through a virtual terminal

/CPL=[8-255]

          The maximum number of characters per line.

/CTD      Disconnect line if the user doesn't respond to login after a
          while.

/DEFAULT  Displays the default characteristics of the terminal.

/DKHW     If OFF, and /16B and /8BT are on, enable support for Chinese
          characters.

/EB0      Specify the echoing of control characters.
/EB1      When both off, nothing is echoed.
          When EB0 is on and EB1 is off, echos ^char.
          When EB0 is off, and EB1 is on, echos exactly what was entered.

/EOL      Don't output a newline if the number of characters in input
          has exceeded the line length.

/ESC      Interpret an escape as a Ctrl-C Ctrl-A interrupt.

/FF       Output a formfeed when the device opens.

/G1G0     Enables the G1G0 character set (Taiwanese characters).  /16B
          and /8BT must also be ON.

/HARDCOPY Device is a printing terminal.

/HDPX     Provide half duplex support for a modem line.

/HIFC     Use CTS/RTS input flow control, cannot be on if /HDPX or /MOD are
          on.

/HOFC     Use CTS/RTS output flow control.

/IFC      Enables XON/XOFF to control terminal input (the Ctrl-S/Ctrl-Q
          control characters).

/LEVEL=x  Sets characteristics to the same as those in CLI level #x.

/LPP=[4-255]

          The number of lines per page.

/MDUA     Allows direct access to the modem on the line (/MOD must also
          be set).  You can then use ?WRITE to send commands to the
          modem.  See the section titled "CLI Macro Programming".

/MOD      Use modem interface on this line.

/MRI      Monitor line for rings.

/NAS      Device is non ANSI standard.

/NLX      Enable Asian natural language translation.  /16B and /8BT must
          also be ON.

/NRM      Suppress messages (from SEND) not sent from PID 2 (something
          like "mesg n" in Unix).

/OFC      XON/XOFF output flow control.

/OTT      Convert characters sequence "~}" to an escape (use with VT100
          emulation, or how will you escape).

/P        Sets the characteristics to be the same as those used on the
          previous CLI level.

/PARITY=[ODD|EVEN|NONE]

          Default is NONE.

/PM       Enable page mode, which pauses output every LPP lines (as set
          with the /LPP switch, default is 24).  Ctrl-Q resumes.

/RESET    Reset characteristics to the default value.

/RTSCD    Check carrier detect before processing RTS signals.  /HDPX
          must be ON.

/SFF      Simulate formfeeds.

/SMCD     Ignore carrier detect on modem lines.  /MOD and must be ON,
          and this must be set if /HPDX is ON.

/ST       Simulate a tab every 8 columns.

/STOPBITS=[1|1.5|2]

/TCC=[time to wait for a carrier detect signal after the modem connect]

          Default is 40000 ms.

/TCD=[time to wait for a carrier detect signal to return after it drops]

          Default is 5000 ms.

/TDW=[delay between modem connect and the first I/O]

          Default is 2000 ms.

/THC=[the amount of time after disconnecting for the modem to settle]

          Default is 10000 ms.

/TLT=[time to wait between sending the last char and dropping RTS]

          Default is 0 ms.  /HPDX must be ON.

/TO       Enable timeouts.

/UCO      Convert lowercase input to uppercase when displaying it.

/ULC      Accept both uppercase and lowercase as input.

/WRP      Wrap on a long line.

/XLT      Enable VT100 terminal emulation.

Knowledge is knowledge, but AT&T is something different.  Here is how
you'd open a modem line for calling out:  (You must be SYSTEMMANAGER)

CLEARDEVICE/RXON @CON999
CONTROL @EXEC DISABLE @CON999
CHARACTERISTICS/ON/MOD/MDUA/CTD/CALLOUT @CON999
CONTROL @EXEC ENABLE @CON999
((And here's how you put it back))
CLEARDEVICE/RXON @CON999
CONTROL @EXEC DISABLE @CON999
CHARACTERISTICS/DEF @CON999
CONTROL @EXEC ENABLE @CON999


CLEARDEVICE <device>
--------------------

You must be PID 2 (local console) or have SYSTEMMANAGER privileges
turned on to use CLEARDEVICE on a terminal that isn't yours.  <device>
must be a terminal line (eg, @CON100).

/RXON     Simulates a XON character from the device.

/SBREAK   Sends a break character to the device.
 
