On 04/04/2013 11:09 PM, Thierry Vignaud wrote:
Hi

rpm preloads NSS  libraries prior to chrooting in order to
fix group lookup in the chroot (when installing in a chroot):
lib/rpmrc.c-    /* Force preloading of dlopen()'ed libraries in case
we go chrooting */
lib/rpmrc.c:    (void) gethostbyname("localhost");


However in some cases, this is not enough.
See https://bugs.mageia.org/show_bug.cgi?id=9326
Strace showed that in some case, it tries to load libnss*so
after chrooting, way too late, resulting in borked installs.

Do you have a strace of such a situation still at hand / can you easily reproduce one? Just interested to see what's going on in such a case, not that I couldn't imagine things failing in some circumstances: for example if the system nsswitch.conf specifies hosts to come from a different source than passwd/group.

The following patch makes rpm to really force preloading of
dlopen()'ed libraries before chrooting

Patches against master & rpm-4.11.x

Please apply.

It probably should actually call getpwent() as well for full coverage against nsswitch.conf variants. And then the gethostbyname() call becomes unnecessary as we're not interested in hosts, the whole thing is nothing but a cheap trick that "works" most of the time.

However I seem to recall glibc caching the passwd and group contents, so if we force it to read passwd and group before chrooting, it might well end up using the values from the host system instead of what should go into the chroot. At the very least I'd think it should call endgrent() (and endpwent) as well.

        - Panu -

_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to