Clean up use of NFS4ERR_BADHANDLE vs NFS4ERR_STALE

A handle that COULD be a valid Ganesha handle, that happens to not be
valid currently (for example, exportid doesn't reference a currently
valid export), or a PseudoFS ID that is in range, but not currently
valid should result in NFS4ERR_STALE.

NFS4ERR_BADHANDLE should be reserved for handles that are badly formed
or otherwise could not ever be a valid Ganesha handle. We also more
carefullly check handle validity, and make checks in order such that
there won't be any surprises, like indexing beyond end of provided
handle.

We must also properly validate PseudoFS handles by the same criteria.

NFS v3 and NLM validate handles during nfs_rpc_execute. If the handle
is bad or the exportid is bad, an SVC AUTH error was sent. This is
wrong, we must send NFS3ERR_BADHANDLE for bad handles and
NFS4ERR_STALE for invalid exportid. Because NLM has ASYNC procedures,
we allow a NULL pexport to be passed to NLM procedures that take
handles, and let the procedure handle responding. NFS procedures will
be responded to within nfs_rpc_execute.

Additionally, remove CACHE_INODE_UNAPPROPRIATED_KEY and
STATE_UNAPPROPRIATED_KEY since these errors are never used (and
were translated into NFS4ERR_BADHANDLE which is probably not the right
error if we ever did have that return code.

Several handle validation routines return an NFS4ERR, we now use the
returned value in most cases (except for RESTOREFH which has a specific
error code to report empty SavedFH.

Added nfs4_sanity_check_SavedFH to simplify checking of SavedFH and
remove duplicate code.

Fix PUBFH. We were not setting the length of it, so it was taking
maximum length and this was not equal to ROOTFH. The length of a
PseudoFS handle is also now computed the same way a normal handle
length is computed.

NFS v2/v3 LINK and RENAME operations should properly validate
the destination directory handle and properly report errors.

Clean up how handle errors are logged. LogInfo is used so that
sysadmins can debug handle issues without having to see gory
code internals.

Replace nfs4_sprint_fhandle with sprint_fhandle4 (remove duplicate
code).

Replace print_buff with new routine print_fhandle_fsal for FSAL handles
to be more informative.

Ported from 1.5 95bb50ea9cfe743c312cb325fe5739c67dc44d17

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
Fix a logging bug in fattr_xdr_result encode_acl when no ACL present

Also fix up a few log messsage components.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>
Return NFS4ERR_SYMNLINK when trying to open special files

Per this linux-nfs post:

http://marc.info/?l=linux-nfs&m=131342421825436&w=2

NFS4ERR_SYMLINK is required for client to distinguish wrong file type so
it can refresh it's cache and retry with a LOOKUP instead of an OPEN.

Signed-off-by: Frank S. Filz <ffilzlnx@mindspring.com>