Use fsal_set_credentials in GPFSFSAL_unlink, GPFSFSAL_rename, and GPFSFSAL_link

Due to atomicity problems, GPFS needs to do the permission checking for
directory mutating operations, so set the thread credentials to allow that and
strip the old explicit permission checking.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Strip explicit permission checking from FSAL_PT

Permission checking will be done up in cache_inode_setattr

This is the FSAL_PT equivalent of commits:
e202b2344dea80d59220cec64879b31c9216667c
1ea7d624dacfb62d5cc906e0a5973c32dc27f091

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Strip explicit permission checking from FSALs: HPSS, LUSTRE, POSIX, VFS, XFS

Permission checking will be done uniformly up in Cache_Inode layer.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Strip explicit permission checking from MFSL

Permission checking will be done uniformly up in Cache_Inode layer.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Strip local op routines from FSAL_TEMPLATE

The routines in FSAL/common_methods.c should be used unless they must be
overode.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Strip testing of FSAL_access and FSAL_test_access

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Strip unused FSAL access check routines

The following routines are no longer used (only FSAL_test_access is still used):

FSAL_access
FSAL_setattr_access
FSAL_rename_access
FSAL_create_access
FSAL_unlink_access
FSAL_link_access

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Remove unused FSAL_OWNER_OK flag

This flag was originally implemented to allow permission checking to evaluate
the conditions where the file owner is allowed access despite the mode or ACL.
This condition is now evaluated directly for I/O operations.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Remove unused FSAL_F_OK flag

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Add some debug to cache_inode_access

Signed-off-by: Frank Filz <ffilz@us.ibm.com>

Conflicts:

	src/Cache_inode/cache_inode_access.c
Add fsal_set_credentials to fsal_symlink for FSAL_GPFS

Use fsal_set_credentials to avoid needing to chown the symlink.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Allow root execute permission if someone is allowed execute

For mode check, test is simple.

For ACL check, if we are looking for execute permission for root,
we walk the ACL, and consider ANY ACE as applicable, however, we
then ignore a DENY ACE.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Use cache_inode_access_no_mutex wrapper instead of calling cache_inode_access_sw

These two external callers of cache_inode_access_sw make the same call as
cache_inode_access_no_mutex, making use of that wrapper will simplify some
later patches.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Make cache_inode_access_sw wrappers static inline

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Add allowed and denied parms to access check routines

Affects:

fsal_test_access
fsal_check_access
cache_inode_access_sw

These parms allow access check to return the specific access mask bits
that were allowed and denied if the caller desires.

These will be used by high level permission checking to make some
more complex decisions, also, it will allow the protocol ACCESS routines
to make a single access check and be able to identify which bits should
be returned to the client.

Also, a flag is added to allow ACL interpretation to not stop at first
applicable DENY ACE. This will be used by NFS v3 and v4 ACCESS ops to
determine access in a single pass.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Make getattr optional with cache_inode_lookup and cache_inode_create

Not all callers of cache_inode_lookup need the attributes and we
are going to check permissions on getattr so it will be good to
not ask for them if we won't use them.

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Don't get attr via nfs_FhandleToCache if we don't need them

Signed-off-by: Frank Filz <ffilz@us.ibm.com>
Add FSAL_ATTRS_V3 to cover all attrs in fattr3 structure

In some cases we need to make sure we get all the FSAL attr flags
corresponding to the attributes present in NFS v3 fattr3 structure.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Fixup some error translations

New error: CACHE_INODE_BADNAME

ERR_FSAL_ISDIR -> CACHE_INODE_IS_A_DIRECTORY
ERR_FSAL_ISDIR -> STATE_IS_A_DIRECTORY

CACHE_INODE_BADNAME -> STATE_INVALID_ARGUMENT
CACHE_INODE_BADNAME -> NFS4ERR_BADNAME
CACHE_INODE_BADNAME -> NFS3ERR_INVAL (v3 doesn't have BADNAME)
CACHE_INODE_BADNAME -> NFSERR_IO (v2 doesn't even have INVAL)

In nfs4_sanity_check_FH, if required_type is DIRECTORY, return
NFS4ERR_SYMLINK or NFS4ERR_NOTDIR as appropriate.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>
Have cache_inode_get_changeid4 check trust of attrs

This makes changeid more resilient to attr changes outside Ganesha.

Signed-off-by: Frank S. Filz <ffilz@us.ibm.com>