kohsuke / libpam4j

libpam4j
http://libpam4j.kohsuke.org/
MIT License
44 stars 47 forks source link

Debian 5.0 support #13

Closed Plonk42 closed 8 years ago

Plonk42 commented 8 years ago

Hi,

Out of curiosity, I tried libpam4j on several Linux distro. It worked well on all of them, except Debian 5.0 (which is not really a recent OS). The stacktrace I got is:

JNA: Callback org.jvnet.libpam.PAM$1@6aad0302 threw the following exception:
java.lang.ExceptionInInitializerError
   at java.lang.Class.initializeClass(libgcj.so.90)
   at org.jvnet.libpam.PAM$1.callback(PAM.java:80)
   at java.lang.reflect.Method.invoke(libgcj.so.90)
   at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:471)
   at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:501)
   at com.sun.jna.Function.invoke(Function.java:383)
   at com.sun.jna.Function.invoke(Function.java:315)
   at com.sun.jna.Library$Handler.invoke(Library.java:212)
   at $Proxy0.pam_authenticate(Unknown Source:0)
   at org.jvnet.libpam.PAM.authenticate(PAM.java:124)
   at Main.main(Main.java:19)
Caused by: java.lang.IllegalArgumentException: incompatible return types: public abstract org.jvnet.libpam.impl.LinuxPasswd org.jvnet.libpam.impl.LinuxCLibrary.getpwnam(java.lang.String), public abstract org.jvnet.libpam.impl.CLibrary$passwd org.jvnet.libpam.impl.CLibrary.getpwnam(java.lang.String)
   at java.lang.reflect.Proxy$ProxySignature.checkCompatibility(libgcj.so.90)
   at java.lang.reflect.Proxy$ProxyData.getProxyData(libgcj.so.90)
   at java.lang.reflect.Proxy.getProxyClass(libgcj.so.90)
   at java.lang.reflect.Proxy.newProxyInstance(libgcj.so.90)
   at com.sun.jna.Native.loadLibrary(Native.java:415)
   at com.sun.jna.Native.loadLibrary(Native.java:391)
   at org.jvnet.libpam.impl.CLibrary$Instance.init(CLibrary.java:143)
   at org.jvnet.libpam.impl.CLibrary$Instance.access$000(CLibrary.java:134)
   at org.jvnet.libpam.impl.CLibrary.<clinit>(CLibrary.java:132)
   at java.lang.Class.initializeClass(libgcj.so.90)
   ...10 more

I looked for the definition of struct passwd on Debian 5, and according to the manpage, it is the same as described in LinuxPasswd.java.

By curiosity, what would it take to add Debian 5 support? I'm very new to PAM and JNA, so I would like to know if I can consider doing it if needed in the future.

Thanks!

kohsuke commented 8 years ago

Looking at your stack trace, I suspect this was due to the use of GCJ.