"Um die User-Administration zu machen, habe ich mich für das Modul "useradmin" entschieden. Dieses hat leider keinen "read-only"-Modus, also habe ich "useradmin" entsprechend umgeschrieben.
Zumindest habe ich es geschafft, die Aufgabe umzusetzen und wie erste Tests zeigen, funktioniert es auch. Während der Arbeit habe ich aber ziemlich viel Koffein zu mir nehmen müssen *g*.
Leider ist Webmin im ziemlich miesesten Coding-Style, den ich je gesehen habe, geschrieben (falls jemand ein Projekt mit einem schlechteren kennt, bitte als Kommentar posten). Dazu zwei Beispiele aus der offiziellen Entwickler-Dokumentation von Webmin:
# foobar-lib.pl
# Common functions used for managing the foobar user list
do '../web-lib.pl';
&init_config();
# list_users()
# Returns a list of all foobar users
sub list_users
{
...
}
Wo bleiben use warnings und use strict ? Warum werden keine here docs benutzt? Soll das aktuelle @_ wirklich jeder Subroutine übergeben werden (& )? Und warum sind die Library-Funktionen nicht in Perl Modulen untergebracht?
&header(title, image, [help], [config], [noindex], [noroot], [text], [header], [body], [below])
Dies ist eine API-Funktion. Als ich das gelesen habe, musste ich sofort an eine Perlmonks-Story denken. Dort steht übrigens auch die Lösung zu diesem Problem: Hash als Attribut für die Funktion verweden.
Leider sind praktisch alle Webmin-Module und Webmin selbst in diesem Stil geschrieben. Aber nicht nur der Coding-Style und die API sind nicht wirklich gelungen. Das Theme-Handling ist ebenfalls etwas komisch. Wenn man Webmins miniserv.pl als HTTP/CGI-Server einsetzt, funktionieren alle Themes. Benutzt man jedoch Apache, so kann man nur noch Old Webmin theme benutzen. Warum ist ein Teil des Theme-Handling in miniserv.pl eingebaut?
Mit den obigen Dingen kann man ja noch leben, solange man Webmin nur über miniserv.pl laufen lässt und keine eigenen Module entwickelt.
Richtig haaresträubend wird es aber, wenn man sich den Code von "useradmin" anschaut. Anstatt auf Betriebssystem-Tools wie useradd , usermod , passwd etc. zurückzugreifen, werden Änderungen an Usern und Gruppen direkt an /etc/passwd , /etc/shadow etc. vorgenommen.
Nachdem ich das endlich loswerden konnte, geht es mir schon wieder etwas besser. Es stört mich aber ziemlich stark, dass Perl durch Projekte wie Webmin einen schlechten Ruf bekommt (böse Zungen würden jetzt behaupten, dass Perl dazu Webmin gar nicht nötig hat *g*).
Kennt jemand vielleicht eine Alternative zu Webmin? Hat sich bei linuxconf eigentlich etwas verbessert in den letzten Jahren? Beim nächsten Projekt möchte ich nämlich gerne etwas weniger Koffein verbrauchen. "
|