X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=gssapiP_eap.h;h=de45508635b06036cf9b918d4f40a8dac83b86ca;hb=15c93f06ee6ddefa7e7b095351f6e66698c7cc9e;hp=7830e2e969943f8fafa68198d28b78e87c95ba17;hpb=4064e866bb8ca6458ff0152364c3b2d62a18e45d;p=mech_eap.git diff --git a/gssapiP_eap.h b/gssapiP_eap.h index 7830e2e..de45508 100644 --- a/gssapiP_eap.h +++ b/gssapiP_eap.h @@ -33,22 +33,25 @@ #ifndef _GSSAPIP_EAP_H_ #define _GSSAPIP_EAP_H_ 1 +#include "config.h" #include #include #include #include #include #include +#include /* GSS includes */ #include +#include #include #include "gssapi_eap.h" /* Kerberos includes */ #include -/* EAP includes */ +/* EAP includes (not C++ clean) */ #ifndef __cplusplus #include #include @@ -57,11 +60,28 @@ #include #endif -#include +/* Workaround for FreeRADIUS not being C++ clean */ +#ifdef __cplusplus +extern "C" { +#define operator fr_operator +#endif +#include #include +#include +#include +#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 @@ -77,10 +97,12 @@ struct gss_name_struct { struct gss_eap_attr_ctx *attrCtx; }; -#define CRED_FLAG_INITIATE 0x00000001 -#define CRED_FLAG_ACCEPT 0x00000002 -#define CRED_FLAG_DEFAULT_IDENTITY 0x00000004 -#define CRED_FLAG_PASSWORD 0x00000008 +#define CRED_FLAG_INITIATE 0x00010000 +#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 { GSSEAP_MUTEX mutex; @@ -90,17 +112,27 @@ 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; +#endif }; #define CTX_FLAG_INITIATOR 0x00000001 +#define CTX_FLAG_KRB_REAUTH_GSS 0x00000002 #define CTX_IS_INITIATOR(ctx) (((ctx)->flags & CTX_FLAG_INITIATOR) != 0) enum gss_eap_state { EAP_STATE_IDENTITY = 0, EAP_STATE_AUTHENTICATE, - EAP_STATE_GSS_CHANNEL_BINDINGS, - EAP_STATE_ESTABLISHED + EAP_STATE_EXTENSIONS_REQ, + EAP_STATE_EXTENSIONS_RESP, + EAP_STATE_ESTABLISHED, +#ifdef GSSEAP_ENABLE_REAUTH + EAP_STATE_KRB_REAUTH_GSS +#endif }; #define CTX_IS_ESTABLISHED(ctx) ((ctx)->state == EAP_STATE_ESTABLISHED) @@ -118,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; @@ -127,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 { @@ -152,6 +186,10 @@ struct gss_ctx_id_struct { #define initiatorCtx ctxU.initiator struct gss_eap_acceptor_ctx acceptor; #define acceptorCtx ctxU.acceptor +#ifdef GSSEAP_ENABLE_REAUTH + gss_ctx_id_t kerberos; + #define kerberosCtx ctxU.kerberos +#endif } ctxU; }; @@ -163,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 @@ -184,4 +221,32 @@ gssEapUnwrapOrVerifyMIC(OM_uint32 *minor_status, int iov_count, enum gss_eap_token_type toktype); +OM_uint32 +gssEapWrapIovLength(OM_uint32 *minor, + gss_ctx_id_t ctx, + int conf_req_flag, + gss_qop_t qop_req, + int *conf_state, + gss_iov_buffer_desc *iov, + int iov_count); +OM_uint32 +gssEapWrap(OM_uint32 *minor, + gss_ctx_id_t ctx, + int conf_req_flag, + gss_qop_t qop_req, + gss_buffer_t input_message_buffer, + int *conf_state, + gss_buffer_t output_message_buffer); + +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_ */