1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-23 17:34:00 +03:00

timedate: do not copy input string before bus_verify_polkit_async()

This fixes the commit 2c3def6214 which
breaks `timedatectl set-timezone` called by non-privileged user.
This commit is contained in:
Yu Watanabe 2018-05-15 22:53:19 +09:00
parent c650f20721
commit 539a68e0fb

View File

@ -545,10 +545,7 @@ static int method_set_timezone(sd_bus_message *m, void *userdata, sd_bus_error *
if (!timezone_is_valid(z, LOG_DEBUG))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid time zone '%s'", z);
r = free_and_strdup(&c->zone, z);
if (r < 0)
return r;
if (r == 0)
if (streq_ptr(z, c->zone))
return sd_bus_reply_method_return(m, NULL);
r = bus_verify_polkit_async(
@ -565,6 +562,10 @@ static int method_set_timezone(sd_bus_message *m, void *userdata, sd_bus_error *
if (r == 0)
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
r = free_and_strdup(&c->zone, z);
if (r < 0)
return r;
/* 1. Write new configuration file */
r = context_write_data_timezone(c);
if (r < 0) {