preliminary chan bindings
authorLuke Howard <lukeh@padl.com>
Sat, 25 Sep 2010 15:58:11 +0000 (17:58 +0200)
committerLuke Howard <lukeh@padl.com>
Sat, 25 Sep 2010 15:58:11 +0000 (17:58 +0200)
include/sasl.h
include/saslplug.h
lib/common.c

index 7ae1185..d0a0320 100755 (executable)
@@ -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:
index fecb7de..efadbc9 100755 (executable)
@@ -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;
 
index 42a0b7b..5ce05bd 100644 (file)
@@ -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;