krb5: Fix string read overrun (fix #1057)

This commit is contained in:
Nicolas Williams
2023-01-03 01:33:37 -06:00
parent cc641edf6b
commit 2e7d996ea9

View File

@@ -185,20 +185,21 @@ _krb5_get_host_realm_int(krb5_context context,
{
const char *p, *q;
const char *port;
char *freeme = NULL;
krb5_boolean dns_locate_enable;
krb5_error_code ret = 0;
/* Strip off any trailing ":port" suffix. */
port = strchr(host, ':');
if (port != NULL) {
host = strndup(host, port - host);
if (port != NULL && port != host && port[1] != '\0') {
host = freeme = strndup(host, port - host);
if (host == NULL)
return krb5_enomem(context);
}
dns_locate_enable = krb5_config_get_bool_default(context, NULL, TRUE,
"libdefaults", "dns_lookup_realm", NULL);
for (p = host; p != NULL; p = strchr (p + 1, '.')) {
for (p = host; p != NULL && p[0] != '\0'; p = strchr (p + 1, '.')) {
if (config_find_realm(context, p, realms) == 0) {
if (strcasecmp(*realms[0], "dns_locate") != 0)
break;
@@ -246,9 +247,7 @@ _krb5_get_host_realm_int(krb5_context context,
}
}
/* If 'port' is not NULL, we have a copy of 'host' to free. */
if (port)
free((void *)host);
free(freeme);
return ret;
}