クライアント側では、 nfsiod(8) は Fa flags 引数を NFSSVC_BIOD に設定し、 Fa argstructp を NULL に設定して Fn nfssvc を呼び出し、ブロック入出力サーバデーモンとしてカーネルに入ります。 NQNFS の場合、 mount_nfs8 は NFSSVC_MNTD フラグを、また、オプションで NFSSVC_GOTAUTH と NFSSVC_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;/* 名前の長さ */ };