#define LINE_MAX 4096
+#if defined(TARGET_FEDORA)
+#define FILENAME "/etc/sysconfig/network"
+#elif defined(TARGET_SUSE)
+#define FILENAME "/etc/HOSTNAME"
+#elif defined(TARGET_DEBIAN)
+#define FILENAME "/etc/hostname"
+#elif defined(TARGET_ARCH)
+#define FILENAME "/etc/rc.conf"
+#elif defined(TARGET_GENTOO)
+#define FILENAME "/etc/conf.d/hostname"
+#endif
+
static int read_hostname(char **hn) {
-#if defined(TARGET_FEDORA)
+#if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO)
int r;
FILE *f;
assert(hn);
- if (!(f = fopen("/etc/sysconfig/network", "re")))
+ if (!(f = fopen(FILENAME, "re")))
return -errno;
for (;;) {
s = strstrip(line);
- if (!startswith(s, "HOSTNAME="))
+ if (!startswith_no_case(s, "HOSTNAME="))
continue;
if (!(k = strdup(s+9))) {
goto finish;
}
+ if (!(k = delete_chars(k, "\"\'"))) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
*hn = k;
break;
}
fclose(f);
return r;
-#elif defined(TARGET_SUSE)
+#elif defined(TARGET_SUSE) || defined(TARGET_DEBIAN)
int r;
char *s, *k;
assert(hn);
- if ((r = read_one_line_file("/etc/HOSTNAME", &s)) < 0)
+ if ((r = read_one_line_file(FILENAME, &s)) < 0)
return r;
k = strdup(strstrip(s));
*hn = k;
-#elif defined(TARGET_DEBIAN)
- int r;
- char *s, *k;
-
- assert(hn);
-
- if ((r = read_one_line_file("/etc/hostname", &s)) < 0)
- return r;
-
- k = strdup(strstrip(s));
- free(s);
-
- if (!k)
- return -ENOMEM;
-
- *hn = k;
#else
#warning "Don't know how to read the hostname"