Better error reporting through com_err
[mech_eap.git] / gssapiP_eap.h
index b46c2bc..de45508 100644 (file)
 #ifndef _GSSAPIP_EAP_H_
 #define _GSSAPIP_EAP_H_ 1
 
+#include "config.h"
 #include <assert.h>
 #include <string.h>
 #include <errno.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <time.h>
+#include <sys/param.h>
 
 /* GSS includes */
 #include <gssapi/gssapi.h>
@@ -49,7 +51,7 @@
 /* Kerberos includes */
 #include <krb5.h>
 
-/* EAP includes */
+/* EAP includes (not C++ clean) */
 #ifndef __cplusplus
 #include <common.h>
 #include <eap_peer/eap.h>
 #include <wpabuf.h>
 #endif
 
-#include <freeradius-client.h>
+/* Workaround for FreeRADIUS not being C++ clean */
+#ifdef __cplusplus
+extern "C" {
+#define operator fr_operator
+#endif
+#include <freeradius/libradius.h>
 #include <freeradius/radius.h>
+#include <radsec/radsec.h>
+#include <radsec/request.h>
+#ifdef __cplusplus
+#undef operator
+}
+#endif
 
+#include "gsseap_err.h"
+#include "radsec_err.h"
 #include "util.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* These name flags are informative and not actually used by anything yet */
 #define NAME_FLAG_NAI                       0x00000001
 #define NAME_FLAG_SERVICE                   0x00000002
@@ -82,6 +101,7 @@ struct gss_name_struct {
 #define CRED_FLAG_ACCEPT                    0x00020000
 #define CRED_FLAG_DEFAULT_IDENTITY          0x00040000
 #define CRED_FLAG_PASSWORD                  0x00080000
+#define CRED_FLAG_DEFAULT_CCACHE            0x00100000
 #define CRED_FLAG_PUBLIC_MASK               0x0000FFFF
 
 struct gss_cred_id_struct {
@@ -92,6 +112,7 @@ struct gss_cred_id_struct {
     gss_OID_set mechanisms;
     time_t expiryTime;
     char *radiusConfigFile;
+    char *radiusConfigStanza;
 #ifdef GSSEAP_ENABLE_REAUTH
     krb5_ccache krbCredCache;
     gss_cred_id_t krbCred;
@@ -129,6 +150,7 @@ enum gss_eap_state {
 #define CTX_FLAG_EAP_MASK                   0xFFFF0000
 
 struct gss_eap_initiator_ctx {
+    gss_cred_id_t defaultCred;
     unsigned int idleWhile;
 #ifndef __cplusplus
     struct eap_peer_config eapPeerConfig;
@@ -138,10 +160,11 @@ struct gss_eap_initiator_ctx {
 };
 
 struct gss_eap_acceptor_ctx {
-    rc_handle *radHandle;
-    int lastStatus;
-    VALUE_PAIR *avps;
+    struct rs_handle *radHandle;
+    struct rs_connection *radConn;
+    char *radServer;
     gss_buffer_desc state;
+    VALUE_PAIR *vps;
 };
 
 struct gss_ctx_id_struct {
@@ -178,7 +201,6 @@ struct gss_ctx_id_struct {
 #define KEY_USAGE_ACCEPTOR_SIGN             23
 #define KEY_USAGE_INITIATOR_SEAL            24
 #define KEY_USAGE_INITIATOR_SIGN            25
-#define KEY_USAGE_CHANNEL_BINDINGS          64
 
 /* wrap_iov.c */
 OM_uint32
@@ -219,4 +241,12 @@ gssEapWrap(OM_uint32 *minor,
 unsigned char
 rfc4121Flags(gss_ctx_id_t ctx, int receiving);
 
+/* display_status.c */
+void
+gssEapSaveStatusInfo(OM_uint32 minor, const char *format, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _GSSAPIP_EAP_H_ */