Re: dlopen failure

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

 



What are the dlopen errors?

BTW. I would expect this program to segfault. You need to strdup() your
"dummy" and "dummypass" to avoid this. (The module will try to free()
these conversation responses.)

Cheers

Andrew

Dimitri Priimak wrote:
> 
> Hi.
> 
> I am trying to authenicate my user using pam (,pam-0.72-20) on RedHat
> 6.2 and I did many things but nothing works and get error message which
> correspond to dlopen failure. So, below I wrote simple program which is
> trying to authenicate user 'dummy' with pussword 'dummypass'.
> Can somebody tell me what I am doing wrong?
> 
> /****
>  * file pam_test.c
>  ****/
> #include <unistd.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include <security/pam_appl.h>
> 
> #define PAM_CHECK_ERROR if( pam_result != PAM_SUCCESS ){ \
>     pam_end(pamh, 0); \
>     exit(-1); \
> }
> 
> static int pam_convf(int num_msg, const struct pam_message **msg,
>       struct pam_response **resp, void *appdata_ptr);
> 
> static struct pam_conv pam_conversation =
> {
>  &pam_convf,
>  NULL
> };
> 
> int pam_result;
> pam_handle_t *pamh;
> 
> int main(int argc, char *argv){
>   /* init pam, using xlock service  */
>   pam_result = pam_start("xlock", "priimak", &pam_conversation, &pamh);
>   printf("pam_start : %s\n", pam_strerror(pamh, pam_result));
>   PAM_CHECK_ERROR;
>   pam_result = pam_set_item(pamh, PAM_USER, "dummy");
>   printf("pam_set_item : %s\n", pam_strerror(pamh, pam_result));
>   PAM_CHECK_ERROR;
>   /* try to authenticate */
>   pam_result = pam_authenticate(pamh, 0);
>   printf("pam_authenticate : %s\n", pam_strerror(pamh, pam_result));
>   PAM_CHECK_ERROR;
> 
>   pam_end(pamh, 0);
>   exit(0);
> }
> 
> static int pam_convf(int num_msg, const struct pam_message **msg,
>                                         struct pam_response **resp, void
> 
> *appdata_ptr){
>   struct pam_response *reply = NULL;
>   int replies;
> 
>   reply = (struct pam_response *) malloc(sizeof (struct pam_response) *
> num_msg);
> 
>   for( replies = 0; replies < num_msg; replies++ ){
>     switch (msg[replies]->msg_style) {
>     case PAM_PROMPT_ECHO_ON :
>       printf("PAM_PROMPT_ECHO_ON\n");
>       reply[replies].resp_retcode = PAM_SUCCESS;
>       reply[replies].resp = "dummy";
>       break;
> 
>     case PAM_PROMPT_ECHO_OFF :
>       printf("PAM_PROMPT_ECHO_OFF\n");
>       reply[replies].resp_retcode = PAM_SUCCESS;
>       reply[replies].resp = "dummypass";
>       break;
> 
>     case PAM_TEXT_INFO :
>       printf("PAM_TEXT_INFO\n");
>       reply[replies].resp_retcode = PAM_SUCCESS;
>       reply[replies].resp = NULL;
>       break;
> 
>     case PAM_ERROR_MSG :
>       printf("PAM_ERROR_MSG\n");
>       reply[replies].resp_retcode = PAM_SUCCESS;
>       reply[replies].resp = NULL;
>       break;
> 
>     default:
>       (void) free((void *) reply);
>       return PAM_CONV_ERR;
> 
>     }
>   }
> }
> 
> *********
> I compile it like this
> % gcc -lc -lpam -ldl pam_test.c -o pam_tes
> 
> Fianally when I run it I get following output:
> % ./pam_test
> pam_start : Success
> PAM_PROMPT_ECHO_OFF
> pam_authenticate : dlopen() failure
> %
> 
> When I look into /var/log/message I see
> % cat /var/log/messages | grep -i pam
> ...
> Sep  9 23:07:48 kez PAM_pwdb[5843]: auth could not identify password for
> [dummy]
> 
> Note that I am using 'xlock' service and here it is
> % cat /etc/pam.d/xlock
> #%PAM-1.0
> auth       required     /lib/security/pam_pwdb.so shadow nullok
> %
> 
> I do have this file /lib/security/pam_pwdb.so and I checkd with strace
> it actally opens it
> as well as other libs. I also run xlock with strace and so that xlock
> using service 'xlock'
> Any ideas what is wrong?
> 
> Thanks in advance.
> Dmitri Priimak.
> 
> _______________________________________________
> 
> Pam-list@redhat.com
> https://listman.redhat.com/mailman/listinfo/pam-list





[Index of Archives]     [Fedora Users]     [Kernel]     [Red Hat Install]     [Linux for the blind]     [Gimp]

  Powered by Linux