diff options
author | Brian Cameron <Brian.Cameron@sun.com> | 2010-01-13 09:32:19 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2010-01-13 09:32:19 -0500 |
commit | 4b1263a30b2ffa9c4df8d69f857d4eefce289f55 (patch) | |
tree | 60e4095a05f242a0604852c1b0cd9012db0a38a1 /common | |
parent | cff789f92c47d4eb2c3ebc8e7164af4b1ac83a34 (diff) | |
download | gdm-4b1263a30b2ffa9c4df8d69f857d4eefce289f55.tar.gz |
Don't try to print NULL values
This causes crashes on Solaris.
See https://bugzilla.gnome.org/show_bug.cgi?id=494817
Diffstat (limited to 'common')
-rw-r--r-- | common/gdm-address.c | 137 |
1 files changed, 77 insertions, 60 deletions
diff --git a/common/gdm-address.c b/common/gdm-address.c index 936ecfa2..2426b9c3 100644 --- a/common/gdm-address.c +++ b/common/gdm-address.c @@ -193,6 +193,68 @@ gdm_address_equal (GdmAddress *a, return FALSE; } +/* for debugging */ +static const char * +address_family_str (GdmAddress *address) +{ + const char *str; + switch (address->ss->ss_family) { + case AF_INET: + str = "inet"; + break; + case AF_INET6: + str = "inet6"; + break; + case AF_UNIX: + str = "unix"; + break; + case AF_UNSPEC: + str = "unspecified"; + break; + default: + str = "unknown"; + break; + } + return str; +} + +void +_gdm_address_debug (GdmAddress *address, char *hostname, char *host, char *port) +{ + g_return_if_fail (address != NULL); + + hostname = NULL; + host = NULL; + port = NULL; + + + g_debug ("Address family:%d (%s) hostname:%s host:%s port:%s local:%d loopback:%d", + address->ss->ss_family, + address_family_str (address) ? address_family_str (address) : "(null)", + hostname ? hostname : "(null)", + host ? host : "(null)", + port ? port : "(null)", + gdm_address_is_local (address), + gdm_address_is_loopback (address)); + + g_free (hostname); + g_free (host); + g_free (port); +} + +void +gdm_address_debug (GdmAddress *address) +{ + char *hostname; + char *host; + char *port; + + gdm_address_get_hostname (address, &hostname); + gdm_address_get_numeric_info (address, &host, &port); + + _gdm_address_debug (address, hostname, host, port); +} + gboolean gdm_address_get_hostname (GdmAddress *address, char **hostnamep) @@ -216,8 +278,12 @@ gdm_address_get_hostname (GdmAddress *address, ret = TRUE; goto done; } else { - g_warning ("Unable lookup hostname: %s", gai_strerror (res)); - gdm_address_debug (address); + const char *err_msg; + + err_msg = gai_strerror (res); + g_warning ("Unable to lookup hostname: %s", + err_msg ? err_msg : "(null)"); + _gdm_address_debug (address, NULL, NULL, NULL); } /* try numeric? */ @@ -248,12 +314,17 @@ gdm_address_get_numeric_info (GdmAddress *address, host [0] = '\0'; serv [0] = '\0'; res = getnameinfo ((const struct sockaddr *)address->ss, - sizeof (struct sockaddr_storage), + (int) gdm_sockaddr_len (address->ss), host, sizeof (host), serv, sizeof (serv), NI_NUMERICHOST | NI_NUMERICSERV); if (res != 0) { - g_warning ("Unable lookup numeric info: %s", gai_strerror (res)); + const char *err_msg; + + err_msg = gai_strerror (res); + g_warning ("Unable to lookup numeric info: %s", + err_msg ? err_msg : "(null)"); + _gdm_address_debug (address, NULL, NULL, NULL); } else { ret = TRUE; } @@ -366,7 +437,7 @@ add_local_addrinfo (GList **list) hints.ai_family = AF_UNSPEC; hints.ai_flags = AI_CANONNAME; - g_debug ("GdmAddress: looking up hostname: %s", hostbuf); + g_debug ("GdmAddress: looking up hostname: %s", hostbuf ? hostbuf : "(null)"); result = NULL; if (getaddrinfo (hostbuf, NULL, &hints, &result) != 0) { g_debug ("%s: Could not get address from hostname!", "gdm_peek_local_address_list"); @@ -382,7 +453,7 @@ add_local_addrinfo (GList **list) res->ai_socktype, res->ai_protocol, res->ai_flags, - res->ai_canonname); + res->ai_canonname ? res->ai_canonname : "(null)"); address = gdm_address_new_from_sockaddr (res->ai_addr, res->ai_addrlen); *list = g_list_append (*list, address); } @@ -476,57 +547,3 @@ gdm_address_free (GdmAddress *address) g_free (address); } -/* for debugging */ -static const char * -address_family_str (GdmAddress *address) -{ - const char *str; - switch (address->ss->ss_family) { - case AF_INET: - str = "inet"; - break; - case AF_INET6: - str = "inet6"; - break; - case AF_UNIX: - str = "unix"; - break; - case AF_UNSPEC: - str = "unspecified"; - break; - default: - str = "unknown"; - break; - } - return str; -} - -void -gdm_address_debug (GdmAddress *address) -{ - char *hostname; - char *host; - char *port; - - g_return_if_fail (address != NULL); - - hostname = NULL; - host = NULL; - port = NULL; - - gdm_address_get_hostname (address, &hostname); - gdm_address_get_numeric_info (address, &host, &port); - - g_debug ("Address family:%d (%s) hostname:%s host:%s port:%s local:%d loopback:%d", - address->ss->ss_family, - address_family_str (address), - hostname, - host, - port, - gdm_address_is_local (address), - gdm_address_is_loopback (address)); - - g_free (hostname); - g_free (host); - g_free (port); -} |