diff options
author | Volker Lendecke <vlendec@samba.org> | 2006-08-18 15:10:46 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:38:42 -0500 |
commit | 41a4496b20e510dc47fe2b816196cef6fe937cea (patch) | |
tree | 7a0b8a73a40de63c75bfe910fe49d7a267c134b1 /source3/libsmb | |
parent | 0b56ff1ea3bab9f5aebf43e3dfc4847b3f912553 (diff) | |
download | samba-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')
-rw-r--r-- | source3/libsmb/errormap.c | 37 |
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 + |