From 17eb9a9ddba3f03fcba33445c1c1eedeb948da04 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Mon, 27 Jul 2015 22:30:06 -0400 Subject: hostnamectl: allow trailing dot on fqdn When the user requests to set hostname, and we are setting both pretty and static hostnames, and the name is a valid FQDN, we use it as the static hostname, and unset the pretty hostname. The change is that a FQDN with a trailing dot is accepted and ignored. https://bugzilla.redhat.com/show_bug.cgi?id=1238246 Lowercasing of the static name is not done anymore. $ hostnamectl set-hostname Foobar. => static is "Foobar", pretty is "Foobar." $ hostnamectl set-hostname Foobar.org. => static is "Foobar.org", pretty is unset $ hostnamectl set-hostname Foobar.org.. => static is "Foobar.org", pretty is "Foobar.org.." --- src/hostname/hostnamectl.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/hostname') diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c index c996fc04a0..d194e9b629 100644 --- a/src/hostname/hostnamectl.c +++ b/src/hostname/hostnamectl.c @@ -252,7 +252,7 @@ static int set_simple_string(sd_bus *bus, const char *method, const char *value) static int set_hostname(sd_bus *bus, char **args, unsigned n) { _cleanup_free_ char *h = NULL; - const char *hostname = args[1]; + char *hostname = args[1]; int r; assert(args); @@ -270,17 +270,16 @@ static int set_hostname(sd_bus *bus, char **args, unsigned n) { * just set the passed hostname as static/dynamic * hostname. */ - h = strdup(hostname); - if (!h) - return log_oom(); - - hostname_cleanup(h, true); - - if (arg_static && streq(h, hostname)) + if (arg_static && hostname_is_valid(hostname, true)) { p = ""; - else { - p = hostname; - hostname = h; + /* maybe get rid of trailing dot */ + hostname = hostname_cleanup(hostname, false); + } else { + p = h = strdup(hostname); + if (!p) + return log_oom(); + + hostname_cleanup(hostname, false); } r = set_simple_string(bus, "SetPrettyHostname", p); -- cgit v1.2.3-54-g00ecf