return 0;
}
-static int setup_journal(const char *directory) {
+static int setup_journal(const char *directory, uid_t uid_shift, uid_t uid_range) {
_cleanup_free_ char *d = NULL;
const char *p, *q;
sd_id128_t this_id;
if (r < 0)
return log_error_errno(r, "Failed to create %s: %m", q);
- r = mount_nofollow_verbose(LOG_DEBUG, p, q, NULL, MS_BIND, NULL);
- if (r < 0)
- return log_error_errno(r, "Failed to bind mount journal from host into guest: %m");
-
- return 0;
+ return mount_custom(
+ directory,
+ &(CustomMount) {
+ .type = CUSTOM_MOUNT_BIND,
+ .options = (char*) (uid_is_valid(uid_shift) ? "rootidmap" : NULL),
+ .source = (char *)p,
+ .destination = (char *)p,
+ },
+ /* n = */ 1,
+ uid_shift,
+ uid_range,
+ arg_selinux_apifs_context,
+ MOUNT_NON_ROOT_ONLY);
}
static int drop_capabilities(uid_t uid) {
if (r < 0)
return r;
- r = setup_journal(directory);
+ r = setup_journal(directory, arg_uid_shift, arg_uid_range);
if (r < 0)
return r;
rm -fr "$root"
}
+testcase_link_journa_hostl() {
+ local root hoge i
+
+ root="$(mktemp -d /var/lib/machines/TEST-13-NSPAWN.link-journal.XXX)"
+ create_dummy_container "$root"
+
+ systemd-id128 new > "$root"/etc/machine-id
+
+ mkdir -p /var/log/journal
+
+ hoge="/var/log/journal/$(cat "$root"/etc/machine-id)/hoge"
+
+ for i in no yes pick; do
+ systemd-nspawn \
+ --directory="$root" --private-users="$i" --link-journal=host \
+ bash -xec 'p="/var/log/journal/$(cat /etc/machine-id)"; mountpoint "$p"; [[ "$(stat "$p" --format=%u)" == 0 ]]; touch "$p/hoge"'
+
+ [[ "$(stat "$hoge" --format=%u)" == 0 ]]
+ rm "$hoge"
+ done
+
+ rm -fr "$root"
+}
+
run_testcases