svn commit: samba r17606 - in branches/SAMBA_3_0/source: libads libsmb

vlendec at samba.org vlendec at samba.org
Fri Aug 18 15:10:46 GMT 2006


Author: vlendec
Date: 2006-08-18 15:10:46 +0000 (Fri, 18 Aug 2006)
New Revision: 17606

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17606

Log:
Introduce krb5_to_ntstatus.

Thanks to Michael Adam <ma at sernet.de>

Volker
Modified:
   branches/SAMBA_3_0/source/libads/ads_status.c
   branches/SAMBA_3_0/source/libsmb/errormap.c


Changeset:
Modified: branches/SAMBA_3_0/source/libads/ads_status.c
===================================================================
--- branches/SAMBA_3_0/source/libads/ads_status.c	2006-08-18 14:05:25 UTC (rev 17605)
+++ branches/SAMBA_3_0/source/libads/ads_status.c	2006-08-18 15:10:46 UTC (rev 17606)
@@ -69,30 +69,29 @@
 */
 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;	
-	}
-	if (status.error_type == ENUM_ADS_ERROR_SYSTEM) {
+	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_NO_MEMORY) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		break;
 #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;
-		} else if (status.err.rc == KRB5KRB_AP_ERR_SKEW) {
-			return NT_STATUS_TIME_DIFFERENCE_AT_DC;
-		}
-	}
+	case ENUM_ADS_ERROR_KRB5:
+		return krb5_to_ntstatus(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;
 }
 

Modified: branches/SAMBA_3_0/source/libsmb/errormap.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/errormap.c	2006-08-18 14:05:25 UTC (rev 17605)
+++ branches/SAMBA_3_0/source/libsmb/errormap.c	2006-08-18 15:10:46 UTC (rev 17606)
@@ -1566,3 +1566,40 @@
 	/* Default return */
 	return NT_STATUS_ACCESS_DENIED;
 }
+
+#ifdef HAVE_KRB5
+/*********************************************************************
+ Map a krb5 error code to an NT error code
+*********************************************************************/
+
+struct krb5_error_map {
+	int krb5_error;
+	NTSTATUS nt_error;
+};
+
+const struct krb5_error_map krb5_nt_errmap[] = {
+	{ KRB5KDC_ERR_PREAUTH_FAILED, NT_STATUS_LOGON_FAILURE },
+	{ KRB5_KDC_UNREACH, NT_STATUS_NO_LOGON_SERVERS },
+	{ KRB5KRB_AP_ERR_SKEW, NT_STATUS_TIME_DIFFERENCE_AT_DC },
+	/* not sure if this mapping is appropriate */
+	{ KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN, NT_STATUS_NO_TRUST_SAM_ACCOUNT },
+	{ KRB5KDC_ERR_NONE, NT_STATUS_OK },
+	/* end of array flag - not used as error code... */
+	{ 0, NT_STATUS_OK }
+};
+
+NTSTATUS krb5_to_ntstatus(int error) 
+{
+	int i = 0;
+
+	while (krb5_nt_errmap[i].krb5_error != 0) {
+		if (krb5_nt_errmap[i].krb5_error == error) {
+			return krb5_nt_errmap[i].nt_error;
+		}
+		i++;
+	}
+
+	return NT_STATUS_ACCESS_DENIED;
+}
+#endif
+



More information about the samba-cvs mailing list