Wenn Benutzerprogramme sicherheitsrelevante Daten verarbeiten, müssen sie gegen unkontrollierte Eingaben von Kommandos gesichert werden. Dieser Schutz muss in allen Ein-gabe-Modi (bei Vordergrund- und Hintergrund-Prozeduren) gewährleistet sein. Darum muss in den Programmen selbst diese Einstellung vorgenommen werden, wenn sie sicherheitskritische Teile enthalten. Man nennt dies auch expliziten Programmschutz. Dieser wird durch den Makroaufruf CLISET aktiviert. (Siehe dazu auch Kapitel „Programmschnittstellen“.) Damit sind die Programme selbst verantwortlich für Aufrufe wie CMD, BKPT, -STXIT etc., wenn sicherheitsrelevante Informationen verarbeitet werden.
Annahme und Zurückweisung von Ereignissen
Programm | nicht unterbrechbar | unterbrechbar | |
Prozedur | beliebig | nicht-unterbrechbar | unterbrechbar |
Taste | z | z | a |
K2-STXIT | a,ze | a,zi | a |
CMD-Makro | a,ze | a,zi | a |
BKPT-Makro | a,ze | a,zi | a |
andere Makros | a,ze | a,zi | a |
//EXEC-SYS-CMD | z | c | a |
//HOLD-PROGRAM | z | c | c |
/HOLD-PROGRAM | z* | a* | a* |
Erklärung:
a: | vom System angenommen |
ze: | soll vom Programm bei expliziten Programmschutz zurückgewiesen werden (CLISET) |
zi: | soll vom Programm bei impliziten Programmschutz zurückgewiesen werden (CLIGET) |
z: | vom System zurückgewiesen |
c: | vom System zurückgewiesen, wenn SYSSTMT ungleich SYSCMD ist |
a*: | vom System als Daten betrachtet, wenn SYSSTMT bzw. SYSDTA ungleich SYSCMD ist. Ansonsten wird es vom System angenommen. |
z*: | vom System als Daten betrachtet, wenn SYSSTMT bzw. SYSDTA ungleich SYSCMD ist. Ansonsten wird es vom System zurückgewiesen. |
ze und zi sind unter Programmverantwortung.
Zurückweisungen von Ereignissen
- -Unterbrechung wird einfach ignoriert, die Prozesse laufen ohne Beeinträchtigung weiter.
/HOLD-PROGRAM, //HOLD-PROGRAM und die Einstellung PROGRAM-INPUT= *MIXED-WITH-CMD geben EOF an das Programm zurück.
//EXECUTE-SYSTEM-COMMAND wird zurückgewiesen und Spin-Off wird für Anweisungen aktiviert.
//HOLD-PROGRAM wird in jedem Fall zurückgewiesen, wenn SYSSTMT nicht SYSCMD zugewiesen ist.
Koexistenz verschiedener Schutzmodi
Die beiden Schutzmodi (implizit und explizit) sind zwei voneinander zu unterscheidende Funktionen. Sie koexistieren und überschneiden sich bei einigen Ereignissen.
Ein Schutzmodus kann nicht vererbt werden. Trotzdem gibt es dazu äquivalente Effekte, die die Verwendung des Begriffs Vererbung sinnvoll erscheinen lassen.
Denn
expliziter Programmschutz beinhaltet impliziten Programmschutz,
impliziter Programmschutz beinhaltet Prozedurschutz
Prozedurschutz beinhaltet impliziten Programmschutz. Allerdings nur, wenn dieser Schutz vom Programm durch den Makroaufruf CLIGET selbst geleistet wird.
Hinweise
Da der explizite Programmschutz durch einen SVC realisiert wird, kann das Programm im Kommandomodus mit
unterbrochen werden, bevor der SVC ausgeführt wird: während der Ausführung von LOAD-/START-EXECUTABLE-PROGRAM (bzw. LOAD-/START-PROGRAM) gedrückt wird.
Wenn in einem Programm vermieden werden soll, dass ein SVC durch Drücken von unterbrochen wird, muss eine STXIT-Routine vorhanden sein, die das -Unter-brechungsereignis abfängt.Um zu vermeiden, dass der SVC durch Testfunktionen (z.B. AID) abgebrochen wird, muss das Programm vor Lesezugriff geschützt werden. In diesem Fall ist nach Drücken der Taste
nur noch das Kommando RESUME-PROGRAM erlaubt.Der explizite Programmschutz kann auch im Nicht-Prozedurmodus (bei Vordergrund- wie Hintergrundprozessen) eingestellt werden.
Der implizite Programmschutz ist nur im Prozedurmodus relevant. Im Nicht-Prozedurmodus kann diese Option nicht eingestellt werden.
Wenn Programme impliziten Programmschutz unterstützen, sind mehrere unterbrechungsrelevante Aktionen - im Einklang mit der Prozedureinstellung bei INTERRUPT-ALLOWED - untersagt. Kompatibles Verhalten muss darum in den Programmen selbst richtig eingestellt sein.
Impliziter Programmschutz kann in der Prozedur durch einen Schalter, eine Programmanweisung oder eine Parameterdatei aktiviert werden.
Um das Programmschutzverhalten zu sichern, sollten Programme vor jeder unterbrechungsrelevanten Aktion (CMD, STXIT, BKPT etc.) die Prozedureinstellung INTERRUPT-ALLOWED abfragen.
Eine Prozedur kann bei Vordergrundprozessen beendet werden, während ein Programm durch /HOLD-PROGRAM bzw. //HOLD-PROGRAM unterbrochen ist. In diesem Fall kann das Programm den impliziten Unterbrechungsschutz wieder zurückstellen, indem es fortwährend die CLIGET-Schnittstelle abfragt, bevor es eine unterbrechungsrelevante Aktion veranlasst.
Der implizite Programmschutz gegen Unterbrechungen muss in der Programmbeschreibung dokumentiert werden. Wenn dies nicht der Fall ist, soll die Verwendung des Programms in nicht-unterbrechbaren Prozeduren erfasst werden.
Eine Prozedur kann gegen Unterbrechung durch ein prozedurinternes Programm geschützt werden, das in einer
-STXIT-Routine den Makro BKPT aufruft. Es können SDF-P Programmfunktionen benutzt werden, um die Unterbrechung abzufangen und das Programm erneut zu starten.
Beispiel
/SET-PROCEDURE-OPTIONS INTERRUPT-ALLOWED=*NO /ASSIGN-SYSOUT TO=*DUMMY "Kein Einfluss auf EDT bei write-read" /DECLARE-VARIABLE OPS(TYPE=*STRUCTURE),- /MULTIPLE-ELEMENTS=*LIST /LOAD-EXE FROM-FILE=*LIB(LIB=&(INSTALLATION-PATH( - /LOGICAL-ID='EDT', - /INSTALLATION-UNIT='SYSLNK', - /VERSION=*STD, - /DEFAULT-PATH-NAME='EDT')), - /ELEM=EDTSTRT,TYPE=L) /EXECUTE-CMD CMD=(SHOW-JOB-STATUS),TEXT-OUTPUT=*NONE,- /STRUCTURE-OUTPUT=OPS,RETURNCODE=*NONE /SHV OPS#.PROG-FILE;SHV OPS#.PROG-NAME /WHILE (OPS#.PROG-FILE NE '') / RESUME-PROGRAM / FREE-VARIABLE OPS / EXECUTE-CMD CMD=(SHOW-JOB-STATUS),TEXT-OUTPUT=*NONE,- / STRUCTURE-OUTPUT=OPS,RETURNCODE=*NONE /END-WHILE