errormap: Add wbcErr to NTSTATUS mappings
authorKai Blin <kai@samba.org>
Thu, 16 Apr 2009 09:49:25 +0000 (11:49 +0200)
committerKai Blin <kai@samba.org>
Tue, 21 Apr 2009 22:14:45 +0000 (00:14 +0200)
libcli/util/error.h
source3/libsmb/errormap.c
source4/libcli/util/errormap.c

index 5a7cc1b..03e76a2 100644 (file)
@@ -22,6 +22,7 @@
 #include "libcli/util/werror.h"
 #include "libcli/util/doserr.h"
 #include "libcli/util/ntstatus.h"
+#include "nsswitch/libwbclient/wbclient.h"
 
 /** NT error on DOS connection! (NT_STATUS_OK) */
 bool ntstatus_dos_equal(NTSTATUS status1, NTSTATUS status2);
@@ -46,4 +47,9 @@ WERROR ntstatus_to_werror(NTSTATUS error);
 *********************************************************************/
 NTSTATUS map_nt_error_from_unix(int unix_error);
 
+/*******************************************************************************
+ Map between wbcErr and NT status.
+*******************************************************************************/
+NTSTATUS map_nt_error_from_wbcErr(wbcErr wbc_err);
+
 #endif /* _SAMBA_ERROR_H */
index 4ec30f7..aea5718 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "includes.h"
+#include "nsswitch/libwbclient/wbclient.h"
 
 /* This map was extracted by the ERRMAPEXTRACT smbtorture command. 
    The setup was a Samba HEAD (2002-01-03) PDC and an Win2k member 
@@ -1503,6 +1504,46 @@ WERROR ntstatus_to_werror(NTSTATUS error)
        return W_ERROR(NT_STATUS_V(error) & 0xffff);
 }
 
+/*******************************************************************************
+ Map between wbcErr and NT status.
+*******************************************************************************/
+
+static const struct {
+       wbcErr wbc_err;
+       NTSTATUS nt_status;
+} wbcErr_ntstatus_map[] = {
+       { WBC_ERR_SUCCESS,               NT_STATUS_OK },
+       { WBC_ERR_NOT_IMPLEMENTED,       NT_STATUS_NOT_IMPLEMENTED },
+       { WBC_ERR_UNKNOWN_FAILURE,       NT_STATUS_INTERNAL_ERROR },
+       { WBC_ERR_NO_MEMORY,             NT_STATUS_NO_MEMORY },
+       { WBC_ERR_INVALID_SID,           NT_STATUS_INVALID_SID },
+       { WBC_ERR_INVALID_PARAM,         NT_STATUS_INVALID_PARAMETER },
+       { WBC_ERR_WINBIND_NOT_AVAILABLE, NT_STATUS_SERVER_DISABLED },
+       { WBC_ERR_DOMAIN_NOT_FOUND,      NT_STATUS_NO_SUCH_DOMAIN },
+       { WBC_ERR_INVALID_RESPONSE,      NT_STATUS_INVALID_NETWORK_RESPONSE },
+       { WBC_ERR_NSS_ERROR,             NT_STATUS_INTERNAL_ERROR },
+       { WBC_ERR_AUTH_ERROR,            NT_STATUS_LOGON_FAILURE },
+       { WBC_ERR_UNKNOWN_USER,          NT_STATUS_NO_SUCH_USER },
+       { WBC_ERR_UNKNOWN_GROUP,         NT_STATUS_NO_SUCH_GROUP },
+       { WBC_ERR_PWD_CHANGE_FAILED,     NT_STATUS_PASSWORD_RESTRICTION }
+};
+
+NTSTATUS map_nt_error_from_wbcErr(wbcErr wbc_err)
+{
+       int i;
+
+       /* Look through list */
+       for (i=0;i<ARRAY_SIZE(wbcErr_ntstatus_map);i++) {
+               if (wbcErr_ntstatus_map[i].wbc_err == wbc_err) {
+                       return wbcErr_ntstatus_map[i].nt_status;
+               }
+       }
+
+       /* Default return */
+       return NT_STATUS_UNSUCCESSFUL;
+}
+
+
 #if defined(HAVE_GSSAPI)
 /*******************************************************************************
  Map between gssapi errors and NT status. I made these up :-(. JRA.
index 930e45b..3ffadce 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "librpc/ndr/libndr.h"
+#include "nsswitch/libwbclient/wbclient.h"
 
 /* This map was extracted by the ERRMAPEXTRACT smbtorture command. 
    The setup was a Samba HEAD (2002-01-03) PDC and an Win2k member 
@@ -1406,3 +1407,39 @@ NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err)
        /* we should map all error codes to different status codes */
        return NT_STATUS_INVALID_PARAMETER;
 }
+
+static const struct {
+       wbcErr wbc_err;
+       NTSTATUS nt_status;
+} wbcErr_ntstatus_map[] = {
+       { WBC_ERR_SUCCESS,               NT_STATUS_OK },
+       { WBC_ERR_NOT_IMPLEMENTED,       NT_STATUS_NOT_IMPLEMENTED },
+       { WBC_ERR_UNKNOWN_FAILURE,       NT_STATUS_INTERNAL_ERROR },
+       { WBC_ERR_NO_MEMORY,             NT_STATUS_NO_MEMORY },
+       { WBC_ERR_INVALID_SID,           NT_STATUS_INVALID_SID },
+       { WBC_ERR_INVALID_PARAM,         NT_STATUS_INVALID_PARAMETER },
+       { WBC_ERR_WINBIND_NOT_AVAILABLE, NT_STATUS_SERVER_DISABLED },
+       { WBC_ERR_DOMAIN_NOT_FOUND,      NT_STATUS_NO_SUCH_DOMAIN },
+       { WBC_ERR_INVALID_RESPONSE,      NT_STATUS_INVALID_NETWORK_RESPONSE },
+       { WBC_ERR_NSS_ERROR,             NT_STATUS_INTERNAL_ERROR },
+       { WBC_ERR_AUTH_ERROR,            NT_STATUS_LOGON_FAILURE },
+       { WBC_ERR_UNKNOWN_USER,          NT_STATUS_NO_SUCH_USER },
+       { WBC_ERR_UNKNOWN_GROUP,         NT_STATUS_NO_SUCH_GROUP },
+       { WBC_ERR_PWD_CHANGE_FAILED,     NT_STATUS_PASSWORD_RESTRICTION }
+};
+
+NTSTATUS map_nt_error_from_wbcErr(wbcErr wbc_err)
+{
+       int i;
+
+       /* Look through list */
+       for (i=0;i<ARRAY_SIZE(wbcErr_ntstatus_map);i++) {
+               if (wbcErr_ntstatus_map[i].wbc_err == wbc_err) {
+                       return wbcErr_ntstatus_map[i].nt_status;
+               }
+       }
+
+       /* Default return */
+       return NT_STATUS_UNSUCCESSFUL;
+}
+