I finally finished some initial code for the access control job (ACJ) to detect and report spying. The
documentation and monitor code for TLINK%
were confusing enough that I initially just write wrote some code
to break out what was being sent so I could figure out how it all
worked. Some random things I found of note:
When a job is first created and the EXEC
is getting cranked up, it calls TLINK%
called to refuse links, viz:
9-Apr-2022 18:06:21 ACJ: TLINK% SAB:CLR Obj:-1 by job 10, user not logged in user, program , TTY46
The -1 argument for the object means, "My Terminal", in this case
TTY46 is being conditioned to
refuse links. On a batch login, I refuse links and advice, as can
be seen by the below:
8-Apr-2022 23:29:18 ACJ: TLINK% STA:CLR Obj:-1
by job 11, user SLOGIN, program TERMIN, TTY21
8-Apr-2022 23:29:18 ACJ: TLINK% SAB:CLR Obj:-1 by job
11, user SLOGIN, program TERMIN, TTY21
The EXEC commands which did this are:
Terminal (feature or type) NO Receive Advice
Terminal (feature or type) NO Receive Links
The batch job in question was MONGEN,
because I'm in the middle of tweaking a few things in the TLINK% JSYS
code to make my life easier in the ACJ. Since I'm impatient, from
the following you can see that I did an ^Epeek
to watch the batch job execute:
8-Apr-2022 23:29:21 ACJ: TLINK% ERO Obj:-1
Rem:21 by job 10, user SLOGIN, program EXEC, TTY46
The regular (non-debugging) code which displays this is less nerdy
and maybe easier on the eyes, viz:
8-Apr-2022 23:29:21 ACJ: SPYING: user SLOGIN,
Job 11, TTY21 by job 10, user SLOGIN, program EXEC, TTY46
Maybe I'll put in some extra code to break out whether one of
them is batch or the line type. Or something.
Right now, I'm just making the JSYS code in TTYSRV easier for me to work with. Some of it dates back to TENEX days and it's been modified to the extent that I found it confusing to work with (but that's me).
The actual problem is that the GETOK% is called before the arguments are resolved. It is not explicitly laid out in the JSYS reference manual that, unlike the first terminal argument (which must be a terminal designator), the second can be a JFN, which is worthless outside of job context. So it needs to get converted to a line number before it gets handed to the ACJ.