mod_authn_dbd > DBD: No driver for mysql

Apache, Lighttpd, nginx, Cherokee
hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

mod_authn_dbd > DBD: No driver for mysql

Post by hever » 2008-06-13 00:50

Hallo zusammen,
ich möchte mod_authn_dbd (http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html) verwenden um ein Verzeichnis zu schützen. Das Passwort also in einer (MySQL) Datenbank speichern. (Siehe Beispiel bei apache.org)

Bei Verwendung erhalte ich jedoch beim Server Neustart die Fehlermeldung:

Code: Select all

DBD: No driver for mysql


Die Module authn_dbd.load und dbd.load sind geladen.
Da ich eine chroot Umgebung verwende will ich nicht komplett ausschließen vielleicht eine Lib dort nicht eingebunden zu haben, jedoch gibt ldd keine Abhängigkeiten zu mysql libraries an. Es scheint wohl so zu sein (Aussagen im Internet + IRC + fehlende Abhängigkeiten), dass aufgrund Lizenzprobleme mysql code nicht in die libapr1 library gelangt ist.

Jedoch frage ich mich wieso ein Paket (Debian etch) veröffentlicht wurde, das letztendlich garnicht funktioniert und schätze das Problem liegt irgendwie an mir. (Es gibt auch keine Abhängigkeiten zu Postgres oder anderen libraries). Ich finde keine weiteren Informationen zu dem Problem, oder ob tatsächlich auf MySQL Code verzichtet wurde und warum.

Ist sonst schonmal jemand dem Problem begegnet oder hat Lösungsvorschläge?
Vielleicht gibt es ja offizielle/inoffizielle libapr Pakete mit eincompiliertem MySQL Code. (Ich muss noch testing/unstable testen).
Ansonsten muss ich es wahrscheinlich selber nachbauen.


hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: mod_authn_dbd > DBD: No driver for mysql

Post by hever » 2008-06-13 17:17

Auf eine Lösung mit libapache2-mod-auth-mysql auszuweichen kann hilfreich sein.
Ich gebe hier auch mal eine Konfiguration an, weil es einige Howtos im Netz gibt die einfach nicht funktionieren oder einer anderen Version entsprechen.

Debian Paket (lenny):
http://packages.debian.org/lenny/libapa ... auth-mysql

Veraltete Dokumentation:
http://modauthmysql.sourceforge.net/CONFIGURE

Funktionierende Konfiguration:
(https://bugs.launchpad.net/ubuntu/+sour ... bug/150649)

Code: Select all

<Directory /some/dir/>
  AuthName "Auth-MySQL Test"
  AuthType Basic
  AuthUserFile /dev/null
  AuthBasicAuthoritative Off

  AuthMySQL On
  AuthMySQL_Authoritative On
  AuthMySQL_Host localhost
  AuthMySQL_User <db_user>
  AuthMySQL_Password <db_password>
  AuthMySQL_DB <mysql_db>
  AuthMySQL_Password_Table mysql_auth # I have used the defaults but explicitly mention them here in the config file
  AuthMySQL_Username_Field username
  AuthMySQL_Password_Field password
# AuthMySQL_Encryption_Types MySQL # this will crash apache with "*** stack smashing detected ***" in error.log
# AuthMySQL_EncryptionTypes Plaintext # works okay here
  AuthMySQL_Encryption_Types PHP_MD5
</Directory>


Oder etch:

Code: Select all

To get mysql authentication working in Gutsy, you have to manually compile mod_auth_mysql:

1. wget http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz
2. wget http://www.bleb.org/software/mod_auth_mysql-3.0.0-apache-2.2.3.patch
3. tar zxf mod_auth_mysql-3.0.0.tar.gz
4. apt-get install apache2-prefork-dev libmysqlclient15-dev; apt-get --purge remove libapache2-mod-auth-mysql
5. cd mod_auth_mysql-3.0.0
6. patch < ../mod_auth_mysql-3.0.0-apache-2.2.3.patch
7. sed -i 's|#include <mysql.h>|#include <mysql/mysql.h>|' mod_auth_mysql.c
8. apxs2 -c -lmysqlclient -lm -lz mod_auth_mysql.c
9. apxs2 -i mod_auth_mysql.la
10. echo 'LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so' > /etc/apache2/mods-available/auth_mysql.load
11. a2enmod auth_mysql

Configure it as follows (adapt to your environment):

        <Location /mysqlauth>
            AuthName "test"
            AuthType Basic
            AuthUserFile /dev/null
            AuthBasicAuthoritative Off

            AuthMySQLEnable On
            AuthMySQLAuthoritative On
            AuthMySQLDB apache_auth_test
            AuthMySQLUser authtestuser
            AuthMySQLPassword something
            AuthMySQLUserTable auth
            AuthMySQLNameField username
            AuthMySQLPasswordField passwd
            require valid-user
        </Location>

Hope this helps someone.


Jetzt hab ich zwar Selbstgespräche geführt, aber es ist ärgerlich Threads zu lesen die gelöst scheinen aber dennoch keine Lösung verraten.