Problem po upgradzie openldap i nss_ldap

Jarek Koszuk heretyk w pld-linux.org
Pią, 11 Sie 2006, 10:49:47 CEST


On Fri, August 11 2006 08:36, Marcin Król wrote:
> > komunikatem "no such user". Podobnie dzieje się w przypadku skorzystania
> > z polecenia getent.
> Wynika z tego, ze nss_ldap wogole u Ciebie nie funkcjonuje.
> > Żeby było ciekawiej `ls -l` poprawnie wyświetla
> > właścicieli i grupy.
> Jestes pewien, ze pobiera te dane z ldap via nss? Gdyby tak bylo getent
> tez by je pobieral. Sprawdz strace.
Nie mam innego pomysłu, skąd miałby je brać. Tym bardziej, że skasowanie
wpisu "ldap" dla bazy passwd w /etc/nsswitch.conf powoduje, ze `ls -l`
przestaje rozwiązywać uid-y na nazwy. strace pokazuje dla ls -l połączenie
z ldapem, natomiast dla getent, że nsswitch.conf jest czytany,
/etc/ldap.conf również, ładowane jest libnss_ldap. Ale połączenia z LDAP
nie widać (jakby co, po południu spróbuję wystawić gdzieś te wyniki
strace'a).

Zrobiłem taki mały test:
--- CUT HERE ---
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>

int main()
{
    struct passwd *pwent;
    const uid_t uid  = 5000;
    const char * user = "ldapuser";

    pwent = getpwuid(uid);
    if (pwent) {
        printf("getpwuid(%d) = %s, %d, %d\n", uid, pwent->pw_name,
                pwent->pw_uid, pwent->pw_gid);
    }
    else {
        printf("getpwuid(%d) = NULL\n", uid);
    }

    pwent = getpwnam(user);
    if (pwent) {
        printf("getpwnam(%s) = %s, %d, %d\n", user, pwent->pw_name,
                pwent->pw_uid, pwent->pw_gid);
    }
    else {
        printf("getpwnam(%s) = NULL\n", user);
    }

    return 0;
}
--- CUT HERE ---
Użytkownik ldapuser o uidzie 5000 jest zdefiniowany w LDAP.
Wynik:
# ./ldptst
getpwuid(5000) = NULL
getpwnam(ldapuser) = ldapuser, 5000, 1000

> To oznacza jedynie, ze serwer ldap dziala poprawnie i nic nie mowi o
> stanie nss_ldap.
Tak, chciałem tylko pokazać, że sam LDAP działa.

> Wiec tak. Ja nss_ldap uzywam akurat do komunikacji z windzianym Active
> Directory i dziala wysmienicie. Kiedys testowalem go z OpenLDAP i tez
> dzialalo ok.
Mnie do wczoraj również wszystko działało jak należy :)

> 1. Czy /etc/ldap.secret ma atrybuty 600? U mnie jezeli byly inne
> nss_ldap odmawial wspolpracy.
Tak. Prawa są jak trzeba:
# ls -l ldap.secret
-rw-------  1 root root 6 Jul  8  2005 ldap.secret

> 2. Czy strace pokazuje proby korzystania z nss_ldap? Czy debug level 9 w
> ldap.conf pokazuje cos przy getent?
Przy getent - nie.

> 3. Kilka wersji temu nss_ldap stalo sie czule na kolejnosc parametrow w
> ldap.conf. Stracilem kiedys caly dzien zeby go uruchomic i okazalo sie,
> ze nie dzialalo bo rootbinddn byl przed binddn i bindpw. Co prawda Ty
> ich nie uzywasz, ale sprobuj poprzestawiac kolejnosc opcji.
W przypadku nie-roota łaczę się anonimowo i sprawdzałem już różne warianty
tutaj, ale posprawdzam jeszcze. Pewnie skończy się też tak, że przejrzę
źródła nss_ldap :/

> 4. Zerknij do /usr/share/doc do przykladowego ldap.conf. W ostatnich
> wersjach nss_ldap poprzybywalo troche opcji i niektore z nich trzeba
> bylo koniecznie dodac zeby np ldaps zaczal dzialac.
Korzystałem z niego i kombinowałem z różnymi opcjami - ale jeszcze powalczę
(w sposób bardziej systematyczny).

Dzięki za porady, Jarek






Więcej informacji o liście dyskusyjnej pld-users-pl