summaryrefslogtreecommitdiff
path: root/source3/libsmb/errormap.c
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2006-08-18 15:10:46 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:38:42 -0500
commit41a4496b20e510dc47fe2b816196cef6fe937cea (patch)
tree7a0b8a73a40de63c75bfe910fe49d7a267c134b1 /source3/libsmb/errormap.c
parent0b56ff1ea3bab9f5aebf43e3dfc4847b3f912553 (diff)
downloadsamba-41a4496b20e510dc47fe2b816196cef6fe937cea.tar.gz
samba-41a4496b20e510dc47fe2b816196cef6fe937cea.tar.bz2
samba-41a4496b20e510dc47fe2b816196cef6fe937cea.zip
r17606: Introduce krb5_to_ntstatus.
Thanks to Michael Adam <ma@sernet.de> Volker (This used to be commit 6e641c90b8f52a822a83701cdf305c60416d7f0c)
Diffstat (limited to 'source3/libsmb/errormap.c')
-rw-r--r--source3/libsmb/errormap.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/source3/libsmb/errormap.c b/source3/libsmb/errormap.c
index cb5e8311ca..7758246929 100644
--- a/source3/libsmb/errormap.c
+++ b/source3/libsmb/errormap.c
@@ -1566,3 +1566,40 @@ NTSTATUS map_nt_error_from_unix(int unix_error)
/* 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
+