Merge pull request #15636 from poettering/sensitivity-training
be more careful when setting json variant + dbus message sensitive flag
This commit is contained in:
@@ -124,6 +124,8 @@ int bus_message_append_secret(sd_bus_message *m, UserRecord *secret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
(void) sd_bus_message_sensitive(m);
|
||||
|
||||
return sd_bus_message_append(m, "s", formatted);
|
||||
}
|
||||
|
||||
|
||||
@@ -1435,6 +1435,8 @@ static int create_home(int argc, char *argv[], void *userdata) {
|
||||
if (r < 0)
|
||||
return bus_log_create_error(r);
|
||||
|
||||
(void) sd_bus_message_sensitive(m);
|
||||
|
||||
r = sd_bus_message_append(m, "s", formatted);
|
||||
if (r < 0)
|
||||
return bus_log_create_error(r);
|
||||
@@ -1637,6 +1639,8 @@ static int update_home(int argc, char *argv[], void *userdata) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
(void) sd_bus_message_sensitive(m);
|
||||
|
||||
r = sd_bus_message_append(m, "s", formatted);
|
||||
if (r < 0)
|
||||
return bus_log_create_error(r);
|
||||
|
||||
@@ -840,6 +840,8 @@ int user_record_set_password(UserRecord *h, char **password, bool prepend) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_sensitive(w);
|
||||
|
||||
r = json_variant_set_field(&h->json, "secret", w);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -900,6 +902,8 @@ int user_record_set_pkcs11_pin(UserRecord *h, char **pin, bool prepend) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_sensitive(w);
|
||||
|
||||
r = json_variant_set_field(&h->json, "secret", w);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -927,8 +931,11 @@ int user_record_set_pkcs11_protected_authentication_path_permitted(UserRecord *h
|
||||
|
||||
if (json_variant_is_blank_object(w))
|
||||
r = json_variant_filter(&h->json, STRV_MAKE("secret"));
|
||||
else
|
||||
else {
|
||||
json_variant_sensitive(w);
|
||||
|
||||
r = json_variant_set_field(&h->json, "secret", w);
|
||||
}
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
+30
-1
@@ -1396,6 +1396,19 @@ void json_variant_sensitive(JsonVariant *v) {
|
||||
v->sensitive = true;
|
||||
}
|
||||
|
||||
bool json_variant_is_sensitive(JsonVariant *v) {
|
||||
v = json_variant_formalize(v);
|
||||
if (!json_variant_is_regular(v))
|
||||
return false;
|
||||
|
||||
return v->sensitive;
|
||||
}
|
||||
|
||||
static void json_variant_propagate_sensitive(JsonVariant *from, JsonVariant *to) {
|
||||
if (json_variant_is_sensitive(from))
|
||||
json_variant_sensitive(to);
|
||||
}
|
||||
|
||||
int json_variant_get_source(JsonVariant *v, const char **ret_source, unsigned *ret_line, unsigned *ret_column) {
|
||||
assert_return(v, -EINVAL);
|
||||
|
||||
@@ -1829,6 +1842,8 @@ int json_variant_filter(JsonVariant **v, char **to_remove) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_propagate_sensitive(*v, w);
|
||||
|
||||
json_variant_unref(*v);
|
||||
*v = TAKE_PTR(w);
|
||||
|
||||
@@ -1898,6 +1913,8 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_propagate_sensitive(*v, w);
|
||||
|
||||
json_variant_unref(*v);
|
||||
*v = TAKE_PTR(w);
|
||||
|
||||
@@ -2005,6 +2022,9 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_propagate_sensitive(*v, w);
|
||||
json_variant_propagate_sensitive(m, w);
|
||||
|
||||
json_variant_unref(*v);
|
||||
*v = TAKE_PTR(w);
|
||||
|
||||
@@ -2044,10 +2064,11 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) {
|
||||
|
||||
r = json_variant_new_array(&nv, array, i + 1);
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_propagate_sensitive(*v, nv);
|
||||
|
||||
json_variant_unref(*v);
|
||||
*v = TAKE_PTR(nv);
|
||||
|
||||
@@ -2193,6 +2214,8 @@ static int json_variant_copy(JsonVariant **nv, JsonVariant *v) {
|
||||
|
||||
memcpy_safe(&c->value, source, k);
|
||||
|
||||
json_variant_propagate_sensitive(v, c);
|
||||
|
||||
*nv = c;
|
||||
return 0;
|
||||
}
|
||||
@@ -4178,6 +4201,9 @@ int json_variant_sort(JsonVariant **v) {
|
||||
r = json_variant_new_object(&n, a, m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
json_variant_propagate_sensitive(*v, n);
|
||||
|
||||
if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
|
||||
return -ENOTUNIQ;
|
||||
|
||||
@@ -4226,6 +4252,9 @@ int json_variant_normalize(JsonVariant **v) {
|
||||
}
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
json_variant_propagate_sensitive(*v, n);
|
||||
|
||||
if (!n->normalized) { /* Let's see if normalization worked. It will fail if there are multiple
|
||||
* identical keys used in the same object anywhere, or if there are floating
|
||||
* point numbers used (see below) */
|
||||
|
||||
@@ -135,6 +135,7 @@ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVaria
|
||||
bool json_variant_equal(JsonVariant *a, JsonVariant *b);
|
||||
|
||||
void json_variant_sensitive(JsonVariant *v);
|
||||
bool json_variant_is_sensitive(JsonVariant *v);
|
||||
|
||||
struct json_variant_foreach_state {
|
||||
JsonVariant *variant;
|
||||
|
||||
Reference in New Issue
Block a user