tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: libpam segfault when passwd passes NULL pamh (was Re: gcc -O2 produces invalid object code (x86_64, netbsd-5 branch))



Joerg Sonnenberger wrote:
On Mon, Mar 08, 2010 at 03:16:29PM -0500, Richard Hansen wrote:
There's at least one other way pam_start() can fail: if you misspell the name of a pam module in an /etc/pam.d file. (Can you guess how I originally stumbled across the segfault? :-P) A "module not found" message would be useful.
Yes, but that error is not send down in any meaningful way.
I'm not sure what you mean -- passwd prints the error message to stderr. 
 Other apps might not have a useful way to deliver the error message to 
the user, but that's for the apps to figure out.
We could modify pam_start() to set pamh to NULL on error so that pam_strerror() does the right thing, or we could do what we're doing now and simply ignore pamh in pam_strerror().
I think the problem will remain the same though -- you can't 
assume pam_strerror will work after a failing pam_start.
We can if pam_strerror(3) says it will.  :)

It doesn't make much sense either.
If pam_start() set pamh to NULL on error, then pam_strerror() would know 
that NULL meant a failure in pam_start().   Upon invocation with 
pamh=NULL, pam_strerror() could either return a generic message 
corresponding to the error_number (as it does right now), or it could do 
some sleuthing to generate a more detailed message (such as "module 
/misspelled/path/to/pam_foo.so not found") in a static buffer.
-Richard


Home | Main Index | Thread Index | Old Index