summaryrefslogtreecommitdiff
path: root/src/hostname
diff options
context:
space:
mode:
authorNathaniel Chen <nathaniel.chen@intel.com>2013-03-05 11:46:34 -0800
committerLennart Poettering <lennart@poettering.net>2013-03-05 20:54:05 +0100
commitebe5d6d0d05d1f17c96315c42f8d9bcf5e13ba9d (patch)
treeef828ac5317569996c12d24ed21e8fb1592e02e8 /src/hostname
parentd47c78be4a2acbb631a26af11b7ce2ef57f55996 (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/hostname')
-rw-r--r--src/hostname/hostnamed.c15
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);