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

dlopen failure



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.





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