Merge pull request #30578 from bluca/polkit-varlink

varlink: add glue to allow authenticating varlink connections via polkit
This commit is contained in:
Lennart Poettering
2024-01-04 15:15:45 +01:00
committed by GitHub
33 changed files with 839 additions and 68 deletions
+105
View File
@@ -104,6 +104,17 @@ static void test_variant_one(const char *data, Test test) {
assert_se(json_variant_has_type(w, json_variant_type(v)));
assert_se(json_variant_equal(v, w));
s = mfree(s);
r = json_variant_format(w, JSON_FORMAT_REFUSE_SENSITIVE, &s);
assert_se(r == -EPERM);
assert_se(!s);
s = mfree(s);
r = json_variant_format(w, JSON_FORMAT_PRETTY, &s);
assert_se(r >= 0);
assert_se(s);
assert_se((size_t) r == strlen(s));
s = mfree(s);
w = json_variant_unref(w);
@@ -813,4 +824,98 @@ TEST(json_dispatch) {
assert_se(foobar.l == INT16_MIN);
}
TEST(json_sensitive) {
_cleanup_(json_variant_unrefp) JsonVariant *a = NULL, *b = NULL, *v = NULL;
_cleanup_free_ char *s = NULL;
int r;
assert_se(json_build(&a, JSON_BUILD_STRV(STRV_MAKE("foo", "bar", "baz", "bar", "baz", "foo", "qux", "baz"))) >= 0);
assert_se(json_build(&b, JSON_BUILD_STRV(STRV_MAKE("foo", "bar", "baz", "qux"))) >= 0);
json_variant_sensitive(a);
assert_se(json_variant_format(a, JSON_FORMAT_REFUSE_SENSITIVE, &s) == -EPERM);
assert_se(!s);
r = json_variant_format(b, JSON_FORMAT_REFUSE_SENSITIVE, &s);
assert_se(r >= 0);
assert_se(s);
assert_se((size_t) r == strlen(s));
s = mfree(s);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
r = json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s);
assert_se(r >= 0);
assert_se(s);
assert_se((size_t) r == strlen(s));
s = mfree(s);
v = json_variant_unref(v);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_VARIANT("b", b),
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
r = json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s);
assert_se(r >= 0);
assert_se(s);
assert_se((size_t) r == strlen(s));
s = mfree(s);
v = json_variant_unref(v);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_VARIANT("b", b),
JSON_BUILD_PAIR_VARIANT("a", a),
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
assert_se(json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s) == -EPERM);
assert_se(!s);
v = json_variant_unref(v);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_VARIANT("b", b),
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR_VARIANT("a", a),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
assert_se(json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s) == -EPERM);
assert_se(!s);
v = json_variant_unref(v);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_VARIANT("b", b),
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR_VARIANT("a", a),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
assert_se(json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s) == -EPERM);
assert_se(!s);
v = json_variant_unref(v);
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_VARIANT("b", b),
JSON_BUILD_PAIR("c", JSON_BUILD_INTEGER(INT64_MIN)),
JSON_BUILD_PAIR("d", JSON_BUILD_STRING("-9223372036854775808")),
JSON_BUILD_PAIR("e", JSON_BUILD_EMPTY_OBJECT),
JSON_BUILD_PAIR_VARIANT("a", a))) >= 0);
json_variant_dump(v, JSON_FORMAT_COLOR|JSON_FORMAT_PRETTY, NULL, NULL);
assert_se(json_variant_format(v, JSON_FORMAT_REFUSE_SENSITIVE, &s) == -EPERM);
assert_se(!s);
}
DEFINE_TEST_MAIN(LOG_DEBUG);
+21
View File
@@ -946,6 +946,27 @@ TEST(is_reaper_process) {
}
}
TEST(pid_get_start_time) {
_cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
assert_se(pidref_set_self(&pidref) >= 0);
uint64_t start_time;
assert_se(pidref_get_start_time(&pidref, &start_time) >= 0);
log_info("our starttime: %" PRIu64, start_time);
_cleanup_(pidref_done_sigkill_wait) PidRef child = PIDREF_NULL;
assert_se(pidref_safe_fork("(stub)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS, &child) >= 0);
uint64_t start_time2;
assert_se(pidref_get_start_time(&child, &start_time2) >= 0);
log_info("child starttime: %" PRIu64, start_time2);
assert_se(start_time2 >= start_time);
}
static int intro(void) {
log_show_color(true);
return EXIT_SUCCESS;