REPOST patch 22/38: SERVER: type checking in fh_verify()

From: Kendrick M. Smith (kmsmith@umich.edu)
Date: Wed Aug 14 2002 - 15:47:14 EST


Change the type checking in fh_verify(). This fixes a bug which
I reported on the mailing list a few days ago, and also adds a
new error code nfserr_symlink (v4 only). This is returned whenever
an operation which is illegal for symlinks is attempted on a symlink,
and takes precedence over ERR_NOTDIR or ERR_INVAL.

--- old/fs/nfsd/nfsfh.c Thu Aug 1 16:16:19 2002
+++ new/fs/nfsd/nfsfh.c Sun Aug 11 22:52:47 2002
@@ -234,11 +234,23 @@ fh_verify(struct svc_rqst *rqstp, struct

         /* Type can be negative when creating hardlinks - not to a dir */
         if (type > 0 && (inode->i_mode & S_IFMT) != type) {
- error = (type == S_IFDIR)? nfserr_notdir : nfserr_isdir;
+ if (rqstp->rq_vers == 4 && (inode->i_mode & S_IFMT) == S_IFLNK)
+ error = nfserr_symlink;
+ else if (type == S_IFDIR)
+ error = nfserr_notdir;
+ else if ((inode->i_mode & S_IFMT) == S_IFDIR)
+ error = nfserr_isdir;
+ else
+ error = nfserr_inval;
                 goto out;
         }
         if (type < 0 && (inode->i_mode & S_IFMT) == -type) {
- error = (type == -S_IFDIR)? nfserr_notdir : nfserr_isdir;
+ if (rqstp->rq_vers == 4 && (inode->i_mode & S_IFMT) == S_IFLNK)
+ error = nfserr_symlink;
+ else if (type == -S_IFDIR)
+ error = nfserr_isdir;
+ else
+ error = nfserr_notdir;
                 goto out;
         }

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 15 2002 - 22:00:38 EST