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> 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() login_getpath() login_getcaptime() 時間値は、通常はリソースの設定値、課金システム、およ びセッション制限値に使用されます。オペレーティングシ ステムやコンパイラ ( FreeBSD 対応) でサポートしている 場合、戻り値は 2 次元 (long long) の rlim_t 型になり ます。値 ’inf’ または ’infinity’ で無限の値を表せま す。その場合 RLIM_INFINITY が戻り値となります。 login_getcapnum() login_getcapsize() login_getcapbool() login_getstyle() • ’auth’ が NULL または 空文字列でなければ、ケーパ ビリティレコードの "auth-<auth>" タイプのタグの検 索を行います。存在しなければ、デフォルトのデフォ ルトタグ "auth=" を検索します。 • 先のステップで正当な認可リストが見つからない場 合、 ’passwd’ がデフォルトの認可リストとされま す。 • ’style’ が NULL でも空でもないとき、先行ステップ で見つかった認可方式のリストからそれを検索しま す。 • ’style’ が NULL か空文字列のとき、 ’passwd’ をデ フォルトの認可に使用します。 • ’style’ が、認可方式の選択リストに見つかった場 合、それを返し、そうでないときは NULL を返しま す。 この体系により、管理者は、アクセス方式に従って、シス テムが受け取る認可方式を決定します。たとえば、管理者 がネットワークを経由したシステムへのアクセスに使用さ れた認証方式として、skey または kerberos を要求しま す。また、直接のダイアルアップまたはコンソールログイ ン経由での標準的方式を要求することもあり、"snooping" ネットワークパケットによりパスワードが発見されるリス クを著しく減少させられます。 login_setcryptfmt() 関連項目 |
crypt(3), getcap(3), login_class(3), login.conf(5), termcap(5) FreeBSD 10.0 December 27, 1996 FreeBSD 10.0 |