[postfix-users] LDAP Lookup

Andreas Winkelmann ml at awinkelmann.de
Sa Jun 28 20:19:19 CEST 2008


> * Steffen Krick <Steffen.Krick at gmx.de> wrote:
>>> Postifx soll die lokalen Benutzer aus einem LDAP Verzeichnis suchen.
>>> Die Abfrage  postmap -q "ricky at gesotec.local"
>>> ldap://etc/postfix/ldap/local_recipients.cf liefert das Ergebnis
>>> "ricky".
>>>
>>> Die Mails für ricky können dann anschließend aber nicht ins Maildir
>>> eingeliefert werden.  Folgende Fehlermeldung aus dem Log:
>>> [...]
>>>> Die UserID 30001 gehört zu ricky.
>>>
>>> anscheinend kennt PAM den User mit der ID 30001 nicht. Wenn Du mit
>>> getent passwd nach ricky oder 30001 suchst, findet er da das
>>> Home-DIrecotry des Users?
>>>
>>
>> gentent liefert folgendes.
>>
>> skr at gdasvr55:~$ getent passwd ricky
>> ricky:x:30001:513:Richard M,,,,:/home/ricky:/bin/bash
>
> Somit halten wir als wichtigstes Ergebnis dieses sonnigen
> Freitagmorgens einmal fest: Ich bin ein Trottel.
>
> Danach kann ich Dir dann sagen, daß die Meldung von dovecot, genauer
> dem deliver-Programm stammt. Dieses wird mit der UID 30001 gestartet
> und führt folgenden Code aus:
>
> ,----
> | process_euid = geteuid();
> | if (destination != NULL)
> |         user = destination;
> | else if (process_euid != 0) {
> |         /* we're non-root. get our username and possibly our home. */
> |         struct passwd *pw;
> |
> |         pw = getpwuid(process_euid);
> |         if (pw != NULL) {
> |                 user = t_strdup(pw->pw_name);
> |                 if (getenv("HOME") == NULL)
> |                         env_put(t_strconcat("HOME=", pw->pw_dir, NULL));
> |         } else if (user == NULL) {
> |                 i_fatal_status(EX_USAGE,
> |                                "Couldn't lookup our username (uid=%s)",
> |                                dec2str(process_euid));
> |         }
> | } else {
> |         i_fatal_status(EX_USAGE,
> |                 "destination user parameter (-d user) not given");
> | }
> `----
>
> Als zweites Ergebnis nehmen wir also mit, daß die 30001 korrekt beim
> Aufrunf von geteuid(2) zurückgegeben wird, der Aufruf von getpwuid(2)
> für die 30001 liefert jedoch keinen Usernamen zurück (bzw. aus der
> pw-strcut lässt sich selbiger nicht extrahieren). Das heißt, daß
> eigentlich auch ein "getent passwd 30001" kein Ergebnis liefern
> dürfte. Woran das jetzt genau liegt, kann ich Dir nicht sagen, ich
> bleibe aber dabei, daß Du wohl ein Problem bei der LDAP-Integration in
> PAM hast.

Der OP sollte mal den getent Befehl unter seinem Account, nicht als root
ausführen. Evtl ein Berechtigungs Problem. Oder local steckt in nem
chroot() siehe master.cf.

--
Andreas



More information about the postfix-users mailing list