hostname: drop invalid chars when reading hostname from disk

This commit is contained in:
Lennart Poettering 2010-05-09 19:12:06 +02:00
parent 3177a7fa12
commit a06b0b562b

View file

@ -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;
}
@ -107,6 +126,13 @@ finish:
if (!k)
return -ENOMEM;
strip_bad_chars(k);
if (k[0] == 0) {
free(k);
return -NOENT;
}
*hn = k;
#else