EN JA
NSDISPATCH(3)
NSDISPATCH(3) FreeBSD Library Functions Manual NSDISPATCH(3)

名称

nsdispatch名前サービス切り替えディスパッチャルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < stdarg.h>
#include < nsswitch.h>

int
nsdispatch( void *retval, const ns_dtab dtab[], const char *database, const char *method_name, const ns_src defaults[], ...);

解説

nsdispatch() 関数は、成功してエントリが見つかるまで、データベース database のために nsswitch.conf(5) によって与えられた順序で dtab 中に指定されたメソッド (方法) を呼び出します。

retval は、結果を nsdispatch() の呼び出し側に戻すために、必要に応じて変更する各メソッドに渡されます。

各メソッドには、次の typedef によって記述された関数シグネチャ (署名) があります:

typedef int (*nss_method)( void *retval, void *mdata, va_list *ap);

dtab は、次の形式を持つ ns_dtab 構造体の配列です:

typedef struct _ns_dtab { 
 const char *src; 
 nss_method  method; 
 void  *mdata; 
} ns_dtab;

dtab 配列は、ソースの名前としての src、そのソースを操作する関数としての method、およびメソッドに渡される任意のデータのハンドルとしての mdata で、実装されたそれぞれのソースタイプあたり 1 つのエントリから成るべきです。 dtab の最後のエントリは、 src, methodmdataNULL の値を含むべきです。

さらに、メソッドは NSS モジュールで実装されるかもしれません、その場合、それらは、設定されたソースとともに databasemethod_name 引数を使用して選択されます。 ( dtab を通して供給されたメソッドは、不一致の場合には NSS モジュールで実装されたものを優先します。)

defaults は、 nsswitch.conf(5) が見つからないか間違いだらけか、または database のための関連するエントリがなければ、試みるデフォルトソースのリストを含んでいます。それは、次の形式を持つ ns_src 構造体の配列です:

typedef struct _ns_src { 
 const char *src; 
 uint32_t  flags; 
} ns_src;

defaults 配列は、 src と望ましい規準を設定する flags (通常 NS_SUCCESS、詳しい情報については、 メソッド返り値 を参照) によって示されるデフォルトによって設定される各ソースの 1 つのエントリから成るべきです。 defaults の最後のエントリは、 srcNULL に設定し、 flags を 0 に設定するべきです。

便宜上、定義されたグローバル変数は、次の通りです:

extern const ns_src __nsdefaultsrc[];

複雑なデフォルト規則を必要としない呼び出し側によって使用されるかもしれないソース‘files’のための単一のデフォルトエントリを含むために存在します。

...’は、タイプ va_list の可変引数として適切なメソッドに渡されるオプションの特別の引数です。

有効なソースタイプ

任意のソースのサポートがありますが、一般的に実装しているソースのための次の #define が利用可能です:
#define
NSSRC_FILES "files"
NSSRC_DB "db"
NSSRC_DNS "dns"
NSSRC_NIS "nis"
NSSRC_COMPAT "compat"

それぞれのソースタイプが何であるかに関する完全な説明についてh nsswitch.conf(5) を参照してください。

メソッド返り値

nss_method 関数は、検索の状態に依存する次の値の 1 つを返さなければなりません:
返り値 状態コード
NS_SUCCESS success
NS_NOTFOUND notfound
NS_UNAVAIL unavail
NS_TRYAGAIN tryagain
NS_RETURN -none-

それぞれの状態コードの完全な説明については、 nsswitch.conf(5) を参照してください。

nsdispatch() 関数は、ディスパッチャが終了したメソッドの値を返し、そうでなければ、 NS_NOTFOUND を返します。

FreeBSDStandard C Library (libc, -lc) は、 GNU C ライブラリの nsswitch インタフェースのために書かれている NSS モジュールと互換性があるスタブを提供します。しかしながら、これらのスタブは、“ passwd”と“ group”データベースの使用のみをサポートしています。

歴史

nsdispatch() 関数は、 FreeBSD 5.0 ではじめて登場しました。それは、 NetBSD 1.4 ではじめて登場した、 NetBSD プロジェクトから取り込まれました。 NSS モジュールのサポートは、 FreeBSD 5.1 ではじめて登場しました。

作者

Luke Mewburn <lukem@netbsd.org>は、 ULTRIX svc.conf(5) と Solaris nsswitch.conf(4) マニュアルページからのアイデアを使用して、この自由に配布可能な名前サービス切り替え実装を書きました。 FreeBSD プロジェクトは、スレッドと NSS モジュールのサポートを追加し、標準 C ライブラリの nsdispatch() を使用して、標準化しました。
April 4, 2010 FreeBSD