LOGIN_TIMES(3)

名称
parse_lt, in_ltm, in_ltms - ログイン時間帯のチェックおよび解析を行う関数

ライブラリ
libutil

書式
<sys/types.h> <time.h> <login_cap.h> login_time_t parse_lt(const char *str) 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)

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

ログインクラスの times.allow と times.deny 権限フィールドで定義された許可、非許可セッション時間の形式は、 1 桁または 2, 3 桁以上の文字の日付コードを定義する接頭語で構成されます。 ハイフンで分離される 24 時形式の開始、終了時間がそれに続きます。 日付コードは、特定の日付を選択するために接合されるか、または "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_start および lt_end フィールドには、定義された時間の開始と終了時間が、 夜中から経過した分数を収録しています。 lt_dow フィールドはビットフィールドで、 各曜日の 1 ビットと未使用の 1 ビットを持っています。 LTM_* 系列のマクロは、ビットの個別のまたは組み合わせの検査に使用されます。 このフィールドにビットが設定されていない場合、すなわち、値 LTM_NONE が入っているとき、時間帯はすべて間違っているとみなされます。 これは、値 login_time_t の配列の終端を示す慣習として使用されます。 parse_lt() が LTM_NONE と同等の lt_dow が設定された login_time_t を返した場合、構文解析エラーがあります。

残りの関数により、指定された time_t または特別な時間帯または時間帯の配列に対する構造体 tm をテストできます。 in_ltm() により、第 2 パラメータとして渡された構造体 tm で指定された時間が 第 1 パラメータで定義された時間内にあるかどうか決定します。 指定の時間が時間帯内にあるかどうかをバイナリ型の戻り値で返します。 時間が所定の時間帯になく、関数の第 3 パラメータが NULL でなければ、 渡された時間に関係する時間帯の終了時間が返されます。

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

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

in_ltm() は、指定された時間が第 1 パラメータとして渡された login_time_t で定義した時間帯内にあれば、0 以外の値を返します。

in_ltms() は、指定された時間が適合する最初の時間帯のインデックスを 返し、ない場合は -1 を返します。

関連項目
getcap(3), login_cap(3), login_class(3), login.conf(5), termcap(5)