FS#32308 - [libtirpc] 0.2.2-3 breaks systemd-logind and pam

Attached to Project: Arch Linux
Opened by zless (roentgen) - Tuesday, 30 October 2012, 22:05 GMT
Last edited by Tom Gundersen (tomegun) - Friday, 02 November 2012, 09:33 GMT
Task Type Bug Report
Category Packages: Testing
Status Closed
Assigned To Tom Gundersen (tomegun)
Architecture All
Severity Critical
Priority Flash
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 5
Private No

Details

Description:

After upgrading to libtirpc 0.2.2-3 from testing login is not possible.

journalctl shows:
login[608]: PAM unable to dlopen(/usr/lib/security/pam_unix.so): /usr/lib/security/pam_unix.so: undefined symbol: log_debug
login[608]: PAM adding faulty module: /usr/lib/security/pam_unix.so
login[608]: FAILED LOGIN SESSION FROM tty1 FOR root, Module is unknown

Downgrading to the core version fixes things.
This task depends upon

Closed by  Tom Gundersen (tomegun)
Friday, 02 November 2012, 09:33 GMT
Reason for closing:  Fixed
Additional comments about closing:  Rebuild of pam will be needed for next release, for now everything is fine.
Comment by Thomas Bächler (brain0) - Tuesday, 30 October 2012, 22:32 GMT
This is critical, I removed the package from testing.
Comment by Andrea Scarpino (BaSh) - Tuesday, 30 October 2012, 22:36 GMT
I rebuilt pam and now it works.
Comment by Thomas Bächler (brain0) - Tuesday, 30 October 2012, 22:44 GMT
Erm? We can't just bump to a development version with an incompatible interface and no SONAME bump and pretend it's fine.
Comment by Tom Gundersen (tomegun) - Tuesday, 30 October 2012, 22:53 GMT
We will stay at the previous version (essentially rc2) until this gets sorted out, no need to rush to rc3. That said, the fact that pam is crashing now probably means that something is not right:



Fix debugging-related namespace pollution.


From: Nick Alcock <nick.alcock@oracle.com>

When GSS is compiled in, libtirpc exports three symbols, 'log_debug',
'log_status', and 'log_hexdump', which do nothing unless DEBUG is #defined
at libtirpc compile time. This is a pretty abominable piece of namespace
pollution: these symbols are quite likely to be used for local debugging
routines by other binaries and shared libraries, and those local calls
are now likely to go astray into libtirpc's do-nothing versions instead.

So this changes the names of these functions. This is technically an ABI
break, but since these symbols are undocumented and useless (with variable
behaviour depending on whether DEBUG was #defined, and only present at
all if GSS was compiled in) anything using those symbols was broken anyway.

(A quick grep of my local sources shows numerous other local users of
the name log_debug() in particular, including LVM, libassuan, GnuPG, gvfs,
and dhcp. If you include binaries as well as intra-shared-library calls,
the count goes much higher.)

Signed-off-by: Nick Alcock <nick.alcock@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
Comment by JB (techryda) - Tuesday, 30 October 2012, 23:08 GMT
Suggestion: Even though we are changing nothing I suggest upping the pkgrel to -4 so we can save a few headaches. (People who had updated to -3 and not experienced the issue yet)
Comment by Jonas Kienitz (kienitz) - Tuesday, 30 October 2012, 23:22 GMT
I am not able to login to any user (even root) so how do I downgrade?
Comment by Thomas Bächler (brain0) - Tuesday, 30 October 2012, 23:24 GMT
Boot into single/emergency mode or live CD.
Comment by Jonas Kienitz (kienitz) - Wednesday, 31 October 2012, 15:35 GMT
Thanks
Comment by Tom Gundersen (tomegun) - Wednesday, 31 October 2012, 15:39 GMT
Only -3 is bad. -2 or -4 are fine. I'll leave this open for a bit longer even though it has been fixed.
Comment by JB (techryda) - Wednesday, 31 October 2012, 15:40 GMT
You don't need to downgrade anymore, just do a pacman -Syu
Comment by Nick Alcock (nix) - Thursday, 01 November 2012, 12:36 GMT
Curious. Before implementing this I checked every distro I could find for legitimate uses of log_debug which were not intended to be references to a symbol within the same library as the user, misdirected to libtirpc by libtirpc's export. I found none (in particular, upstream PAM contained *no* references to log_debug at all at the time). Lots of packages were sent astray by this export, though: see my list above.

Looks like I'll have to revive my arch install and see what on earth arch has done to pam_unix.so...
Comment by JB (techryda) - Thursday, 01 November 2012, 13:45 GMT
Or you can look through Arch's very short git history for pam

https://projects.archlinux.org/svntogit/packages.git/log/trunk?h=packages/pam
Comment by Nick Alcock (nix) - Thursday, 01 November 2012, 13:58 GMT
Got it. Before my changes, auth_destroy() calls will expand into a macro which contains a call to, sigh, log_debug(). So every program which calls this function ends up depending on log_debug(), and then I took it away...

We'll probably have to bump soname or do a versioned-symbol dance for this. sigh.
Comment by Nick Alcock (nix) - Thursday, 01 November 2012, 14:17 GMT
On second thoughts, versioned symbols won't help, since the existing symbol is not versioned. soname bump it is, I fear -- for the removal of a do-nothing symbol only even present if compiling with gss. Wonderful.

Loading...