[Allegro] Operator in #95 bzw. #96 bei avanti
Bernhard Eversberg
ev at biblio.tu-bs.de
Fr Aug 27 08:55:34 CEST 2010
Thomas Berger schrieb:
>
>>> Die von Herrn Eversberg nicht angeschnittene Frage bleibt allerdings:
>>> Wer schreib da eigentlich: Der (smybolische) Avanti-Benutzer
>>
>> eben derselbe! Das Schreiben besorgt ja acon, und dieses wird von dem
>> User (indirekt) gestartet, der auch avanti gestartet hat. Wegen des
>> sitzungslosen Konzepts weiß acon dann gar nicht, wer ihm den Job
>> eigentlich gegeben hat. Es entnimmt aus av_ini.php die Userkennung,
>> mit der es arbeiten soll, und die muß Berechtigung 3 haben. Mehr hat
>> acon nicht.
>
> dass acon eine av_ini.php konsultiert, die u.U. auf einem anderen
> Host auf einem anderen Kontinent wohnt, war mir nicht gelaeufig.
>
Berger kann allem widerstehen, nur nicht der Versuchung zu einer
Stichelei. (Frei nach O. Wilde)
Dabei ist in diesem Fall jedem Betroffenen klar, daß mir nur ein, wenn
auch unverzeihlicher, kleiner Lapsus unterlaufen ist: acon entnimmt die
Angaben nicht selber der av_ini.php, sondern erhält sie als Teil des
jeweiligen Jobs über avanti. Gerne ergreife ich aber die Gelegenheit,
schon um den Lapsus wenn irgend möglich ansatzweise auszubügeln, den
Zusammenhang noch deutlicher zu machen als er eh schon seit 8 Jahren
sein sollte, es uns aber nicht gelungen ist:
1. Der Web-Server erhält einen Aufruf wie z.B.
.../katalog/grec.php?urN=999
Dieser stammt z.B. aus einer Webseite, die ein Enduser grade in
seinem Browser vor sich hat - nicht ahnend, was er mit dem Klick
darauf alles auslöst:
2. Der Webserver kriegt diesen Aufruf, startet den PHP-Interpreter
(weil er ".php" sieht) und gibt ihm, was hinter katalog/ steht.
grec.php wird vom PHP-Interpreter vorverarbeitet und holt sich
(da eingebunden in grec.php) die Datei av_ini.php. Dazu muß diese
auf demselben Verzeichnis .../katalog liegen, sonst käme PHP
nicht dran - wenn sie etwa bei der Datenbank läge.
3. grec.php holt sich auch noch die Datei av_grec.php hinzu,
in der der Job für avanti erstellt wird. Zentraler Teil dieses
Jobs sind folgende Anweisungen
var '# ' #urN
find
...
xport p d-khtm
...
dow
Damit wird der Satz geholt und mit den Parametern (Name in
av_ini.php) exportiert zur Anzeige in HTML-Formatierung.
Die Ausführung des Jobs muß aber wo ganz anders passieren:
4. In grec.php könnten dem Job noch beliebige weitere Angaben mit-
gegeben werden, die aus av_ini.php oder sonstwoher stammen,
die jedoch alle auf dem Webserver liegen müssen oder im Aufruf
von grec.php gesteckt haben.
5. Der fertige Job wird an den avanti-Server geschickt, mittels der
Funktion sendjob(...) (in av_ini.php enthalten)
Die Adresse des avanti-Servers steht ebenfalls in av_ini.php:
$Server = "www.uni-golfsburg.de";
$Port = "4949";
$DB="kata";
$ID="abc/xyz";
Daraus erzeugt sendjob(...) die Zeile
@ DB=kata ID=abc/XYZ
am Ende des Jobs.
~~~~~~~ und hier ist evtl. ein Ozean dazwischen ~~~~~~~~~~~~~~~~~~~~~
6. Der avanti-Server auf "www.uni-golfsburg.de" (dort lauschend auf
dem Port 4949) erhält den Job mit der anhängenden Zeile, er
schaut dann nach, ob er eine Datenbank "kata" kennt. Die muß
eingetragen sein in der Datei avanti.con, die avanti auf seinem
eigenen Verzeichnis braucht. Da steht etwa drin:
[kata]
directory = /var/Datenbanken/Katalog
access = 3
konfiguration = a
indexparameter = cat
opac = OPAC:1
abc = xyz:3
7. Nur wenn abc unter [kata] eingetragen ist mit Paßwort xyz wird
der (unter 3.-5. erstellte) Job ausgeführt. Das macht acon,
von avanti den Job erhält. Genauer: avanti startet acon und schreibt
den Job in seine Standardeingabe. acon kann nur auf Dateien
zugreifen, die auf dem Datenverzeichznis liegen oder auf
seinem eigenen. Daten, die aus av_ini.php stammen, stecken
im Job - an av_ini.php kommt acon nicht dran, es liegt ja
auf dem Webserver, und der steht womöglich in Florida, das
weiß acon gar nicht. [Genau darauf hatte Berger angespielt]
Etwas genauer noch: Wenn "abc = xyz:3" nicht da steht, oder
0 statt 3, wird der Job mit Berechtigung 0 ausgeführt. Ein
"put" würde dann nicht funktionieren (kommt aber in diesem
Job nicht vor). Im Job kann man die Berechtigung, wie bei
a99, mit "var A" ermitteln. Statt der 3 könnte man höhere
Werte für andere Zwecke selber definieren und in avanti.con
eintragen. Der betr. Username und sein Paßwort muß aber
im Job stecken, d.h. in av_ini.php oder sonstwo auf dem Web-
server irgendwo stehen.
8. Von acon erhält avanti, das solange gewartet hat, die Ergebnisse
des Jobs, eine fertig aufbereitete HTML-Seite, die es nur noch
weiterreichen muß: zurück an den Webserver, und der reicht sie
nur noch weiter an den Browser des Endusers.
9. Wenn zusätzlich Ajax-Technik im Spiel ist, muß der Browser noch
mittels Javascript was tun mit den Daten, die da ankommen. Das ist
z.B. der Fall, wenn grex.php statt grec.php verwendet wird oder
ajax3.php. Mehr dazu ist hier zu sehen:
http://www.allegro-c.de/doku/phpac/ajax3.htm
Die Stelle, wo vielleicht ein Ozean dazwischen ist, war in meiner
ursprünglichen Darstellung grotesk verkürzt worden. Vergebung!
Aber im Ernst war's ja vielleicht sowieso sinnvoll, die Dinge nochmal
wieder mit anderen Worten anders klarzumachen zu versuchen. Nichts
anderes ist hier intendiert, keineswegs eine Spitze gegen Berger...
B.Eversberg
Mehr Informationen über die Mailingliste Allegro