NFSSVC

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

nfssvc - NFS nfssvc - NFS サービス  

索引

ライブラリ

Lb libc  

索引

書式

In sys/param.h In sys/mount.h In sys/time.h In nfs/rpcv2.h In nfs/nfs.h In unistd.h Ft int Fn nfssvc int flags void *argstructp  

索引

解説

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

クライアント側では、 nfsiod(8) は Fa flags 引数を NFSSVC_BIOD に設定し、 Fa argstructp を NULL に設定して Fn nfssvc を呼び出し、ブロック入出力サーバデーモンとしてカーネルに入ります。 NQNFS の場合、 mount_nfs8 は NFSSVC_MNTD フラグを、また、オプションで NFSSVC_GOTAUTHNFSSVC_AUTHINFAIL の論理和 (or) を取ったものを設定し、 次の構造体を指すポインタとともに Fn 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_nfs8 ユーティリティは、 errno == Er ENEEDAUTH で Fn nfssvc から戻ります。 mount_nfs8 ユーティリティは、Kerberos チケットを取得しようとし、成功すると、 nfsd_cargs 構造体の ncd_authstr フィールドにチケットを入れ、 ncd_authlen フィールドと ncd_authtype フィールドを 設定した後で、フラグ NFSSVC_MNTD および NFSSVC_GOTAUTH を指定して Fn nfssvc を呼び出します。 mount_nfs8 がチケットを取得するのに失敗した場合、 Fn nfssvc は、フラグ NFSSVC_MNTD NFSSVC_GOTAUTH および NFSSVC_AUTHINFAIL を指定して呼び出されて、認証の試みが 失敗したことを示します。

サーバ側では、 Fn nfssvc がフラグ NFSSVC_NFSD と次の構造体を指すポインタとともに呼び出されて、 nfsd(8) デーモンとしてカーネルに入ります。

struct nfsd_srvargs {
        struct nfsd     *nsd_nfsd;      /* カーネル内の nfsd 構造体へのポインタ */
        uid_t           nsd_uid;        /* cred にマップされる実効 uid*/
        u_int32t        nsd_haddr;      /* クライアントの IP アドレス */
        struct ucred    nsd_cr;         /* cred。uid のマップ宛先 */
        int             nsd_authlen;    /* 認証文字列の長さ (戻り) */
        u_char          *nsd_authstr;   /* 認証文字列 (戻り) */
        int             nsd_verflen;    /* および検証機能 */
        u_char          *nsd_verfstr;
        struct timeval  nsd_timestamp;  /* 検証機能からのタイムスタンプ */
        u_int32t        nsd_ttl;        /* 証書の持続時間 (秒) */
        NFSKERBKEY_T    nsd_key;        /* セッションキー */
};

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

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

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

索引

戻り値

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

索引

エラー

Bq Er ENEEDAUTH
この特殊なエラー値は、実際には認証サポート用、 特に、前述した Kerberos 用に使用されます。
Bq Er EPERM
呼び出し側がスーパユーザではありません。

 

索引

関連項目

mount_nfs8, nfsd(8), nfsiod(8)  

索引

歴史

Fn nfssvc システムコールは BSD 4.4 ではじめて登場しました。  

索引

バグ

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


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
歴史
バグ

jman



Time: 07:06:29 GMT, January 12, 2009