len = X509_NAME_get_text_by_NID(X509_get_subject_name(x509),
ssl_io->username_nid, NULL, 0);
if (len < 0)
- name = "";
+ name = NULL;
else {
name = t_malloc0(len + 1);
if (X509_NAME_get_text_by_NID(X509_get_subject_name(x509),
ssl_io->username_nid,
name, len + 1) < 0)
- name = "";
+ name = NULL;
else if (strlen(name) != (size_t)len) {
/* NUL characters in name. Someone's trying to fake
being another user? Don't allow it. */
- name = "";
+ name = NULL;
}
}
X509_free(x509);
- return *name == '\0' ? NULL : name;
+ return name;
}
static const char *openssl_iostream_get_server_name(struct ssl_iostream *ssl_io)
will always return FALSE before even checking the hostname. */
bool ssl_iostream_cert_match_name(struct ssl_iostream *ssl_io, const char *name,
const char **reason_r);
+/* Returns name of the peer if available, NULL if not. Usually used to retrieve
+ username from certificate. */
const char *ssl_iostream_get_peer_name(struct ssl_iostream *ssl_io);
const char *ssl_iostream_get_compression(struct ssl_iostream *ssl_io);
const char *ssl_iostream_get_server_name(struct ssl_iostream *ssl_io);