[CIFS] log better errors on failed mounts
Also returns more accurate errors to mount for the cases of account expired and password expired Acked-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
@@ -114,10 +114,16 @@ static const struct smb_to_posix_error mapping_table_ERRSRV[] = {
|
||||
{ERRusempx, -EIO},
|
||||
{ERRusestd, -EIO},
|
||||
{ERR_NOTIFY_ENUM_DIR, -ENOBUFS},
|
||||
{ERRaccountexpired, -EACCES},
|
||||
{ERRnoSuchUser, -EACCES},
|
||||
/* {ERRaccountexpired, -EACCES},
|
||||
{ERRbadclient, -EACCES},
|
||||
{ERRbadLogonTime, -EACCES},
|
||||
{ERRpasswordExpired, -EACCES},
|
||||
{ERRpasswordExpired, -EACCES},*/
|
||||
{ERRaccountexpired, -EKEYEXPIRED},
|
||||
{ERRbadclient, -EACCES},
|
||||
{ERRbadLogonTime, -EACCES},
|
||||
{ERRpasswordExpired, -EKEYEXPIRED},
|
||||
|
||||
{ERRnosupport, -EINVAL},
|
||||
{0, 0}
|
||||
};
|
||||
@@ -270,7 +276,7 @@ static const struct {
|
||||
from NT_STATUS_NO_SUCH_USER to NT_STATUS_LOGON_FAILURE
|
||||
during the session setup } */
|
||||
{
|
||||
ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER}, {
|
||||
ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER}, { /* could map to 2238 */
|
||||
ERRHRD, ERRgeneral, NT_STATUS_GROUP_EXISTS}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_GROUP}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_GROUP}, {
|
||||
@@ -285,10 +291,10 @@ static const struct {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_PASSWORD_RESTRICTION}, {
|
||||
ERRDOS, ERRnoaccess, NT_STATUS_LOGON_FAILURE}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_ACCOUNT_RESTRICTION}, {
|
||||
ERRSRV, 2241, NT_STATUS_INVALID_LOGON_HOURS}, {
|
||||
ERRSRV, 2240, NT_STATUS_INVALID_WORKSTATION}, {
|
||||
ERRSRV, ERRbadLogonTime, NT_STATUS_INVALID_LOGON_HOURS}, {
|
||||
ERRSRV, ERRbadclient, NT_STATUS_INVALID_WORKSTATION}, {
|
||||
ERRSRV, ERRpasswordExpired, NT_STATUS_PASSWORD_EXPIRED}, {
|
||||
ERRSRV, 2239, NT_STATUS_ACCOUNT_DISABLED}, {
|
||||
ERRSRV, ERRaccountexpired, NT_STATUS_ACCOUNT_DISABLED}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_NONE_MAPPED}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LUIDS_REQUESTED}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_LUIDS_EXHAUSTED}, {
|
||||
@@ -585,7 +591,7 @@ static const struct {
|
||||
ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED}, {
|
||||
ERRDOS, ERRnetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED}, {
|
||||
ERRSRV, 2239, NT_STATUS_ACCOUNT_EXPIRED}, {
|
||||
ERRSRV, ERRaccountexpired, NT_STATUS_ACCOUNT_EXPIRED}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT}, {
|
||||
ERRHRD, ERRgeneral, NT_STATUS_REMOTE_SESSION_LIMIT}, {
|
||||
@@ -754,7 +760,7 @@ ntstatus_to_dos(__u32 ntstatus, __u8 * eclass, __u16 * ecode)
|
||||
}
|
||||
|
||||
int
|
||||
map_smb_to_linux_error(struct smb_hdr *smb)
|
||||
map_smb_to_linux_error(struct smb_hdr *smb, int logErr)
|
||||
{
|
||||
unsigned int i;
|
||||
int rc = -EIO; /* if transport error smb error may not be set */
|
||||
@@ -771,7 +777,9 @@ map_smb_to_linux_error(struct smb_hdr *smb)
|
||||
/* translate the newer STATUS codes to old style SMB errors
|
||||
* and then to POSIX errors */
|
||||
__u32 err = le32_to_cpu(smb->Status.CifsError);
|
||||
if (cifsFYI & CIFS_RC)
|
||||
if (logErr && (err != (NT_STATUS_MORE_PROCESSING_REQUIRED)))
|
||||
cifs_print_status(err);
|
||||
else if (cifsFYI & CIFS_RC)
|
||||
cifs_print_status(err);
|
||||
ntstatus_to_dos(err, &smberrclass, &smberrcode);
|
||||
} else {
|
||||
@@ -813,7 +821,7 @@ map_smb_to_linux_error(struct smb_hdr *smb)
|
||||
}
|
||||
/* else ERRHRD class errors or junk - return EIO */
|
||||
|
||||
cFYI(1, (" !!Mapping smb error code %d to POSIX err %d !!",
|
||||
cFYI(1, ("Mapping smb error code %d to POSIX err %d",
|
||||
smberrcode, rc));
|
||||
|
||||
/* generic corrective action e.g. reconnect SMB session on
|
||||
|
Reference in New Issue
Block a user