diff options
author | Günther Deschner <gd@samba.org> | 2010-05-31 12:51:58 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2010-07-01 23:20:39 +0200 |
commit | e64df82146cf62ae6e13b8e4c1adcc8b49b2fd6d (patch) | |
tree | f7c0446cc926163f53721cb9fc4e7bdba3c16864 /source3/libads | |
parent | 6b25d47fea231fad2009a1e0971ccfa1acf68176 (diff) | |
download | samba-e64df82146cf62ae6e13b8e4c1adcc8b49b2fd6d.tar.gz samba-e64df82146cf62ae6e13b8e4c1adcc8b49b2fd6d.tar.bz2 samba-e64df82146cf62ae6e13b8e4c1adcc8b49b2fd6d.zip |
s3-libads: move ads_status to a separate header file.
Guenther
Diffstat (limited to 'source3/libads')
-rw-r--r-- | source3/libads/ads_status.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/libads/ads_status.h b/source3/libads/ads_status.h new file mode 100644 index 0000000000..4c27e16f50 --- /dev/null +++ b/source3/libads/ads_status.h @@ -0,0 +1,42 @@ + +/* there are 5 possible types of errors the ads subsystem can produce */ +enum ads_error_type {ENUM_ADS_ERROR_KRB5, ENUM_ADS_ERROR_GSS, + ENUM_ADS_ERROR_LDAP, ENUM_ADS_ERROR_SYSTEM, ENUM_ADS_ERROR_NT}; + +typedef struct { + enum ads_error_type error_type; + union err_state{ + int rc; + NTSTATUS nt_status; + } err; + /* For error_type = ENUM_ADS_ERROR_GSS minor_status describe GSS API error */ + /* Where rc represents major_status of GSS API error */ + int minor_status; +} ADS_STATUS; + +/* macros to simplify error returning */ +#define ADS_ERROR(rc) ADS_ERROR_LDAP(rc) +#define ADS_ERROR_LDAP(rc) ads_build_error(ENUM_ADS_ERROR_LDAP, rc, 0) +#define ADS_ERROR_SYSTEM(rc) ads_build_error(ENUM_ADS_ERROR_SYSTEM, rc?rc:EINVAL, 0) +#define ADS_ERROR_KRB5(rc) ads_build_error(ENUM_ADS_ERROR_KRB5, rc, 0) +#define ADS_ERROR_GSS(rc, minor) ads_build_error(ENUM_ADS_ERROR_GSS, rc, minor) +#define ADS_ERROR_NT(rc) ads_build_nt_error(ENUM_ADS_ERROR_NT,rc) + +#define ADS_ERR_OK(status) ((status.error_type == ENUM_ADS_ERROR_NT) ? NT_STATUS_IS_OK(status.err.nt_status):(status.err.rc == 0)) +#define ADS_SUCCESS ADS_ERROR(0) + +#define ADS_ERROR_HAVE_NO_MEMORY(x) do { \ + if (!(x)) {\ + return ADS_ERROR(LDAP_NO_MEMORY);\ + }\ +} while (0) + +/* The following definitions come from libads/ads_status.c */ + +ADS_STATUS ads_build_error(enum ads_error_type etype, + int rc, int minor_status); +ADS_STATUS ads_build_nt_error(enum ads_error_type etype, + NTSTATUS nt_status); +NTSTATUS ads_ntstatus(ADS_STATUS status); +const char *ads_errstr(ADS_STATUS status); +NTSTATUS gss_err_to_ntstatus(uint32 maj, uint32 min); |