From ed097dd0a27587d885a777401a519bf03991d62e Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Tue, 3 Jul 2012 21:57:08 +0200 Subject: [PATCH] nfs4: Do not attempt to set owner, owner_group when not supported --- .../kernel/file_systems/nfs4/Inode.cpp | 20 +++++++++++-------- .../kernel/file_systems/nfs4/InodeDir.cpp | 20 +++++++++++-------- .../kernel/file_systems/nfs4/InodeRegular.cpp | 20 +++++++++++-------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp index 836962bdac..3a8a995cad 100644 --- a/src/add-ons/kernel/file_systems/nfs4/Inode.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/Inode.cpp @@ -353,15 +353,19 @@ Inode::CreateLink(const char* name, const char* path, int mode) cattr[i].fData.fValue32 = mode; i++; - cattr[i].fAttribute = FATTR4_OWNER; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER)) { + cattr[i].fAttribute = FATTR4_OWNER; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); + i++; + } - cattr[i].fAttribute = FATTR4_OWNER_GROUP; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER_GROUP)) { + cattr[i].fAttribute = FATTR4_OWNER_GROUP; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); + i++; + } req.Create(NF4LNK, name, cattr, i, path); diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp index d41ddca6f3..bde7506f66 100644 --- a/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/InodeDir.cpp @@ -34,15 +34,19 @@ Inode::CreateDir(const char* name, int mode) cattr[i].fData.fValue32 = mode; i++; - cattr[i].fAttribute = FATTR4_OWNER; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER)) { + cattr[i].fAttribute = FATTR4_OWNER; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); + i++; + } - cattr[i].fAttribute = FATTR4_OWNER_GROUP; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER_GROUP)) { + cattr[i].fAttribute = FATTR4_OWNER_GROUP; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); + i++; + } req.Create(NF4DIR, name, cattr, i); diff --git a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp index b0e92cbbf1..3f104fcbcf 100644 --- a/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp +++ b/src/add-ons/kernel/file_systems/nfs4/InodeRegular.cpp @@ -91,15 +91,19 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie, cattr[i].fData.fValue32 = perms; i++; - cattr[i].fAttribute = FATTR4_OWNER; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER)) { + cattr[i].fAttribute = FATTR4_OWNER; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwner(getuid()); + i++; + } - cattr[i].fAttribute = FATTR4_OWNER_GROUP; - cattr[i].fFreePointer = true; - cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); - i++; + if (fFilesystem->IsAttrSupported(FATTR4_OWNER_GROUP)) { + cattr[i].fAttribute = FATTR4_OWNER_GROUP; + cattr[i].fFreePointer = true; + cattr[i].fData.fPointer = gIdMapper->GetOwnerGroup(getgid()); + i++; + } req.Open(CLAIM_NULL, cookie->fSequence++, sModeToAccess(mode), cookie->fClientId, OPEN4_CREATE, cookie->fOwnerId, name, cattr,