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

名称

parse_lt, in_lt, in_ltm, in_ltms, in_ltsログイン時間帯の解析とチェックを行う関数

ライブラリ

System Utilities Library (libutil, -lutil)

書式

#include < sys/types.h>
#include < time.h>
#include < login_cap.h>

login_time_t
parse_lt( const char *str);

int
in_lt( const login_time_t *lt, time_t *ends);

int
in_ltm( const login_time_t *lt, struct tm *t, time_t *ends);

int
in_ltms( const login_time_t *lt, struct tm *t, time_t *ends);

int
in_lts( const login_time_t *lt, time_t *ends);

解説

この関数セットは、 login.conf(5) で使用されているログイン許可時間に関する定義済みリストに対してログインとセッション時間の解析とチェックを行います。

ログインクラスの times.allowtimes.deny ケーパビリティフィールドに指定された許可、不許可セッション時間の形式はハイフンによって分離された 24 時間形式での開始、終了時間に続けて、 1、2 あるいは 3 文字の日付コードを指定する接頭辞で構成されます。日付コードは、特定の日付を選択するためにともに連結できるか、または "Any"や "All" (週の任意の日または週のすべての日) や、 (土曜日と日曜日を含む) 週の任意の日を表す "Wk"、週末(ウィークエンド)を表す "Wd"などの特別のニーモニックが使えます。

例えば、次の時間帯。

MoThFrSa1400-2200

は、月曜日、木曜日、金曜日、土曜日の午後 2 時から 10 時の間と解釈されます。

Wd0600-1800

は、土曜日と日曜日の午前 6 時から午後 6 時の間を意味します。

Any0400-1600

は、任意の曜日の午前 4 時から午後 4 時の間を意味します。

すべての時間帯はシステムのローカル時間であることに注意してください。

parse_lt() 関数は、ASCII 表示の時間帯を login_time_t タイプの構造体に変換します。定義は次の通りです。

typedef struct login_time 
{ 
  u_short       lt_start;   /* 開始時刻 */ 
  u_short       lt_end;     /* 終了時刻 */ 
  u_char        lt_dow;     /* 曜日     */ 
} login_time_t;

lt_startlt_end フィールドは、記述された開始と終了の期間の真夜中すぎの分の数を含んでいます。 lt_dow フィールドはビットフィールドで、曜の各日の 1 ビットと未使用の 1 ビットを含んでいます。 LTM_* シリーズのマクロは個々のビットのテストと組合せのために使われます。このフィールドのビットが何もセットされていないなら、すなわち、値 LTM_NONE が含まれているなら、全ての期間は不正であるとみなされます。これは、 login_time_t 値の配列の終端を示す慣例として使われます。 parse_lt() が LTM_NONE と等しい lt_dowlogin_time_t を返した場合、解析エラーに遭遇します。

残りの関数は、指定された time_t か特定の時間帯か時間帯の配列に対する構造体 tm のテスト能力を提供しています。 in_ltm() 関数は、第 2 パラメータとして渡された構造体 tm で指定された時間が第 1 パラメータによって表現された期間の範囲に収まるかどうか決定します。指定の時間が時間帯の範囲に収まるかどうかを示すブール値を返します。時間が時間帯内に収まるなり、関数の第 3 パラメータが NULL でなければ、渡された時間に関係する期間の終りが返されます。

in_ltms() 関数は第 1 パラメータが login_time_t オブジェクトの配列のポインタでなければならないということを除いて in_ltm() と類似しています。その配列は、上限が LC_MAXTIMES (64) 要素で LTM_NONE に設定された lt_dow フィールドの要素で終っています。

in_lt() と in_lts() 関数は、2 番目の引数を localtime(3) によって返された現在の時刻に設定しますが、それぞれ in_ltm() と in_ltms() と同等です。

戻り値

parse_lt() 関数は解析された時間帯を含む login_time_t タイプの構造体をすべて設定して返ります。構文解析エラーがある場合、 lt_dow フィールドは LTM_NONE (すなわち 0) に設定されます。

in_ltm() 関数は、指定された時間が第 1 パラメータとして渡された login_time_t で記述された時間帯の範囲収まれば、0 以外の値を返します。

in_ltms() は、指定された時間に収まるかどうか最初に見つかった時間帯のインデックスを返し、当てはまるものがない場合は -1 を返します。

October 20, 2008 FreeBSD