LIBRADIUS
Section: C Library Functions (3)
索引
jman
BSD mandoc
索引
名称
libradius
- RADIUS クライアントライブラリ
索引
書式
In radlib.h
Ft struct rad_handle *
Fn rad_acct_open void
Ft int
Fn rad_add_server struct rad_handle *h const char *host int port const char *secret int timeout int max_tries
Ft struct rad_handle *
Fn rad_auth_open void
Ft void
Fn rad_close struct rad_handle *h
Ft int
Fn rad_config struct rad_handle *h const char *file
Ft int
Fn rad_continue_send_request struct rad_handle *h int selected int *fd struct timeval *tv
Ft int
Fn rad_create_request struct rad_handle *h int code
Ft struct in_addr
Fn rad_cvt_addr const void *data
Ft u_int32_t
Fn rad_cvt_int const void *data
Ft char *
Fn rad_cvt_string const void *data size_t len
Ft int
Fn rad_get_attr struct rad_handle *h const void **data size_t *len
Ft int
Fn rad_init_send_request struct rad_handle *h int *fd struct timeval *tv
Ft int
Fn rad_put_addr struct rad_handle *h int type struct in_addr addr
Ft int
Fn rad_put_attr struct rad_handle *h int type const void *data size_t len
Ft int
Fn rad_put_int struct rad_handle *h int type u_int32_t value
Ft int
Fn rad_put_string struct rad_handle *h int type const char *str
Ft int
Fn rad_send_request struct rad_handle *h
Ft const char *
Fn rad_strerror struct rad_handle *h
索引
解説
libradius
ライブラリは、ユーザサービス遠隔認証ダイアル (RADIUS) の
クライアント側を実装しています。
RADIUS は
RFC 2138
および
RFC 2138
で定義されており、
クライアントはリモート認証サーバへのネットワーク要求により
認証とアカウンティングを受けることができます。
索引
初期設定
ライブラリを使用する場合にアプリケーションは、まず
Fn rad_auth_open
か
Fn rad_acct_open
を呼び出して、次の操作のためのコンテキストを与える
struct rad_handle
を取得します。
前者は RADIUS 認証に使用され、後者は RADIUS アカウンティングに使用されます。
Fn rad_auth_open
および
Fn rad_acct_open
の呼び出しは、仮想メモリが足りない場合を除いて、常に正常終了します。
必要なメモリが割り当てられないとき、
関数は
NULL
を返します。
以前のバージョンの本ライブラリとの互換性のために、
Fn rad_open
が
Fn rad_auth_open
の同義語として提供されています。
RADIUS への要求を出す前に、ライブラリはコンタクト可能なサーバを
確認しなければなりません。ライブラリの設定をする最も簡単な方法は
Fn rad_config
を呼び出すことです。
Fn rad_config
によって、ライブラリは
radius.conf5
でフォーマットが定義されているコンフィギュレーションファイルを読み込みます。
コンフィギュレーションファイルのパス名は引数
file
として
Fn rad_config
へ渡されます。この引数には
NULL
が
指定されてもかまいません。その場合は標準コンフィギュレーションファイル
/etc/radius.conf
が使われます。
Fn rad_config
は、正常終了時には 0 を返し、エラー終了時には -1 を返します。
ライブラリは
Fn rad_add_server
を呼び出すことによって、決まった手順で
設定することもできます。パラメータ
host
パラメータは、サーバホストを指定し、
完全なドメイン名 (FQDN) でも、またはドット区切りの四つの数字でテキスト形式
で書かれた IP アドレスのどちらで指定してもかまいません。
パラメータ
port
は、サーバに接続するときの UDP ポート番号を指定します。
port
の指定が 0 のとき、ライブラリはネットワークサービスデータベースの
`radius/udp'
または
`radacct/udp'
サービスを検索し、見つかったポートを使用します。
エントリが見つからないときには、ライブラリは標準 RADIUS ポート、
すなわち認証には 1812 をアカウンティングには 1813 を使用します。
サーバホストに関する共有シークレット情報は、
パラメータ
secret
として渡されます。パラメータは
NUL
で終了するどんな文字列もかまいません。
RADIUS プロトコルでは、共有
シークレット情報の 128 バイトより後は無視されます。サーバからの受信
タイムアウトは、パラメータ
timeout
により、秒の単位で渡されます。要求をあきらめるまでの
最大繰り返し回数は、パラメータ
max_tries
で渡されます。
Fn rad_add_server
は
正常終了のときは
0 を返し、エラーが発生したときは -1 を返します。
Fn rad_add_server
は、複数回呼び出しが可能で、
Fn rad_config
と共に使用することができます。
サーバは、10 個まで指定できます。複数サーバが
指定された場合、正しい応答が得られるか、またはサーバの
max_tries
制限に達するまで、ラウンドロビン方式で呼び出しを試みます。
索引
RADIUS 要求の生成
RADIUS 要求は、要求の種類を指定するコードと、ゼロあるいは
付加情報を与える複数の属性値で構成されます。新規要求の作成は、まず
Fn rad_create_request
呼び出しから始めます。通常の
struct rad_handle
に加えて、
この関数は、パラメータ
code
を取り、それにより要求タイプを指定します。大抵
RAD_ACCESS_REQUEST
が指定されます。
Fn rad_create_request
は正常終了のときは 0 を返し、エラーが発生したときは -1 を返します。
Fn rad_create_request
により要求が生成された後、属性を付加することができます。これは、
Fn rad_put_addr ,
Fn rad_put_int ,
Fn rad_put_string
呼び出しにより行われます。これらは、属性を決めるパラメータ
type
や、インターネットアドレス値、整数値、
NUL
で終了する文字列を、それぞれに受け取ります。
ライブラリには、関数
Fn rad_put_attr
も備わっているので、未加工で解釈できない属性も
与えることができます。引数
data
は、バイト配列の先頭のポインタで、
引数
len
は、その長さを指定します。
関数
Fn rad_put_X
は、正常終了時には 0 返し、エラー発生時には -1 を返します。
索引
要求の送信と応答の受信
RADIUS 要求は生成された後、
Fn rad_send_request
または
Fn rad_init_send_request
と
Fn rad_continue_send_request
呼び出しの組み
合わせにより、送信されます。
関数
Fn rad_send_request
は、要求を送信し、必要ならば定義されたサーバに対して
ラウンドロビン方式で接続を試み、正しい応答がを待ちます。
正しい応答があった場合、
Fn rad_send_request
は応答のタイプを指定する RADIUS コードを返します。
戻り値は、一般に
RAD_ACCESS_ACCEPT
RAD_ACCESS_REJECT
RAD_ACCESS_CHALLENGE
です。正しくない応答を受信したとき、
Fn rad_send_request
は -1 を返します。
応答待ちをブロックしたくない場合は、代わりに
Fn rad_init_send_request
および
Fn rad_continue_send_request
を使えます。
RADIUS サーバからの返答を受信するか、
またはタイムアウトになった場合、これらの関数は
Fn rad_send_request
の項で挙げた値を返します。それ以外では、ゼロが返され、
fd
および
tv
での指す値が
select(2)
に渡されるディスクリプタとタイムアウトに設定されます。
Fn rad_init_send_request
は最初に呼び出す必要があり、続いて、戻り値が 0 でなくなるまで
Fn rad_continue_send_request
呼び出しを繰り返します。
それぞれの呼び出しの間に、アプリケーションは、
select(2)
を呼び出す必要があり、その際
*fd
を読み出しディスクリプタとして渡し、
tv
で定義される時間経過の後、タイムアウトします。
select から制御が戻ったとき、
select(2)
でディスクリプタが読み出し可能である場合は、引数
selected
に 0 でない値を設定して
Fn rad_continue_send_request
を呼び出す必要があります。
RADIUS への要求と同じように、各応答は 0 または、
それ以上の属性を持っています。応答が
Fn rad_send_request
または
Fn rad_continue_send_request
により正常に受信された後、属性は
Fn rad_get_attr
によって、1 つずつ取り出すことができます。
Fn rad_get_attr
呼び出しが呼ばれるたびに、現在の応答から次の属性を
取得し、参照パラメータ
data
および
len
を介して、データへのポインタとデータ長をそれぞれ保管します。
データは応答それ自身の中に存在し、
変更してはいけないということに注意して下さい。
Fn rad_get_attr
呼び出しは、正常終了すると RADIUS 属性タイプを返します。
現在の応答内に属性が無くなると
Fn rad_get_attr
は 0 を返します。不正な属性のようなエラーが検出されると、
-1 を返します。
属性の共通タイプは、
Fn rad_cvt_addr ,
Fn rad_cvt_int ,
Fn rad_cvt_string
によりデコードすることができます。これらの関数は、
Fn rad_get_attr
により取得される属性データへのポインタを受け取ります。
Fn rad_cvt_string
の
場合は、
len
で長さも指定する必要があります。これらの関数は、属性を
インターネットアドレスや整数値、文字列などとして解釈し、得られた値を
戻り値として返します。
Fn rad_cvt_string
はメモリを動的に割り当て、
NULL
で終了した文字列を返します。アプリケーションは、不要な文字列を
free(3)
を使って解放しなければなりません。
十分な仮想メモリがない場合、
Fn rad_cvt_string
は
NULL
を返します。
Fn rad_cvt_addr
および
Fn rad_cvt_int
がエラー終了することはありません。
索引
エラーメッセージ取得
引数
struct rad_handle
を受け取る関数は、異常終了の場合にエラーメッセージを記録します。
このエラーメッセージは
Fn rad_strerror
呼び出しで取り出すことができます。メッセージテキストは、得られた
struct rad_handle
により、新しいエラーで上書きされます。
そのため、メッセージを保存しておくべきなら、
同一のハンドルを使って引き続きライブラリ呼び出しを行うことで、
複写しておかなければなりません。
索引
クリーンアップ
RADIUS ライブラリで使用したリソースは、
Fn rad_close
を呼び出しで解放できます。
索引
戻り値
以下の関数は、処理が正常に終了時、負でない値を返します。エラーを
検出したときは、
-1 を返し、
Fn rad_strerror
を使用して取出した
エラーメッセージを記録します。
- Fn rad_add_server
-
- Fn rad_config
-
- Fn rad_create_request
-
- Fn rad_get_attr
-
- Fn rad_put_addr
-
- Fn rad_put_attr
-
- Fn rad_put_int
-
- Fn rad_put_string
-
- Fn rad_init_send_request
-
- Fn rad_continue_send_request
-
- Fn rad_send_request
-
以下の関数は、処理が正常に終了した時、
NULL
でないポインタを返します。
十分な仮想メモリの割り当てができないとき、
NULL
を返しますが、
エラーメッセージは記録されません。
- Fn rad_acct_open
-
- Fn rad_auth_open
-
- Fn rad_cvt_string
-
索引
関連ファイル
/etc/radius.conf
索引
関連項目
radius.conf5
-
C. Rigney, et al
"Remote Authentication Dial In User Service (RADIUS)"
RFC 2138
-
C. Rigney
RADIUS Accounting
RFC 2139
索引
作者
このソフトウェアは元々
An John Polstra
が記述し、Juniper Networks, Inc が
Fx プロジェクトに寄贈しました。
その後
An Oleg Semyonov
が RADIUS アカウンティングの機能を追加しました。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- 初期設定
-
- RADIUS 要求の生成
-
- 要求の送信と応答の受信
-
- エラーメッセージ取得
-
- クリーンアップ
-
- 戻り値
-
- 関連ファイル
-
- 関連項目
-
- 作者
-
Time: 07:06:57 GMT, January 12, 2009