nfssvc(2) FreeBSD 一般コマンドマニュアル

nfssvc

前のページ 上に戻る 次のページ

nfssvc




書式

     #include <sys/param.h>
     #include <sys/mount.h>
     #include <sys/time.h>
     #include <nfs/rpcv2.h>
     #include <nfs/nfs.h>
     #include <unistd.h>

     int
     nfssvc(int flags, void *argstructp);


解説

     nfssvc() 関数は、NFS デーモンが、情報をカーネルの中に渡したりカーネルから
     外に渡したりするのに使用され、また、 NFS デーモンがサーバデーモンとしてカ
     ーネルに入るのにも使用されます。 flags 引数は、カーネル内でどのような処理
     を実行するかを示すいくつかのビットで構成されており、 argstructp は、flags
     引数でどのビットが設定されたかに従って 3 つある構造体のうちの 1 つを指し
     ます。

     クライアント側では、 nfsiod(8)flags 引数を NFSSVC_BIOD に設定し、
     argstructp を NULL に設定して nfssvc() を呼び出し、ブロック入出力サーバデ
     ーモンとしてカーネルに入ります。 NQNFS の場合、 mount_nfs(8) は
     NFSSVC_MNTD フラグを、また、オプションで NFSSVC_GOTAUTH と
     NFSSVC_AUTHINFAIL の論理和 (or) を取ったものを設定し、次の構造体を指すポ
     インタとともに nfssvc() を呼び出します。

     struct nfsd_cargs {
             char            *ncd_dirp;      /* マウントディレクトリパス */
             uid_t           ncd_authuid;    /* 実効 uid */
             int             ncd_authtype;   /* 認証のタイプ */
             int             ncd_authlen;    /* 認証文字列の長さ */
             u_char          *ncd_authstr;   /* 認証文字列 */
             int             ncd_verflen;    /* および検証機能 */
             u_char          *ncd_verfstr;
             NFSKERBKEY_T    ncd_key;        /* セッションキー */
     };

     最初の呼び出しでは、マウントポイントに対するサービスを指定する
     NFSSVC_MNTD フラグだけが設定されています。マウントポイントが Kerberos を
     使用している場合、クライアント側がユーザ用の ``rcmd'' 認証チケットを要求
     するたびに、 mount_nfs(8) デーモンは、 errno == ENEEDAUTH で nfssvc() か
     ら戻ります。 mount_nfs(8) は、Kerberos チケットを取得しようとし、成功する
     と、 nfsd_cargs 構造体の ncd_authstr フィールドにチケットを入れ、
     ncd_authlen フィールドと ncd_authtype フィールドを設定した後で、フラグ
     NFSSVC_MNTD および NFSSVC_GOTAUTH を指定して nfssvc() を呼び出します。
     mount_nfs(8) がチケットを取得するのに失敗した場合、 nfssvc() は、フラグ
     NFSSVC_MNTD, NFSSVC_GOTAUTH および NFSSVC_AUTHINFAIL を指定して呼び出され
     て、認証の試みが失敗したことを示します。

     サーバ側では、 nfssvc() がフラグ NFSSVC_NFSD と次の構造体を指すポインタと
     ともに呼び出されて、 nfsd(8) デーモンとしてカーネルに入ります。
             u_int32t        nsd_ttl;        /* 証書の持続時間 (秒) */
             NFSKERBKEY_T    nsd_key;        /* セッションキー */
     };

     nfsd(8) デーモンは、Kerberos 認証チケットを受信するたびに、 nfssvc() から
     errno == ENEEDAUTH で戻ります。 nfsd(8) は、チケットを認証し、フィールド
     nsd_uid で指定された ``user id'' 用の一連の証書をサーバ上で生成しようとし
     ます。これを行うには、最初に Kerberos チケットを認証してから、 Kerberos
     の主体名 (principal) をローカル名にマップし、 getpwnam(3)getgrouplist(3) 経由でそのユーザについての一連の証書を得ます。正常に完了
     すると、 nfsd(8) は、 NFSSVC_NFSD フラグと NFSSVC_AUTHIN フラグを設定して
     nfssvc() を呼び出し、 nsd_cr 内の証書のマッピングをカーネルに渡し、そのク
     ライアント用のサーバソケット上でマップがキャッシュされるようにします。認
     証が失敗した場合、 nfsd(8) はフラグ NFSSVC_NFSD および NFSSVC_AUTHINFAIL
     を設定して nfssvc() を呼び出し、認証が失敗したことを示します。

     nfsd(8) マスタサーバデーモンは、フラグ NFSSVC_ADDSOCK および次の構造体を
     指すポインタを設定して nfssvc() を呼び出し、 nfsd(8) デーモンがサービスを
     行えるようにサーバ側の NFS ソケットをカーネルに渡します。

     struct nfsd_args {
             int     sock;   /* サービスを行うソケット */
             caddr_t name;   /* 接続指向のソケットのクライアントアドレス */
             int     namelen;/* 名前の長さ */
     };


戻り値

     通常、 nfssvc() は、サーバがシグナルによって終了されるときを除いて戻りま
     せん。このときには、値 0 が返されます。そうでない場合は、-1 が返され、エ
     ラーを指定するためにグローバル変数 errno が設定されます。


エラー

     [ENEEDAUTH]        この特殊なエラー値は、実際には認証サポート用、特に、前
                        述した Kerberos 用に使用されます。

     [EPERM]            呼び出し側がスーパユーザではありません。


関連項目

     mount_nfs(8), nfsd(8), nfsiod(8)


歴史

     nfssvc() 関数は 4.4BSD ではじめて登場しました。


バグ

     nfssvc() システムコールは NFS サポート用に特別に設計されています。そのよ
     うなものですから、NFS の要求定義に特に従ったものになっています。本来なら
     ば、認証サポートが必要であることを示す値を返す必要があります。なぜなら、
     ENEEDAUTH は本来ならエラーではないからです。引数である構造体のいくつかの
     フィールドは正当なものであると仮定されており、直前の呼び出しから変更され
     ないことが時々あります。このようであるので、 nfssvc() はとりわけ注意を
     払って使用しなくてはなりません。


ABELNET VPSサービス