EN JA
KRB5_OPENLOG(3)
KRB5_OPENLOG(3) FreeBSD Library Functions Manual KRB5_OPENLOG(3)

名称

krb5_initlog, krb5_openlog, krb5_closelog, krb5_addlog_dest, krb5_addlog_func, krb5_log, krb5_vlog, krb5_log_msg, krb5_vlog_msgHeimdal ログ記録関数

ライブラリ

Kerberos 5 ライブラリ (libkrb5, -lkrb5)

書式

#include < krb5.h>

typedef void
(*krb5_log_log_func_t)( const char *time, const char *message, void *data);

typedef void
(*krb5_log_close_func_t)( void *data);

krb5_error_code
krb5_addlog_dest( krb5_context context, krb5_log_facility *facility, const char *destination);

krb5_error_code
krb5_addlog_func( krb5_context context, krb5_log_facility *facility, int min, int max, krb5_log_log_func_t log, krb5_log_close_func_t close, void *data);

krb5_error_code
krb5_closelog( krb5_context context, krb5_log_facility *facility);

krb5_error_code
krb5_initlog( krb5_context context, const char *program, krb5_log_facility **facility);

krb5_error_code
krb5_log( krb5_context context, krb5_log_facility *facility, int level, const char *format, ...);

krb5_error_code
krb5_log_msg( krb5_context context, krb5_log_facility *facility, char **reply, int level, const char *format, ...);

krb5_error_code
krb5_openlog( krb5_context context, const char *program, krb5_log_facility **facility);

krb5_error_code
krb5_vlog( krb5_context context, krb5_log_facility *facility, int level, const char *format, va_list arglist);

krb5_error_code
krb5_vlog_msg( krb5_context context, krb5_log_facility *facility, char **reply, int level, const char *format, va_list arglist);

解説

これらの関数はメッセージを 1 つ以上の宛先にログ記録します。

krb5_openlog() 関数はメッセージをログ記録するために使用されるログ記録 facility (機能) を作成します。 facility (機能) は 1 つ以上の宛先 (ファイル、syslog または他のデバイスを指定できる) から成ります。 program パラメータはログ記録を行うプログラムの一般的名前であるべきです。この名前は使用する当て先を検索するために使用されます。この情報は krb5.conf 設定ファイルの logging セクションに含まれています。エントリが program で見つけられないなら、 デフォルト のエントリが使用されるか、またはそれも欠けているなら、 SYSLOG が宛先として使用されます。

ログ記録 facility (機能) をクローズするためには、 krb5_closelog() 関数を使用します。

facility (機能) にメッセージをログ記録するためには、関数 krb5_log(), krb5_log_msg(), krb5_vlog() または krb5_vlog_msg() の 1 つを使用します。 _msg で終わる関数は、ただログ記録されたメッセージへのポインタを返答として reply に返します。この文字列は割り付けられ、 free() で解放するべきです。 format は標準の printf() スタイル書式文字列です (が、「バグ」セクションを参照)。

ログ記録が行われるところでより良い制御がしたいなら、 krb5_openlog() を使用する代わりに、ただ facility (機能) を初期化しますが、実際のログ記録の宛先をなにも定義しない、 krb5_initlog() を呼び出すことができます。そして、利用者は krb5_addlog_dest() と krb5_addlog_func() 関数で宛先を追加することができます。これらの 1 番目は、ログ記録の宛先を指定する文字列を取って、 facility (機能) にこれを追加します。なんらかの標準的でないログ記録を行いたいなら、ログ記録するとき使用する関数を指定できる krb5_addlog_func() 関数を使用することができます。 log 関数は現在の時間を指定する文字列である time とログ記録するためのメッセージである message でメッセージごとに呼び出されます。 close は facility (機能) がクローズするときに呼び出されます。利用者は data パラメータでアプリケーション特有のデータを渡すことができます。 minmax パラメータは宛先 (以下で定義) と同じです。無限の最大を指定するには、-1 を渡します。

krb5_openlog() は krb5_initlog() を呼び出し、次に、宛先が見つかるごとに krb5_addlog_dest() を呼び出します。

宛先

( krb5.conf で指定されるような) 定義された宛先は次の通りです:
STDERR
これはプログラムの stderr にログ記録します。
FILE: /file
FILE= /file
指定されたファイルにログ記録します。コロン (:) を使用する形式はファイルに追加され、等号 (=) があるファイルはファイルを切り詰めます。切り詰める形式はファイルをオープンし続け、一方、追加する形式は (ログを循環させることができる) それぞれのログメッセージの後でそれをクローズします。切り詰める形式は主に MIT libkrb5 との互換性のためのものです。
DEVICE= /device
これは指定されたデバイスにログ記録します。現在のところ、これは FILE:/device と同じです。
CONSOLE
コンソールにログ記録します。これは DEVICE=/dev/console と同じです。
SYSLOG[ :priority[ :facility]]
優先順序と facility (機能) 使用して、メッセージを syslog システムに送ります。これらの 1 つのために名前を得るために、 syslog(3) に渡されたマクロの名前を取り、先導する LOG_ を取り除きます ( LOG_NOTICENOTICE になります)。デフォルト値 (認識されていない値として使用される値と同様に) はそれぞれ ERRAUTH です。優先順序と facility (機能) のリストについては syslog(3) を参照してください。

各宛先は min-max/ として指定された一連のログ記録レベルと共にオプションで先頭に追加されます。 krb5_log() への level パラメータがこの範囲 (包括的) にあるなら、メッセージはこの宛先にログ記録され、そうでなければ、ログ記録されません。 min と max の値のどちらかが省略されるかもしれません、この場合 min は 0 であると仮定され、max は無限であると仮定されます。利用者がダッシュを含めないなら、min と max の両方は指定された値に設定します。範囲が指定されていないなら、すべてのメッセージはログ記録されます。

使用例

[logging] 
 kdc = 0/FILE:/var/log/kdc.log 
 kdc = 1-/SYSLOG:INFO:USER 
 default = STDERR

これはレベル 0 で kdc プログラムから /var/log/kdc.log まですべてのメッセージをログ記録して、他のメッセージは優先順序 LOG_INFO と facility (機能) LOG_USER で syslog にログ記録されます。他のすべてのプログラムはそれらの stderr にすべてのメッセージをログ記録します。

関連項目

syslog(3), krb5.conf(5)

バグ

これらの関数は、メッセージを書式化するために asprintf() を使用します。利用者のオペレーティングシステムで動作する asprintf() がないなら、置換されたものが使用されます。現在のところ、この置換は (浮動小数点のような) いくつかの正しい変換仕様を取り扱いません。これが修正されるまで、これらの変換の使用は避けられるべきです。

ログ記録が syslog facility (機能) に行われるなら、これらの関数は openlog() と syslog() の実装次第で、スレッドセーフでないかもしれません。

August 6, 1997 HEIMDAL