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.."
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2015-07-27 22:30:06 -04:00
parent 79f17ea6f8
commit 17eb9a9ddb
1 changed files with 10 additions and 11 deletions

View File

@ -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);