Компиляция программы под PAM

Все о программировании под *nix
Elyad
Заглянувший
Сообщения: 7
Зарегистрирован: 02 авг 2006, 13:44
Контактная информация:

Компиляция программы под PAM

Сообщение Elyad »

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

#include <security>
#include <unistd>
#include <pwd>
#include <sys>
#include <stdio>


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

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

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение fa3a »

#include "security/pam_appl.h"
плюс надо наверное либу с имплементированными pam функциями подключить во время линковки... -lpam или как там она называется
Never touch the running program!!!

Ответить