s3-libsmbclient Convert dos error codes to NTstatus in async libsmbclient.
authorJim McDonough <jmcd@samba.org>
Thu, 19 Aug 2010 12:46:59 +0000 (08:46 -0400)
committerJim McDonough <jmcd@samba.org>
Thu, 19 Aug 2010 19:49:31 +0000 (15:49 -0400)
DOS error codes were being lost with the conversion to async
libsmbclient.  If we're passing around NTSTATUS internally,
let's just convert it when we get it.

DOS ACCESS_DENIED on nautilus was not prompting for other credentials,
because it was not being mapped.

source3/libsmb/async_smb.c
source3/libsmb/errormap.c

index 4518518a4328c5cc6062ef02b08fbee26e6093fc..8e08d6fc406556ff2c47ac4b3c3fafdd0307a429 100644 (file)
@@ -120,13 +120,7 @@ NTSTATUS cli_pull_error(char *buf)
                return NT_STATUS(IVAL(buf, smb_rcls));
        }
 
-       /* if the client uses dos errors, but there is no error,
-          we should return no error here, otherwise it looks
-          like an unknown bad NT_STATUS. jmcd */
-       if (CVAL(buf, smb_rcls) == 0)
-               return NT_STATUS_OK;
-
-       return NT_STATUS_DOS(CVAL(buf, smb_rcls), SVAL(buf,smb_err));
+       return dos_to_ntstatus(CVAL(buf, smb_rcls), SVAL(buf,smb_err));
 }
 
 /**
index 48b3eb32d96bd38b2246d67c208891de0b7e6fef..8b4ef23690ce75bd0ac5b17d34ea8c1a2486d392 100644 (file)
@@ -1425,7 +1425,7 @@ convert a dos eclas/ecode to a NT status32 code
 NTSTATUS dos_to_ntstatus(uint8 eclass, uint32 ecode)
 {
        int i;
-       if (eclass == 0 && ecode == 0) return NT_STATUS_OK;
+       if (eclass == 0) return NT_STATUS_OK;
        for (i=0; NT_STATUS_V(dos_to_ntstatus_map[i].ntstatus); i++) {
                if (eclass == dos_to_ntstatus_map[i].dos_class &&
                    ecode == dos_to_ntstatus_map[i].dos_code) {