Prüflisten verwalten mit HTML und RPG-CGI

11. November 2008 | Von | Kategorie: Programmierung

Ein Internet-Artikel aus der NEWSolutions mit NEWSabo plus Zugang über: Prüflisten verwalten mit HTML und RPG-CGI – Eine moderne Schnittstelle löst ein altes RPG-Problem – Ein neues Werkzeug für Prüflisten

von Jan Jorgensen

Prüflisten (Objekttyp *VLD) sind seit V4R1 implementiert und dienen dazu, sicherheitskritische Benutzerinformationen zu speichern. Ein Prüflisteneintrag besteht aus einer Kennzeichnung, die verschlüsselt gespeichert wird, und aus dazugehörigen Daten in freiem Format. Zur Prüfung eines Eintrags muss der Benutzer sowohl die Kennzeichnung als auch die Daten eingeben. Ähnlich wie Benutzerbereiche können auch Prüflisten nur mit Hilfe von APIs verarbeitet werden. OS/400 bietet nur zwei Befehle, die mit Prüflisten zu tun haben: CRTVLDL (Create Validation List – Prüfliste erstellen) und DLTVLDL (Delete Validation List – Prüfliste löschen).

Mit Hilfe der Prüflisten-APIs können Prüflisteneinträge hinzugefügt, geändert, entfernt, gesucht und geprüft werden. Eine denkbare Verwendung von Prüflisten ist das Speichern eines Benutzernamens und eines Kennworts mit einem Web-Browser. Die Kennzeichnung des Eintrags wäre der Benutzername und die zu verschlüsselnden Daten enthielten das Kennwort. Das freiformatige Datenfeld könnte beliebige zusätzliche Daten über den Benutzer beinhalten. Den Kern unseres Tools bildet ein Serviceprogramm von Carsten Flensburg, das alle gebräuchlichen Aktionen mit Prüflisten ausführen kann. Für dieses Serviceprogramm haben wir eine Oberfläche erstellt, allerdings nicht mit DDS und RPG, sondern mit HTML, JavaScript, Cascading Style Sheets (CSS) und CGI-RPG. Für den Einsatz des Programms gelten folgende Voraussetzungen:

  • Die AS/400 muss als HTTP-Server mit der Berechtigung zum Ausführen von CGI-Programmen konfiguriert sein.
  • Sie müssen in der Lage sein, eine FTP-Verbindung zu Ihrem Web-Server herzustellen.
  • Die Prüfliste WEBPWD muss auf Ihrem System existieren. Zum Erstellen verwenden Sie folgenden Befehl:CRTVLDL VLDL(CGIDATA/WEBPWD) + TEXT(‘www passwords’)

Die Benutzeroberfläche ermöglicht folgende Aktionen mit Prüflisten von einem Web-Browser aus:

  • Eintrag hinzufügen
  • Eintrag ändern
  • Eintrag löschen
  • Eintrag prüfen
  • Eintrag abrufen (Diese Option werden Sie vielleicht entfernen wollen. Der Systemwert QRETSVRSEC legt fest, ob es möglich ist, entschlüsselbare Authentifizierungsdaten von Benutzerprofilen und Prüflisten auf dem System zu speichern. Dieser Systemwert betrifft nicht die Kennwörter von AS/400-Benutzerprofilen.)
  • Einträge auflisten (Diese Aktion listet wahlweise alle Kennwörter in einer Prüfliste auf.)

Wenn Sie das Dokument index.htm in Ihrem Browser aufrufen, können Sie unter den genannten Optionen auswählen. In Abbildung 1 ist die Option Add ausgewählt. Nachdem die erforderlichen Daten eingegeben wurden und auf Submit geklickt wurde, prüft eine JavaScript-Funktion namens CheckInput die Eingabe. Anschließend überträgt der Browser die HTML-Daten an den HTTP-Server. Falls bei der Eingabeprüfung ein Fehler festgestellt wird, erscheint eine entsprechende Meldung. Wenn die Eingabe fehlerfrei ist, wird mit dem Tag <FORM> das CGI-RPG-Programm PA9001 aufgerufen. PA9001 liest die Eingabe aus dem HTML-Formular, konvertiert sie in die Datenstruktur PA9001DS, ruft die entsprechende Prüflisten-Prozedur im Serviceprogramm CBX003 auf, und generiert (mit Hilfe der HTML-Schablone auf der AS/400) eine Antwort und zeigt sie im Browser an.

Die HTML-Dateien

Wenn Sie noch nicht über HTML-Kenntnisse verfügen, brauchen Sie keine Angst zu haben. HTML ist leicht zu erlernen und es gibt viele Online-Ressourcen für Einsteiger und Fortgeschrittene. Ein guter Einstieg ist z.B. www.idocs.com oder das (natürlich in HTML geschriebene) Online-Tutorial SelfHTML, das auch in deutscher Sprache unter zahlreichen Adressen zu finden ist (z.B. www.netzwelt.com/selfhtml/). Unser Programm ist mit Frames aufgebaut. Im linken Teil können die einzelnen Optionen angesteuert werden, und im rechten Teil werden die eingegebenen Daten angezeigt. Der HTML-Code ist einfach. Achten Sie auf folgende Anweisungen im Header:

<HEAD> <LINK href=“main.css“ rel=STYLESHEET type=text/css> <SCRIPT SRC0″check-input.js“></SCRIPT> </HEAD>

Die beiden enthaltenen Anweisungen beziehen sich auf zwei externe Dateien: main.css und check-input.js. RPG-Programmierer können sich diese Anweisungen als /COPY-Dateien vorstellen, die allgemeine Daten oder Routinen enthalten, welche von mehr als einem Programm genutzt werden können. Main.css ist eine Textdatei, die den CSS-Code zum Formatieren der HTML-Dokumente enthält. Die Verwendung einer zentralen CSS-Datei erleichtert nachträgliche Änderungen an der HTML-Formatierung. Check-Input.cs ist eine Textdatei, die zwei JavaScript-Funktionen (vergleichbar mit RPG-Prozeduren) enthält. Die erste Funktion, CheckInput, prüft die Eingaben aus den Formularen und wertet sie aus. CheckInput verwendet einen Parameter, der steuert, welcher Teil des JavaScrupt-Codes ausgeführt werden soll. Die zweite JavaScript-Funktion, SetCursor, wird jedesmal aufgerufen, wenn ein Dokument geladen wird. Das geschieht im <BODY>-Abschnitt mit dem Ereignis onload. Weitere Informationen zu JavaScript finden Sie in zahlreichen Online-Dokumenten, die Sie am besten mit einem Suchdienst wie www.google.de und Suchbegriffen wie „JavaScript Anfänger“. Eine weitere interessante Stelle sind folgende Anweisungen:

    <INPUT TYPE=“hidden“ VALUE=“*add“ NAME=“action“> <INPUT TYPE=“hidden“ VALUE=“dummy“ NAME=“dummy“>

Die erste Anweisung bezieht sich auf ein verborgenes Feld namens action. Dieses Feld steuert, wie sich das CGI-RPG-Programm verhält. Ein verborgenes Feld in HTML funktioniert genauso wie ein DDS-Feld mit dem Attribut non-display (ND). Verborgene Felder eignen sich gut dazu, vordefinierte Daten an ein CGI-Programm zu übergeben. Denken Sie aber daran, dass ein verborgenes Feld zwar nicht vom Browser angezeigt wird, dass es aber für jeden sichtbar wird, der sich den Quelltext vom Browser anzeigen läßt. Verwenden Sie also verborgene Felder nicht zum Speichern sicherheitskritischer Daten. Das zweite Feld ist ebenfalls ein verborgenes Feld, trägt den Namen dummy und hat auch den Inhalt „dummy“. Wenn der Benutzer die Eingabetaste drückt anstatt auf Submit zu klicken, wird das letzte Feld des Eingabeformulars nicht an das CGI-Programm übergeben. Das Dummy-Feld stellt deshalb sicher, dass das letzte eigentliche Datenfeld auch tatsächlich an das Programm übergeben wird. (Das Programm wurde unter OS/400, V4R4 geschrieben und getestet. Vielleicht tritt dieser Fehler in neueren Versionen nicht mehr auf. Sie können das selbst testen und gegebenenfalls das Dummy-Feld entfernen.

Schlagworte: , , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.