Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
problem mit postfix, mysql und maildrop 2.0.2 [solved]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
tkortmann
n00b
n00b


Joined: 30 Apr 2005
Posts: 15

PostPosted: Fri Dec 01, 2006 3:23 pm    Post subject: problem mit postfix, mysql und maildrop 2.0.2 [solved] Reply with quote

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
View user's profile Send private message
tkortmann
n00b
n00b


Joined: 30 Apr 2005
Posts: 15

PostPosted: Sat Dec 02, 2006 6:25 pm    Post subject: problem mit postfix, mysql und maildrop 2.0.2 invalid user Reply with quote

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
View user's profile Send private message
tkortmann
n00b
n00b


Joined: 30 Apr 2005
Posts: 15

PostPosted: Sat Dec 02, 2006 6:37 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
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