From 8269d3c385ac1686f2dcf778827f04435f1ec4bf Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Sat, 31 May 2014 19:06:56 +0200 Subject: Unify usage of function gethostname MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit man gethostanme says: NOTES SUSv2 guarantees that "Host names are limited to 255 bytes". POSIX.1-2001 guarantees that "Host names (not including the terminating null byte) are limited to HOST_NAME_MAX bytes". On Linux, HOST_NAME_MAX is defined with the value 64, which has been the limit since Linux 1.0 (earlier kernels imposed a limit of 8 bytes). Reviewed-by: Pavel Březina (cherry picked from commit bf6f1b3d49e17b1adf0448c0b06e94b1e52ddffd) --- src/providers/data_provider_fo.c | 4 ++-- src/providers/ldap/ldap_child.c | 6 +++--- src/providers/ldap/sdap_access.c | 5 +++-- src/resolv/async_resolv_utils.c | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index 526ae58f1..7e2e50e6f 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -258,7 +258,7 @@ errno_t be_fo_set_dns_srv_lookup_plugin(struct be_ctx *be_ctx, const char *hostname) { struct fo_resolve_srv_dns_ctx *srv_ctx = NULL; - char resolved_hostname[HOST_NAME_MAX]; + char resolved_hostname[HOST_NAME_MAX + 1]; errno_t ret; if (hostname == NULL) { @@ -269,7 +269,7 @@ errno_t be_fo_set_dns_srv_lookup_plugin(struct be_ctx *be_ctx, "gethostname() failed: [%d]: %s\n", ret, strerror(ret)); return ret; } - resolved_hostname[HOST_NAME_MAX-1] = '\0'; + resolved_hostname[HOST_NAME_MAX] = '\0'; hostname = resolved_hostname; } diff --git a/src/providers/ldap/ldap_child.c b/src/providers/ldap/ldap_child.c index 34f23ec80..96404c4c8 100644 --- a/src/providers/ldap/ldap_child.c +++ b/src/providers/ldap/ldap_child.c @@ -229,14 +229,14 @@ static krb5_error_code ldap_child_get_tgt_sync(TALLOC_CTX *memctx, full_princ = talloc_strdup(memctx, princ_str); } } else { - char hostname[512]; + char hostname[HOST_NAME_MAX + 1]; - ret = gethostname(hostname, 511); + ret = gethostname(hostname, HOST_NAME_MAX); if (ret == -1) { krberr = KRB5KRB_ERR_GENERIC; goto done; } - hostname[511] = '\0'; + hostname[HOST_NAME_MAX] = '\0'; DEBUG(SSSDBG_TRACE_LIBS, "got hostname: [%s]\n", hostname); diff --git a/src/providers/ldap/sdap_access.c b/src/providers/ldap/sdap_access.c index 4e1709028..486a08c85 100644 --- a/src/providers/ldap/sdap_access.c +++ b/src/providers/ldap/sdap_access.c @@ -1067,7 +1067,7 @@ static errno_t sdap_access_host(struct ldb_message *user_entry) struct ldb_message_element *el; unsigned int i; char *host; - char hostname[HOST_NAME_MAX+1]; + char hostname[HOST_NAME_MAX + 1]; el = ldb_msg_find_element(user_entry, SYSDB_AUTHORIZED_HOST); if (!el || el->num_values == 0) { @@ -1075,11 +1075,12 @@ static errno_t sdap_access_host(struct ldb_message *user_entry) return ERR_ACCESS_DENIED; } - if (gethostname(hostname, sizeof(hostname)) == -1) { + if (gethostname(hostname, HOST_NAME_MAX) == -1) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to get system hostname. Access denied\n"); return ERR_ACCESS_DENIED; } + hostname[HOST_NAME_MAX] = '\0'; /* FIXME: PADL's pam_ldap also calls gethostbyname() on the hostname * in some attempt to get aliases and/or FQDN for the machine. diff --git a/src/resolv/async_resolv_utils.c b/src/resolv/async_resolv_utils.c index b24ae603f..c5ae5f9d4 100644 --- a/src/resolv/async_resolv_utils.c +++ b/src/resolv/async_resolv_utils.c @@ -44,7 +44,7 @@ resolv_get_domain_send(TALLOC_CTX *mem_ctx, struct resolv_get_domain_state *state = NULL; struct tevent_req *req = NULL; struct tevent_req *subreq = NULL; - char system_hostname[HOST_NAME_MAX]; + char system_hostname[HOST_NAME_MAX + 1]; errno_t ret; req = tevent_req_create(mem_ctx, &state, @@ -63,7 +63,7 @@ resolv_get_domain_send(TALLOC_CTX *mem_ctx, ret, strerror(ret)); goto immediately; } - system_hostname[HOST_NAME_MAX-1] = '\0'; + system_hostname[HOST_NAME_MAX] = '\0'; hostname = system_hostname; } -- cgit