On Monday 20 June 2005 22:42, James Yonan wrote:
> When I apply your patch and run on SuSE 9.1 with the default "login" PAM
> module (pam-0.77-221):
>
>   plugin openvpn-auth-pam.so "login login USERNAME password PASSWORD"
>
> I get:
>
>   AUTH-PAM: BACKGROUND: user 'x' failed to authenticate: Module is unknown

I've determined that this is a bug due to the old version of pam that is 
present in SUSE 9.1. It was fixed in version 1.5 of the pam_unix.so Makefile, 
which you can see here: 
http://cvs.sourceforge.net/viewcvs.py/pam/Linux-PAM/modules/pam_unix/Makefile?view=log#rev1.5.
 
The comment says:

"Patch from Sam Hartman to fix handling of module linking on Linux:
modules should be linked against libpam if they call any functions from
the library, since not all platforms will correctly resolve symbol
references otherwise."

In the /var/log/messages file, pam writes this when it fails to dlopen its 
modules:

Jun 21 03:28:25 (none) openvpn: PAM unable to 
dlopen(/lib/security/pam_unix2.so)
Jun 21 03:28:25 (none) openvpn: PAM [dlerror: /lib/security/pam_unix2.so: 
undefined symbol: pam_get_item]
Jun 21 03:28:25 (none) openvpn: PAM adding faulty 
module: /lib/security/pam_unix2.so
Jun 21 03:28:25 (none) openvpn: PAM unable to 
dlopen(/lib/security/pam_pwcheck.so)
Jun 21 03:28:25 (none) openvpn: PAM [dlerror: /lib/security/pam_pwcheck.so: 
undefined symbol: pam_get_item]
Jun 21 03:28:25 (none) openvpn: PAM adding faulty 
module: /lib/security/pam_pwcheck.so

You can see that the dlopening of PAM modules fails because it is not 
resolving the pam_get_item symbol. That symbol is used by PAM modules and not 
by any openvpn stuff. That should be no problem right? Because we're linking 
against libpam.so anyway?

The problem is that PAM modules should not have undefined symbols, even if it 
is assumed that the main application is linked with libpam.so. If a PAM 
module uses functions from libpam.so, it should link with it. It is easy to 
see that this is not the case on SUSE 9.1:

poste10-161:/lib/security # ldd -r pam_unix.so
    linux-gate.so.1 =>  (0xffffe000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x4001a000)
    libdl.so.2 => /lib/libdl.so.2 (0x4002f000)
    libxcrypt.so.1 => /lib/libxcrypt.so.1 (0x40033000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x40067000)
    libc.so.6 => /lib/tls/libc.so.6 (0x40075000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
undefined symbol: pam_get_item  (./pam_unix.so)
undefined symbol: pam_set_data  (./pam_unix.so)
undefined symbol: pam_putenv    (./pam_unix.so)
undefined symbol: pam_set_item  (./pam_unix.so)
undefined symbol: pam_get_data  (./pam_unix.so)
undefined symbol: pam_get_user  (./pam_unix.so)

Compare that output from this one, from Fedora Core 4, which has no missing 
symbols because it is linked with libpam.so.

[nomis80@poste10-153 security]$ ldd -r pam_unix.so
        linux-gate.so.1 =>  (0x001a3000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x00ea5000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x007b5000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x00643000)
        libc.so.6 => /lib/libc.so.6 (0x004df000)
        libpam.so.0 => /lib/libpam.so.0 (0x003f3000)
        /lib/ld-linux.so.2 (0x0068a000)
        libdl.so.2 => /lib/libdl.so.2 (0x00281000)
        libaudit.so.0 => /lib/libaudit.so.0 (0x00f44000)

FC4's pam is 0.79 while SUSE 9.1's is 0.77. I would guess that my patch would 
work on a more recent SUSE, where pam's bug would be fixed.

Reply via email to