X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fhostname%2Fhostnamed.c;h=979dcfdc7f42442a2f9c485a3e1123eedd8e5794;hb=0eff0f3bce1d0826765f6e84ff046b10fe5a1a12;hp=c5a8b6faafc1b45bd2a8ba283573066f306d8a93;hpb=4d1a69043862ed979642f5688097160355d4cc81;p=elogind.git diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index c5a8b6faa..979dcfdc7 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -33,6 +33,8 @@ #include "def.h" #include "virt.h" #include "env-util.h" +#include "fileio-label.h" +#include "label.h" #define INTERFACE \ " \n" \ @@ -157,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; @@ -287,8 +302,7 @@ static int write_data_static_hostname(void) { return 0; } - - return write_one_line_file_atomic("/etc/hostname", data[PROP_STATIC_HOSTNAME]); + return write_one_line_file_atomic_label("/etc/hostname", data[PROP_STATIC_HOSTNAME]); } static int write_data_other(void) { @@ -338,7 +352,7 @@ static int write_data_other(void) { return 0; } - r = write_env_file("/etc/machine-info", l); + r = write_env_file_label("/etc/machine-info", l); strv_free(l); return r; @@ -552,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); @@ -683,6 +697,7 @@ int main(int argc, char *argv[]) { log_open(); umask(0022); + label_init("/etc"); if (argc == 2 && streq(argv[1], "--introspect")) { fputs(DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE