X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=hostname-setup.c;h=3b988d4c8b68dfdad2c25c545d736e0adb4b470a;hb=136337ff74f05be3d42a769d9f0cb99716c5c40f;hp=b8551d9802feb48715d8ebffdfa47c2d0c9b8777;hpb=3177a7fa12247d30b854fcb7697cd578b9086bf5;p=elogind.git diff --git a/hostname-setup.c b/hostname-setup.c index b8551d980..3b988d4c8 100644 --- a/hostname-setup.c +++ b/hostname-setup.c @@ -34,7 +34,7 @@ #if defined(TARGET_FEDORA) #define FILENAME "/etc/sysconfig/network" -#elif defined(TARGET_SUSE) +#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE) #define FILENAME "/etc/HOSTNAME" #elif defined(TARGET_DEBIAN) #define FILENAME "/etc/hostname" @@ -44,6 +44,22 @@ #define FILENAME "/etc/conf.d/hostname" #endif +static char* strip_bad_chars(char *s) { + char *p, *d; + + for (p = s, d = s; *p; p++) + if ((*p >= 'a' && *p <= 'z') || + (*p >= 'A' && *p <= 'Z') || + (*p >= '0' && *p <= '9') || + *p == '-' || + *p == '_') + *(d++) = *p; + + *d = 0; + + return s; +} + static int read_hostname(char **hn) { #if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO) @@ -77,8 +93,11 @@ static int read_hostname(char **hn) { goto finish; } - if (!(k = delete_chars(k, "\"\'"))) { - r = -ENOMEM; + strip_bad_chars(k); + + if (k[0] == 0) { + free(k); + r = -ENOENT; goto finish; } @@ -92,7 +111,7 @@ finish: fclose(f); return r; -#elif defined(TARGET_SUSE) || defined(TARGET_DEBIAN) +#elif defined(TARGET_SUSE) || defined(TARGET_DEBIAN) || defined(TARGET_SLACKWARE) int r; char *s, *k; @@ -107,6 +126,13 @@ finish: if (!k) return -ENOMEM; + strip_bad_chars(k); + + if (k[0] == 0) { + free(k); + return -ENOENT; + } + *hn = k; #else