@@ -369,21 +369,32 @@
/* verify X509 name or username against --verify-x509-[user]name */
if (opt->verify_x509_type != VERIFY_X509_NONE)
{
- if ((opt->verify_x509_type == VERIFY_X509_SUBJECT_DN
- && strcmp(opt->verify_x509_name, subject) == 0)
- || (opt->verify_x509_type == VERIFY_X509_SUBJECT_RDN
- && strcmp(opt->verify_x509_name, common_name) == 0)
- || (opt->verify_x509_type == VERIFY_X509_SUBJECT_RDN_PREFIX
- && strncmp(opt->verify_x509_name, common_name, strlen(opt->verify_x509_name)) == 0))
+ const char *err_fmt = "VERIFY X509NAME ERROR: %s, must be %s";
+ const char *match_str = common_name;
+ bool verified = false;
+ switch (opt->verify_x509_type)
{
- msg(D_HANDSHAKE, "VERIFY X509NAME OK: %s", subject);
+ case VERIFY_X509_SUBJECT_DN:
+ match_str = subject;
+ verified = !strcmp(opt->verify_x509_name, match_str);
+ break;
+ case VERIFY_X509_SUBJECT_RDN:
+ verified = !strcmp(opt->verify_x509_name, match_str);
+ break;
+ case VERIFY_X509_SUBJECT_RDN_PREFIX:
+ err_fmt = "VERIFY X509NAME ERROR: %s, must start with %s";
+ verified = !strncmp(opt->verify_x509_name, match_str, strlen(opt->verify_x509_name));
+ break;
+ default:
+ ASSERT(0); /* should not happen */
+ break;
}
- else
+ if (!verified)
{
- msg(D_HANDSHAKE, "VERIFY X509NAME ERROR: %s, must be %s", subject,
- opt->verify_x509_name);
- return FAILURE; /* Reject connection */
+ msg(D_HANDSHAKE, err_fmt, match_str, opt->verify_x509_name);
+ return FAILURE;
}
+ msg(D_HANDSHAKE, "VERIFY X509NAME OK: %s", subject);
}
return SUCCESS;