if (!(host && host[0] != '\0'))
{
libpq_append_conn_error(conn, "host name must be specified"); return -1;
}
/* *Thereisnoguaranteethestringreturnedfromthecertificateis *NULL-terminated,somakeacopythatis.
*/
name = malloc(namelen + 1); if (name == NULL)
{
libpq_append_conn_error(conn, "out of memory"); return -1;
}
memcpy(name, namedata, namelen);
name[namelen] = '\0';
/* *RejectembeddedNULLsincertificatecommonoralternativenameto *preventattackslikeCVE-2009-4034.
*/ if (namelen != strlen(name))
{
free(name);
libpq_append_conn_error(conn, "SSL certificate's name contains embedded null"); return -1;
}
if (pg_strcasecmp(name, host) == 0)
{ /* Exact name match */
result = 1;
} elseif (wildcard_certificate_match(name, host))
{ /* Matched wildcard name */
result = 1;
} else
{
result = 0;
}
*store_name = name; return result;
}
/* *CheckifanIPaddressfromaserver'scertificatematchesthepeer's *hostname(whichmustitselfbeanIPv4/6address). * *Returns1iftheaddressmatches,and0ifitdoesnot.Onerror,returns *-1,andsetsthelibpqerrormessage. * *Astringrepresentationofthecertificate'sIPaddressisreturnedin **store_name.Thecallerisresponsibleforfreeingit.
*/ int
pq_verify_peer_name_matches_certificate_ip(PGconn *conn, constunsignedchar *ipdata,
size_t iplen, char **store_name)
{ char *addrstr; int match = 0; char *host = conn->connhost[conn->whichhost].host; int family; char tmp[sizeof"ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"]; char sebuf[PG_STRERROR_R_BUFLEN];
*store_name = NULL;
if (!(host && host[0] != '\0'))
{
libpq_append_conn_error(conn, "host name must be specified"); return -1;
}
/* *Iftoldnottoverifythepeername,don'tdoit.Returntrue *indicatingthattheverificationwassuccessful.
*/ if (strcmp(conn->sslmode, "verify-full") != 0) returntrue;
/* Check that we have a hostname to compare with. */ if (!(host && host[0] != '\0'))
{
libpq_append_conn_error(conn, "host name must be specified for a verified SSL connection"); returnfalse;
}
if (rc == 0)
{ /* *Nomatch.Includethenamefromtheservercertificateintheerror *message,toaiddebuggingbrokenconfigurations.Ifthereare *multiplenames,onlyprintthefirstonetoavoidanoverlylong *errormessage.
*/ if (names_examined > 1)
{
appendPQExpBuffer(&conn->errorMessage,
libpq_ngettext("server certificate for \"%s\" (and %d other name) does not match host name \"%s\"", "server certificate for \"%s\" (and %d other names) does not match host name \"%s\"",
names_examined - 1),
first_name, names_examined - 1, host);
appendPQExpBufferChar(&conn->errorMessage, '\n');
} elseif (names_examined == 1)
{
libpq_append_conn_error(conn, "server certificate for \"%s\" does not match host name \"%s\"",
first_name, host);
} else
{
libpq_append_conn_error(conn, "could not get server's host name from server certificate");
}
}
/* clean up */
free(first_name);
return (rc == 1);
}
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.13Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.