Re: PAM authentication patch - v2

Brian Murphy <[email protected]>
Newsgroups gmane.comp.version-control.cvs.bugs
Message-ID <[email protected]>
>
>> +AC_ARG_WITH(
>> +  [broken-pam-appdata],
>> +  AC_HELP_STRING(
>> +    [--with-broken-pam-appdata],
>> +    [Use if you have a broken PAM which calls the conversation function
>> +    with a null application data pointer, Solaris 2.60 is a culprit 
>> here]))
>>
>
> This is _not_ the way to use configure unless a condition is totally 
> undetectable.  The whole goal behind autoconf and configure is to 
> autodetect conditions that affect your software rather than requiring 
> the builder to know or requiring someone to collect the data per 
> platform and associate it with a table somewhere.
>
> I assume you could write a snippet of code in C to detect if the 
> "application data pointer" is null?  Write that and then call 
> AC_TRY_COMPILE, AC_TRY_LINK, or AC_TRY_RUN on the code as necessary. 
> See the Autoconf manual for more on these macros and which will prove 
> most appropriate for you, but avoid AC_TRY_RUN, if possible.

I tried. The problem is that whether PAM calls the conversation function 
depends on whether the configured
module (pam_unix.so below) needs the information it supplies (username / 
password).
This depends on the system configuration.
You would need (on linux - because this stuff is very system dependant) 
in /etc/pam.d/$PROG or
/etc/pam.d/other -

auth            required        pam_unix.so
account         required        pam_unix.so

If the module was pam_deny.so then nothing needs to be checked. This is 
impossible to do reliably
and in a system independant way as far as I can see.

> Define better comments in the calls to AC_DEFINE.
>
>>
>> -    /* First we see if this user has a password in the CVS-specific
>> -       password file.  If so, that's enough to authenticate with.  If
>> -       not, we'll check /etc/passwd. */
>> +#define PAM_SERVICENAME "cvs"
>>
>
> Hrm.  Can we get $PROG (see src/sanity.sh) in here?   

Yes.

>
>
>> -    rc = check_repository_password (username, password, repository,
>> -                    &host_user);
>> +struct cvs_pam_userinfo {
>> +    char *username;
>> +    char *password;
>> +};
>>
>> -    if (rc == 2)
>> -    return NULL;
>> +#ifdef HAVE_BROKEN_PAM_APPDATA
>> +struct cvs_pam_userinfo *global_userinfo;
>> +#endif
>>
>> -    if (rc == 1)
>> +static int
>> +cvs_pam_conv(int num_msg,
>> +        const struct pam_message **msg,
>> +        struct pam_response **resp,
>> +        void *appdata_ptr)
>> +{
>> +    int i;
>> +    struct pam_response *response;
>> +    struct cvs_pam_userinfo *ui = (struct cvs_pam_userinfo 
>> *)appdata_ptr;
>> +
>> +#ifdef HAVE_BROKEN_PAM_APPDATA
>> +    if(!ui)
>>     {
>> -    /* host_user already set by reference, so just return. */
>> -    goto handle_return;
>> +    ui = global_userinfo;
>>     }
>> +#endif
>>
>
> Is the check for `if (!ui)' really necessary here?  In the 
> HAVE_BROKEN_PAM_APPDATA case does PAM really _sometimes_ pass the 
> pointer back?
>
I don't know. I got this from the apache pam authentication module. I 
would guess there is
a patch from Sun which fixes the problem which some users have applied. 
Perhaps I should
remove all this stuff until someone runs into this problem on a real system?

>
>  
> ...which print error messages and exit on error and render this error 
> handling code and error code return unecessary.

I hear.

>
> Does PAM really ask you to switch on a msg_style flag and not a 
> username or password flag to determine what sort of data to pass?  If 
> so, yuck!

Yes and yes.

>
> This change is a noop.  Please remove it.
>
>
> Another noop.

I had some problems with my editor and your (old) indentation style 
especially since the tabstop
needed to be 4 spaces. This will be fixed.

>
> Lastly, your indentation appears to be off.  Each new block should be 
> indented four spaces, with tab as an acceptable substitute for 8 spaces.

I read the HACKING file in 1.11.5 - this recommends a completely 
different indentation style...

Thanks for the comments.

/Brian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.