| mod_auth_mysql in Apache2 (openSuSE 11.1) |
| Geschrieben von: Michael Loth |
| Sonntag, den 15. März 2009 um 00:00 Uhr |
|
Für eine neues Projekt benötigte ich das Apache-Modul mod_auth_mysql. Dieses ist jedoch nicht Bestandteil des auf dem betreffenden System installierten openSUSE 11.1. Also hatte ich kurzerhand die aktuellen Quellen heruntergeladen und versucht, diese wie in dem Sourcetree enthaltenen BUILD-Datei beschrieben zu übersetzen. Das dort aufgeführte Beispiel, auch Lib- und Include-Verzeichnisse mitzugeben ist gar nicht so falsch - da unser Zielsystem jedoch ein 64bit-System installiert hat, liegt die libmysqlclient natürlich vom Beispiel abweichend in /usr/lib64/mysql. Und Da wir natürlich kein apxs sondern ein apxs2 (das openSUSE 11.1 liefert Apache2 2.2.10 mit) zur Verfügung haben, ist der korrekte und vollständige Aufruf zum übersetzen: # apxs2 -c -L/usr/lib64/mysql -I/usr/include/mysql -lmysqlclient mod_auth_mysql.c Daraufhin eine relativ lange Liste mit Fehlern: mod_auth_mysql.c:591: warning: implicit declaration of function 'APR_XtOffsetOf' mod_auth_mysql.c:591: error: expected expression before 'mysql_auth_config_rec' mod_auth_mysql.c:591: warning: cast to pointer from integer of different size mod_auth_mysql.c:591: error: initializer element is not constant mod_auth_mysql.c:591: error: (near initialization for 'mysql_auth_cmds[0].cmd_data') [...] Da dies der einzige Fehler war und diese mit schöner Regelmäßigkeit in jedem Aufruf der Funktion APX_XtOffsetOf vorkam, habe ich gar nicht erst versucht die C-Quelle zu analysieren. Bereits der erste Treffer bei Goggle mit dem Suchbegriff "mod_auth_mysql APR_XtOffsetOf" lieferte die passende Lösung. Die dort beschriebenen Änderungen hatte ich sofort übernommen - und siehe da, keine Fehler mehr. Modul erfolgreich übersetzt - Modul installiert: # apxs2 -i mod_auth_mysql.la Nun noch das Modul in den Apache2 integrieren. Dazu die Datei /etc/sysconfig/apache2 editieren und die Zeile APACHE_MODULES="..." durch das Modul "auth_mysql" erweitern - aber bitte VOR allen anderen Modulen, damit sichergestellt ist, das nicht evtl. eine der anderen geladenen Authentifizierungsmethoden vorher greifen und ein Login schon vorher in's Leere läuft weil auth_mysql überhaupt nicht mehr zum Anwendung kommt. Im Anschluss dann mit "rcapache2 restart" den Apache-Prozess neu gestartet, damit dieser das neue Modul lädt. Kaum zu glauben, aber auch im Webbrowser zeigt die URL http://www.mein-server.de/server-info?mod_auth_mysql.c das Modul ist tatsächlich erfolgreich geladen. Wie das neue Modul zu konfigurieren ist, kann man hier nachlesen. Hier ein einfaches Beispiel welches ich verwende, um die Location /server-info abzusichern:
<Location /server-info>
SetHandler server-info
AuthName "Server-Information"
AuthType Basic
AuthMySQLHost localhost
AuthMySQLDB isp
AuthMySQLUser dbuser
AuthMySQLPassword XXXXXX
AuthMySQLUserTable htpasswd
AuthMySQLEnable On
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption crypt
AuthMySQLGroupTable htgroup
AuthMySQLGroupField user_group
AuthMySQLAuthoritative On
require group admin
</Location>
|
