Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Компиляция програмы для PAM


Автор: Elyad 5.9.2006, 13:26
Работаю с ОС Linux, изучаю в данный момент PAM. Составила простенькую программу и пытаюсь откомпилировать ее. Если кто знает, помогите разобраться в тех ошибках которые она выдает при компиляции.
Для начала привожу текст самой программы

#include <security/pam_appl.h>
#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
#include <stdio.h>


int su_conv(int num_msg, const struct pam_message **mes, struct pam_response **resp, void *appdata_ptr)
{
    struct pam_message *m=*mes;
    struct pam_response *r=*resp;

    while (num_msg--)
    {
     switch(m->msg_style)
     {
      case  PAM_PROMPT_ECHO_ON :  fprintf(stdout,"%s",m->msg);
                                  r->resp=(char *)malloc(PAM_MAX_RESP_SIZE);
                                  fgets(r->resp,PAM_MAX_RESP_SIZE-1,stdin);
                                  m++; r++;
                                  break;
      case PAM_PROMPT_ECHO_OFF:   r->resp=getpass(m->msg);
                                  m++; r++;
                                  break;
      case PAM_ERROR_MSG :        fprintf(stderr,"%s",m->msg);
                                  m++; r++;
                                  break;
      case PAM_TEXT_INFO :        fprintf(stdout,"%s",m->msg);
                                  m++; r++;
                                  break;
      default :                   break;
        }
    }
      return PAM_SUCCESS;
}
static struct  pam_conv conv={su_conv, NULL};

int main(int argc, char *argv[])
{
    int ret;
    pam_handle_t *pamh;
    struct passwd *pwd;

    ret=pam_start("su",argv[1],&conv,&pamh);
    if (ret==PAM_SUCCESS)  ret=pam_authenticate(pamh,0);
    if (ret==PAM_SUCCESS)  ret=pam_acct_mgmt(pamh,0);
    if (ret==PAM_SUCCESS)
    if  ((pwd=getpwnam(argv[1]))!=NULL)  setuid(pwd->pw_uid);
    else
             {           pam_end(pamh,PAM_AUTH_ERR);
                         exit(1);
             }
     pam_end(pamh,PAM_SUCCESS);
     return (ret==PAM_SUCCESS?0:1);
}

При этом при компиляции получаю следующее

my_pam.c: In function `su_conv':
my_pam.c:10: warning: initialization discards qualifiers from pointer target type
/tmp/ccXRTMg0.o(.text+0x171): In function `main':
: undefined reference to `pam_start'
/tmp/ccXRTMg0.o(.text+0x18a): In function `main':
: undefined reference to `pam_authenticate'
/tmp/ccXRTMg0.o(.text+0x1a3): In function `main':
: undefined reference to `pam_acct_mgmt'
/tmp/ccXRTMg0.o(.text+0x1eb): In function `main':
: undefined reference to `pam_end'
/tmp/ccXRTMg0.o(.text+0x205): In function `main':
: undefined reference to `pam_end'
collect2: ld returned 1 exit status

В чем дело? Если кто знает пишите.  smile 


                                                                                




Автор: gruy 6.9.2006, 12:55
При сборке библиотеку pam подключала -lpam ?

Автор: bilbobagginz 9.9.2006, 00:47
нужны ответы на:
  • какая команда сборки использовалась ?
  • где установлена библиотека libpam.so.*.*?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)