X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=fs%2Fnfsd%2Fauth.c;h=21928056e35ecad1c8aa5cb656d9d495df6a3022;hb=160acc2e899f26356bde92bc257253b7ca78f0c3;hp=6e92b0fe5323483cd6ce3bd25fd6d5a211d9589b;hpb=ac69e973ff0660e455f4ba1ddd4dcce4ae70ed1a;p=linux-2.6-omap-h63xx.git diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index 6e92b0fe532..21928056e35 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c @@ -9,20 +9,35 @@ #include #include #include +#include #define CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE)) +int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp) +{ + struct exp_flavor_info *f; + struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors; + + for (f = exp->ex_flavors; f < end; f++) { + if (f->pseudoflavor == rqstp->rq_flavor) + return f->flags; + } + return exp->ex_flags; + +} + int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) { struct svc_cred cred = rqstp->rq_cred; int i; + int flags = nfsexp_flags(rqstp, exp); int ret; - if (exp->ex_flags & NFSEXP_ALLSQUASH) { + if (flags & NFSEXP_ALLSQUASH) { cred.cr_uid = exp->ex_anon_uid; cred.cr_gid = exp->ex_anon_gid; cred.cr_group_info = groups_alloc(0); - } else if (exp->ex_flags & NFSEXP_ROOTSQUASH) { + } else if (flags & NFSEXP_ROOTSQUASH) { struct group_info *gi; if (!cred.cr_uid) cred.cr_uid = exp->ex_anon_uid;