summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-05-07 20:55:11 +0200
committerLennart Poettering <lennart@poettering.net>2013-05-07 20:56:41 +0200
commite724b0639c43c2821613fc4f7f755f87c49a22e8 (patch)
tree1c981e6dd6521cd1188abb3ab2536279b5bc3747
parent0b95a21bd70f63fc57f62020ae84e467712d69f2 (diff)
downloadsystemd-e724b0639c43c2821613fc4f7f755f87c49a22e8.tar.gz
hostname: only suppress setting of pretty hostname if it is non-equal to the static hostname and if the static hostname is set, too
https://bugzilla.redhat.com/show_bug.cgi?id=957814
-rw-r--r--src/core/hostname-setup.c2
-rw-r--r--src/hostname/hostnamectl.c35
-rw-r--r--src/journal/journal-gatewayd.c2
-rw-r--r--src/journal/journalctl.c2
-rw-r--r--src/nspawn/nspawn.c2
-rw-r--r--src/shared/util.c17
-rw-r--r--src/shared/util.h2
7 files changed, 24 insertions, 38 deletions
diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c
index ac508af122..8aa1cff1d3 100644
--- a/src/core/hostname-setup.c
+++ b/src/core/hostname-setup.c
@@ -42,7 +42,7 @@ static int read_and_strip_hostname(const char *path, char **hn) {
if (r < 0)
return r;
- hostname_cleanup(s);
+ hostname_cleanup(s, false);
if (isempty(s)) {
free(s);
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index 1c9043534a..a1e1bd8443 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -213,26 +213,6 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
return 0;
}
-static char* hostname_simplify(char *s) {
- char *p, *d;
-
- for (p = s, d = s; *p; p++) {
- if ((*p >= 'a' && *p <= 'z') ||
- (*p >= '0' && *p <= '9') ||
- *p == '-' || *p == '_')
- *(d++) = *p;
- else if (*p >= 'A' && *p <= 'Z')
- *(d++) = *p - 'A' + 'a';
- else if (*p == ' ')
- *(d++) = '-';
- }
-
- *d = 0;
-
- strshorten(s, HOST_NAME_MAX);
- return s;
-}
-
static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
dbus_bool_t interactive = true;
@@ -254,16 +234,17 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
* just set the passed hostname as static/dynamic
* hostname. */
- if (hostname_is_valid(hostname))
+ h = strdup(hostname);
+ if (!h)
+ return log_oom();
+
+ hostname_cleanup(h, true);
+
+ if (arg_set_static && streq(h, hostname))
p = "";
else {
p = hostname;
-
- h = strdup(hostname);
- if (!h)
- return log_oom();
-
- hostname = hostname_simplify(h);
+ hostname = h;
}
r = bus_method_call_with_reply(
diff --git a/src/journal/journal-gatewayd.c b/src/journal/journal-gatewayd.c
index 51a938b79e..745f45f932 100644
--- a/src/journal/journal-gatewayd.c
+++ b/src/journal/journal-gatewayd.c
@@ -839,7 +839,7 @@ static int request_handler_machine(
"\"cutoff_to_realtime\" : \"%llu\" }\n",
SD_ID128_FORMAT_VAL(mid),
SD_ID128_FORMAT_VAL(bid),
- hostname_cleanup(hostname),
+ hostname_cleanup(hostname, false),
os_name ? os_name : "Linux",
v ? v : "bare",
(unsigned long long) usage,
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index d1b201beba..409f082276 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -835,7 +835,7 @@ static int setup_keys(void) {
hn = gethostname_malloc();
if (hn) {
- hostname_cleanup(hn);
+ hostname_cleanup(hn, false);
fprintf(stderr, "\nThe keys have been generated for host %s/" SD_ID128_FORMAT_STR ".\n", hn, SD_ID128_FORMAT_VAL(machine));
} else
fprintf(stderr, "\nThe keys have been generated for host " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(machine));
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index a58cbec38a..09153c87ce 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -1267,7 +1267,7 @@ int main(int argc, char *argv[]) {
goto finish;
}
- hostname_cleanup(arg_machine);
+ hostname_cleanup(arg_machine, false);
if (isempty(arg_machine)) {
log_error("Failed to determine machine name automatically, please use -M.");
goto finish;
diff --git a/src/shared/util.c b/src/shared/util.c
index 00d3ace616..673e0da6b6 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -3838,24 +3838,29 @@ bool hostname_is_valid(const char *s) {
return true;
}
-char* hostname_cleanup(char *s) {
+char* hostname_cleanup(char *s, bool lowercase) {
char *p, *d;
bool dot;
for (p = s, d = s, dot = true; *p; p++) {
if (*p == '.') {
- if (dot || p[1] == 0)
+ if (dot)
continue;
+ *(d++) = '.';
dot = true;
- } else
+ } else if (hostname_valid_char(*p)) {
+ *(d++) = lowercase ? tolower(*p) : *p;
dot = false;
+ }
- if (hostname_valid_char(*p))
- *(d++) = *p;
}
- *d = 0;
+ if (dot && d > s)
+ d[-1] = 0;
+ else
+ *d = 0;
+
strshorten(s, HOST_NAME_MAX);
return s;
diff --git a/src/shared/util.h b/src/shared/util.h
index 7ef46e8f1e..64e63b8c07 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -411,7 +411,7 @@ bool nulstr_contains(const char*nulstr, const char *needle);
bool plymouth_running(void);
bool hostname_is_valid(const char *s) _pure_;
-char* hostname_cleanup(char *s);
+char* hostname_cleanup(char *s, bool lowercase);
char* strshorten(char *s, size_t l);