Уважаемые господа!Создал простейший тестовый PAM модуль вот он:
#include<unistd.h>
#include<fcntl.h>
#define PAM_SM_SESSION
#include<security/pam_modules.h>
int wrm(char * buf){
int fd;if((fd=open("/test/ppp",O_WRONLY|O_CREAT))<0){return PAM_SESSION_ERR;}
if((write(fd,buf,strlen(buf)))!=strlen(buf)){close(fd);return PAM_SESSION_ERR;}
close(fd);
}
PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv){
char ** uname;
int res;
res = pam_get_user(pamh, uname, "Input your name: ");
if(res!=PAM_SUCCESS){return PAM_SESSION_ERR;}
wrm(*uname);
return PAM_SUCCESS;
}Как видно, он имеет тип session и создает файл с именем пользователя в тестовой директории.
При включении в PAM-стек модуль прекрасно отрабатывает при логине по ssh.
Когда же я пытаюсь использовать его для логина к pop сервису он работает так: пропускает пользователя, даже если у него стоит флаг requisite(requred) но не создает никаких файлов.
Помогите чайнику!!!Заранее спасибо
а что возращает wrm() в обоих случаях?
>а что возращает wrm() в обоих случаях?
возвращает PAM_SUCCESS
>>а что возращает wrm() в обоих случаях?
>возвращает PAM_SUCCESS
можно спросить каким фигом, если
1) судя по вашему коду вы не возвращаете PAM_SUCCESS в wmb()
2) вы вообше никак не анализируете код возврата wmb()
?
>>>а что возращает wrm() в обоих случаях?
>>возвращает PAM_SUCCESS
> можно спросить каким фигом, если
>1) судя по вашему коду вы не возвращаете PAM_SUCCESS в wmb()
>2) вы вообше никак не анализируете код возврата wmb()
> ?да, вы, наверное, правы...
теперь в стек возвращаются значение PAM_SUCCESS из wrm().
правда, это ни на что не повлияло.