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.