本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > n

nis_names(3N)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

nis_names, nis_lookup, nis_add, nis_remove, nis_modify, nis_freeresult ― NIS+ ネーム空間の関数

構文

cc [ flag... ] file... -lnsl [ library... ]

#include <rpcsvc/nis.h>

nis_result *nis_lookup(const nis_name name, const u_long flags);

nis_result *nis_add(const nis_name name, const nis_object *obj);

nis_result *nis_remove(const nis_name name, const nis_object *obj);

nis_result *nis_modify(const nis_name name, const nis_object *obj);

void nis_freeresult(nis_result *result);

説明

これらの関数を使用して、NIS+ エントリ以外の NIS+ オブジェクト ( nis_objects (3N) を参照) を見つけ出し、操作します。 NIS+ テーブル内にある NIS+ エントリオブジェクトを見つけ出すには、 nis_subr(3N) を参照してください。

nis_lookup() は NIS+ 名を解決し、 NIS+ サーバーから該当するオブジェクトのコピーを戻します。 nis_add() は NIS+ ネーム空間にオブジェクトを追加し、 nis_remove() は NIS+ ネーム空間からオブジェクトを削除します。 nis_modify() は既にネーム空間にあるオブジェクトの特定の属性を変更します。

これらの関数は、 NIS+ ディレクトリ、 NIS+ テーブル、NIS+ グループ、または NIS+ プライベートの各オブジェクトを参照する名前とともに使用しなければなりません。 NIS+ エントリオブジェクトを参照する名前の場合は、 nis_subr(3N) にリストしている関数を使用する必要があります。

nis_freeresult() は、 nis_result 構造体に関連するすべてのメモリを解放します。 NIS+ の結果に関連するメモリを解放するには、必ずこの関数を呼び出します。 nis_lookup()nis_add()、 nis_remove() 、および nis_modify() はすべて、 nis_result 構造体を指すポインタを戻します。この構造体は、使用が終わりしだい、 nis_freeresult() を呼び出して 必ず 解放しなければなりません。 この構造体に戻されたオブジェクトをいくつか保持したい場合は、 nis_clone_object(3N) ( nis_subr (3N) を参照) を使用してコピーするようにします。

nis_lookup() は 2 つのパラメータを受け付けます。1 つは、 name に指定する解決の対象とするオブジェクトの名前であり、もう 1 つは、以下に説明しているフラグパラメータの flags です。オブジェクト名はインデックス名以外の NIS+ 名 ( nis_tables (3N) を参照) に対応するものでなければなりません。 このグループの関数の中で、 nis_lookup() 関数 だけ に部分修飾名を指定することができます。 パラメータ name が部分修飾名のときには、呼び出しでフラグ EXPAND_NAME を指定する 必要があります。 このフラグを省略すると、この関数は NIS_BADNAME のエラーで異常終了します。

flags パラメータには、以下に示すフラグを論理 OR で結んで指定します。

FOLLOW_LINKS  

このフラグが指定されていると、クライアントライブラリはリンクに「従い」、リンクで指定されているオブジェクトに対して別の NIS+ 参照呼び出しを発行します。 リンクされているオブジェクト自体がリンクの場合、 リンク 型オブジェクト以外のオブジェクトが見つかるまで、またはライブラリが 16 個のリンクに従うまでこのプロセスが繰り返されます。

HARD_LOOKUP  

このフラグが指定されていると、クライアントライブラリはサーバーからの答えを得るまで参照を試みます。 このフラグを使用すると、少なくとも 1 つの NIS+ サーバーが使用できるようになるまでライブラリがブロックされます。 ネットワークの接続性が低下している場合は、相当時間がかかることがあります。

NO_CACHE  

このフラグが指定されていると、クライアントライブラリはオブジェクトキャッシュをどれもバイパスし、NIS+ マスターサーバーまたはそのレプリカの 1 つからオブジェクトを得ます。

MASTER_ONLY  

このフラグが指定されていると、クライアントライブラリはオブジェクトキャッシュやドメインのレプリカをどれもバイパスし、オブジェクトのドメインの NIS+ マスターサーバーからオブジェクトをフェッチします。 これによって、パフォーマンスが低下する可能性はあるものの、戻されるオブジェクトは確実に最新のものになります。マスターサーバーが使用できない場合や、物理的に距離が離れている場合は、異常終了します。

EXPAND_NAME  

このフラグが指定されていると、クライアントライブラリは、環境変数 NIS_PATH を使用する nis_getnames() 関数 ( nis_subr(3N) を参照) を呼び出して部分修飾名を展開します。

ステータス値を ASCII テキストに変換するには、 nis_sperrno() 関数 ( nis_error(3N) を参照) を使用します。

戻された結果の objects 配列には、要求で解決されたオブジェクトがいくつも入っていることがあります。 FOLLOW_LINKS フラグを指定した場合は、対象とするリンクがテーブル内でポイントしているときに、関数が正しく終了することによっていくつものエントリが戻されることがあります。 リンクに従う際にエラーが発生すると、objects 配列にはリンクオブジェクトのコピーがそのまま入ります。

nis_add() 関数はオブジェクト obj を受け付け、それを name の名前で NIS+ ネーム空間に追加します。 この操作は、要求を出すクライアントがオブジェクトの追加先とするドメインに対して 作成 アクセス権を持っていない限り、異常終了します。 パラメータ name には完全修飾の NIS+ 名を指定する必要があります。 オブジェクトメンバーの zo_namezo_domain がこの名前を使用して作成されます。 既に同じオブジェクトがあれば、この操作は異常終了します。 そのため、別のプロセスによって追加された別のオブジェクトを誤って上書きしてオブジェクトを追加するようなことはありません。

nis_remove() 関数は name で指示された名前を持つオブジェクトを NIS+ ネーム空間から削除します。 この要求を出すクライアントは、オブジェクトのあるドメインに対して 消去 アクセス権を持っていなければなりません。 指定したオブジェクトがリンクの場合は、そのポイント先のオブジェクトではなく、リンクが削除されます。 パラメータ obj が NULL 以外のときは、削除対象のオブジェクトのコピーを指しているものとみなされます。 この場合、渡されたオブジェクトと同じ識別子のオブジェクトがサーバー上にないときは、 NIS_NOTSAMEOBJ のエラーで操作が異常終了します。 そのため、目的のオブジェクトだけの削除が確実に行われるようになります。 パラメータ name には完全修飾の NIS+ 名を指定する必要があります。

nis_modify() 関数は name で指示されたオブジェクトを、 obj が指すオブジェクト中のフィールド値に変更します。 このオブジェクトには、ネーム空間にある変更対象のオブジェクトのコピーが入っていなければなりません。 渡されたオブジェクトの識別子がネーム空間にある変更対象のオブジェクトの識別子と一致しない場合、この操作はエラー NIS_NOTSAMEOBJ で異常終了します。

注 : 通常、 nis_object 構造体のメンバー zo_name の内容は、 name パラメータで渡された名前から作成されます。 ただし、NULL 以外の場合には、クライアントライブラリは zo_name メンバー中の名前を使用してオブジェクトの名前変更操作を実行します。 この名前に `.'(ドット) がある場合は、 必ず 引用符で囲まなければなりません。 この条件を満たしていないと、操作は異常終了し、NIS_BADNAME のエラーコードが戻されます。

結果

関数は、 nis_result 型の構造体を指すポインタを戻します。

struct nis_result { 
     nis_error status; 
     struct { 
               u_int objects_len; 
               nis_object *objects_val; 
     } objects; 
     netobj    cookie; 
     u_long    zticks; 
     u_long    dticks; 
     u_long    aticks; 
     u_long    cticks; 
};

status メンバーには操作のエラーステータスが入ります。 エラーを説明するテキストメッセージを得るには、 nis_sperrno() 関数 ( nis_error(3N) を参照) を呼び出します。

objects 構造体には 2 つのメンバーが含まれています。 1 つは objects_val で、 nis_object 構造体の配列です。もう 1 つは objects_len で、配列内のセル数を示します。 これらのオブジェクトを解放するには nis_freeresult() を呼び出します。 オブジェクトをいくつか保持したい場合は、 nis_clone_object() 関数でコピーしてから オブジェクトを nis_destroy_object() 関数 ( nis_server(3N) を参照) で解放します。 nis_object 構造体 についての詳細は、 nis_objects(3N) を参照してください。

要求においてかかった種々の時間の明細も含まれています。 これらの時間明細を使用することによって、高速にアクセスできるようデータの編成方法を調整したり、別の実装方法のデータベースと比較したり ( nis_db(3N) を参照) できます。

zticks  

NIS+ サービス自体にかかった時間。 サーバーが要求を受信した時点から返答を送信するまでの時間です。

dticks  

データベースのバックエンドでかかった時間。 データベース呼び出しを開始してから結果が戻るまでの時間です。 要求でデータベースを複数回呼び出す場合は、その呼び出しすべてにかかった時間の合計です。

aticks  

「アクセラレータ」またはキャッシュにかかった時間。 要求を解決するために必要なサーバーの位置を見つけ出す時間も含まれます。

cticks  

要求にかかった合計時間。 このクロックは、クライアントライブラリに入った時点で開始し、結果が戻った時点で停止します。 この値から他の時間の合計を差し引くと、NIS+ 要求を生成するためのローカルオーバヘッドを得ることができます。

zticks の値から dticks の値を差し引くと、サービスコード自体にかかった時間となります。 cticks の値から zticks の値と aticks の値の合計を差し引くと、クライアントライブラリ自体にかかった時間となります。 注 : 時間はすべてマイクロ秒で測定されます。

マルチスレッドの使用法

Thread Safe: 

Yes

Cancel Safe: 

Yes

Fork Safe: 

No

Async-cancel Safe:
  

No

Async-signal Safe:
  

No

これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。 これらの関数は、キャンセルポイントの関数を呼び出した時点でキャンセルポイントになります。

マルチスレッド環境では fork() の後および exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではありません。 非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリケーションでこれらの関数を呼び出さないようにしてください。

戻り値

クライアントライブラリから種々のエラーや診断が戻ります。一般的なものを以下に説明します。

NIS_SUCCESS  

要求は正常終了しました。

NIS_S_SUCCESS  

要求は正しく操作されましたが、戻されたオブジェクトはサーバーから直接戻されたものではなく、オブジェクトキャッシュからのものです。 オブジェクトキャッシュからのオブジェクトを求めているのではない場合、参照関数を呼び出すときにフラグ NO_CACHE を指定する必要があります。

NIS_NOTFOUND  

指定のオブジェクトはネーム空間に存在しません。

NIS_CACHEEXPIRED
  

戻されたオブジェクトは 期限切れ のオブジェクトキャッシュからのものです。 有効期間値はゼロになっており、オブジェクトは変更されている可能性があります。 フラグ NO_CACHE を参照関数に渡すと、期限の切れていないオブジェクトのコピーを得る操作が行われます。

NIS_NAMEUNREACHABLE
  

指定のオブジェクトのディレクトリ用サーバーに到達できません。 この状態は、ネットワークパーティションまたはすべてのサーバーがクラッシュしたときに発生することがあります。 HARD_LOOKUP フラグを参照してください。

NIS_UNKNOWNOBJ  

戻されたオブジェクトは認識できない型になっています。

NIS_TRYAGAIN  

接続されているサーバーがビジーで、ユーザーからの要求を取り扱うことができません。 追加削除 、および 変更 操作の場合は、ディレクトリのマスターサーバーが利用できないか、データベースのチェックポイントが進行中のときにこのフラグが戻されます。 サーバーが内部状態を更新しているときにも戻されることがあります。 また、 nis_list() の場合は、クライアントがコールバックを指定したとき、サーバーがコールバックを扱うためのリソースを十分に持っていない場合に戻されます。

NIS_SYSTEMERROR  

要求を処理しようとしたときに、汎用システムエラーが発生しました。 一般的な原因は、サーバーがクラッシュしたか、データベースが破壊されたことです。 syslog のレコードをチェックし、サーバーからのエラーメッセージを調べてください。

NIS_NOT_ME  

サーバーに要求が出されましたが、そのサーバーは対象とする名前に対して機能しません。 通常、このようなことは起こりませんが、サーバーの組み込み位置メカニズムを使用していない場合に、ユーザー独自のメカニズムが壊れているときに発生することがあります。

NIS_NOMEMORY  

通常は、致命的な結果となります。 サービスでヒープスペースが不足していることを意味します。

NIS_NAMEEXISTS  

既に存在する名前を追加しようとしました。 名前を追加するには、まず既存の名前を削除してから新しいオブジェクトを追加するか、既存のオブジェクトの同一名を変更します。

NIS_NOTMASTER  

レプリカサーバー上のデータベースを更新しようとしました。

NIS_INVALIDOBJ  

obj でポイントされているオブジェクトは有効な NIS+ オブジェクトではありません。

NIS_BADNAME  

関数に渡された名前は有効な NIS+ 名ではありません。

NIS_LINKNAMEERROR
  

渡された名前は リンク 型のオブジェクトとして解決されましたが、そのリンクの内容が無効な名前をポイントしています。

NIS_NOTSAMEOBJ  

削除対象のオブジェクトが要求で渡されたオブジェクトと同じではないので、ネーム空間からオブジェクトを削除する操作が打ち切られました。

NIS_NOSUCHNAME  

このハードエラーは、テーブルオブジェクトには指定されたディレクトリがないことを示します。 このエラーは、当該テーブルに機能するサーバーの親サーバーが、テーブルの入っているディレクトリに関する情報を持っていないときに発生します。

NIS_NOSUCHTABLE  

指定のテーブルがありません。

NIS_MODFAIL  

変更が異常終了しました。

NIS_FOREIGNNS  

名前が完全には解決されていない可能性があります。 関数に渡された名前が NIS+ 名前ツリーの外側にあるネーム空間で解決されると、このエラーと一緒に ディレクトリ 型の NIS+ オブジェクトが戻されます。このオブジェクトにはネーム空間の型と、そのネーム空間内のサーバーの接続情報が入っています。

NIS_RPCERROR  

これは致命的なエラーで、何らかの形で RPC サブシステムが異常終了したことを示します。 通常は、RPC 要求が異常終了した理由を示す syslog(3C) メッセージがあるはずです。

環境

NIS_PATH  

この変数は、フラグ EXPAND_NAME を設定したときに、 nis_lookup() で使用される検索パスとなります。

警告

HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。

NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートします。

注意

オブジェクトの名前を変更することによってオブジェクトが別のドメインとなるような場合は、名前を変更できません。

テーブルオブジェクトのスキーマを変更することはできません。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.