summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsserver/nfs_nfsdkrpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/nfsserver/nfs_nfsdkrpc.c')
-rw-r--r--sys/fs/nfsserver/nfs_nfsdkrpc.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdkrpc.c b/sys/fs/nfsserver/nfs_nfsdkrpc.c
index d9671c4..18b6d6d 100644
--- a/sys/fs/nfsserver/nfs_nfsdkrpc.c
+++ b/sys/fs/nfsserver/nfs_nfsdkrpc.c
@@ -97,7 +97,7 @@ nfssvc_program(struct svc_req *rqst, SVCXPRT *xprt)
{
struct nfsrv_descript nd;
struct nfsrvcache *rp = NULL;
- int cacherep;
+ int cacherep, credflavor;
memset(&nd, 0, sizeof(nd));
if (rqst->rq_vers == NFS_VER2) {
@@ -186,12 +186,27 @@ nfssvc_program(struct svc_req *rqst, SVCXPRT *xprt)
}
if (nd.nd_procnum != NFSPROC_NULL) {
- if (!svc_getcred(rqst, &nd.nd_cred, &nd.nd_credflavor)) {
+ if (!svc_getcred(rqst, &nd.nd_cred, &credflavor)) {
svcerr_weakauth(rqst);
svc_freereq(rqst);
m_freem(nd.nd_mrep);
return;
}
+
+ /* Set the flag based on credflavor */
+ if (credflavor == RPCSEC_GSS_KRB5) {
+ nd.nd_flag |= ND_GSS;
+ } else if (credflavor == RPCSEC_GSS_KRB5I) {
+ nd.nd_flag |= (ND_GSS | ND_GSSINTEGRITY);
+ } else if (credflavor == RPCSEC_GSS_KRB5P) {
+ nd.nd_flag |= (ND_GSS | ND_GSSPRIVACY);
+ } else if (credflavor != AUTH_SYS) {
+ svcerr_weakauth(rqst);
+ svc_freereq(rqst);
+ m_freem(nd.nd_mrep);
+ return;
+ }
+
#ifdef MAC
mac_cred_associate_nfsd(nd.nd_cred);
#endif
OpenPOWER on IntegriCloud