View previous topic :: View next topic |
Author |
Message |
tkortmann n00b
Joined: 30 Apr 2005 Posts: 15
|
Posted: Fri Dec 01, 2006 3:23 pm Post subject: problem mit postfix, mysql und maildrop 2.0.2 [solved] |
|
|
Hallo,
ich hab das Problem, dass Postfix mit Mysql und destination virtual: alles zustellt.
Stelle ich jetzt destination auf maildrop: bekomme ich ein 'schönes' invalid user.
Woran das liegt kann ich mir schon denken, denn die Benutzer loggen sich nicht
via Email-Adresse ein sondern über einen Usernamen. Da Postfix mit den Variablen
'user' 'recipient' etc. aber nur die Email-Adresse übergeben kann, bekommt Maildrop
keinen Treffer.
Gebe ich nun händisch 'maildrop -V 9 -d 000user123' ein, so kommt eine korrekte
angabe zum maildir, userid etc. Bei einem 'maildrop -V 9 -d info@example.com' kommt
das besagte 'Invalid user specified.'.
Nun also zur Frage: Wie bekomme ich entweder Maildrop dazu im 'email' Feld nachzusehen
oder Postfix dazu das 'username' Feld an Maildrop zu übergeben?
Aufbau der 'users' Tabelle:
id
email
...
homedir
quota
postfix
username
Datei: authmysqlrc
Code: |
MYSQL_SERVER localhost
MYSQL_USERNAME *******
MYSQL_PASSWORD *******
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
#MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE mailuserssql
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD crypt
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
|
Auszug: master.cf*
Code: |
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/bin/maildrop -d ${user} ${extension} ${recipient} ${user}@${nexthop} ${sender}
|
* einer von x versuchen.
Zusammengefasst:
Postfix kommt durch seine virtual_*_maps und die zugehörigen cf Dateien mit
dem Email-Adresse/Username problem klar und stellt Emails via virtual ohne Probleme zu.
Sasl-Auth mit einem Usernamen funktioniert auch ohne Probleme, denn LOGIN_FIELD steht
ja auf der 'username' spalte. Nur nutzt mir die sasl Variable von Postfix nichts bei Emails
die von aussen, also ohne Auth an lokale User gehen.
Stelle ich auf maildrop um, habe ich nur die Email-Adresse (oder teile davon wie user,nexthop)
mit der maildrop aber nichts anfangen kann, da sie natürlich nicht auf 'username' passt.
Gruß und Danke
Thorsten
Last edited by tkortmann on Sun Dec 03, 2006 12:08 am; edited 1 time in total |
|
Back to top |
|
|
tkortmann n00b
Joined: 30 Apr 2005 Posts: 15
|
Posted: Sat Dec 02, 2006 6:25 pm Post subject: problem mit postfix, mysql und maildrop 2.0.2 invalid user |
|
|
So,
maildrop vor 1.8 kann mysql/maildropmysql.config, maildrop ab 1.8 nicht.
Auch wenn in einigen Tutorials was von --with-mysqlconfig etc. steht, so reicht
ein blick in das change-log um zu sehen das es entfernt wurde.
Meine Lösung ist nun nicht die eleganteste, aber sie funktioniert:
master.cf:
Code: |
# ....
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/bin/maildrop -d vmail ${user}@${nexthop} ${extension} ${sender}
# ....
|
Den 'vmail' User gibt es und er wird von maildrop auch angenommen.
maildroprc:
Code: |
# ....
MAIL_ADRESSE="$1"
GET_USER_RESULT=`/usr/sbin/getmailuser.pl $MAIL_ADRESSE`
RESULT_ISOK=`echo "$GET_USER_RESULT" | cut -d : -f 1 -`
if ( "$RESULT_ISOK" == "SUCCESS" )
{
HOME=`echo "$GET_USER_RESULT | cut -d : -f 2 -`
MAILDIR=`echo "$GET_USER_RESULT | cut -d : -f 3 -`
QUOTAVAR=`echo "$GET_USER_RESULT | cut -d : -f 4 -`
# Evtl. muss von $MAILDIR noch der '/' am ende entfernt werden !
# Das lasse ich hier mal weg. Ebenso das setzen des Quota. (->PM)
}
else
{
EXITCODE="75"
exit
}
# ....
|
Also, maildrop startet als vmail mit dessem Home und der Email-Adresse als $1.
Dann wird die Adresse an '/usr/sbin/getmailuser.pl' übergeben um die richtigen
daten für home und maildir zu bekommen.
getmailuser.pl:
Code: |
#!/usr/bin/perl
##
## call: getmailuser.pl user@example.com
## retv: home:maildir:quota
##
use DBI;
$db_handle = DBI->connect("dbi:mysql:database=xxxxx;host=localhost:3306;user=xxxxxx;password=xxxxxx")
or die "Err Database: $DBI::errstr\n";
$sql = "SELECT homedir, maildir, quota FROM users WHERE email='$ARGV[0]' and postfix='Y'";
$statement = $db_handle->prepare($sql)
or die "Err Database: $DBI::errstr\n";
$statement->execute()
or die "Err Database: $DBI::errstr\n";
if( $row_ref = $statement->fetchrow_hashref() )
{
print "SUCCESS:$row_ref->{homedir}:$row_ref->{maildir}:$row_ref->{quota}";
}else{
print "ERROR:";
}
$statement->finish();
$db_handle->disconnect();
|
Und nun steht am ende von 'maildrop -V 9 -d vmail info@example.com' ein
richtig schönes 'maildrop: Delivery complete.' und die Mail ist im maildir.
Wenn wer was zu verbessern hat, immer her damit.
Gruß
Thorsten |
|
Back to top |
|
|
tkortmann n00b
Joined: 30 Apr 2005 Posts: 15
|
Posted: Sat Dec 02, 2006 6:37 pm Post subject: |
|
|
Sorry, es muss natürlich 'eq' und nicht '==' sein.
maildroprc:
Code: |
# ....
MAIL_ADRESSE="$1"
GET_USER_RESULT=`/usr/sbin/getmailuser.pl $MAIL_ADRESSE`
RESULT_ISOK=`echo "$GET_USER_RESULT" | cut -d : -f 1 -`
##if ( "$RESULT_ISOK" == "SUCCESS" )
if ( "$RESULT_ISOK" eq "SUCCESS" )
{
HOME=`echo "$GET_USER_RESULT | cut -d : -f 2 -`
# ....
|
Gruß
Thorsten |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|