EN JA
KRB5_425_CONV_PRINCIPAL(3)
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, instancerealm でバージョン 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() は、 funcNULLresolve として ( libdefaults セクションから) v4_instance_resolve の値で krb5_425_conv_principal_ext() を呼び出します。

krb5_524_conv_principal() は基本的に krb5_425_conv_principal() の反対を行い、それは、ただどんな名前も検索する必要はありませんが、代わりにホストのプリンシパルに属すために見つけられたインスタンスを切り詰めます。 name, instancerealm は少なくとも 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”となります。そして、利用者が名前解決を働かせるならこのすべては、もちろん有効です。

September 3, 2003 HEIMDAL