Refactor channel binding code
[cyrus-sasl.git] / lib / client.c
index 0cff60d..9f3e594 100644 (file)
@@ -485,7 +485,8 @@ int sasl_client_start(sasl_conn_t *conn,
     cmechanism_t *m=NULL,*bestm=NULL;
     size_t i, list_len;
     sasl_ssf_t bestssf = 0, minssf = 0;
-    int result, server_can_cb = 0, cb_flag;
+    int result, server_can_cb = 0;
+    unsigned int cbindingdisp = 0;
 
     if(_sasl_client_active==0) return SASL_NOTINIT;
 
@@ -520,15 +521,14 @@ int sasl_client_start(sasl_conn_t *conn,
        goto done;
 
     if (SASL_CB_PRESENT(c_conn->cparams)) {
-       if (server_can_cb == 0 &&
-           (c_conn->cparams->chanbindingflags & SASL_CB_FLAG_CRIT)) {
+       if (server_can_cb == 0 && SASL_CB_CRITICAL(c_conn->cparams)) {
            result = SASL_NOMECH;
            goto done;
        } else {
-           cb_flag = SASL_CB_FLAG_WANT;
+           cbindingdisp = SASL_CB_DISP_WANT;
        }
     } else {
-       cb_flag = SASL_CB_FLAG_NONE;
+       cbindingdisp = SASL_CB_DISP_NONE;
     }
 
     for (i = 0, name = ordered_mechs; i < list_len; i++) {
@@ -616,8 +616,9 @@ int sasl_client_start(sasl_conn_t *conn,
            }
 
            /* Prefer server advertised CB mechanisms */
-           if (SASL_CB_PRESENT(c_conn->cparams) && plus)
-               cb_flag = SASL_CB_FLAG_USED;
+           if (SASL_CB_PRESENT(c_conn->cparams) && plus) {
+               cbindingdisp = SASL_CB_DISP_USED;
+           }
 
            if (mech) {
                *mech = m->m.plug->mech_name;
@@ -649,7 +650,7 @@ int sasl_client_start(sasl_conn_t *conn,
 
     c_conn->cparams->external_ssf = conn->external.ssf;
     c_conn->cparams->props = conn->props;
-    c_conn->cparams->chanbindingflags |= cb_flag;
+    c_conn->cparams->cbindingdisp = cbindingdisp;
     c_conn->mech = bestm;
 
     /* init that plugin */