.\" Copyright (c) 1989, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)nfssvc.2 8.1 (Berkeley) 6/9/93 .\" %FreeBSD: src/lib/libc/sys/nfssvc.2,v 1.17 2004/05/12 20:45:51 josef Exp % .\" .\" WORD: principal 主体名 .\" $FreeBSD$ .Dd June 9, 1993 .Dt NFSSVC 2 .Os .Sh 名称 .Nm nfssvc .Nd NFS nfssvc - NFS サービス .Sh ライブラリ .Lb libc .Sh 書式 .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" .Sh 解説 .Fn nfssvc システムコールは、NFS デーモンが、情報をカーネルの中に渡したり カーネルから外に渡したりするのに使用され、また、 NFS デーモンがサーバデーモンとしてカーネルに入るのにも 使用されます。 .Fa flags 引数は、カーネル内でどのような処理を実行するかを示す いくつかのビットで構成されており、 .Fa argstructp は、flags 引数でどのビットが設定されたかに従って 3 つある構造体のうちの 1 つを指します。 .Pp クライアント側では、 .Xr nfsiod 8 は .Fa flags 引数を .Dv NFSSVC_BIOD に設定し、 .Fa argstructp を .Dv NULL に設定して .Fn nfssvc を呼び出し、ブロック入出力サーバデーモンとしてカーネルに入ります。 .Tn NQNFS の場合、 .Xr mount_nfs 8 は .Dv NFSSVC_MNTD フラグを、また、オプションで .Dv NFSSVC_GOTAUTH と .Dv NFSSVC_AUTHINFAIL の論理和 (or) を取ったものを設定し、 次の構造体を指すポインタとともに .Fn nfssvc を呼び出します。 .Bd -literal 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; /* セッションキー */ }; .Ed .Pp 最初の呼び出しでは、マウントポイントに対するサービスを指定する .Dv NFSSVC_MNTD フラグだけが設定されています。 マウントポイントが Kerberos を使用している場合、 クライアント側がユーザ用の ``rcmd'' 認証チケットを要求するたびに、 .Xr mount_nfs 8 ユーティリティは、 .Va errno == .Er ENEEDAUTH で .Fn nfssvc から戻ります。 .Xr mount_nfs 8 ユーティリティは、Kerberos チケットを取得しようとし、成功すると、 nfsd_cargs 構造体の ncd_authstr フィールドにチケットを入れ、 ncd_authlen フィールドと ncd_authtype フィールドを 設定した後で、フラグ .Dv NFSSVC_MNTD および .Dv NFSSVC_GOTAUTH を指定して .Fn nfssvc を呼び出します。 .Xr mount_nfs 8 がチケットを取得するのに失敗した場合、 .Fn nfssvc は、フラグ .Dv NFSSVC_MNTD , .Dv NFSSVC_GOTAUTH および .Dv NFSSVC_AUTHINFAIL を指定して呼び出されて、認証の試みが 失敗したことを示します。 .Pp サーバ側では、 .Fn nfssvc がフラグ .Dv NFSSVC_NFSD と次の構造体を指すポインタとともに呼び出されて、 .Xr nfsd 8 デーモンとしてカーネルに入ります。 .Bd -literal 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; /* セッションキー */ }; .Ed .Pp .\" .Xr nfsd 8 の文は前に移動。 .Xr nfsd 8 ユーティリティは、Kerberos 認証チケットを受信するたびに、 .Fn nfssvc から .Va errno == .Er ENEEDAUTH で戻ります。 .Xr nfsd 8 は、チケットを認証し、フィールド nsd_uid で指定された ``user id'' 用の一連の証書をサーバ上で生成しようとします。 これを行うには、最初に Kerberos チケットを認証してから、 Kerberos の主体名 (principal) を ローカル名にマップし、 .Xr getpwnam 3 と .Xr getgrouplist 3 経由でそのユーザについての一連の証書を得ます。 正常に完了すると、 .Xr nfsd 8 ユーティリティは、 .Dv NFSSVC_NFSD フラグと .Dv NFSSVC_AUTHIN フラグを設定して .Fn nfssvc を呼び出し、 nsd_cr 内の証書のマッピングをカーネルに渡し、 そのクライアント用のサーバソケット上でマップが キャッシュされるようにします。 認証が失敗した場合、 .Xr nfsd 8 はフラグ .Dv NFSSVC_NFSD および .Dv NFSSVC_AUTHINFAIL を設定して .Fn nfssvc を呼び出し、認証が失敗したことを示します。 .Pp .Xr nfsd 8 マスタサーバデーモンは、フラグ .Dv NFSSVC_ADDSOCK および次の構造体を指すポインタを設定して .Fn nfssvc を呼び出し、 .Xr nfsd 8 デーモンがサービスを行えるようにサーバ側の .Tn NFS ソケットをカーネルに渡します。 .Bd -literal struct nfsd_args { int sock; /* サービスを行うソケット */ caddr_t name; /* 接続指向のソケットのクライアントアドレス */ int namelen;/* 名前の長さ */ }; .Ed .\" .Pp .\" .Tn NFS, .Xr nfsd 8 の文は前に移動。 .Sh 戻り値 通常、 .Fn nfssvc は、サーバがシグナルによって終了されるときを除いて戻りません。 このときには、値 0 が返されます。 そうでない場合は、-1 が返され、エラーを指定するためにグローバル変数 .Va errno が設定されます。 .Sh エラー .Bl -tag -width Er .It Bq Er ENEEDAUTH この特殊なエラー値は、実際には認証サポート用、 特に、前述した Kerberos 用に使用されます。 .It Bq Er EPERM 呼び出し側がスーパユーザではありません。 .El .Sh 関連項目 .Xr mount_nfs 8 , .Xr nfsd 8 , .Xr nfsiod 8 .Sh 歴史 .Fn nfssvc システムコールは .Bx 4.4 ではじめて登場しました。 .Sh バグ .Fn nfssvc システムコールは .Tn NFS サポート用に特別に設計されています。 そのようなものですから、NFS の要求定義に特に従ったものに なっています。 本来ならば、認証サポートが必要であることを示す値を返す必要があります。 なぜなら、 .Er ENEEDAUTH は本来ならエラーではないからです。 引数である構造体のいくつかのフィールドは 正当なものであると仮定されており、直前の呼び出しから 変更されないことが時々あります。 このようであるので、 .Fn nfssvc はとりわけ注意を払って使用しなくてはなりません。