Das MSGTAC-Teilprogramm NOHACK zählt die Anzahl der Fehlversuche in einem TLS. Wenn openUTM ein KDCSIGN akzeptiert (d.h. Meldung K008 oder K033), so wird dieser TLS wieder gelöscht.
Falls nach drei ungültigen KDCSIGN-Versuchen der 4. KDCSIGN-Versuch wieder fehlerhaft ist, so soll das entsprechende Terminal über "asynchrone Administration" diskonnektiert werden, und zwar per FPUT-Aufruf mit KCRN="KDCPTRMA". Der Nachrichtenbereich enthält die Parameter des Administrationskommando KDCPTRMA, siehe auch openUTM-Handbuch „Anwendungen administrieren“:
PTERM=pterm, PRONAM=prozessor,ACT=DIS
Das Administrationskommando wird dann mit LPUT in der Benutzer-Protokolldatei protokolliert und der TLS gelöscht.
Die K-Meldungen werden jeweils mit FGET vom MSGTAC-Teilprogramm gelesen. Nach der "Verarbeitung" einer K-Meldung wird mit FGET sofort die nächste K-Meldung gelesen, innerhalb desselben Teilprogrammlaufs.
IDENTIFICATION DIVISION.
PROGRAM-ID.
MSGTAC.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY KCOPC.
77 ID-HACK-TLS PIC X(8) VALUE "TLSHACK".
77 HACK-MAX PIC 9(4) COMP VALUE 3.
01 ADM-SATZ.
02 ADM-TXT.
03 F PIC X(07) VALUE "PTERM=(".
03 F PIC X(08).
03 F PIC X(09) VALUE "),PRONAM=".
03 F PIC X(08).
03 F PIC X(11) VALUE ",ACTION=DIS".
01 UTM-FEHLER-ZEILE.
03 F PIC X(18) VALUE "Error in prog. unit".
03 F-MODUL PIC X(08) VALUE "NOHACK".
03 F PIC X(12) VALUE "; Vorg./TAC".
03 F-VG PIC X(08).
03 F PIC X(01) VALUE "/".
03 F-AL PIC X(08).
03 F PIC X(05) VALUE " wg.".
03 F-OP PIC X(04).
03 F PIC X(07) VALUE " (RC:".
03 F-RC PIC X(08).
03 F PIC X(01) VALUE ")".
LINKAGE SECTION.
COPY KCKBC.
05 FILLER PIC X.
COPY KCPAC.
COPY KCMSGC.
03 NB.
05 HACKER-LTERM PIC X(8).
05 NB-ADM.
07 F PIC X(07).
07 PTRM PIC X(08).
07 F PIC X(09).
07 PRNM PIC X(08).
07 F PIC X(11).
05 TLS-HACK.
07 HACK-ANZ PIC 9(4) COMP.
PROCEDURE DIVISION USING KCKBC, KCSPAB.
MAIN SECTION .
INIT-ANF.
MOVE LOW-VALUE TO KCPAC
MOVE INIT TO KCOP
MOVE 0 TO KCLKBPRG
COMPUTE KCLPAB = FUNCTION LENGTH (KCSPAB)
CALL "KDCS" USING KCPAC.
IF KCRCCC NOT = ZERO
THEN GO TO PEND-LPUT.
FGET-ANF.
MOVE LOW-VALUE TO KCPAC
MOVE FGET TO KCOP
COMPUTE KCLA = FUNCTION LENGTH (KCMSGC)
MOVE SPACE TO KCMF
CALL "KDCS" USING KCPAC, KCMSGC
IF KCRCCC NOT = ZERO
THEN
IF KCRCCC = "10Z"
THEN
GO TO PEND-ANF
ELSE
GO TO PEND-LPUT.
IF MSGNR = "K004"
* Invalid identification *
MOVE LTRM OF K004 TO HACKER-LTERM
ELSE IF MSGNR = "K006"
* Invalid password *
MOVE LTRM OF K006 TO HACKER-LTERM
ELSE IF MSGNR = "K008"
* KDCSIGN accepted *
MOVE LTRM OF K008 TO HACKER-LTERM
ELSE IF MSGNR = "K031"
* Card not ok *
MOVE LTRM OF K031 TO HACKER-LTERM
ELSE IF MSGNR = "K033"
* if no K008 is generated *
MOVE LTRM OF K033 TO HACKER-LTERM
ELSE
MOVE MSGNR TO KCOP
GO TO PEND-LPUT.
PERFORM ARBEIT
IF KCRCCC NOT = ZERO
GO TO PEND-LPUT.
* More messages waiting ?? *
GO TO FGET-ANF.
PEND-ANF.
MOVE LOW-VALUE TO KCPAC
MOVE PEND TO KCOP
MOVE "FI" TO KCOM
CALL "KDCS" USING KCPAC.
PROG-ENDE.
EXIT PROGRAM.
PEND-LPUT.
MOVE KCOP TO F-OP
MOVE KCTACVG TO F-VG
MOVE KCTACAL TO F-AL
MOVE KCRC TO F-RC
MOVE LOW-VALUE TO KCPAC
MOVE LPUT TO KCOP
COMPUTE KCLA = FUNCTION LENGTH (UTM-ERROR-LINE)
CALL "KDCS" USING KCPAC, UTM-ERROR-LINE.
MOVE LOW-VALUE TO KCPAC
MOVE PEND TO KCOP
MOVE "FI" TO KCOM
CALL "KDCS" USING KCPAC.
M9.
EXIT.
/
ARBEIT SECTION .
A0.
MOVE LOW-VALUE TO KCPAC
MOVE GTDA TO KCOP
MOVE 2 TO KCLA
MOVE ID-HACK-TLS TO KCRN
MOVE HACKER-LTERM TO KCLT
CALL "KDCS" USING KCPAC, TLS-HACK
IF KCRCCC NOT = ZERO
GO TO A9.
IF KCRLM = 0
THEN
IF MSGNR = "K008"
OR = "K033"
THEN
* Ok, no TLS exists *
NEXT SENTENCE
ELSE
* Create TLS *
MOVE LOW-VALUE TO KCPAC
MOVE PTDA TO KCOP
MOVE 2 TO KCLA
MOVE 1 TO HACK-NO
MOVE ID-HACK-TLS TO KCRN
MOVE HACKER-LTERM TO KCLT
CALL "KDCS" USING KCPAC, TLS-HACK
ELSE
IF MSGNR = "K008"
OR = "K033"
THEN
* Ok; delete TLS *
MOVE LOW-VALUE TO KCPAC
MOVE PTDA TO KCOP
MOVE 0 TO KCLA
MOVE ID-HACK-TLS TO KCRN
MOVE HACKER-LTERM TO KCLT
CALL "KDCS" USING KCPAC, TLS-HACK
ELSE
PERFORM CHECK-NO.
A9.
EXIT.
/
PRUEF-ANZ SECTION .
P0.
ADD 1 TO HACK-NO
IF HACK-NO NOT > HACK-MAX
THEN
* Try it once more *
MOVE LOW-VALUE TO KCPAC
MOVE PTDA TO KCOP
MOVE 2 TO KCLA
MOVE ID-HACK-TLS TO KCRN
MOVE HACKER-LTERM TO KCLT
CALL "KDCS" USING KCPAC, TLS-HACK
GO TO P9.
* Disconnect !! *
MOVE ADM-TXT TO NB-ADM
IF MSGNR = "K004"
MOVE CORR K004 TO NB-ADM
ELSE IF MSGNR = "K006"
MOVE CORR K006 TO NB-ADM
ELSE
MOVE CORR K031 TO NB-ADM.
P-FPUT.
MOVE LOW-VALUE TO KCPAC
MOVE FPUT TO KCOP
MOVE "NE" TO KCOM
MOVE "KDCPTRMA" TO KCRN
COMPUTE KCLM = FUNCTION LENGTH (NB-ADM)
MOVE SPACE TO KCMF
MOVE ZERO TO KCDF
CALL "KDCS" USING KCPAC, NB-ADM
IF KCRCCC NOT = ZERO
GO TO P9.
P-LPUT.
* Write to user log *
MOVE LOW-VALUE TO KCPAC
MOVE LPUT TO KCOP
COMPUTE KCLA = FUNCTION LENGTH (NB-ADM)
CALL "KDCS" USING KCPAC, NB-ADM
IF KCRCCC NOT = ZERO
GO TO P9.
P-PTDA.
* Delete TLS *
MOVE LOW-VALUE TO KCPAC
MOVE PTDA TO KCOP
MOVE ZERO TO KCLA
MOVE ID-HACK-TLS TO KCRN
MOVE HACKER-LTERM TO KCLT
CALL "KDCS" USING KCPAC, TLS-HACK.
P9.
EXIT.
Das obige Beispiel des MSGTAC-Teilprogramm zeigt lediglich die Möglichkeiten auf, wie Meldungen geeignet ausgewertet und die Anwendung administriert werden kann.
Zur Überwachung von Sicherheitsverletzungen sollte jedoch die K094-Meldung genutzt werden (SIGNON SILENT-ALARM), da hier auch UPIC- und OSI TP-Clients eingeschlossen sind. Außerdem kann die UTM-Anwendung umfassender über die programmierte Administration (ADMI-Schnittstelle) administriert werden.