LIBTACPLUS(3)

명칭
libtacplus - TACACS+ 클라이언트 프로그램 라이브러리

서식
<taclib.h> int tac_add_server(struct tac_handle *h, const char *host, int port, const char *secret, int timeout, int flags) void tac_close(struct tac_handle *h) int tac_config(struct tac_handle *h, const char *path) int tac_create_authen(struct tac_handle *h, int action, int type, int service) void * tac_get_data(struct tac_handle *h, size_t *len) char * tac_get_msg(struct tac_handle *h) struct tac_handle * tac_open(void) int tac_send_authen(struct tac_handle *h) int tac_set_data(struct tac_handle *h, const void *data, size_t data_len) int tac_set_msg(struct tac_handle *h, const char *msg) int tac_set_port(struct tac_handle *h, const char *port) int tac_set_priv(struct tac_handle *h, int priv) int tac_set_rem_addr(struct tac_handle *h, const char *addr) int tac_set_user(struct tac_handle *h, const char *user) const char * tac_strerror(struct tac_handle *h)

해설
libtacplus 프로그램 라이브러리는, TACACS+ 네트워크 액세스 제어 프로토콜의 클라이언트측을 실현하고 있습니다. TACACS+ 에 의해, 클라이언트는 인증이나, 인가, 및 과금 처리를, 리모트 서버에 대한 네트워크상에서의 요구를 내는 것으로 실행할 수 있습니다. 이 프로그램 라이브러리는, 현재 프로토콜의 인증 부분만큼을 서포트하고 있습니다.

초기화
이 프로그램 라이브러리를 사용하기 위해서는, 어플리케이션은 최초로 tac_open() 호출을 실행해, struct tac_handle * (을)를 얻을 필요가 있습니다. 이것에 의해 다음의 조작을 위한 문맥이 준비됩니다. tac_open() 호출은, 충분한 가상 메모리가 이용할 수 있으면, 항상 정상적으로 완료합니다. 필요한 메모리를 할당할 수 없을 때, tac_open() 하 눌 (을)를 돌려줍니다.

TACACS+ 요구를 내기 전에, 프로그램 라이브러리는 컨택트 할 수 있는 서버로부터 인식되고 있을 필요가 있습니다. 프로그램 라이브러리를 환경 설정하는 간단한 방법은 tac_config() (을)를 호출하는 것입니다. tac_config() 에 의해, 프로그램 라이브러리는, tacplus.conf(5) 그리고 그 형식이 정의되고 있는 환경 설정 파일을 읽게 됩니다. 환경 설정 파일의 패스명은, 인수 file (으)로서 tac_config() 에게 건네집니다. 이 인수에는 눌 (을)를 건네줄 수도 있어 그 경우는 표준 환경 설정 파일 /etc/tacplus.conf 하지만 사용됩니다. tac_config() 하 정상 종료 때, 0 을 돌려주어, 에러의 경우는 -1 을 돌려줍니다.

프로그램 라이브러리는, tac_add_server() (을)를 호출하는 것으로, 정해진 순서에 따라 구성할 수 있습니다. 파라미터 host (은)는 서버 호스트를, 완전 수식형의 도메인명 (FQDN), 또는 피리어드로 4 개의 부분에 분할 표시한 텍스트 형식의 IP 주소에 의해 정의합니다. 파라미터 port (은)는, 서버와 접속하는 TCP 포트를 정의합니다. port 하지만 0 으로 정의되고 있으면(자), 프로그램 라이브러리는 표준 TACACS+ 포트이다 포트 49 를 사용합니다. 서버 호스트에 대한 공유 비밀은, secret 파라미터에게 건네집니다. 그것은 눌 그리고 종료한데 등인가의 캐릭터 라인에서도 괜찮습니다. 서버로부터의 수신 타임 아웃은, timeout 파라미터에, 초의 단위로 건네받습니다. flags 파라미터는, 플래그의 비트 마스크로, 서버의 여러 가지의 성질을 지정하기 위한의 것입니다. 내용은 다음과 같습니다.

TAC_SRVR_SINGLE_CONNECT
    그리고, 프로그램 라이브러리는 서버와 통신할 경우에, 단일 접속 모드로 네고시에이트 하려고 합니다. 단일 접속 모드에서는 원래의 TCP 접속이 다중 TACACS+ 세션에 대해 해방되고 있습니다. 구식의 서버는 이 모드는 서포트하고 있지 않고, 서버에 따라서는, 클라이언트가 네고시에이트 하려고 하면(자) 혼란해 버리는 것도 있습니다.

tac_add_server() (은)는 정상 종료시에 0 을 돌려주어, 에러 때는 -1 을 돌려줍니다.

tac_add_server() (은)는, 여러 차례 호출할 수가 있어 tac_config() (와)과 함께 사용합니다. 최대 10 의 서버까지 지정할 수 있습니다. 복수 서버의 지정이 있으면(자), 라운드로빈 방식에 의해 가동중의 액세스 가능한 서버를 찾아내려고 합니다. 프로그램 라이브러리는, 그러한 서버를 찾아내면(자), 서버가 가동하고 있는 한 그것을 계속 사용합니다.

TACACS+ 인증 요구의 생성
신규에 인증 요구를 만들기 시작하는 경우, tac_create_authen() (을)를 호출합니다. 인수 action, type, service 에는, TACACS+ 프로토콜 사양으로 정의되는 적절한 값을 세트 하지 않으면 안됩니다. 헤더 파일 <taclib.h> 에는, 이러한 값의 상징적 정수가 정의되고 있습니다.

tac_create_authen() 그리고 요구를 생성한 후, 여러 가지의 임의 지정 파라미터를, tac_set_data(), tac_set_port(), tac_set_priv(), tac_set_rem_addr(), tac_set_user() (을)를 호출해 부가합니다. 프로그램 라이브러리는, 이러한 함수에 제공된 자기 자신의 캐릭터 라인의 복제를 만들므로, 호출측에서 캐릭터 라인을 보존해 둘 필요는 없습니다. 디폴트로 각 파라미터는 하늘입니다만, 권한 레벨만은 ‘USER’ 권한으로 디폴트 지정되어 있습니다.

인증 요구의 송신과 응답의 수신
TACACS+ 요구가 생성되면(자), tac_send_authen() 에 의해 송신됩니다. 이 함수는, 미접속 때 서버 접속을 실시해, 요구를 송신해, 답신을 기다립니다. 이상종료(ABEND) 때, tac_send_authen() (은)는 -1 을 돌려줍니다. 정상의 경우는, TACACS+ 종료 코드와 플래그를, 정수치에 팩 해 돌려줍니다. 종료 상태는 TAC_AUTHEN_STATUS() 매크로를 사용해 추출할 수가 있습니다. 취할 수 있는 종료 코드는, <taclib.h> 그리고 정의되고 있어 내용은 다음과 같습니다.

TAC_AUTHEN_STATUS_PASS
TAC_AUTHEN_STATUS_FAIL
TAC_AUTHEN_STATUS_GETDATA
TAC_AUTHEN_STATUS_GETUSER
TAC_AUTHEN_STATUS_GETPASS
TAC_AUTHEN_STATUS_RESTART
TAC_AUTHEN_STATUS_ERROR
TAC_AUTHEN_STATUS_FOLLOW

유일한 플래그는 no-echo 플래그로, TAC_AUTHEN_NOECHO() 매크로로 검출할 수 있습니다.

서버의 응답으로부터의 정보 추출
서버로부터의 인증 응답 패킷에는, 서버 메세지나 캐릭터 라인 데이터, 혹은, 그 양자가 포함되어 있습니다. tac_send_authen() 호출이 성공하면(자), 이 정보는, tac_get_msg() (와)과 tac_get_data() 호출의 응답으로부터 꺼낼 수가 있습니다. 이러한 함수는, 패킷으로부터의 정보의 동적으로 할당할 수 있었던 카피를 돌려줍니다. 그것들이 필요없게 되었을 때에는, 호출측이 해방 하지 않으면 안됩니다. 이러한 함수로부터 돌아오는 데이터는, 반드시 눌 그리고 종료하고 있는 것이 프로텍션되고 있습니다.

tac_get_data() 의 경우, 인수 len (은)는, 프로그램 라이브러리가 종단의 널 캐릭터를 포함하지 않는 열매 사이즈의 수신 데이터의 보관 장소를 가리키고 있습니다. 이 인수에는, 호출측이 길이를 문제삼지 않는 경우는, 눌 (을)를 지정해도 괜찮습니다.

인증 연속 패킷의 송신
tac_send_authen() 하지만, 종료 코드 TAC_AUTHEN_STATUS_GETDATA, TAC_AUTHEN_STATUS_GETUSER, TAC_AUTHEN_STATUS_GETPASS 중 어떤 것인지를 포함한 값을 돌려주는 경우, 클라이언트는, TACACS+ 연속 패킷을 사용해, 서버에 대한 추가 정보를 제공할 필요가 있습니다. 그러기 위해서는, 어플리케이션은 최초로, tac_set_msg() (와)과 tac_set_data() (을)를 사용해, 패킷 유저 메세지나 데이터 필드를 설정하지 않으면 안됩니다. 클라이언트는, tac_send_authen() (을)를 사용해 연속 패킷을 송신합니다.

[주의] tac_create_authen() (은)는, 연속 패킷을 생성할 경우에는 호출하지 않고 , 초기의 인증 요구 때에만 사용할 필요가 있습니다.

연속 패킷을 수신하면(자), 서버는 TAC_AUTHEN_STATUS_GETDATA, TAC_AUTHEN_STATUS_GETUSER, TAC_AUTHEN_STATUS_GETPASS (을)를 돌려주어, 더욱 정보를 요구합니다. 어플리케이션은, 서버로부터 다른 상태 코드가 수신될 때까지, 계속 연속 패킷을 송신하지 않으면 안됩니다.

에러 메세지의 취득
인수 struct tac_handle * (을)를 받는 함수는, 이상종료(ABEND) 하면(자) 에러 메세지를 기록합니다. 에러 메세지는, tac_strerror() (을)를 호출하는 것으로 꺼낼 수가 있습니다. 메세지 텍스트는, 지정되었다 struct tac_handle * 의 새로운 에러 마다 덧쓰기됩니다. 따라서, 메세지를 보관해 두지 않으면 안 되면, 같은 핸들을 사용하는 후속의 프로그램 라이브러리 호출로 복제를 만들지 않으면 안됩니다.

클린 업
TACACS+ 프로그램 라이브러리로 사용한 리소스를 해방하려면 , tac_close() 호출해 주세요.

반환값
이하의 함수는, 정상 종료시에, 부가 아닌 수치를 돌려줍니다. 에러를 검출하면(자),-1 를 돌려주어, 에러 메세지를 기록합니다. 메세지는 tac_strerror() 에 의해 꺼낼 수 있습니다.

tac_add_server()
tac_config()
tac_create_authen()
tac_send_authen()
tac_set_data()
tac_set_msg()
tac_set_port()
tac_set_priv()
tac_set_rem_addr()
tac_set_user()

이하의 함수는, 정상 종료시에 눌이 아닌 포인터를 돌려줍니다. 충분한 가상 메모리를 할당할 수 없는 경우, 눌 (을)를 돌려주어, 에러 메세지를 기록합니다. 메세지는 tac_strerror() 그리고 꺼낼 수 있습니다.

tac_get_data()
tac_get_msg()

이하의 함수는, 정상 종료시에 눌이 아닌 포인터를 돌려줍니다. 충분한 가상 메모리를 할당할 수 없는 경우, 눌 (을)를 돌려주어, 에러 메세지를 기록하지 않습니다.

tac_open()

관련 파일
/etc/tacplus.conf

관련 항목
tacplus.conf(5) D. Carrel, Lol Grant, The TACACS+ Protocol, Version 1.78, draft-grant-tacacs-02.txt (Internet Draft).

저자
이 소프트웨어는, John Polstra 하지만 작성해, Juniper Networks, Inc 에 의해 FreeBSD 프로젝트에 기증되었습니다.