From 2c8beb462f87ccfd4dd9010f99bdeeac97482a55 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 5 Feb 2025 16:01:26 +0100 Subject: [PATCH] file-system session: root dir via session label This patch changes the way of how the client-selected sub directory is communicated to the server. The former opaque session argument is now passed as last label element, which allows for the flexible tweaking of this argument by init's session-routing and label-rewriting mechansims. In particular, it alleviates the need for creating chroot component instances. This change requires the following four adaptations at the configuration level: - Each file-system session request must now carry a path starting with / as last session arguments. Hence, nodes that feature a 'label' attributes must extend the attribute value with " -> /". For nodes with no label attribute, "/" is used as last label argument by default. - For matching session-routing rules at init's configuration, the matching of full labels should be replaced by 'label_prefix' matches, excluding the last (path) argument. - Wherever a label of a file-system session is rewritten by using init's 'label' attribute of a or target node, the new attribute 'identity' should be used instead. This replaces the identity part of the label while preserving the client's directory argument. - Analogously to the matching of session-routing rules, server-side policy-selection rules that formerly matched a concrete 'label' must be changed to match a 'label_prefix' instead. As a good practice, 'label_prefix' values should end with " ->" if possible, which clearly delimits the identity part of the label used by the matching. Issue #5445 --- repos/base-linux/run/lx_fs_notify.run | 16 ++++---- repos/gems/recipes/pkg/dbg_download/runtime | 14 +++---- repos/gems/recipes/pkg/file_vault/runtime | 16 ++++---- .../gems/recipes/pkg/test-file_vault/runtime | 37 ++++++++++--------- .../pkg/test-file_vault_no_entropy/runtime | 37 ++++++++++--------- repos/gems/recipes/pkg/touch_keyboard/runtime | 4 +- repos/gems/recipes/pkg/trace_recorder/runtime | 2 +- .../gems/recipes/pkg/window_layouter/runtime | 4 +- .../raw/depot_download/depot_download.config | 14 +++---- .../recipes/raw/download_coreplus/init.config | 10 ++--- repos/gems/run/depot_autopilot.run | 30 +++++++-------- repos/gems/run/depot_deploy.run | 20 +++++----- repos/gems/run/depot_download.run | 4 +- repos/gems/run/depot_query.run | 6 +-- repos/gems/run/depot_remove.run | 2 +- repos/gems/run/file_vault.run | 17 +++++---- repos/gems/run/file_vault_client.run | 31 ++++++++-------- repos/gems/run/file_vault_gui.run | 25 +++++++------ repos/gems/run/menu_view.run | 4 +- repos/gems/run/sculpt.run | 34 ++++++++--------- repos/gems/run/text_area.run | 12 +++--- repos/gems/run/tresor_tester.run | 4 +- repos/gems/run/tresor_utils.run | 8 ++-- repos/gems/run/vfs_tresor.run | 18 ++++----- repos/gems/sculpt/deploy/example | 3 +- repos/gems/sculpt/deploy/falkon_web_browser | 6 +-- repos/gems/sculpt/deploy/window_manager | 10 ++--- .../gems/sculpt/launcher/direct_system_shell | 8 ++-- .../gems/sculpt/launcher/download_debug_info | 8 ++-- repos/gems/sculpt/launcher/report_dump | 4 +- repos/gems/sculpt/launcher/system_shell | 10 ++--- repos/gems/sculpt/launcher/touch_keyboard | 2 +- repos/gems/sculpt/leitzentrale/default | 8 ++-- repos/gems/sculpt/leitzentrale/phone | 2 +- .../app/depot_download_manager/gen_chroot.cc | 2 +- .../depot_download_manager/gen_depot_query.cc | 4 +- .../app/depot_download_manager/gen_extract.cc | 10 ++--- .../depot_download_manager/gen_fetchurl.cc | 12 +++--- .../app/depot_download_manager/gen_verify.cc | 12 +++--- repos/gems/src/app/file_vault/README | 2 +- repos/gems/src/app/file_vault/sandbox.h | 29 ++++++++------- .../sculpt_manager/dialog/distant_runtime.cc | 6 +-- .../sculpt_manager/model/file_browser_state.h | 12 +++--- .../gems/src/app/sculpt_manager/model/route.h | 11 +++++- .../app/sculpt_manager/model/runtime_config.h | 4 +- .../src/app/sculpt_manager/model/service.h | 16 ++++++-- .../src/app/sculpt_manager/runtime/fs_tool.cc | 10 ++--- .../sculpt_manager/runtime/inspect_view.cc | 34 +++++++---------- .../sculpt_manager/runtime/launcher_query.cc | 2 +- .../src/app/sculpt_manager/runtime/prepare.cc | 10 ++--- .../src/app/sculpt_manager/runtime/update.cc | 8 ++-- .../gems/src/lib/dialog/sandboxed_runtime.cc | 4 +- repos/libports/recipes/pkg/gcov/runtime | 4 +- .../recipes/pkg/test-libc_fifo_pipe/runtime | 14 +++---- .../recipes/raw/qt5_textedit/textedit.config | 2 +- repos/libports/src/app/extract/README | 4 +- repos/libports/src/app/fetchurl/README | 2 +- repos/libports/src/lib/gcov/libc/libc.cc | 2 +- .../include/file_system_session/connection.h | 9 ++--- .../recipes/pkg/cpu_balancer_config/runtime | 4 +- repos/os/run/internet_checksum.run | 2 +- repos/os/run/lx_fs_import.run | 2 +- repos/os/run/platform.run | 4 +- repos/os/src/lib/vfs/fs_file_system.h | 13 ++++--- repos/os/src/server/cached_fs_rom/main.cc | 2 +- repos/os/src/server/chroot/component.cc | 31 +++++++++++----- repos/os/src/server/vfs/main.cc | 19 +++++++--- repos/os/src/server/vfs_block/README | 4 +- repos/os/src/test/fs_packet/component.cc | 2 +- repos/pc/sculpt/deploy/goa_testbed | 4 +- repos/ports/recipes/pkg/lighttpd/runtime | 2 +- repos/ports/recipes/pkg/report_dump/runtime | 4 +- .../recipes/pkg/vbox5-nova-capture/runtime | 4 +- repos/ports/recipes/pkg/vbox6-capture/runtime | 4 +- repos/ports/recipes/pkg/vbox6/runtime | 4 +- repos/ports/recipes/raw/gdb_x86/gdb.config | 8 ++-- .../raw/system_shell/system_shell.config | 8 ++-- .../recipes/raw/vbox5-nova-sculpt/init.config | 6 +-- repos/ports/run/vbox_share.inc | 20 +++++----- repos/ports/run/vbox_win.inc | 4 +- 80 files changed, 418 insertions(+), 388 deletions(-) diff --git a/repos/base-linux/run/lx_fs_notify.run b/repos/base-linux/run/lx_fs_notify.run index f7b856aa6e..067e22be7a 100644 --- a/repos/base-linux/run/lx_fs_notify.run +++ b/repos/base-linux/run/lx_fs_notify.run @@ -47,10 +47,10 @@ install_config { - - - - + + + + @@ -117,8 +117,8 @@ set init_run_fwrite_test { - - + + @@ -153,8 +153,8 @@ set init_run_write_test { - - + + diff --git a/repos/gems/recipes/pkg/dbg_download/runtime b/repos/gems/recipes/pkg/dbg_download/runtime index a2896772f8..8e3adedde4 100644 --- a/repos/gems/recipes/pkg/dbg_download/runtime +++ b/repos/gems/recipes/pkg/dbg_download/runtime @@ -60,7 +60,7 @@ - + @@ -74,7 +74,7 @@ - + @@ -101,10 +101,10 @@ - + - + @@ -118,13 +118,13 @@ - + - - + + diff --git a/repos/gems/recipes/pkg/file_vault/runtime b/repos/gems/recipes/pkg/file_vault/runtime index b1a84f3cbe..3a215f05eb 100644 --- a/repos/gems/recipes/pkg/file_vault/runtime +++ b/repos/gems/recipes/pkg/file_vault/runtime @@ -86,17 +86,17 @@ - + - - - - - - + + + + + + @@ -111,7 +111,7 @@ - + diff --git a/repos/gems/recipes/pkg/test-file_vault/runtime b/repos/gems/recipes/pkg/test-file_vault/runtime index 28b115b49d..a4aff2513e 100644 --- a/repos/gems/recipes/pkg/test-file_vault/runtime +++ b/repos/gems/recipes/pkg/test-file_vault/runtime @@ -85,7 +85,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -118,26 +118,27 @@ - + - - label="ui_report" - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/pkg/test-file_vault_no_entropy/runtime b/repos/gems/recipes/pkg/test-file_vault_no_entropy/runtime index 98c86851f9..b15097d772 100644 --- a/repos/gems/recipes/pkg/test-file_vault_no_entropy/runtime +++ b/repos/gems/recipes/pkg/test-file_vault_no_entropy/runtime @@ -85,7 +85,7 @@ - + @@ -104,7 +104,7 @@ - + @@ -118,26 +118,27 @@ - + - - label="ui_report" - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/pkg/touch_keyboard/runtime b/repos/gems/recipes/pkg/touch_keyboard/runtime index a89175a96f..a9fc69edd8 100644 --- a/repos/gems/recipes/pkg/touch_keyboard/runtime +++ b/repos/gems/recipes/pkg/touch_keyboard/runtime @@ -27,8 +27,8 @@ - - + + diff --git a/repos/gems/recipes/pkg/trace_recorder/runtime b/repos/gems/recipes/pkg/trace_recorder/runtime index 9636c920bc..1bc9d562d5 100644 --- a/repos/gems/recipes/pkg/trace_recorder/runtime +++ b/repos/gems/recipes/pkg/trace_recorder/runtime @@ -19,7 +19,7 @@ - + diff --git a/repos/gems/recipes/pkg/window_layouter/runtime b/repos/gems/recipes/pkg/window_layouter/runtime index 062d6f50e2..ab7fef859c 100644 --- a/repos/gems/recipes/pkg/window_layouter/runtime +++ b/repos/gems/recipes/pkg/window_layouter/runtime @@ -33,7 +33,7 @@ - + @@ -42,7 +42,7 @@ - + diff --git a/repos/gems/recipes/raw/depot_download/depot_download.config b/repos/gems/recipes/raw/depot_download/depot_download.config index 8bac909fc9..d11f769347 100644 --- a/repos/gems/recipes/raw/depot_download/depot_download.config +++ b/repos/gems/recipes/raw/depot_download/depot_download.config @@ -61,7 +61,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -99,11 +99,11 @@ - - - - - + + + + + diff --git a/repos/gems/recipes/raw/download_coreplus/init.config b/repos/gems/recipes/raw/download_coreplus/init.config index 38acb78696..6933c1f956 100644 --- a/repos/gems/recipes/raw/download_coreplus/init.config +++ b/repos/gems/recipes/raw/download_coreplus/init.config @@ -27,7 +27,7 @@ - + cp /machine.vbox /disk0.vmdk /vm @@ -38,8 +38,8 @@ cp /machine.vbox /disk0.vmdk /vm - - + + @@ -82,7 +82,7 @@ cp /machine.vbox /disk0.vmdk /vm - + @@ -126,7 +126,7 @@ cp /machine.vbox /disk0.vmdk /vm - + diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index 034c0889ee..dfc8e587e1 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -335,10 +335,10 @@ proc prepare_to_run_genode { } { - - - - + + + + @@ -348,7 +348,7 @@ proc prepare_to_run_genode { } { - + @@ -375,16 +375,16 @@ proc prepare_to_run_genode { } { } [single_test_module_routes] { - - - - - - - - - - + + + + + + + + + + - - + + @@ -110,7 +110,7 @@ install_config { - + @@ -172,17 +172,17 @@ install_config { - - + + - - - - + + + + @@ -216,7 +216,7 @@ install_config { - + diff --git a/repos/gems/run/depot_download.run b/repos/gems/run/depot_download.run index b0b55d70dc..f970050c5f 100644 --- a/repos/gems/run/depot_download.run +++ b/repos/gems/run/depot_download.run @@ -116,8 +116,8 @@ append config { - - + + diff --git a/repos/gems/run/depot_query.run b/repos/gems/run/depot_query.run index de0144e677..e80cae0051 100644 --- a/repos/gems/run/depot_query.run +++ b/repos/gems/run/depot_query.run @@ -68,8 +68,8 @@ install_config { - - + + @@ -79,7 +79,7 @@ install_config { - + diff --git a/repos/gems/run/depot_remove.run b/repos/gems/run/depot_remove.run index 76695f0917..da0f55f01a 100644 --- a/repos/gems/run/depot_remove.run +++ b/repos/gems/run/depot_remove.run @@ -56,7 +56,7 @@ install_config { - + diff --git a/repos/gems/run/file_vault.run b/repos/gems/run/file_vault.run index ec3016d368..443062bd65 100644 --- a/repos/gems/run/file_vault.run +++ b/repos/gems/run/file_vault.run @@ -191,20 +191,21 @@ append config { - + - - - - - - - + + + + + + + + diff --git a/repos/gems/run/file_vault_client.run b/repos/gems/run/file_vault_client.run index be0288ac54..3ba633d63a 100644 --- a/repos/gems/run/file_vault_client.run +++ b/repos/gems/run/file_vault_client.run @@ -216,8 +216,8 @@ append config { - - + + @@ -269,7 +269,7 @@ if {[have_board linux]} { - @@ -288,7 +288,7 @@ if {[have_board linux]} { - @@ -315,7 +315,7 @@ if {[have_board linux]} { - + @@ -334,7 +334,7 @@ if {[have_board linux]} { - + @@ -354,20 +354,21 @@ append config { - + - - - - - - - + + + + + + + + @@ -381,7 +382,7 @@ append config { - + diff --git a/repos/gems/run/file_vault_gui.run b/repos/gems/run/file_vault_gui.run index 0000d018b2..6e59768ad0 100644 --- a/repos/gems/run/file_vault_gui.run +++ b/repos/gems/run/file_vault_gui.run @@ -165,7 +165,7 @@ append_if [have_board linux] config { - + @@ -182,7 +182,7 @@ append_if [have_board linux] config { - + @@ -200,7 +200,7 @@ append_if [expr ![have_board linux]] config { - + @@ -215,7 +215,7 @@ append_if [expr ![have_board linux]] config { - + @@ -243,17 +243,18 @@ append config { - + - - - - - - + + + + + + + @@ -265,7 +266,7 @@ append config { - + diff --git a/repos/gems/run/menu_view.run b/repos/gems/run/menu_view.run index 00e32527e6..2c7bdd5fe4 100644 --- a/repos/gems/run/menu_view.run +++ b/repos/gems/run/menu_view.run @@ -306,7 +306,7 @@ install_config { - + @@ -314,7 +314,7 @@ install_config { - + diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index 742c99a057..199fb1442f 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -347,8 +347,8 @@ install_config { - - + + @@ -386,10 +386,10 @@ install_config { - - - - + + + + @@ -637,12 +637,10 @@ install_config { - - - - - - + + + + @@ -670,10 +668,10 @@ install_config { - - - - + + + + @@ -700,8 +698,8 @@ install_config { - - + + } [log_route] [driver_routes] { diff --git a/repos/gems/run/text_area.run b/repos/gems/run/text_area.run index 26826070ca..8aae81d6ab 100644 --- a/repos/gems/run/text_area.run +++ b/repos/gems/run/text_area.run @@ -105,12 +105,12 @@ install_config { - + - - + + @@ -121,13 +121,13 @@ install_config { max_lines="10" min_width="600"> - + - - + + diff --git a/repos/gems/run/tresor_tester.run b/repos/gems/run/tresor_tester.run index 8d142c4700..5d11a8f405 100644 --- a/repos/gems/run/tresor_tester.run +++ b/repos/gems/run/tresor_tester.run @@ -190,7 +190,7 @@ append config { - + @@ -898,7 +898,7 @@ append config { - + diff --git a/repos/gems/run/tresor_utils.run b/repos/gems/run/tresor_utils.run index 07b71440e7..27a0e0c4d9 100644 --- a/repos/gems/run/tresor_utils.run +++ b/repos/gems/run/tresor_utils.run @@ -67,7 +67,7 @@ append config { - + @@ -88,7 +88,7 @@ append config { - + @@ -112,7 +112,7 @@ append config { - + @@ -125,7 +125,7 @@ append config { - + diff --git a/repos/gems/run/vfs_tresor.run b/repos/gems/run/vfs_tresor.run index 296a0d7fe4..9463a1f4b2 100644 --- a/repos/gems/run/vfs_tresor.run +++ b/repos/gems/run/vfs_tresor.run @@ -108,7 +108,7 @@ append config { - + @@ -122,10 +122,10 @@ append config { - + - + @@ -162,9 +162,9 @@ append config { - + - + - - + + @@ -250,8 +250,8 @@ append config { - - + + diff --git a/repos/gems/sculpt/deploy/example b/repos/gems/sculpt/deploy/example index 9058277385..4774763543 100644 --- a/repos/gems/sculpt/deploy/example +++ b/repos/gems/sculpt/deploy/example @@ -35,7 +35,8 @@ - + + diff --git a/repos/gems/sculpt/deploy/falkon_web_browser b/repos/gems/sculpt/deploy/falkon_web_browser index 0f32302cbf..7a39f15235 100644 --- a/repos/gems/sculpt/deploy/falkon_web_browser +++ b/repos/gems/sculpt/deploy/falkon_web_browser @@ -21,7 +21,7 @@ - + @@ -68,8 +68,8 @@ - - + + diff --git a/repos/gems/sculpt/deploy/window_manager b/repos/gems/sculpt/deploy/window_manager index 49786e10d8..a5ba98e907 100644 --- a/repos/gems/sculpt/deploy/window_manager +++ b/repos/gems/sculpt/deploy/window_manager @@ -14,10 +14,10 @@ - - - - + + + + @@ -33,7 +33,7 @@ - + diff --git a/repos/gems/sculpt/launcher/direct_system_shell b/repos/gems/sculpt/launcher/direct_system_shell index 8356892e47..2cdfea48ea 100644 --- a/repos/gems/sculpt/launcher/direct_system_shell +++ b/repos/gems/sculpt/launcher/direct_system_shell @@ -1,10 +1,10 @@ - - - - + + + + diff --git a/repos/gems/sculpt/launcher/download_debug_info b/repos/gems/sculpt/launcher/download_debug_info index dac7938c24..cb281b0cb6 100644 --- a/repos/gems/sculpt/launcher/download_debug_info +++ b/repos/gems/sculpt/launcher/download_debug_info @@ -1,10 +1,10 @@ - - + + - - + + diff --git a/repos/gems/sculpt/launcher/report_dump b/repos/gems/sculpt/launcher/report_dump index b8bcf2cb03..6f256431a8 100644 --- a/repos/gems/sculpt/launcher/report_dump +++ b/repos/gems/sculpt/launcher/report_dump @@ -1,9 +1,9 @@ - + - + diff --git a/repos/gems/sculpt/launcher/system_shell b/repos/gems/sculpt/launcher/system_shell index 149c4855fb..29646af4ae 100644 --- a/repos/gems/sculpt/launcher/system_shell +++ b/repos/gems/sculpt/launcher/system_shell @@ -1,10 +1,10 @@ - - - - - + + + + + diff --git a/repos/gems/sculpt/launcher/touch_keyboard b/repos/gems/sculpt/launcher/touch_keyboard index 7828ab1f55..9fae38ddf0 100644 --- a/repos/gems/sculpt/launcher/touch_keyboard +++ b/repos/gems/sculpt/launcher/touch_keyboard @@ -2,6 +2,6 @@ - + diff --git a/repos/gems/sculpt/leitzentrale/default b/repos/gems/sculpt/leitzentrale/default index 7e8cfeaa29..c8f5f7632a 100644 --- a/repos/gems/sculpt/leitzentrale/default +++ b/repos/gems/sculpt/leitzentrale/default @@ -190,7 +190,7 @@ - + @@ -200,7 +200,7 @@ - + @@ -287,11 +287,11 @@ - + - + diff --git a/repos/gems/sculpt/leitzentrale/phone b/repos/gems/sculpt/leitzentrale/phone index 01fc680b50..35ebeff5a2 100644 --- a/repos/gems/sculpt/leitzentrale/phone +++ b/repos/gems/sculpt/leitzentrale/phone @@ -107,7 +107,7 @@ - + diff --git a/repos/gems/src/app/depot_download_manager/gen_chroot.cc b/repos/gems/src/app/depot_download_manager/gen_chroot.cc index 11c9604a2e..b9c722a588 100644 --- a/repos/gems/src/app/depot_download_manager/gen_chroot.cc +++ b/repos/gems/src/app/depot_download_manager/gen_chroot.cc @@ -36,7 +36,7 @@ void Depot_download_manager::gen_chroot_start_content(Xml_generator &xml, xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); xml.node("parent", [&] () { - xml.attribute("label", "depot_rw"); }); + xml.attribute("identity", "depot_rw"); }); }); gen_parent_unscoped_rom_route(xml, "chroot"); gen_parent_unscoped_rom_route(xml, "ld.lib.so"); diff --git a/repos/gems/src/app/depot_download_manager/gen_depot_query.cc b/repos/gems/src/app/depot_download_manager/gen_depot_query.cc index 1bdccafa5c..8789c92cdb 100644 --- a/repos/gems/src/app/depot_download_manager/gen_depot_query.cc +++ b/repos/gems/src/app/depot_download_manager/gen_depot_query.cc @@ -30,7 +30,7 @@ void Depot_download_manager::gen_depot_query_start_content(Xml_generator &xml, xml.node("dir", [&] () { xml.attribute("name", "depot"); xml.node("fs", [&] () { - xml.attribute("label", "depot"); }); + xml.attribute("label", "depot -> /"); }); }); }); @@ -119,7 +119,7 @@ void Depot_download_manager::gen_depot_query_start_content(Xml_generator &xml, xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); xml.node("parent", [&] () { - xml.attribute("label", "depot"); }); + xml.attribute("identity", "depot"); }); }); gen_parent_unscoped_rom_route(xml, "depot_query"); gen_parent_unscoped_rom_route(xml, "ld.lib.so"); diff --git a/repos/gems/src/app/depot_download_manager/gen_extract.cc b/repos/gems/src/app/depot_download_manager/gen_extract.cc index 856b1534a9..423da5ed41 100644 --- a/repos/gems/src/app/depot_download_manager/gen_extract.cc +++ b/repos/gems/src/app/depot_download_manager/gen_extract.cc @@ -37,7 +37,7 @@ void Depot_download_manager::gen_extract_start_content(Xml_generator &xml, xml.attribute("name", "public"); xml.node("fs", [&] () { xml.attribute("buffer_size", 144u << 10); - xml.attribute("label", "public"); }); + xml.attribute("label", "public -> /"); }); }); xml.node("dir", [&] () { xml.attribute("name", "depot"); @@ -45,7 +45,7 @@ void Depot_download_manager::gen_extract_start_content(Xml_generator &xml, xml.attribute("name", user); xml.node("fs", [&] () { xml.attribute("buffer_size", 144u << 10); - xml.attribute("label", user_path); }); + xml.attribute("label", Path(user_path, " -> /")); }); }); }); xml.node("dir", [&] () { @@ -75,13 +75,13 @@ void Depot_download_manager::gen_extract_start_content(Xml_generator &xml, xml.node("route", [&] () { xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", "public"); + xml.attribute("label_prefix", "public ->"); xml.node("parent", [&] () { - xml.attribute("label", "public"); }); + xml.attribute("identity", "public"); }); }); xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", user_path); + xml.attribute("label_prefix", Path(user_path, " ->")); xml.node("child", [&] () { xml.attribute("name", user_path); }); }); diff --git a/repos/gems/src/app/depot_download_manager/gen_fetchurl.cc b/repos/gems/src/app/depot_download_manager/gen_fetchurl.cc index b028956746..af4102e44b 100644 --- a/repos/gems/src/app/depot_download_manager/gen_fetchurl.cc +++ b/repos/gems/src/app/depot_download_manager/gen_fetchurl.cc @@ -41,7 +41,7 @@ void Depot_download_manager::gen_fetchurl_start_content(Xml_generator &xml, xml.attribute("name", "download"); xml.node("fs", [&] { xml.attribute("buffer_size", 144u << 10); - xml.attribute("label", "download"); }); + xml.attribute("label", "download -> /"); }); }); xml.node("dir", [&] { xml.attribute("name", "dev"); @@ -64,7 +64,7 @@ void Depot_download_manager::gen_fetchurl_start_content(Xml_generator &xml, xml.node("pipe", [&] { }); }); xml.node("fs", [&] { - xml.attribute("label", "tcpip"); }); + xml.attribute("label", "tcpip -> /"); }); }); import.for_each_download([&] (Archive::Path const &path) { @@ -93,15 +93,15 @@ void Depot_download_manager::gen_fetchurl_start_content(Xml_generator &xml, xml.node("route", [&] { xml.node("service", [&] { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", "download"); + xml.attribute("label_prefix", "download ->"); xml.node("parent", [&] { - xml.attribute("label", "public_rw"); }); + xml.attribute("identity", "public_rw"); }); }); xml.node("service", [&] { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", "tcpip"); + xml.attribute("label_prefix", "tcpip ->"); xml.node("parent", [&] { - xml.attribute("label", "tcpip"); }); + xml.attribute("identity", "tcpip"); }); }); gen_parent_unscoped_rom_route(xml, "fetchurl"); gen_parent_unscoped_rom_route(xml, "ld.lib.so"); diff --git a/repos/gems/src/app/depot_download_manager/gen_verify.cc b/repos/gems/src/app/depot_download_manager/gen_verify.cc index 2762edd46a..bb06135dcc 100644 --- a/repos/gems/src/app/depot_download_manager/gen_verify.cc +++ b/repos/gems/src/app/depot_download_manager/gen_verify.cc @@ -34,13 +34,13 @@ void Depot_download_manager::gen_verify_start_content(Xml_generator &xml, xml.attribute("name", "public"); xml.node("fs", [&] () { xml.attribute("buffer_size", 144u << 10); - xml.attribute("label", "public"); }); + xml.attribute("label", "public -> /"); }); }); xml.node("dir", [&] () { xml.attribute("name", "depot"); xml.node("fs", [&] () { xml.attribute("buffer_size", 144u << 10); - xml.attribute("label", "depot"); }); + xml.attribute("label", "depot -> /"); }); }); xml.node("dir", [&] () { xml.attribute("name", "dev"); @@ -66,15 +66,15 @@ void Depot_download_manager::gen_verify_start_content(Xml_generator &xml, xml.node("route", [&] () { xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", "public"); + xml.attribute("label_prefix", "public ->"); xml.node("parent", [&] () { - xml.attribute("label", "public"); }); + xml.attribute("identity", "public"); }); }); xml.node("service", [&] () { xml.attribute("name", File_system::Session::service_name()); - xml.attribute("label", "depot"); + xml.attribute("label_prefix", "depot ->"); xml.node("parent", [&] () { - xml.attribute("label", "depot"); }); + xml.attribute("identity", "depot"); }); }); gen_parent_unscoped_rom_route(xml, "verify"); gen_parent_unscoped_rom_route(xml, "ld.lib.so"); diff --git a/repos/gems/src/app/file_vault/README b/repos/gems/src/app/file_vault/README index 3476835875..143e5b8dc0 100644 --- a/repos/gems/src/app/file_vault/README +++ b/repos/gems/src/app/file_vault/README @@ -43,7 +43,7 @@ an example File Vault configuration with default values: ! ! ! -! +! ! ! ! diff --git a/repos/gems/src/app/file_vault/sandbox.h b/repos/gems/src/app/file_vault/sandbox.h index 92d0583bb1..a9cbf1ed12 100644 --- a/repos/gems/src/app/file_vault/sandbox.h +++ b/repos/gems/src/app/file_vault/sandbox.h @@ -44,7 +44,7 @@ namespace File_vault { void gen_child_route(Xml_generator &xml, char const *child, char const *service, char const *label = "") { gen_route(xml, service, label, [&] { gen_named_node(xml, "child", child, [] { }); }); - }; + } void gen_parent_route(Xml_generator &xml, char const *service, char const *src_label = "", char const *dst_label = "") { @@ -77,10 +77,11 @@ namespace File_vault { gen_parent_route(xml, "LOG"); } - void gen_vfs_policy(Xml_generator &xml, char const *label, char const *root, bool writeable) + void gen_vfs_policy(Xml_generator &xml, char const *label_prefix, + char const *root, bool writeable) { xml.node("policy", [&] { - xml.attribute("label", label); + xml.attribute("label_prefix ", label_prefix); xml.attribute("root", root); xml.attribute("writeable", writeable ? "yes" : "no"); }); @@ -186,13 +187,13 @@ namespace File_vault { xml.node("vfs", [&] { xml.node("fs", [&] { xml.attribute("buffer_size", "1M"); - xml.attribute("label", "tresor_fs"); + xml.attribute("label", "tresor_fs -> /"); }); gen_named_node(xml, "tresor_crypto_aes_cbc", "crypto", [] { }); gen_named_node(xml, "dir", "trust_anchor", [&] { xml.node("fs", [&] { xml.attribute("buffer_size", "1M"); - xml.attribute("label", "trust_anchor"); + xml.attribute("label", "trust_anchor -> /"); }); }); gen_named_node(xml, "dir", "dev", [&] { @@ -214,8 +215,8 @@ namespace File_vault { gen_vfs_policy(xml, "sync_to_tresor_vfs_init -> ", "/dev", true); }); xml.node("route", [&] { - gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor"); - gen_parent_route(xml, "File_system", "tresor_fs"); + gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor -> /"); + gen_parent_route(xml, "File_system", "tresor_fs -> /"); gen_common_routes(xml); }); }); @@ -231,7 +232,7 @@ namespace File_vault { gen_named_node(xml, "dir", "storage_dir", [&] { xml.node("fs", [&] { xml.attribute("buffer_size", "1M"); - xml.attribute("label", "storage_dir"); + xml.attribute("label", "storage_dir -> /"); }); }); gen_named_node(xml, "dir", "dev", [&] { @@ -251,7 +252,7 @@ namespace File_vault { gen_vfs_policy(xml, "tresor_vfs -> trust_anchor", "/dev/tresor_trust_anchor", true); }); xml.node("route", [&] { - gen_parent_route(xml, "File_system", "storage_dir"); + gen_parent_route(xml, "File_system", "storage_dir -> /"); gen_common_routes(xml); }); }); @@ -291,7 +292,7 @@ namespace File_vault { xml.attribute("path", path); xml.node("vfs", [&] { gen_named_node(xml, "dir", "tresor", [&] { - xml.node("fs", [&] { xml.attribute("label", "tresor"); }); }); }); + xml.node("fs", [&] { xml.attribute("label", "tresor -> /"); }); }); }); }); xml.node("route", [&] { gen_parent_route(xml, "File_system"); @@ -358,10 +359,10 @@ namespace File_vault { xml.attribute("trust_anchor_dir", "/trust_anchor"); xml.node("vfs", [&] { gen_named_node(xml, "dir", "trust_anchor", [&] { - xml.node("fs", [&] { xml.attribute("label", "trust_anchor"); }); }); }); + xml.node("fs", [&] { xml.attribute("label", "trust_anchor -> /"); }); }); }); }); xml.node("route", [&] { - gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor"); + gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor -> /"); gen_common_routes(xml); }); }); @@ -382,12 +383,12 @@ namespace File_vault { xml.node("fs", [&] { xml.attribute("buffer_size", "1M"); }); gen_named_node(xml, "tresor_crypto_aes_cbc", "crypto", [] { }); gen_named_node(xml, "dir", "trust_anchor", [&] { - xml.node("fs", [&] { xml.attribute("label", "trust_anchor"); }); }); + xml.node("fs", [&] { xml.attribute("label", "trust_anchor -> /"); }); }); }); sb_config.generate_xml(xml); }); xml.node("route", [&] { - gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor"); + gen_child_route(xml, "tresor_trust_anchor_vfs", "File_system", "trust_anchor -> /"); gen_parent_route(xml, "File_system"); gen_common_routes(xml); }); diff --git a/repos/gems/src/app/sculpt_manager/dialog/distant_runtime.cc b/repos/gems/src/app/sculpt_manager/dialog/distant_runtime.cc index 9126cf5727..2346ab20a1 100644 --- a/repos/gems/src/app/sculpt_manager/dialog/distant_runtime.cc +++ b/repos/gems/src/app/sculpt_manager/dialog/distant_runtime.cc @@ -200,7 +200,7 @@ void Distant_runtime::gen_start_nodes(Xml_generator &xml) const xml.node("dir", [&] { xml.attribute("name", "fonts"); xml.node("fs", [&] { - xml.attribute("label", "fonts"); + xml.attribute("label", "fonts -> /"); }); }); }); @@ -234,9 +234,9 @@ void Distant_runtime::gen_start_nodes(Xml_generator &xml) const }); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "fonts"); + xml.attribute("label_prefix", "fonts ->"); xml.node("parent", [&] { - xml.attribute("label", "leitzentrale -> fonts"); }); }); + xml.attribute("identity", "leitzentrale -> fonts"); }); }); }); }); } diff --git a/repos/gems/src/app/sculpt_manager/model/file_browser_state.h b/repos/gems/src/app/sculpt_manager/model/file_browser_state.h index b35d1f6531..e4466612a5 100644 --- a/repos/gems/src/app/sculpt_manager/model/file_browser_state.h +++ b/repos/gems/src/app/sculpt_manager/model/file_browser_state.h @@ -105,11 +105,11 @@ struct Sculpt::File_browser_state : Noncopyable if (browsed_fs == "config") { xml.node("parent", [&] { - xml.attribute("label", "config"); }); + xml.attribute("identity", "config"); }); } else if (browsed_fs == "report") { xml.node("parent", [&] { - xml.attribute("label", "report"); }); + xml.attribute("identity", "report"); }); } else { xml.node("child", [&] { @@ -181,19 +181,19 @@ struct Sculpt::File_browser_state : Noncopyable xml.attribute("label", "leitzentrale -> editor"); }); }); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "fonts"); + xml.attribute("label_prefix", "fonts ->"); xml.node("parent", [&] { - xml.attribute("label", "leitzentrale -> fonts"); }); }); + xml.attribute("identity", "leitzentrale -> fonts"); }); }); gen_service_node<::File_system::Session>(xml, [&] { if (browsed_fs == "config") { xml.node("parent", [&] { - xml.attribute("label", "config"); }); + xml.attribute("identity", "config"); }); } else if (browsed_fs == "report") { xml.node("parent", [&] { - xml.attribute("label", "report"); }); + xml.attribute("identity", "report"); }); } else { xml.node("child", [&] { diff --git a/repos/gems/src/app/sculpt_manager/model/route.h b/repos/gems/src/app/sculpt_manager/model/route.h index 3bcc3cd602..485f765869 100644 --- a/repos/gems/src/app/sculpt_manager/model/route.h +++ b/repos/gems/src/app/sculpt_manager/model/route.h @@ -146,10 +146,17 @@ struct Sculpt::Route : List_model::Element if (required_label.valid()) { - if (selected_service->match_label == Service::Match_label::LAST) + switch (selected_service->match_label) { + case Service::Match_label::LAST: xml.attribute("label_last", required_label); - else + break; + case Service::Match_label::FS: + xml.attribute("label_prefix", Label(required_label, " ->")); + break; + case Service::Match_label::EXACT: xml.attribute("label", required_label); + break; + } } selected_service->gen_xml(xml); diff --git a/repos/gems/src/app/sculpt_manager/model/runtime_config.h b/repos/gems/src/app/sculpt_manager/model/runtime_config.h index 8f8fc915b2..8893f1f57e 100644 --- a/repos/gems/src/app/sculpt_manager/model/runtime_config.h +++ b/repos/gems/src/app/sculpt_manager/model/runtime_config.h @@ -312,8 +312,8 @@ class Sculpt::Runtime_config _event { _r, Type::EVENT, "filtered input events" }, _lz_capture{ _r, Type::CAPTURE, "management GUI", "leitzentrale" }, _capture { _r, Type::CAPTURE, "system GUI", "global" }, - _config_fs { _r, Type::FILE_SYSTEM, "writeable system configuration", "config" }, - _report_fs { _r, Type::FILE_SYSTEM, "read-only system reports", "report" }, + _config_fs { _r, Type::FILE_SYSTEM, "writeable system configuration", "config", Service::Match_label::FS }, + _report_fs { _r, Type::FILE_SYSTEM, "read-only system reports", "report", Service::Match_label::FS }, _capslock { _r, Type::ROM, "global capslock state", "capslock" }, _vimrc { _r, Type::ROM, "default vim configuration", "config -> vimrc" }, _fonts { _r, Type::ROM, "system font configuration", "config -> managed/fonts" }, diff --git a/repos/gems/src/app/sculpt_manager/model/service.h b/repos/gems/src/app/sculpt_manager/model/service.h index 39d316e5e9..580966d1be 100644 --- a/repos/gems/src/app/sculpt_manager/model/service.h +++ b/repos/gems/src/app/sculpt_manager/model/service.h @@ -30,13 +30,13 @@ struct Sculpt::Service RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE, USB, RTC, I2C, PLATFORM, PIN_STATE, PIN_CONTROL, VM, PD, UPLINK, PLAY, RECORD, UNDEFINED }; - enum class Match_label { EXACT, LAST }; + enum class Match_label { EXACT, LAST, FS }; Start_name server { }; /* invalid for parent service */ Type type; Label label; Info info; - Match_label match_label { Match_label::EXACT }; + Match_label match_label; /** * Return name attribute value of node @@ -81,13 +81,18 @@ struct Sculpt::Service * Constructor for child service */ Service(Start_name const &server, Type type, Label const &label) - : server(server), type(type), label(label), info(Subst("_", " ", server)) { } + : + server(server), type(type), label(label), info(Subst("_", " ", server)), + match_label(type == Type::FILE_SYSTEM ? Match_label::FS : Match_label::EXACT) + { } /** * Constructor for default_fs_rw */ Service(Start_name const &server, Type type, Label const &label, Info const &info) - : server(server), type(type), label(label), info(info) { } + : + server(server), type(type), label(label), info(info), match_label(Match_label::FS) + { } /** * Constructor for parent service @@ -109,6 +114,9 @@ struct Sculpt::Service if (label.valid() && match_label == Match_label::EXACT) xml.attribute("label", label); + + if (label.valid() && match_label == Match_label::FS) + xml.attribute("identity", label); }); } }; diff --git a/repos/gems/src/app/sculpt_manager/runtime/fs_tool.cc b/repos/gems/src/app/sculpt_manager/runtime/fs_tool.cc index 675034521d..d4266fa04a 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/fs_tool.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/fs_tool.cc @@ -39,8 +39,8 @@ void Sculpt::gen_fs_tool_start_content(Xml_generator &xml, Fs_tool_version versi xml.attribute("buffer_size", buffer_size); }); }); }; - gen_fs("rw", "target", "1M"); - gen_fs("config", "config", "128K"); + gen_fs("rw", "target -> /", "1M"); + gen_fs("config", "config -> /", "128K"); }); operations.gen_fs_tool_config(xml); @@ -49,7 +49,7 @@ void Sculpt::gen_fs_tool_start_content(Xml_generator &xml, Fs_tool_version versi xml.node("route", [&] { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "target"); + xml.attribute("label_prefix", "target ->"); gen_named_node(xml, "child", "default_fs_rw"); }); gen_parent_rom_route(xml, "fs_tool"); @@ -61,7 +61,7 @@ void Sculpt::gen_fs_tool_start_content(Xml_generator &xml, Fs_tool_version versi gen_parent_route (xml); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "config"); - xml.node("parent", [&] { xml.attribute("label", "config"); }); }); + xml.attribute("label_prefix", "config ->"); + xml.node("parent", [&] { xml.attribute("identity", "config"); }); }); }); } diff --git a/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc b/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc index 7f1fe24ed1..b87562d54f 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc @@ -80,7 +80,7 @@ static void gen_vfs_start(Xml_generator &xml, gen_named_node(xml, "dir", label, [&] { xml.node("fs", [&] { xml.attribute("buffer_size", 272u << 10); - xml.attribute("label", label); }); }); }; + xml.attribute("label", prefixed_label(label, String<8>("/"))); }); }); }; fs_dir("config"); fs_dir("report"); @@ -111,13 +111,13 @@ static void gen_vfs_start(Xml_generator &xml, xml.node("route", [&] { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "config"); - xml.node("parent", [&] { xml.attribute("label", "config"); }); + xml.attribute("label_prefix", "config ->"); + xml.node("parent", [&] { xml.attribute("identity", "config"); }); }); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "report"); - xml.node("parent", [&] { xml.attribute("label", "report"); }); + xml.attribute("label_prefix", "report ->"); + xml.node("parent", [&] { xml.attribute("identity", "report"); }); }); gen_service_node(xml, [&] { @@ -242,18 +242,13 @@ void Sculpt::gen_inspect_view(Xml_generator &xml, xml.node("route", [&] { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "config"); - xml.node("parent", [&] { xml.attribute("label", "config"); }); + xml.attribute("label_prefix", "config ->"); + xml.node("parent", [&] { xml.attribute("identity", "config"); }); }); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "report"); - xml.node("parent", [&] { xml.attribute("label", "report"); }); - }); - - gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "report"); - xml.node("parent", [&] { xml.attribute("label", "report"); }); + xml.attribute("label_prefix", "report ->"); + xml.node("parent", [&] { xml.attribute("identity", "report"); }); }); gen_parent_rom_route(xml, "ld.lib.so"); @@ -283,16 +278,13 @@ void Sculpt::gen_inspect_view(Xml_generator &xml, for_each_inspected_storage_target(devices, [&] (Storage_target const &target) { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label_last", target.label()); - gen_named_node(xml, "child", target.fs()); - }); - }); + xml.attribute("label_prefix", Session_label("vfs -> ", target.label(), " ->")); + gen_named_node(xml, "child", target.fs()); }); }); if (ram_fs_state.inspected) gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label_last", "ram"); - gen_named_node(xml, "child", "ram_fs"); - }); + xml.attribute("label_prefix", "vfs -> ram ->"); + gen_named_node(xml, "child", "ram_fs"); }); gen_service_node(xml, [&] { xml.node("parent", [&] { diff --git a/repos/gems/src/app/sculpt_manager/runtime/launcher_query.cc b/repos/gems/src/app/sculpt_manager/runtime/launcher_query.cc index 166f14a740..7943d2365a 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/launcher_query.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/launcher_query.cc @@ -49,6 +49,6 @@ void Sculpt::gen_launcher_query_start_content(Xml_generator &xml) gen_service_node<::File_system::Session>(xml, [&] { xml.node("parent", [&] { - xml.attribute("label", "config"); }); }); + xml.attribute("identity", "config"); }); }); }); } diff --git a/repos/gems/src/app/sculpt_manager/runtime/prepare.cc b/repos/gems/src/app/sculpt_manager/runtime/prepare.cc index 26917614e6..da376c99fb 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/prepare.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/prepare.cc @@ -58,10 +58,10 @@ void Sculpt::gen_prepare_vfs_start(Xml_generator &xml) }); gen_named_node(xml, "dir", "rw", [&] { - xml.node("fs", [&] { xml.attribute("label", "target"); }); }); + xml.node("fs", [&] { xml.attribute("label", "target -> /"); }); }); gen_named_node(xml, "dir", "config", [&] { - xml.node("fs", [&] { xml.attribute("label", "config"); }); }); + xml.node("fs", [&] { xml.attribute("label", "config -> /"); }); }); gen_named_node(xml, "rom", "VERSION"); }); @@ -184,7 +184,7 @@ void Sculpt::gen_prepare_start_content(Xml_generator &xml, Prepare_version versi xml.node("route", [&] { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "vfs -> target"); + xml.attribute("label_prefix", "vfs -> target ->"); gen_named_node(xml, "child", "default_fs_rw"); }); gen_parent_rom_route(xml, "ld.lib.so"); @@ -203,7 +203,7 @@ void Sculpt::gen_prepare_start_content(Xml_generator &xml, Prepare_version versi gen_parent_route (xml); gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", "vfs -> config"); - xml.node("parent", [&] { xml.attribute("label", "config"); }); }); + xml.attribute("label_prefix", "vfs -> config ->"); + xml.node("parent", [&] { xml.attribute("identity", "config"); }); }); }); } diff --git a/repos/gems/src/app/sculpt_manager/runtime/update.cc b/repos/gems/src/app/sculpt_manager/runtime/update.cc index 98b8947599..3a0c497f99 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/update.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/update.cc @@ -24,14 +24,14 @@ void Sculpt::gen_update_start_content(Xml_generator &xml) xml.node("route", [&] { using Label = String<32>; - auto gen_fs = [&] (Label const &label, Label const &server) { + auto gen_fs = [&] (Label const &label_prefix, Label const &server) { gen_service_node<::File_system::Session>(xml, [&] { - xml.attribute("label", label); + xml.attribute("label_prefix", label_prefix); gen_named_node(xml, "child", server); }); }; /* connect file-system sessions to chroot instances */ - gen_fs("depot", "depot_rw"); - gen_fs("public", "public_rw"); + gen_fs("depot ->", "depot_rw"); + gen_fs("public ->", "public_rw"); gen_parent_rom_route(xml, "ld.lib.so"); gen_parent_rom_route(xml, "vfs.lib.so"); diff --git a/repos/gems/src/lib/dialog/sandboxed_runtime.cc b/repos/gems/src/lib/dialog/sandboxed_runtime.cc index d8e204ae14..cfdf1e30a2 100644 --- a/repos/gems/src/lib/dialog/sandboxed_runtime.cc +++ b/repos/gems/src/lib/dialog/sandboxed_runtime.cc @@ -316,9 +316,9 @@ void Sandboxed_runtime::Menu_view_state::gen_start_node(Xml_generator &xml, View xml.node("service", [&] () { xml.attribute("name", "File_system"); - xml.attribute("label", "fonts"); + xml.attribute("label_prefix", "fonts ->"); xml.node("parent", [&] () { - xml.attribute("label", "fonts"); }); + xml.attribute("identity", "fonts"); }); }); auto parent_route = [&] (auto const &service) diff --git a/repos/libports/recipes/pkg/gcov/runtime b/repos/libports/recipes/pkg/gcov/runtime index 8e4edecf46..9f8b2354fd 100644 --- a/repos/libports/recipes/pkg/gcov/runtime +++ b/repos/libports/recipes/pkg/gcov/runtime @@ -39,8 +39,8 @@ - - + + diff --git a/repos/libports/recipes/pkg/test-libc_fifo_pipe/runtime b/repos/libports/recipes/pkg/test-libc_fifo_pipe/runtime index 4b836ba4f2..0b14a245c7 100644 --- a/repos/libports/recipes/pkg/test-libc_fifo_pipe/runtime +++ b/repos/libports/recipes/pkg/test-libc_fifo_pipe/runtime @@ -39,8 +39,8 @@ - - + + @@ -70,8 +70,8 @@ - - + + @@ -85,7 +85,7 @@ - + @@ -118,10 +118,10 @@ - + - + diff --git a/repos/libports/recipes/raw/qt5_textedit/textedit.config b/repos/libports/recipes/raw/qt5_textedit/textedit.config index de37861a9f..b088548a20 100644 --- a/repos/libports/recipes/raw/qt5_textedit/textedit.config +++ b/repos/libports/recipes/raw/qt5_textedit/textedit.config @@ -5,7 +5,7 @@ 2018-01-01 00:01 - + diff --git a/repos/libports/src/app/extract/README b/repos/libports/src/app/extract/README index ccc6ebdd62..50cb9b774e 100644 --- a/repos/libports/src/app/extract/README +++ b/repos/libports/src/app/extract/README @@ -10,8 +10,8 @@ multiple archives one at a time: ! ! -! -! +! +! ! ! ! diff --git a/repos/libports/src/app/fetchurl/README b/repos/libports/src/app/fetchurl/README index 9b79cc173d..0c8ee9d3d9 100644 --- a/repos/libports/src/app/fetchurl/README +++ b/repos/libports/src/app/fetchurl/README @@ -46,7 +46,7 @@ Use the socket plugin of an other vfs (store file in a directory): ! 01234567890123456789 ! ! -! +! ! ! diff --git a/repos/libports/src/lib/gcov/libc/libc.cc b/repos/libports/src/lib/gcov/libc/libc.cc index d33f660954..aeb723b625 100644 --- a/repos/libports/src/lib/gcov/libc/libc.cc +++ b/repos/libports/src/lib/gcov/libc/libc.cc @@ -52,7 +52,7 @@ struct Gcov_env * VFS. */ - File_system::Connection fs { env, fs_alloc, "gcov_data" }; + File_system::Connection fs { env, fs_alloc, "gcov_data -> /" }; seek_off_t seek_offset { 0 }; Io_signal_handler _fs_signal_handler { diff --git a/repos/os/include/file_system_session/connection.h b/repos/os/include/file_system_session/connection.h index defb0b16ef..d588943677 100644 --- a/repos/os/include/file_system_session/connection.h +++ b/repos/os/include/file_system_session/connection.h @@ -58,22 +58,19 @@ struct File_system::Connection : Genode::Connection, Session_client * * \param tx_buffer_alloc allocator used for managing the * transmission buffer - * \param label session label - * \param root root directory of session + * \param label session label and client-preferred root directory * \param writeable session is writeable * \param tx_buf_size size of transmission buffer in bytes */ Connection(Genode::Env &env, Genode::Range_allocator &tx_block_alloc, - Label const &label = Label(), - char const *root = "/", + Label const &label = Label("/"), bool writeable = true, size_t tx_buf_size = DEFAULT_TX_BUF_SIZE) : Genode::Connection(env, label, Ram_quota { 8*1024*sizeof(long) + tx_buf_size }, - Args("root=\"", root, "\", " - "writeable=", writeable, ", " + Args("writeable=", writeable, ", " "tx_buf_size=", tx_buf_size)), Session_client(cap(), tx_block_alloc, env.rm()) { } diff --git a/repos/os/recipes/pkg/cpu_balancer_config/runtime b/repos/os/recipes/pkg/cpu_balancer_config/runtime index ac9172cadc..165946aa9f 100644 --- a/repos/os/recipes/pkg/cpu_balancer_config/runtime +++ b/repos/os/recipes/pkg/cpu_balancer_config/runtime @@ -34,7 +34,7 @@ - + @@ -43,7 +43,7 @@ - + diff --git a/repos/os/run/internet_checksum.run b/repos/os/run/internet_checksum.run index cf726460b7..418c0040c6 100644 --- a/repos/os/run/internet_checksum.run +++ b/repos/os/run/internet_checksum.run @@ -47,7 +47,7 @@ install_config { - + diff --git a/repos/os/run/lx_fs_import.run b/repos/os/run/lx_fs_import.run index 7f00743094..39d7859d27 100644 --- a/repos/os/run/lx_fs_import.run +++ b/repos/os/run/lx_fs_import.run @@ -45,7 +45,7 @@ install_config { - + diff --git a/repos/os/run/platform.run b/repos/os/run/platform.run index 16592222ea..1f2120359f 100644 --- a/repos/os/run/platform.run +++ b/repos/os/run/platform.run @@ -49,8 +49,8 @@ install_config { - - + + diff --git a/repos/os/src/lib/vfs/fs_file_system.h b/repos/os/src/lib/vfs/fs_file_system.h index 022d926d2a..2d25cf153a 100644 --- a/repos/os/src/lib/vfs/fs_file_system.h +++ b/repos/os/src/lib/vfs/fs_file_system.h @@ -34,9 +34,6 @@ class Vfs::Fs_file_system : public File_system, private Remote_io using Label_string = Genode::String<64>; Label_string _label; - using Root_string = Genode::String<::File_system::MAX_NAME_LEN>; - Root_string _root; - ::File_system::Connection _fs; bool _write_would_block = false; @@ -568,13 +565,17 @@ class Vfs::Fs_file_system : public File_system, private Remote_io Fs_file_system(Vfs::Env &env, Genode::Xml_node config) : _env(env), - _label(config.attribute_value("label", Label_string())), - _root( config.attribute_value("root", Root_string())), + _label(config.attribute_value("label", Label_string("/"))), _fs(_env.env(), _fs_packet_alloc, - _label.string(), _root.string(), + _label, config.attribute_value("writeable", true), buffer_size(config)) { + if (config.has_attribute("root")) { + Genode::warning("vfs: node uses deprecated 'root' attribute."); + Genode::warning(" Append the root dir to the label instead."); + } + _fs.sigh(_signal_handler); } diff --git a/repos/os/src/server/cached_fs_rom/main.cc b/repos/os/src/server/cached_fs_rom/main.cc index 645ae46832..3f87a908b7 100644 --- a/repos/os/src/server/cached_fs_rom/main.cc +++ b/repos/os/src/server/cached_fs_rom/main.cc @@ -290,7 +290,7 @@ struct Cached_fs_rom::Main final : Genode::Session_request_handler Heap heap { env.pd(), env.rm() }; Allocator_avl fs_tx_block_alloc { &heap }; - File_system::Connection fs { env, fs_tx_block_alloc, "", "/", false, 4*1024*1024 }; + File_system::Connection fs { env, fs_tx_block_alloc, "/", false, 4*1024*1024 }; Session_requests_rom session_requests { env, *this }; diff --git a/repos/os/src/server/chroot/component.cc b/repos/os/src/server/chroot/component.cc index 2bb97037c6..1b0084b50b 100644 --- a/repos/os/src/server/chroot/component.cc +++ b/repos/os/src/server/chroot/component.cc @@ -64,7 +64,7 @@ struct Chroot::Main * File-system session for creating new chroot directories */ File_system::Connection fs { - env, fs_tx_block_alloc, "", "/", true, 1 }; + env, fs_tx_block_alloc, "/", true, 1 }; Attached_rom_dataspace session_requests { env, "session_requests" }; @@ -118,7 +118,7 @@ struct Chroot::Main /* Use a chroot path from policy and label sub-directories */ Prefix const prefix = policy.attribute_value("path_prefix", Prefix()); root_path.import(prefix.string()); - root_path.append(path_from_label(label.string()).string()); + root_path.append(path_from_label(label.prefix().string()).string()); } else if (policy.has_attribute("path")) { /* Use a chroot path from policy */ root_path.import(policy.attribute_value("path", Prefix()).string()); @@ -127,15 +127,24 @@ struct Chroot::Main root_path = path_from_label(label.string()); } - /* extract and append the session argument */ + /* append client-provided path */ { - char tmp[PATH_MAX_LEN]; - Arg_string::find_arg(args.string(), "root").string(tmp, sizeof(tmp), "/"); - root_path.append_element(tmp); + Session_label const client_root_path = label.last_element(); + bool root_path_valid = true; + if (client_root_path.string()[0] != '/') { + warning(label, ": last label element should start with /"); + root_path_valid = false; + } + if (client_root_path.string()[min(1ul, client_root_path.length()) - 1] != '/') { + warning(label, ": last label element should end with /"); + root_path_valid = false; + } + if (!root_path_valid) + throw Service_denied(); + root_path.append(client_root_path.string()); + root_path.remove_trailing('/'); } - root_path.remove_trailing('/'); - char const *new_root = root_path.base(); using namespace File_system; @@ -179,7 +188,11 @@ struct Chroot::Main Arg_string::set_arg(new_args, ARGS_MAX_LEN, "writeable", writeable); } - Arg_string::set_arg_string(new_args, ARGS_MAX_LEN, "root", new_root); + /* replace last label element by new root path */ + Session_label const rewritten_label = + prefixed_label(label.prefix(), Session_label(root_path.string(), "/")); + + Arg_string::set_arg_string(new_args, ARGS_MAX_LEN, "label", rewritten_label.string()); return env.session("File_system", id, new_args, affinity); } diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc index 5874ea161b..edc0b898f2 100644 --- a/repos/os/src/server/vfs/main.cc +++ b/repos/os/src/server/vfs/main.cc @@ -923,13 +923,20 @@ class Vfs_server::Root : public Genode::Root_component, /* apply client's root offset. */ { - char tmp[MAX_PATH_LEN] { }; - Arg_string::find_arg(args, "root").string(tmp, sizeof(tmp), "/"); - if (Genode::strcmp("/", tmp, sizeof(tmp))) { - session_root.append("/"); - session_root.append(tmp); - session_root.remove_trailing('/'); + Session_label const client_root_path = label.last_element(); + bool root_path_valid = true; + if (client_root_path.string()[0] != '/') { + warning(label, ": last label element should start with /"); + root_path_valid = false; } + if (client_root_path.string()[min(1ul, client_root_path.length()) - 1] != '/') { + warning(label, ": last label element should end with /"); + root_path_valid = false; + } + if (!root_path_valid) + throw Service_denied(); + session_root.append(client_root_path.string()); + session_root.remove_trailing('/'); } /* check if the session root exists */ diff --git a/repos/os/src/server/vfs_block/README b/repos/os/src/server/vfs_block/README index 3eb8e2c514..088ab3168f 100644 --- a/repos/os/src/server/vfs_block/README +++ b/repos/os/src/server/vfs_block/README @@ -14,14 +14,14 @@ component: ! ! ! -! +! ! ! ! ! ! -! +! ! ! ! diff --git a/repos/os/src/test/fs_packet/component.cc b/repos/os/src/test/fs_packet/component.cc index 7dea4fcc37..7e1dca94d8 100644 --- a/repos/os/src/test/fs_packet/component.cc +++ b/repos/os/src/test/fs_packet/component.cc @@ -36,7 +36,7 @@ struct Fs_packet::Main Heap _heap { _env.pd(), _env.rm() }; Allocator_avl _avl_alloc { &_heap }; - File_system::Connection _fs { _env, _avl_alloc, "", "/", false, 4<<10 }; + File_system::Connection _fs { _env, _avl_alloc, "/", false, 4<<10 }; File_system::Session::Tx::Source &_tx { *_fs.tx() }; diff --git a/repos/pc/sculpt/deploy/goa_testbed b/repos/pc/sculpt/deploy/goa_testbed index 9d21432006..5ff57a5542 100644 --- a/repos/pc/sculpt/deploy/goa_testbed +++ b/repos/pc/sculpt/deploy/goa_testbed @@ -19,7 +19,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/repos/ports/recipes/pkg/lighttpd/runtime b/repos/ports/recipes/pkg/lighttpd/runtime index 957f967571..a7c545b811 100644 --- a/repos/ports/recipes/pkg/lighttpd/runtime +++ b/repos/ports/recipes/pkg/lighttpd/runtime @@ -36,7 +36,7 @@ dir-listing.activate = "enable" - + - - + + diff --git a/repos/ports/recipes/pkg/vbox5-nova-capture/runtime b/repos/ports/recipes/pkg/vbox5-nova-capture/runtime index bfab277a2c..649ed4d9a4 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-capture/runtime +++ b/repos/ports/recipes/pkg/vbox5-nova-capture/runtime @@ -68,8 +68,8 @@ - - + + diff --git a/repos/ports/recipes/pkg/vbox6-capture/runtime b/repos/ports/recipes/pkg/vbox6-capture/runtime index d1bf30921c..de481c55ec 100644 --- a/repos/ports/recipes/pkg/vbox6-capture/runtime +++ b/repos/ports/recipes/pkg/vbox6-capture/runtime @@ -29,10 +29,10 @@ - + - + diff --git a/repos/ports/recipes/pkg/vbox6/runtime b/repos/ports/recipes/pkg/vbox6/runtime index cea2713bcb..ec6a157376 100644 --- a/repos/ports/recipes/pkg/vbox6/runtime +++ b/repos/ports/recipes/pkg/vbox6/runtime @@ -28,10 +28,10 @@ - + - + diff --git a/repos/ports/recipes/raw/gdb_x86/gdb.config b/repos/ports/recipes/raw/gdb_x86/gdb.config index 439f655b79..1c80e7445e 100644 --- a/repos/ports/recipes/raw/gdb_x86/gdb.config +++ b/repos/ports/recipes/raw/gdb_x86/gdb.config @@ -41,7 +41,7 @@ - + @@ -56,10 +56,10 @@ - - + + - + diff --git a/repos/ports/recipes/raw/system_shell/system_shell.config b/repos/ports/recipes/raw/system_shell/system_shell.config index 5296d1bc7b..928428d5b2 100644 --- a/repos/ports/recipes/raw/system_shell/system_shell.config +++ b/repos/ports/recipes/raw/system_shell/system_shell.config @@ -22,7 +22,7 @@ - + @@ -55,9 +55,9 @@ - - - + + + diff --git a/repos/ports/recipes/raw/vbox5-nova-sculpt/init.config b/repos/ports/recipes/raw/vbox5-nova-sculpt/init.config index 2a1bd27999..834a7dd0d6 100644 --- a/repos/ports/recipes/raw/vbox5-nova-sculpt/init.config +++ b/repos/ports/recipes/raw/vbox5-nova-sculpt/init.config @@ -28,15 +28,15 @@ - + - - + + diff --git a/repos/ports/run/vbox_share.inc b/repos/ports/run/vbox_share.inc index 1305e8feae..cde1b72ffd 100644 --- a/repos/ports/run/vbox_share.inc +++ b/repos/ports/run/vbox_share.inc @@ -207,8 +207,8 @@ set config_of_app { - - + + @@ -222,10 +222,10 @@ set config_of_app { - + - + @@ -342,11 +342,11 @@ append config_of_app { } append_if [expr $use_ram_fs] config_of_app { - } + } append config_of_app { - - + + @@ -354,15 +354,15 @@ append config_of_app { } append_if [expr $use_ram_fs] config_of_app { - + } append config_of_app { - + - + diff --git a/repos/ports/run/vbox_win.inc b/repos/ports/run/vbox_win.inc index 309f5078da..04a417684b 100644 --- a/repos/ports/run/vbox_win.inc +++ b/repos/ports/run/vbox_win.inc @@ -276,7 +276,7 @@ for { set i 1} { $i <= $use_vms } { incr i} { } append_if [expr $use_ram_fs] config_of_app { - } + } append config_of_app " " @@ -295,7 +295,7 @@ for { set i 1} { $i <= $use_vms } { incr i} { } append_if [expr $use_ram_fs] config_of_app { - } + } append_if [expr $use_rumpfs] config_of_app { }