diff options
author | Nathaniel Chen <nathaniel.chen@intel.com> | 2013-03-05 11:46:34 -0800 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-03-05 20:54:05 +0100 |
commit | ebe5d6d0d05d1f17c96315c42f8d9bcf5e13ba9d (patch) | |
tree | ef828ac5317569996c12d24ed21e8fb1592e02e8 /src | |
parent | d47c78be4a2acbb631a26af11b7ce2ef57f55996 (diff) |
hostnamed: allow more special characters in pretty hostname
this addresses the bug at:
https://bugs.freedesktop.org/show_bug.cgi?id=59311
https://bugzilla.redhat.com/show_bug.cgi?id=895299
hostnamectl is supposed to allow a range of special characters for
the 'pretty' hostname:
$ hostnamectl set-hostname --pretty "Nathaniels Desktop !@#$%"
..however, it rejects apostrophes, double quotes, and backslashes.
The manual for hostnamectl suggests that this should be allowed.
It makes sense to reject \0, \n, etc. pretty_string_is_safe() is
the same as string_is_safe(), but allows more special characters.
Diffstat (limited to 'src')
-rw-r--r-- | src/hostname/hostnamed.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 7ea891c681..979dcfdc7f 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -159,6 +159,19 @@ static bool valid_chassis(const char *chassis) { chassis); } +static bool pretty_string_is_safe(const char *p) { + const char *t; + + assert(p); + + for (t = p; *t; t++) { + if (*t >= '\0' && *t < ' ') + return false; + } + + return true; +} + static const char* fallback_chassis(void) { int r; char *type; @@ -553,7 +566,7 @@ static DBusHandlerResult hostname_message_handler( * safe than sorry */ if (k == PROP_ICON_NAME && !filename_is_safe(name)) return bus_send_error_reply(connection, message, NULL, -EINVAL); - if (k == PROP_PRETTY_HOSTNAME && !string_is_safe(name)) + if (k == PROP_PRETTY_HOSTNAME && !pretty_string_is_safe(name)) return bus_send_error_reply(connection, message, NULL, -EINVAL); if (k == PROP_CHASSIS && !valid_chassis(name)) return bus_send_error_reply(connection, message, NULL, -EINVAL); |