From b1f1549e8c60d35171fe1cfe4a0b78c769b23ca1 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Sat, 25 Sep 2010 17:58:11 +0200 Subject: [PATCH] preliminary chan bindings --- include/sasl.h | 7 +++++++ include/saslplug.h | 12 ++++++------ lib/common.c | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/include/sasl.h b/include/sasl.h index 7ae1185..d0a0320 100755 --- a/include/sasl.h +++ b/include/sasl.h @@ -791,6 +791,13 @@ LIBSASL_API int sasl_getprop(sasl_conn_t *conn, int propnum, * is particularly useful for servers that respond to multiple names. */ #define SASL_GSS_LOCAL_NAME 20 +typedef struct sasl_channel_bindings { + char *type; + unsigned long len; + unsigned char *data; +} sasl_channel_bindings; + +#define SASL_CHANNEL_BINDINGS 21 /* set property in SASL connection state * returns: diff --git a/include/saslplug.h b/include/saslplug.h index fecb7de..efadbc9 100755 --- a/include/saslplug.h +++ b/include/saslplug.h @@ -255,8 +255,8 @@ typedef struct sasl_client_params { /* for additions which don't require a version upgrade; set to 0 */ void *gss_creds; - void *spare_ptr2; - void *spare_ptr3; + void *chanbindingstype; + void *chanbindingsdata; void *spare_ptr4; /* Canonicalize a user name from on-wire to internal format @@ -289,7 +289,7 @@ typedef struct sasl_client_params { int (*spare_fptr1)(); - int spare_int1; + int chanbindingslen; int spare_int2; int spare_int3; @@ -551,12 +551,12 @@ typedef struct sasl_server_params { /* for additions which don't require a version upgrade; set to 0 */ void *gss_creds; - void *spare_ptr2; - void *spare_ptr3; + void *chanbindingstype; + void *chanbindingsdata; void *spare_ptr4; int (*spare_fptr1)(); int (*spare_fptr2)(); - int spare_int1; + int chanbindingslen; int spare_int2; int spare_int3; diff --git a/lib/common.c b/lib/common.c index 42a0b7b..5ce05bd 100644 --- a/lib/common.c +++ b/lib/common.c @@ -1208,6 +1208,20 @@ int sasl_setprop(sasl_conn_t *conn, int propnum, const void *value) else ((sasl_client_conn_t *)conn)->cparams->gss_creds = (void *)value; break; + case SASL_CHANNEL_BINDINGS: { + struct sasl_channel_bindings *cb = (struct sasl_channel_bindings *)value; + + if (conn->type == SASL_CONN_SERVER) { + ((sasl_server_conn_t *)conn)->sparams->chanbindingstype = cb->type; + ((sasl_server_conn_t *)conn)->sparams->chanbindingsdata = cb->data; + ((sasl_server_conn_t *)conn)->sparams->chanbindingslen = cb->len; + } else { + ((sasl_client_conn_t *)conn)->cparams->chanbindingstype = cb->type; + ((sasl_client_conn_t *)conn)->cparams->chanbindingsdata = cb->data; + ((sasl_client_conn_t *)conn)->cparams->chanbindingslen = cb->len; + } + break; + } default: sasl_seterror(conn, 0, "Unknown parameter type"); result = SASL_BADPARAM; -- 2.1.4