void *client_creds;
/* for additions which don't require a version upgrade; set to 0 */
- void *gss_peer_name;
- void *gss_local_name;
- void *spare_ptr4;
+ const void *gss_peer_name;
+ const void *gss_local_name;
+ const char *cbindingname; /* channel binding name from packet */
int (*spare_fptr1)();
int (*spare_fptr2)();
- int spare_int1;
+ unsigned int cbindingdisp; /* channel binding disposition from client */
int spare_int2;
int spare_int3;
int spare_int4;
SASL_INFO_LIST_END
} sasl_info_callback_stage_t;
+/******************************
+ * Channel binding macros **
+ ******************************/
+
+/* TRUE if channel binding is non-NULL */
+#define SASL_CB_DISP_NONE 0x00 /* client did not support CB */
+#define SASL_CB_DISP_USED 0x01 /* client supports CB, thinks server does not */
+#define SASL_CB_DISP_WANT 0x02 /* client supports and used CB */
+#define SASL_CB_PRESENT(params) ((params)->cbinding != NULL)
+#define SASL_CB_CRITICAL(params) (SASL_CB_PRESENT(params) && \
+ (params)->cbinding->critical)
/******************************
* Client Mechanism Functions *
sasl_ssf_t external_ssf; /* external SSF active */
/* for additions which don't require a version upgrade; set to 0 */
- void *gss_creds;
- void *chanbindingstype;
- void *chanbindingsdata;
+ const void *gss_creds; /* GSS credential handle */
+ const sasl_channel_binding_t *cbinding; /* client channel binding */
+ void *spare_ptr3;
void *spare_ptr4;
/* Canonicalize a user name from on-wire to internal format
int (*spare_fptr1)();
-#define SASL_CB_FLAG_NONE 0 /* client did not support CB */
-#define SASL_CB_FLAG_USED 1 /* client supports and used CB */
-#define SASL_CB_FLAG_WANT 2 /* client supports CB, thinks server does not */
-
- int chanbindingsflag;
- int chanbindingslen;
+ unsigned int cbindingdisp;
+ unsigned int spare_int2;
int spare_int3;
/* flags field as passed to sasl_client_new */
#define SASL_FEAT_GSS_FRAMING 0x0040
/* Underlying mechanism supports channel binding */
-#define SASL_FEAT_CHANNEL_BINDINGS 0x0080
+#define SASL_FEAT_CHANNEL_BINDING 0x0080
/* client plug-in features */
#define SASL_FEAT_NEEDSERVERFQDN 0x0001
struct propctx *propctx;
/* for additions which don't require a version upgrade; set to 0 */
- void *gss_creds;
- void *chanbindingstype;
- void *chanbindingsdata;
+ const void *gss_creds; /* GSS credential handle */
+ const sasl_channel_binding_t *cbinding; /* server channel binding */
+ void *spare_ptr3;
void *spare_ptr4;
int (*spare_fptr1)();
int (*spare_fptr2)();
- int chanbindingscrit;
- int chanbindingslen;
+ int spare_int1;
+ int spare_int2;
int spare_int3;
/* flags field as passed to sasl_server_new */