スポンサーリンク

LOGIN_CAP(3) FreeBSD ライブラリ関数マニュアル LOGIN_CAP(3)

名称

login_close, login_getcapbool, login_getcaplist, login_getcapnum, login_getcapstr, login_getcapsize, login_getcaptime, login_getclass, login_getclassbyname, login_getpwclass, login_getstyle, login_getuserclass, login_setcryptfmt − ログインクラスケーパビリティデー タベースをアクセスする関数

ライブラリ

システムユーティリティライブラリ (libutil, −lutil)

書式

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

void

login_close(login_cap_t *lc);

login_cap_t *

login_getclassbyname(const char *nam, const struct passwd *pwd);

login_cap_t *

login_getclass(const char *nam);

login_cap_t *

login_getpwclass(const struct passwd *pwd);

login_cap_t *

login_getuserclass(const struct passwd *pwd);

char *

login_getcapstr(login_cap_t *lc, const char *cap, char *def, char *error);

char **

login_getcaplist(login_cap_t *lc, const char *cap, const char *chars);

char *

login_getpath(login_cap_t *lc, const char *cap, char *error);

rlim_t

login_getcaptime(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error);

rlim_t

login_getcapnum(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error);

rlim_t

login_getcapsize(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error);

int

login_getcapbool(login_cap_t *lc, const char *cap, int def);

char *

login_getstyle(login_cap_t *lc, char *style, const char *auth);

const char *

login_setcryptfmt(login_cap_t *lc, const char *def, const char *error);

解説

これらの関数は login.conf(5) に備わっているログインクラスデータベースに対 するプログラミングインタフェースを表します。このデータベースに収録されて いるのは、ケーパビリティ、属性およびデフォルト環境、ユーザや特殊ユーザと しての稼動中のプログラムに対する課金上の設定などで、 /etc/master.passwd の登録データ内のログインクラスフィールドに定義されています。

login.conf(5) 内のレコードは、コロン ‘:’ で分離されるフィールドで構成され ています。各レコードの最初のフィールドは (データベース全体で一意な) レ コードのための 1 個以上の識別子です。それぞれ ’|’ で分離されており、最後 尾に ’name’ 識別子が付いていることもあります。レコードの残りのフィールド はキーワード/データのペアで構成されます。長い行は、空レコード内でバックス ラッシュを後に付けることで継続可能であり、継続行は読み易さのためにインデ ントされているかもしれません。このことは、キーワードが 2 文字に限定されな いことを除けば、 termcap(5) で使用されている形式と類似しており、読み易す く改善されている点が利点です。 termcap レコードの場合と同様 に、tc=<recordid> が記述されているフィールドによって複数レコードを相互に 関連させることができます (レコードが包含関係にあります)。 <recordid> で示 されるすべてのレコードは発生した箇所で tc= フィールドにより置きかえられま す。ケーパビリティデータベースの形式と利用方法に関する詳細については、 getcap(3) を参照してください。

login_cap インタフェースには、tc= 参照の拡張により、ログインレコードクラ スを取り出す便利な方法が備わっています。プログラム要求により、 login_getclass(), login_getpwclass(), login_getuserclass(), login_getclassbyname() のうちどれか 1 つを呼び出して実行します。それぞれ の関数はログインケーパビリティ構造体 login_cap_t を戻り値として返し、API の残りを使用して指定した値をデータベースに引き続き問い合せするときに使用 されます。 login_cap_t が不要になった場合は、関数 login_close() の呼び出 しを実行して使用していたリソースをすべて解放する必要があります。

login_cap_t の構造は login_cap.h で次のように定義されます。

      typedef struct {

char *lc_class;

char *lc_cap;

char *lc_style;

} login_cap_t;

lc_class メンバには取り出したログインクラスの名前に対するポインタがありま す。これは、 login_getclass() または login_getuserclass() を使用したクラ ス名により login_getclassbyname() 経由で直接的に、または、 login_getpwclass() を使用したユーザのログインレコード経由で間接的に要求さ れたものと必ずしも同じではありません。参照されたユーザに /etc/master.passwd で定義されたログインクラスがない場合、クラス名は NULL か空文字列です。また、定義されたクラスがデータベースに存在しない場合、各 関数は、"default" という ID のレコードを探索し、 lc_class フィールドにそ の名前を戻り値として取得します。更に、参照されるユーザが UID 0 である場合 (通常 "root" ですが、ユーザ名は関係ありません)、 login_getpwclass() は、"default" という ID のレコードの前に、"root" という ID のレコードを探 します。

lc_cap フィールドは、ライブラリで内部的に使用され、拡張されたログインケー パビリティレコードを保持します。例外的な要件のプログラムは、低次の getcap() 方式の関数と共に使用して、レコードを直接アクセスしようとします。

lc_style フィールドに対しては、ログイン自身の操作プログラムからの要求に 従って、関数 login_getstyle() により、認可方式が設定されます。

前述したように、関数 get*class() は、ケーパビリティデータベースのマッチン グまたはデフォルトレコードのアクセスに使用される login_cap_t オブジェクト を戻り値として返します。 getclassbyname() は 2 つの引数を受け取ります。最 初のものは取り出し対象レコードのレコード識別子で、 2 番めのものは、任意指 定のディレクトリ名です。最初の引数 name が NULL か、空文字列か、あるいは 補助的なまたはシステムのログインクラスデータベースにクラスが存在しない場 合、システム デフォルトレコードが代わりに返されます。 2 番めの引数 dir パ ラメータが NULL のとき、システムログインクラスデータベースだけが使用され ますが、 NULL でないときは、 ".login_conf" というファイル内で名前付きディ レクトリが検索され、中にあるケーパビリティレコードがシステムデフォルトを 上書きします。この体系によりユーザは、’me’ という ID のレコードがあるプラ イベートクラスに対するクラスレコードを生成して、システムログインクラス データベースのレコードにおけるログイン設定値を上書きできます。 login のコ ンテキストでは、次の 2 つの理由により、ユーザが上書きできないオプションが あります。第 1 に、リソース設定値やデフォルトのプロセス優先順位などの多く のオプションでは、効果を発揮させるために root 限が必要であること、第 2 に、ユーザファイルの他のフィールドは、ログインの初期段階ではセキュリティ や管理上の理由から、十分な検討が行われていません。どの設定がユーザが上書 きできるのかについての詳細については、 login.conf(5) を参照してください。 実際には、これらは、そうでない場合に常に初期起動シェルスクリプトで上書き されるユーザのデフォルトログイン環境によって明確に制限されます。ユーザの .login_conf は、ログイン時、シェルが呼ばれる前に実行される優先ログイン環 境設定での簡便な方法をユーザに提供します。

指定レコードがNULL か、空または存在しないとき、さらに不測の事態に備えてデ フォルトレコードがシステムにない場合、メモリアロケーションエラーになる か、あるいは cgetent(3) が何らかの理由によりログインケーパビリティデータ ベースにアクセスできなくなり、 NULL を返します。

関数 login_getpwclass(), login_getclass(), login_getuserclass() で、ユー ザパスワード登録情報に対応するログインクラスレコードの取り出し、 login_getclassbyname() 呼び出しによるクラス名の取り出しができます。処理が 失敗した場合は NULL が返されます。これらの関数の間で、 login_getuserclass() はユーザによる上書きが可能なユーザホームディレクトリ 上の .login_conf を含んでいますが、 login_getpwclass() および login_getclass() では、それへの参照を /etc/login.conf 上のシステムログイ ンクラスに制限している点で異なります。上記に示したように、 login_getpwclass() が login_getclass() と異なる唯一の点は、パスワードデー タベースでの定義がないときに、ユーザ ’root’ をシステム "root" として認め ていることです。他方、パスワードのポインタが NULL のとき、またはユーザレ コードにログインクラスがない場合、システムの「デフォルト」登録レコードの 取得が行われます。

プログラムで login_cap_t オブジェクトを使用する必要がなくなると、 login_close() 呼び出しを実行し、ログインクラスで使用していたリソースを解 放します。 login_close() は NULL ポインタを返しますが、これには弊害はあり ません。

残りの関数は、個別の権限レコードの取り出しに使用されます。各関数は、 login_cap_t オブジェクトを第 1 引数とし、ケーパビリティタグを第 2 引数と します。残りのパラメータは、ケーパビリティレコードが見つからないときのデ フォルトまたはエラー値を指定します。受け渡しされるパラメータの型は関連す るケーパビリティの タイプによって変わります。たとえば、文字列、リスト、時 間値、ファイルやメモリサイズ、パス (コロンで分離されたディレクトリリスト から構成される)、またはバイナリ値フラグなどです。 login.conf(5) のマニュ アルページでは、固有のタグとこれらのタイプについて取り扱っています。

このグループのすべての関数では、ポインタを返すとき free(3) 呼び出しを使用 できないことに注意してください。検索やケーパビリティタグ処理の間に割り当 てられたメモリは、後続するこのグループの関数呼び出しで自動的に再利用され るか、または login_close() 呼び出しで解除されます。

       login_getcapstr()

この関数は、単純文字列ケーパビリティを返します。文字 列が見つからないとき、 def 内の定義値がデフォルト値と して返されます。エラーが発生したとき、 error パラメー タの値が返されます。

login_getcaplist()
本関数は、名前付きケーパビリティタグの値を NULL で終 了する配列の値 リストとして返します。ログインクラス データベースには、リストタイプのタグがあり、複数のコ ンマまたはスペースで分離した値で構成されています。通 常、この関数は直接アプリケーションから呼び出されるこ とはなく、 login_getstyle() 経由で間接的に使用されま す。

login_getpath()
この関数は、 ‘&:’ で分離されたディレクトリリストを返 します。この関数の呼び出しが実行されるケーパビリティ タグはスペースで分離されたディレクトリリストで構成さ れます。

login_getcaptime()
この関数は、時、分、秒 (デフォルト)、年 ( 365 日基 準)、週、あるいはこれらの任意の組み合わせで表される値 の特殊なケーパビリティタグに関連する 時間値を返しま す。接尾語により使用される単位を決定します。 S は秒 を、M は分を、H は時を、D は日を、W は週を表し、Y は 365 日基準による年を表します。単位接尾語では大文字、 小文字の区別はありません。

時間値は、通常はリソースの設定値、課金システム、およ びセッション制限値に使用されます。オペレーティングシ ステムやコンパイラ ( FreeBSD 対応) でサポートしている 場合、戻り値は 2 次元 (long long) の rlim_t 型になり ます。値 ’inf’ または ’infinity’ で無限の値を表せま す。その場合 RLIM_INFINITY が戻り値となります。

login_getcapnum()
この関数は、タグに関する数値を返します。数値は、 tag=<value> または標準的な cgetnum() 書式 tag#<value> で表現されます。最初の書式は 2 番目のものより優先的に 使用されます。 2 番めの書式は、 getcap(3) データベー スの書式との互換性と整合性があり、数値タイプの場合、 数値のデリミタとして ‘#’ が使われます。最初の書式の場 合、指定される値は ’inf’ または ’infinity’ で、戻り値 は RLIM_INFINITY になります。指定された ケーパビリ ティタグを見つけることができない場合、 def パラメータ が返されます。エラーが起きると、 error パラメータが返 されます。

login_getcapsize()
login_getcapsize
() は、サイズ(ファイルまたはメモリの 場合)を表す値を、バイト数(デフォルト)、 512 バイト のブロック数、 KB, MB, GB 表示で返します。また long long タイプをサポートしているシステムであれば、 TB 表 示もあります。使用されている接尾語により単位、複合値 を決定し、単位は組み合せた形で使用されます。(例えば、 1m500k = 1.5megabytes) 接尾語がない値 A はバイトを、 B は 512 バイトブロックを、 K は KB を、 M は MB を、 G は GB を、そして T は TB を表します。大文字と小文字 の区別はありません。エラー値が返ってくるのは、ログイ ンケーパビリティデータベースエラーがあるか、間違った 接尾語が使用されているか、または数値が変換ができない 場合です。

login_getcapbool()
この関数は、特定のフラグに関連したバイナリ値を、返し ます。指定されたケーパビリティタグがないか、 "tag@" (boolean フラグの詳細については getcap(3) を参照) に より無効にされているとき、0 が返ります。タグが見つか れば 1 が返ります。

login_getstyle()
この関数は、ログイン認可システムで使用され、特定の ケースで有効なログインの形式を決定します。関数は、 3 つのパラメータと、 login_cap 登録レコードそのもの、お よび 2 つの任意指定パラメータ、 ’auth’ と ’style’ の 認可タイプを受け取り、これらを用いてこれらのルールと 矛盾しない認可スタイルを決定します。

’auth’ が NULL または 空文字列でなければ、ケーパ ビリティレコードの "auth-<auth>" タイプのタグの検 索を行います。存在しなければ、デフォルトのデフォ ルトタグ "auth=" を検索します。

先のステップで正当な認可リストが見つからない場 合、 ’passwd’ がデフォルトの認可リストとされま す。

’style’ が NULL でも空でもないとき、先行ステップ で見つかった認可方式のリストからそれを検索しま す。

’style’ が NULL か空文字列のとき、 ’passwd’ をデ フォルトの認可に使用します。

’style’ が、認可方式の選択リストに見つかった場 合、それを返し、そうでないときは NULL を返しま す。

この体系により、管理者は、アクセス方式に従って、シス テムが受け取る認可方式を決定します。たとえば、管理者 がネットワークを経由したシステムへのアクセスに使用さ れた認証方式として、skey または kerberos を要求しま す。また、直接のダイアルアップまたはコンソールログイ ン経由での標準的方式を要求することもあり、"snooping" ネットワークパケットによりパスワードが発見されるリス クを著しく減少させられます。

login_setcryptfmt()
crypt(3) 書式の設定のために、 ‘passwd_format’ 設定エ ントリを使用し、 login_setcryptfmt() 関数が使用されま す。エントリが見付からない場合、 def がフォールバック として使用されます。指定した引数の crypt_set_format(3) が失敗すると、 error が返されま す。

関連項目

crypt(3), getcap(3), login_class(3), login.conf(5), termcap(5)

FreeBSD 10.0 December 27, 1996 FreeBSD 10.0

スポンサーリンク