[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[samba.git] / source / libads / ads_status.c
index 463f647f9c77fe02ca33a271edae30601953b10f..3f0ab576386e98b4617ca7fb064672a71e5b34bb 100644 (file)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,8 +17,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -69,25 +68,29 @@ ADS_STATUS ads_build_nt_error(enum ads_error_type etype,
 */
 NTSTATUS ads_ntstatus(ADS_STATUS status)
 {
-       if (status.error_type == ENUM_ADS_ERROR_NT){
+       switch (status.error_type) {
+       case ENUM_ADS_ERROR_NT:
                return status.err.nt_status;    
-       }
+       case ENUM_ADS_ERROR_SYSTEM:
+               return map_nt_error_from_unix(status.err.rc);
 #ifdef HAVE_LDAP
-       if ((status.error_type == ENUM_ADS_ERROR_LDAP) 
-           && (status.err.rc == LDAP_NO_MEMORY)) {
-               return NT_STATUS_NO_MEMORY;
-       }
+       case ENUM_ADS_ERROR_LDAP:
+               if (status.err.rc == LDAP_SUCCESS) {
+                       return NT_STATUS_OK;
+               }
+               return NT_STATUS_LDAP(status.err.rc);
 #endif
 #ifdef HAVE_KRB5
-       if (status.error_type == ENUM_ADS_ERROR_KRB5) { 
-               if (status.err.rc == KRB5KDC_ERR_PREAUTH_FAILED) {
-                       return NT_STATUS_LOGON_FAILURE;
-               } else if (status.err.rc == KRB5_KDC_UNREACH) {
-                       return NT_STATUS_NO_LOGON_SERVERS;
-               }
-       }
+       case ENUM_ADS_ERROR_KRB5:
+               return krb5_to_nt_status(status.err.rc);
 #endif
-       if (ADS_ERR_OK(status)) return NT_STATUS_OK;
+       default:
+               break;
+       }
+
+       if (ADS_ERR_OK(status)) {
+               return NT_STATUS_OK;
+       }
        return NT_STATUS_UNSUCCESSFUL;
 }
 
@@ -96,11 +99,9 @@ NTSTATUS ads_ntstatus(ADS_STATUS status)
 */
 const char *ads_errstr(ADS_STATUS status)
 {
-       uint32 msg_ctx;
        static char *ret;
 
        SAFE_FREE(ret);
-       msg_ctx = 0;
 
        switch (status.error_type) {
        case ENUM_ADS_ERROR_SYSTEM:
@@ -116,9 +117,12 @@ const char *ads_errstr(ADS_STATUS status)
 #ifdef HAVE_GSSAPI
        case ENUM_ADS_ERROR_GSS:
        {
+               uint32 msg_ctx;
                uint32 minor;
-               
                gss_buffer_desc msg1, msg2;
+
+               msg_ctx = 0;
+               
                msg1.value = NULL;
                msg2.value = NULL;
                gss_display_status(&minor, status.err.rc, GSS_C_GSS_CODE,
@@ -136,7 +140,5 @@ const char *ads_errstr(ADS_STATUS status)
        default:
                return "Unknown ADS error type!? (not compiled in?)";
        }
-
 }
 
-