session->internals.vc_elements = 0;
}
- if (flags)
- session->internals.additional_verify_flags |= flags;
+ if (flags) {
+ ADD_PROFILE_VFLAGS(session, flags);
+ }
gnutls_session_set_verify_function(session, auto_verify_cb);
}
unsigned vc_status;
unsigned int additional_verify_flags; /* may be set by priorities or the vc functions */
+ /* we append the verify flags because these can be set,
+ * either by this function or by gnutls_session_set_verify_cert().
+ * However, we ensure that a single profile is set. */
+#define ADD_PROFILE_VFLAGS(session, vflags) do { \
+ if ((session->internals.additional_verify_flags & GNUTLS_VFLAGS_PROFILE_MASK) && \
+ (vflags & GNUTLS_VFLAGS_PROFILE_MASK)) \
+ session->internals.additional_verify_flags &= ~GNUTLS_VFLAGS_PROFILE_MASK; \
+ session->internals.additional_verify_flags |= vflags; \
+ } while(0)
+
/* the SHA256 hash of the peer's certificate */
uint8_t cert_hash[32];
bool cert_hash_set;
session->internals.priorities.compression.algorithms == 0)
return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET);
- session->internals.additional_verify_flags |= priority->additional_verify_flags;
+ ADD_PROFILE_VFLAGS(session, priority->additional_verify_flags);
return 0;
}