diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-11-08 23:16:16 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-11-08 23:16:16 +0000 |
commit | 55357e3c75438ce83553d1c43d47e53eb7919d74 (patch) | |
tree | 08e3d6c954d55dbf5c4969adaee6f6db56664e9d /avahi-core/domain-util.c | |
parent | 6ecd227ceadc32ed229246aa61df6361c7b58a95 (diff) |
* deal with gethostname() failing, use utsname.sysname[] instead in that case
* deal with utsname() failing when creating HINFO records
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@938 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/domain-util.c')
-rw-r--r-- | avahi-core/domain-util.c | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/avahi-core/domain-util.c b/avahi-core/domain-util.c index d4cc2ad..f541226 100644 --- a/avahi-core/domain-util.c +++ b/avahi-core/domain-util.c @@ -27,25 +27,53 @@ #include <assert.h> #include <string.h> #include <unistd.h> +#include <ctype.h> +#include <sys/utsname.h> +#include <stdio.h> #include <avahi-common/malloc.h> #include "domain-util.h" +#include "util.h" -char *avahi_get_host_name(char *ret_s, size_t size) { -#ifdef HOST_NAME_MAX - char t[HOST_NAME_MAX]; -#else - char t[256]; -#endif +static void strip_bad_chars(char *s) { + char *p, *d; + + s[strcspn(s, ".")] = 0; + for (p = s, d = s; *p; p++) + if (isalnum(*p) || *p == '-') + *(d++) = *p; + + *d = 0; +} + +char *avahi_get_host_name(char *ret_s, size_t size) { assert(ret_s); assert(size > 0); + + if (gethostname(ret_s, size) >= 0) { + ret_s[size-1] = 0; + strip_bad_chars(ret_s); + } else + *ret_s = 0; + + if (*ret_s == 0) { + struct utsname utsname; + + /* No hostname was set, so let's take the OS name */ + + if (uname(&utsname) >= 0) { + snprintf(ret_s, size, "%s", utsname.sysname); + strip_bad_chars(ret_s); + avahi_strdown(ret_s); + } + + if (*ret_s == 0) + snprintf(ret_s, size, "unnamed"); + } - gethostname(t, sizeof(t)); - t[sizeof(t)-1] = 0; - - return avahi_normalize_name(t, ret_s, size); + return ret_s; } char *avahi_get_host_name_strdup(void) { |