[SSSD] [PATCH] Unify usage of function gethostname

Lukas Slebodnik lslebodn at redhat.com
Sat May 31 17:13:06 UTC 2014


ehlo,

We used function gethostname on few places but in different way.
We also used hardcoded values instead of constant HOST_NAME_MAX

LS
-------------- next part --------------
>From 508b4d35936476310813a85fa192345e4ffb77f4 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Sat, 31 May 2014 19:06:56 +0200
Subject: [PATCH] Unify usage of function gethostname

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).
---
 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(-)

diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c
index 0a443c04f809aa3887ca250c62619c1969c547f5..ef1f0b2ed3c0164414c6c4c4dad29804d542c886 100644
--- a/src/providers/data_provider_fo.c
+++ b/src/providers/data_provider_fo.c
@@ -259,7 +259,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) {
@@ -270,7 +270,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 0e5e1614addedd293e93d0a33b3ed97f3ffa4c16..ee7bbff89ae63373d781a78cb5d5f2f1704f27bd 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 f454bd2a3a61355a887468ba6b4abfb7f4008fca..89d37e52fa27b14be6bf702ebf0bc18b3fe59da6 100644
--- a/src/providers/ldap/sdap_access.c
+++ b/src/providers/ldap/sdap_access.c
@@ -1066,7 +1066,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) {
@@ -1074,11 +1074,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 b24ae603f904a62eacab6aead26ca54cd705ddbb..c5ae5f9d43734c997e6f4e3e396e1d367f80784a 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;
     }
 
-- 
1.9.3



More information about the sssd-devel mailing list