KRB5_425_CONV_PRINCIPAL(3) | FreeBSD Library Functions Manual | KRB5_425_CONV_PRINCIPAL(3) |
名称
krb5_425_conv_principal, krb5_425_conv_principal_ext, krb5_524_conv_principal — バージョン 4 プリンシパルへ/から変換するライブラリ
Kerberos 5 ライブラリ (libkrb5, -lkrb5)書式
#include < krb5.h> krb5_error_code
krb5_425_conv_principal( krb5_context context, const char *name, const char *instance, const char *realm, krb5_principal *principal);
krb5_error_code
krb5_425_conv_principal_ext( krb5_context context, const char *name, const char *instance, const char *realm, krb5_boolean (*func)(krb5_context, krb5_principal), krb5_boolean resolve, krb5_principal *principal);
krb5_error_code
krb5_524_conv_principal( krb5_context context, const krb5_principal principal, char *name, char *instance, char *realm);
解説
バージョン 4 とバージョン 5 プリンシパルの間で変換することはよくてもごちゃ混ぜして記述することができます。バージョン 4 プリンシパルは名前、インスタンス、とレルム (realm) から成ります。バージョン 5 プリンシパルは 1 つ以上の構成要素とレルムから成ります。また、ある場合には、最初の構成要素/名前はバージョン 4 とバージョン 5 の間で異なります。その上、ホストプリンシパルの 2 番目の構成要素は問題になっている完全な形でのドメイン名になります。しかし一方、バージョン 4 プリンシパルのインスタンスが最初の部分 (短いホスト名) を含みます。これらの問題のために、プリンシパルの間の変換はカスタマイズ (特注) されたサイトにならなければなりません。
krb5_425_conv_principal_ext() は与えられた name, instance と realm でバージョン 4 プリンシパルをバージョン 5 プリンシパルに変換しよう試みます。これはいくつかの可能なプリンシパルの結果をもたらすことができ、そして、 func が NULL でなければ、候補のプリンシパルごとに呼び出されます。 func はプリンシパルが“good”であるなら、真 (true) で返るべきです。これを達成するために、 krb5_425_conv_principal_ext() は krb5.conf で名前を検索します。それは最初に、 v4_name_convert/host
サブセクション中を見ます。そのサブセクションはインスタンスがホスト名として取り扱われるべきであるバージョン 4 の名前のリストを含むべきです。このリストは ( realms
セクション中の) 各レルムごとに、または libdefaults
セクションで指定することができます。その名前がプリンシパルの結果の名前を見つけられるなら、このバインドの値となります。そして、インスタンスは最初に、指定されたレルムで v4_instance_convert
を検索します。見つけたなら、結果の値はインスタンス (これは特別な場合に使用することができます)、として使用され、 ( func で) これが失敗すると変換を見つけるさらなる試みは行われません。 resolve パラメータが真 (true) であるなら、インスタンスは gethostbyname() で検索されます。これは時間を消費し、エラーの傾向があり、危険な操作であるかもしれません。次に、ホスト名のリストはインスタンスと v4_domains
変数から作成されます。その変数は、特定のレルムへの可能なドメインのリストを含むべきです。
他方では、名前が host
セクションで見つけられないなら、 v4_name_convert/plain
バインドで検索されます。ここで見つけられるなら、名前は変換されますが、インスタンスはそのままとなります。
デフォルトのホストタイプ変換のリストは次のようにコンパイルされます:
v4_name_convert = { host = { ftp = ftp hprop = hprop imap = imap pop = pop rcmd = host smtp = smtp } }
それは、設定ファイル中にこれらの名前のためのエントリがない場合にだけ、使用されるので、利用者はこれらのデフォルトを上書きすることができます。
krb5_425_conv_principal() は、 func を NULL で resolve として ( libdefaults
セクションから) v4_instance_resolve
の値で krb5_425_conv_principal_ext() を呼び出します。
krb5_524_conv_principal() は基本的に krb5_425_conv_principal() の反対を行い、それは、ただどんな名前も検索する必要はありませんが、代わりにホストのプリンシパルに属すために見つけられたインスタンスを切り詰めます。 name, instance と realm は少なくとも 40 文字であるべきです。
使用例
これが混乱させられているので、例は適切です。私たちには“foo.com”ドメインと単一のバージョン 4 レルム、FOO.COM を共有している“bar.com”ドメインがあると仮定します。バージョン 4 krb.realms ファイルは次のよう見えます:
foo.com FOO.COM .foo.com FOO.COM .bar.com FOO.COM
本件をカバーする krb5.conf ファイルに似ているかもしれません:
[libdefaults] v4_instance_resolve = yes [realms] FOO.COM = { kdc = kerberos.foo.com v4_instance_convert = { foo = foo.com } v4_domains = foo.com }
この設定でホストテーブルは次の通りです:
foo.com a-host.foo.com b-host.bar.com
次の変換が行われます:
rcmd.a-host -> host/a-host.foo.com ftp.b-host -> ftp/b-host.bar.com pop.foo -> pop/foo.com ftp.other -> ftp/other.foo.com other.a-host -> other/a-host
最初の 3 は利用者が予想する通りです。利用者が“v4_domains”を取り除くなら、(ホスト“other”を見つけることができないので) 4 番目のエントリはエラーとなります。“a-host”が有効なホスト名であっても、“other”名はホストタイププリンシパルを表すことが知られていないので、最後のエントリは変換されません。利用者が“v4_instance_resolve”をオフにするなら、2 番目の例は (デフォルトドメインであるので) “ftp/b-host.foo.com”となります。そして、利用者が名前解決を働かせるならこのすべては、もちろん有効です。
関連項目
krb5_build_principal(3), krb5_free_principal(3), krb5_parse_name(3), krb5_sname_to_principal(3), krb5_unparse_name(3), krb5.conf(5)September 3, 2003 | HEIMDAL |