5.1. 제공 함수

5.1.1. 텍스트 기반 대화 함수

#include <security/pam_misc.h>
int misc_conv(num_msg,  
 msgm,  
 response,  
 appdata_ptr); 
int num_msg;
const struct pam_message **msgm;
struct pam_response **response;
void *appdata_ptr;
 

5.1.1.1. 설명

misc_conv 함수는 표준 libpam이 아니라 libpam_misc에 포함돼 있다. 인증 모듈들의 지시에 따라 적절한 문구로 사용자에게 요청해서 적절한 입력 값을 얻는다.

pam_conv(3)에 딱 맞는 적당한 대화 함수라는 점에 더해서 약간의 타임아웃 동작도 제공한다. 다섯 개 변수가 노출돼 있으며, 응용 프로그래머가 이를 이용해서 대화 함수에서 사용자의 입력을 기다릴 시간의 양을 제한할 수 있다. 다섯 개 변수는 다음과 같다.

time_t pam_misc_conv_warn_time;

이 변수는 시간이 흐르고 있다고 사용자에게 처음 경고할 (time(2)이 반환하는) 시간을 담는다. 기본값은 0이며, 이는 그런 경고를 주지 않겠다는 뜻이다. 응용에서 이 값을 미래의 어떤 시간으로 설정할 수 있는데, 단 Linux-PAM 라이브러리로 제어를 넘기기 전에 설정해야 한다.

const char *pam_misc_conv_warn_line;

pam_misc_conv_warn_time과 함께 쓰는 변수로, 타임아웃이 다가오고 있다고 사용자에게 경고할 시간이 됐을 때 표시할 문자열에 대한 포인터다. 기본값은 "...Time is running out..."을 번역한 문자열이며, 응용에서 Linux-PAM으로 제어를 넘기기 전에 바꿀 수 있다.

time_t pam_misc_conv_die_time;

이 변수는 타임아웃이 일어날 (time(2)이 반환하는) 시간을 담는다. 기본값은 0이며, 이는 대화 함수에 타임아웃이 없다는 뜻이다. 응용에서 이 값을 미래의 어떤 시간으로 설정할 수 있는데, 단 Linux-PAM 라이브러리로 제어를 넘기기 전에 설정해야 한다.

const char *pam_misc_conv_die_line;

pam_misc_conv_die_time과 함께 쓰는 변수로, 대화 시간이 끝났을 때 표시할 문자열에 대한 포인터다. 기본값은 "...Sorry, your time is up!"을 번역한 문자열이며, 응용에서 Linux-PAM으로 제어를 넘기기 전에 바꿀 수 있다.

int pam_misc_conv_died;

Linux-PAM 라이브러리에서 반환한 후에 이 변수 값이 대화 타임아웃 여부를 나타낸다. 1 값이 타임아웃이 일어났음을 나타낸다.

대화 함수에서 이진 프롬프트를 지원하는 데 다음 두 함수 포인터를 이용할 수 있다. libpamc 현재 버전에 최적화돼 있으며 바뀔 수 있다.

int (*pam_binary_handler_fn)(void *appdata, pamc_bp_t *prompt_p);

이 함수 포인터는 NULL로 초기화되어 있으며 머신 간 (숨겨진) 메시지 교환 동작을 제공하는 함수로 채울 수 있다. RSA나 디피헬만 키 교환 같은 숨겨진 인증 프로토콜에 쓰기 위한 것이다. (아직 개발 진행 중이다.)

int (*pam_binary_handler_free)(void *appdata, pamc_bp_t *delete_me);

이 함수 포인터는 PAM_BP_RENEW(delete_me, 0, 0)로 초기화되어 있으며 응용에서 원하는 대로 재정의할 수 있다.

5.1.2. 환경을 PAM 환경으로 변환하기

#include <security/pam_misc.h>
int pam_misc_paste_env(pamh,  
 user); 
pam_handle_t *pamh;
const char * const *user;
 

5.1.2.1. 설명

이 함수는 환경에 대한 포인터 목록을 받아서 그 내용물을 PAM 환경으로 업로드한다. PAM_SUCCESS가 성공을 나타낸다.

5.1.3. 로컬에 저장된 환경 해제하기

#include <security/pam_misc.h>
int pam_misc_drop_env(env); 
char **env;
 

5.1.3.1. 설명

이 함수는 pam_getenvlist(3) 함수를 보완하기 위한 것이다. env에 연계된 메모리를 해제하는데, free() 하기 전에 모든 메모리를 0으로 덮어 쓴다.

5.1.4. BSD처럼 PAM 환경 변수 설정하기

#include <security/pam_misc.h>
int pam_misc_setenv(pamh,  
 name,  
 value,  
 readonly); 
pam_handle_t *pamh;
const char *name;
const char *value;
int readonly;
 

5.1.4.1. 설명

이 함수는 pam_putenv(3)와 동등한 작업을 수행하되, BSD 계열 함수인 setenv()와 비슷한 문법을 쓴다. namevalue를 '='로 이어 붙여 name=value 형태를 만들어서 pam_putenv()로 전달한다. 단 그 PAM 변수가 이미 설정돼 있는 경우에는 마지막 인자인 readonly가 0인 경우에만 교체가 이뤄지게 된다.