• R/O
  • HTTP
  • SSH
  • HTTPS

linux-2.4.36: Commit

2.4.36-stable kernel tree


Commit MetaInfo

Revisionc3616f6fc4d1b45866e9ff3f782345b1dbc4ca3f (tree)
Zeit2005-06-03 06:04:06
AutorNeilBrown <neilb@cse....>
CommiterMarcelo Tosatti

Log Message

[PATCH] Don't drop setuid on directories when ownership changed by NFSd

..as setuid means something totally different on directories.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>

diff ./fs/nfsd/vfs.c~current~ ./fs/nfsd/vfs.c

Ändern Zusammenfassung

Diff

--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -280,13 +280,17 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
280280 }
281281
282282 /* Revoke setuid/setgid bit on chown/chgrp */
283- if ((iap->ia_valid & ATTR_UID) && (imode & S_ISUID)
284- && iap->ia_uid != inode->i_uid) {
283+ if ((iap->ia_valid & ATTR_UID)
284+ && (imode & S_ISUID)
285+ && !S_ISDIR(imode)
286+ && iap->ia_uid != inode->i_uid) {
285287 iap->ia_valid |= ATTR_MODE;
286288 iap->ia_mode = imode &= ~S_ISUID;
287289 }
288- if ((iap->ia_valid & ATTR_GID) && (imode & S_ISGID)
289- && iap->ia_gid != inode->i_gid) {
290+ if ((iap->ia_valid & ATTR_GID)
291+ && (imode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)
292+ && !S_ISDIR(imode)
293+ && iap->ia_gid != inode->i_gid) {
290294 iap->ia_valid |= ATTR_MODE;
291295 iap->ia_mode = imode &= ~S_ISGID;
292296 }
Show on old repository browser