EN JA
LOGIN_CAP(3)
LOGIN_CAP(3) FreeBSD Library Functions Manual 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ログインクラスケーパビリティデータベースにアクセスするための関数

ライブラリ

System Utilities Library (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);

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

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

const char *
login_getpath( login_cap_t *lc, const char *cap, const 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);

const char *
login_getstyle( login_cap_t *lc, const 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 の、および読みやすさのためにオプションでインデントされた継続行を備えて空のエントリ内でバックスラッシュで継続できます。これは、キーワードが有効な 2 文字に制限されないことを除いて、 termcap(5) で使用されるフォーマットに似ています。そして、キーワードは、読みやすくするために通常長くなっています。 termcap エントリと同様に、複数のレコードは、‘ tc= <recordid>’を含んでいるフィールドを使用して (別のものを含む 1 つのレコード) 結合することができます。 <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_getclassbyname() によって直接的か、または、 login_getpwclass() を使用するユーザのログインレコードによって間接的かのどちらかで要求されたものと必ずしも同じではないかもしれません。参照されたユーザが /etc/master.passwd で指定されたログインクラスがない場合、クラス名は、 NULL または空の文字列です。指定されたクラスがデータベースに存在しない場合、これらの各関数は、 lc_class フィールドで返された名前と共に、‘ default’の ID でレコードを検索するでしょう。さらに、参照されるユーザが 0 の UID を持っている場合 (通常‘ root’ですが、ユーザ名は、考慮されません)、 login_getpwclass() は、‘ default’の ID でレコードを検索する前に、‘ root’の ID でレコードを検索します。

lc_cap フィールドは、拡張されたログインケーパビリティレコードを含むためにライブラリによって内部で使用されます。例外的な要求のプログラムは、レコードを直接アクセスする低いレベルの getcap() スタイルの関数と共にこれを使用したいと思うでしょう。

lc_style フィールドは、ログイン自身の操作プログラムの要求に従って、 login_getstyle() 関数により、認証スタイルに設定されます。

login_getclassbyname() 関数は、 login_cap_t オブジェクトを取得するための基本的な手段です。それは、2 つの引数を受け取ります: 最初の name は、検索されるレコードのレコード識別子です。 2 番目の pwd は、 passwd 構造体への省略可能なポインタです。まず最初に、引数は、システムとユーザの操作モードを選択する関数によって使用されます。システムモードであるとき、システムログインクラスデータベースだけが使用されます。ユーザモードであるとき、以下に述べられるように制限された方法でシステムデータベースからの設定を、ユーザのホームディレクトリにある補足ログインクラスデータベースに上書きすることができます。セキュリティによる影響を最小にするために、 nameLOGIN_MECLASS (‘ me’) であり、 pwdNULL でない時かつその時に限り login_getclassbyname() によってユーザモードに入ります。そうでなければ、システムモードが選択されます。

システムモードでは、システムデータベース /etc/login.conf の任意のレコードをアクセスすることができ、デフォルトレコードのへのフォールバックは、次のように提供されます。 nameNULL、空の文字列、またはログインクラスデータベースに存在しないクラスであるなら、代わりに、 LOGIN_DEFCLASS レコート (‘ default’) が返されます。

ユーザモードでは、 LOGIN_MECLASS レコード (‘ me’) だけがアクセスされ、‘ default’レコードへのフォールバックは、提供されません。 pwd->pw_dir によって指定されたディレクトリは、 .login_conf と呼ばれるログインデータベースファイルを検索し、それに含まれる‘ me’ケーパビリティのみ、他のレコードが無視されている間に、同じ名前でシステムレコードを上書きします。このスキームを使用して、アプリケーションは、明白にユーザがログイン設定の選択された部分集合を上書きすることができるようにします。そうするために、アプリケーションは、2 つの login_cap_t オブジェクト、1 つは、ユーザモードと他はシステムモード、を取得するべきで、次に、ユーザによって上書きすることができるログインパラメータのためのシステムオブジェクトの前のユーザオブジェクトを問い合わせます。例えば、ユーザの .login_conf は、 login(1) でサポートされるなら、シェルがログインで呼び出される前に、好ましいログイン環境をセットアップするユーザに便利な方法を提供できます。

/etc/login.conf.login_conf ファイルへのアクセスは、それぞれ uid 0 と pwd->pw_uid のために _secure_path(3) で文書化されたセキュリティチェックに従って、単に実行されることに注意してください。

指定されたレコードが NULL、空または存在しない場合、またシステムがフォールバック (代替) することが可能な‘ default’レコードがない場合、メモリ割り付けエラーあるいは、 cgetent(3) がログインケーパビリティデータベースにアクセスできない何らかの理由があります。この関数は、 NULL を返します。

関数 login_getclass(), login_getpwclass() と login_getuserclass() は、 login_getclassbyname() を呼び出すことによって、ユーザの passwd (パスワード) エントリあるいはクラス名のための適用されるログインクラスレコードを取り出し (検索し) ます。失敗した場合は、 NULL が返されます。これらの関数の間の差は、 login_getuserclass() がユーザのホームディレクトリに存在する .login_conf のユーザの上書きを含んでいること、そして login_getpwclass() および login_getclass() が /etc/login.conf のシステムログインクラスのみの検索に制限していることです。以前に説明されるように、 login_getpwclass() は、なにもパスワードデータベースで指定されないなら、‘ root’としてスーパユーザのためのデフォルトクラスを許可する点において login_getclass() と異なっています。そうでなければ、 passwd ポインタが NULL か、またはユーザレコードには、ログインクラスがないなら、システムの‘ default’エントリが取り出され (検索され) ます。基本的に、 login_getclass( name) は、 login_getclassbyname( name, NULL) に同等で、 login_getuserclass( pwd) は、 login_getclassbyname( LOGIN_MECLASS, pwd) に同等です。

いったんプログラムがもやは login_cap_t オブジェクトを使用したくなくなれば、 login_close() は、ログインクラスによって使用されるソースをすべて解放するために呼ばれるかもしれません。 login_close() 関数は、有害な副作用のない NULL ポインタが渡されるかもしれません。

残りの関数は、個別のケーパビリティレコードを取り出す (検索する) ために使用されます。各関数は、最初のパラメータとして login_cap_t オブジェクトを、 2 番目としてケーパビリティタグを、残りのパラメータは、ケーパビリティレコードが見つからない場合返されるデフォルトまたはエラー値をとります。おのおの処理されるケーパビリティのタイプに依存して渡されるか返される追加パラメータのタイプは、単純な文字列、リスト、時間値、ファイルやメモリサイズ値、パス (コロンで分離されたディレクトリリストから構成される)、またはブール値フラグです。 login.conf(5) マニュアルページは、特定のタグとそれらのタイプについて扱います。

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

login_getcapstr()
この関数は、単純な文字列ケーパビリティを返します。文字列が見つからない場合、 def 中の値がデフォルト値として返されます。あるいはエラーが生じる場合、 error パラメータ中の値が返されます。
login_getcaplist()
この関数は、 NULL で終了する配列の値の list (リスト) として指定されたケーパビリティタグに対応する値を返します。ログインクラスデータベースの中で、いくつかのタグは、 1 つ以上のコンマまたは空白で分離した値から構成されるタイプリストです。通常、この関数は、直接アプリケーションから呼び出されないが、 login_getstyle() によって間接的に使用されます。
login_getpath()
この関数は、コロン‘ :’で分離されたディレクトリのリストを返します。この関数で呼び出されるためのケーパビリティタグは、空白で分離されたディレクトリのリストで構成されます。
login_getcaptime()
この関数は、秒 (デフォルト)、分、時、日、週あるいは (365 日) 年あるいはこれらの任意の組み合わせで表される値で特別のケーパビリティタグに関連する time value (時間値) を返します。接尾辞は、使用される次の単位を決定します。‘ S’は、秒を、‘ M’は、分を、‘ H’は、時を、‘ D’は、日を、‘ W’は、週、‘ Y’は、365 日の年を表します。単位接尾辞の大文字、小文字は、無視されます。

時間値は、通常、リソース、アカウント、およびセッション制限値の設定に使用されます。オペレーティングシステムやコンパイラ ( FreeBSD では該当する) でサポートされている場合、返り値は、タイプ rlim_tquad ( long long) です。値‘ inf’または‘ infinity’は、無限の値を表現するために使用できます。その場合 RLIM_INFINITY が返されます。

login_getcapnum()
この関数は、‘ tag=<value>’または標準の cgetnum() 書式 (フォーマット) ‘ tag#<value>’のいずれかで表現される、タグに対する数値を返します。最初の書式 (フォーマット) は、2 番目に優先して使用されるべきです。 2 番目の書式 (フォーマット) は、数値タイプが数値のためのデリミタとして‘ #’を使用する、 getcap(3) データベース書式 (フォーマット) との互換性と一貫性のために供給されます。最初の書式 (フォーマット) では、与えられた値は、 RLIM_INFINITY の返り値となる‘ inf’または‘ infinity’となります。与えられたケーパビリティタグを見つけることができない場合、 def パラメータが返されます。エラーが生じる場合、 error パラメータが返されます。
login_getcapsize()
login_getcapsize() は、バイト (デフォルト)、 512 バイトブロック、キロバイト KB、メガバイト MB、ギガバイト GB、また long long タイプをサポートしているシステムでは、テラバイト TB として表現できる、サイズ (典型的には、ファイルまたはメモリ) を表す値を返します。使用されている接尾辞により単位を決定します。そして、複数の値と単位は、組み合せて使用できます。 (例えば、1m500k = 1.5 megabytes) 接尾辞がない値は、バイトを、‘ B’は、 512 バイトブロックを、‘ K’は、KB (キロバイト) を、‘ M’は、MB (メガバイト) を、‘ G’は、GB (ギガバイト) を、そして‘ T’は、TB (テラバイト) として解釈されます。大文字と小文字は、無視されます。ログインケーパビリティデータベースエラーがある場合、無効の接尾辞が使用される場合、または数値を解釈できない場合、エラー値が返されます。
login_getcapbool()
この関数は、特定のフラグに結びつけられたブール値を返します。与えられたケーパビリティタグが存在しないか、‘ tag@’ (ブールのフラグのより詳細については、 getcap(3) を参照) の存在によって否定される場合、0 を返し、タグが見つかれば 1 を返します。
login_getstyle()
この関数は、特定の場合に利用可能なログインのスタイルを決定するために、ログイン認証システムで使用されます。関数は、3 つのパラメータ、 lc エントリ自体、2 つの省略可能なパラメータ、承認タイプ authstyle を受け取り、最適なこれらの規則である認証スタイルを決定するためにこれらを適用します。
  • authNULL でも空文字列でもない場合は、ケーパビリティレコードでタイプ‘ auth- <auth>’のタグを検索します。存在しなければ、デフォルトタグ auth= を検索します。
  • 有効な認証リストが前のステップで見つからなかった場合、認証リストとして‘ passwd’をデフォルトとします。
  • styleNULL でも空でもない場合、前のステップで見つかった認証方法のリストでそれを検索します。 styleNULL か空文字列の場合、‘ passwd’認証をデフォルトとします。
  • style が、認証方法の選択リストに見つかった場合、それを返します。そうでなければ NULL を返します。

このスキームは、管理者がアクセスが生じる手段に依存するシステムによって受け取る認証方法のタイプを決定することを可能にします。例えば、"snooping" (覗き見) ネットワークパケットによりパスワードが発見されるリスクを著しく縮小して、管理者がネットワークによってシステムのアクセスするために使用される認証方法として、直接のダイヤルアップまたはコンソールログインによって標準の方法として skey または kerberos を要求できます。

login_setcryptfmt()
login_setcryptfmt() 関数は、 passwd_format 設定エントリを使用して、 crypt(3) 書式 (フォーマット) の設定のために使われます。エントリが見つからない場合、 def がフォールバック (代替) として使用されるために得られます。指示子で crypt_set_format(3) の呼び出しが失敗する場合、 error は、これを示すために返されます。
June 14, 2007 FreeBSD