From d6ed04f01dee50499c7df04794a3c810b2831661 Mon Sep 17 00:00:00 2001 From: Alexey Tikhonov Date: Feb 06 2019 14:47:39 +0000 Subject: Fix error in hostname retrieval Fix off-by-one error in gethostname() param Resolves: https://pagure.io/SSSD/sssd/issue/3865 Reviewed-by: Jakub Hrozek (cherry picked from commit 170625872a7d53c182ef095b4e5cba29f632c0c4) --- diff --git a/src/providers/ad/ad_common.c b/src/providers/ad/ad_common.c index 6d395cf..0d154ca 100644 --- a/src/providers/ad/ad_common.c +++ b/src/providers/ad/ad_common.c @@ -458,7 +458,7 @@ ad_get_common_options(TALLOC_CTX *mem_ctx, */ ad_hostname = dp_opt_get_string(opts->basic, AD_HOSTNAME); if (ad_hostname == NULL) { - gret = gethostname(hostname, HOST_NAME_MAX); + gret = gethostname(hostname, sizeof(hostname)); if (gret != 0) { ret = errno; DEBUG(SSSDBG_FATAL_FAILURE, diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index 332174e..4d561dc 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -239,7 +239,7 @@ errno_t be_fo_set_dns_srv_lookup_plugin(struct be_ctx *be_ctx, errno_t ret; if (hostname == NULL) { - ret = gethostname(resolved_hostname, HOST_NAME_MAX); + ret = gethostname(resolved_hostname, sizeof(resolved_hostname)); if (ret != EOK) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, diff --git a/src/providers/ipa/ipa_common.c b/src/providers/ipa/ipa_common.c index c71eca8..17d14e6 100644 --- a/src/providers/ipa/ipa_common.c +++ b/src/providers/ipa/ipa_common.c @@ -79,7 +79,7 @@ int ipa_get_options(TALLOC_CTX *memctx, ipa_hostname = dp_opt_get_string(opts->basic, IPA_HOSTNAME); if (ipa_hostname == NULL) { - ret = gethostname(hostname, HOST_NAME_MAX); + ret = gethostname(hostname, sizeof(hostname)); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "gethostname failed [%d][%s].\n", errno, strerror(errno)); diff --git a/src/providers/ldap/ldap_child.c b/src/providers/ldap/ldap_child.c index 8c11d78..368bb91 100644 --- a/src/providers/ldap/ldap_child.c +++ b/src/providers/ldap/ldap_child.c @@ -326,7 +326,7 @@ static krb5_error_code ldap_child_get_tgt_sync(TALLOC_CTX *memctx, } else { char hostname[HOST_NAME_MAX + 1]; - ret = gethostname(hostname, HOST_NAME_MAX); + ret = gethostname(hostname, sizeof(hostname)); if (ret == -1) { krberr = KRB5KRB_ERR_GENERIC; goto done; diff --git a/src/providers/ldap/sdap_access.c b/src/providers/ldap/sdap_access.c index 1ee4dcd..dd04ec5 100644 --- a/src/providers/ldap/sdap_access.c +++ b/src/providers/ldap/sdap_access.c @@ -1255,7 +1255,7 @@ static errno_t sdap_access_host(struct ldb_message *user_entry) return ERR_ACCESS_DENIED; } - if (gethostname(hostname, HOST_NAME_MAX) == -1) { + if (gethostname(hostname, sizeof(hostname)) == -1) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to get system hostname. Access denied\n"); return ERR_ACCESS_DENIED; diff --git a/src/providers/ldap/sdap_async_sudo_hostinfo.c b/src/providers/ldap/sdap_async_sudo_hostinfo.c index 42f95df..a3c3e10 100644 --- a/src/providers/ldap/sdap_async_sudo_hostinfo.c +++ b/src/providers/ldap/sdap_async_sudo_hostinfo.c @@ -380,7 +380,7 @@ static struct tevent_req *sdap_sudo_get_hostnames_send(TALLOC_CTX *mem_ctx, /* get hostname */ errno = 0; - ret = gethostname(hostname, HOST_NAME_MAX); + ret = gethostname(hostname, sizeof(hostname)); if (ret != EOK) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "Unable to retrieve machine hostname " diff --git a/src/resolv/async_resolv_utils.c b/src/resolv/async_resolv_utils.c index 8d077d0..f86181b 100644 --- a/src/resolv/async_resolv_utils.c +++ b/src/resolv/async_resolv_utils.c @@ -57,7 +57,7 @@ resolv_get_domain_send(TALLOC_CTX *mem_ctx, if (hostname == NULL) { /* use system hostname */ - ret = gethostname(system_hostname, HOST_NAME_MAX); + ret = gethostname(system_hostname, sizeof(system_hostname)); if (ret) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "gethostname() failed: [%d]: %s\n",