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, <vfs> <fs> nodes that
  feature a 'label' attributes must extend the attribute value
  with " -> /". For <fs> 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 <parent> or <child> 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
This commit is contained in:
Norman Feske 2025-02-05 16:01:26 +01:00 committed by Christian Helmuth
parent ba97a676ad
commit 2c8beb462f
80 changed files with 418 additions and 388 deletions

View File

@ -47,10 +47,10 @@ install_config {
<start name="lx_fs" caps="200" ram="4M" ld="no">
<provides> <service name="File_system"/> </provides>
<config>
<policy label_prefix="fs_rom_config" root="/lx_fs_notify" writeable="no"/>
<policy label_prefix="fs_rom_test" root="/lx_fs_notify/test" writeable="no"/>
<policy label_suffix="templates" root="/lx_fs_notify/templates" writeable="yes"/>
<policy label_suffix="test" root="/lx_fs_notify/test" writeable="yes"/>
<policy label_prefix="fs_rom_config" root="/lx_fs_notify" writeable="no"/>
<policy label_prefix="fs_rom_test" root="/lx_fs_notify/test" writeable="no"/>
<policy label_suffix="templates -> /" root="/lx_fs_notify/templates" writeable="yes"/>
<policy label_suffix="test -> /" root="/lx_fs_notify/test" writeable="yes"/>
</config>
</start>
@ -117,8 +117,8 @@ set init_run_fwrite_test {
<log/>
<null/>
</dir>
<dir name="templates"> <fs label="templates"/> </dir>
<dir name="test"> <fs label="test"/> </dir>
<dir name="templates"> <fs label="templates -> /"/> </dir>
<dir name="test"> <fs label="test -> /"/> </dir>
</vfs>
<arg value="test-file_writer"/>
<arg value="--fwrite"/>
@ -153,8 +153,8 @@ set init_run_write_test {
<log/>
<null/>
</dir>
<dir name="templates"> <fs label="templates"/> </dir>
<dir name="test"> <fs label="test"/> </dir>
<dir name="templates"> <fs label="templates -> /"/> </dir>
<dir name="test"> <fs label="test -> /"/> </dir>
</vfs>
<arg value="test-file_writer"/>
<arg value="--write"/>

View File

@ -60,7 +60,7 @@
</config>
<route>
<service name="File_system">
<parent label="used"/>
<parent identity="used"/>
</service>
<any-service> <parent/> </any-service>
</route>
@ -74,7 +74,7 @@
</config>
<route>
<service name="File_system">
<parent label="used"/>
<parent identity="used"/>
</service>
<any-service> <parent/> </any-service>
</route>
@ -101,10 +101,10 @@
<service name="ROM" label_suffix="installation">
<child name="report_rom" label="depot_download -> installation"/>
</service>
<service name="File_system" label="depot">
<service name="File_system" label_prefix="depot ->">
<child name="depot_rw"/>
</service>
<service name="File_system" label="public">
<service name="File_system" label_prefix="public ->">
<child name="public_rw"/>
</service>
<service name="Report">
@ -118,13 +118,13 @@
<config>
<vfs>
<dir name="config">
<fs label="config"/>
<fs label="config -> /"/>
</dir>
</vfs>
</config>
<route>
<service name="File_system" label="config">
<parent label="system_config"/>
<service name="File_system" label_prefix="config ->">
<parent identity="system_config"/>
</service>
<service name="Report">
<child name="report_rom"/>

View File

@ -86,17 +86,17 @@
<service name="File_system"/>
</provides>
<config>
<vfs> <dir name="tresor"> <fs label="tresor"/> </dir> </vfs>
<vfs> <dir name="tresor"> <fs label="tresor -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="report_rom"/> </service>
<service name="Report" label="ui_report"> <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <parent label="trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <parent label="data"/> </service>
<service name="File_system" label="tresor"> <parent label="data"/> </service>
<service name="File_system" label="image_fs_query -> "> <parent label="data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <parent label="data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <parent label="data"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir"> <parent identity="trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init -> "> <parent identity="data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <parent identity="data"/> </service>
<service name="File_system" label_prefix="image_fs_query -> "> <parent identity="data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <parent identity="data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <parent identity="data"/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
@ -111,7 +111,7 @@
<route>
<service name="ROM" label="ui_report"> <child name="report_rom"/> </service>
<service name="Report" label="ui_config"> <child name="report_rom"/> </service>
<service name="File_system" label_last="fonts"> <parent label="fonts"/> </service>
<service name="File_system" label_last="fonts -> /"> <parent identity="fonts"/> </service>
<service name="Gui"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>

View File

@ -85,7 +85,7 @@
<ram/>
</dir>
</vfs>
<policy label="file_vault -> data" root="/data" writeable="yes"/>
<policy label_prefix="file_vault -> data" root="/data" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -104,7 +104,7 @@
<ram/>
</dir>
</vfs>
<policy label="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
<policy label_prefix="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -118,26 +118,27 @@
<config>
<vfs>
<dir name="tresor">
<fs label="tresor"/>
<fs label="tresor -> /"/>
</dir>
</vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report"> label="ui_report" <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <child name="trust_anchor_fs" label="file_vault -> trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="image_fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir">
<child name="trust_anchor_fs" identity="file_vault -> trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="image_fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>

View File

@ -85,7 +85,7 @@
<ram/>
</dir>
</vfs>
<policy label="file_vault -> data" root="/data" writeable="yes"/>
<policy label_prefix="file_vault -> data" root="/data" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -104,7 +104,7 @@
<ram/>
</dir>
</vfs>
<policy label="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
<policy label_prefix="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -118,26 +118,27 @@
<config jitterentropy_available="no">
<vfs>
<dir name="tresor">
<fs label="tresor"/>
<fs label="tresor -> /"/>
</dir>
</vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report"> label="ui_report" <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <child name="trust_anchor_fs" label="file_vault -> trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="image_fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir">
<child name="trust_anchor_fs" identity="file_vault -> trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="image_fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="Timer"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>

View File

@ -27,8 +27,8 @@
<route>
<service name="ROM" label="layout">
<parent label="touch_keyboard_layout.config"/> </service>
<service name="File_system" label="fonts">
<parent label="fonts"/> </service>
<service name="File_system" label_prefix="fonts ->">
<parent identity="fonts"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -19,7 +19,7 @@
<!-- example, must be refined and enabled -->
<config period_ms="5000" enable="no">
<vfs> <fs label="target"/> </vfs>
<vfs> <fs label="target -> /"/> </vfs>
<default-policy policy="ctf0">
<ctf/>

View File

@ -33,7 +33,7 @@
<provides> <service name="Report"/> </provides>
<config> <vfs> <fs/> </vfs> </config>
<route>
<service name="File_system"> <parent label="recall"/> </service>
<service name="File_system"> <parent identity="recall"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -42,7 +42,7 @@
<provides> <service name="ROM"/> </provides>
<config/>
<route>
<service name="File_system"> <parent label="recall"/> </service>
<service name="File_system"> <parent identity="recall"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -61,7 +61,7 @@
<provides> <service name="File_system"/> </provides>
<config> <default-policy path="/" writeable="no"/> </config>
<route>
<service name="File_system"> <parent label="depot"/> </service>
<service name="File_system"> <parent identity="depot"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -71,7 +71,7 @@
<provides> <service name="File_system"/> </provides>
<config> <default-policy path="/" writeable="no"/> </config>
<route>
<service name="File_system"> <parent label="public"/> </service>
<service name="File_system"> <parent identity="public"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -99,11 +99,11 @@
<route>
<service name="ROM" label="config"> <child name="report_rom"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="File_system" label="depot"> <child name="depot_ro"/> </service>
<service name="File_system" label="depot_rw"> <parent label="depot"/> </service>
<service name="File_system" label="public"> <child name="public_ro"/> </service>
<service name="File_system" label="public_rw"> <parent label="public"/> </service>
<service name="File_system" label="tcpip"> <child name="tcpip"/> </service>
<service name="File_system" label_prefix="depot ->"> <child name="depot_ro"/> </service>
<service name="File_system" label_prefix="depot_rw ->"> <parent identity="depot"/> </service>
<service name="File_system" label_prefix="public ->"> <child name="public_ro"/> </service>
<service name="File_system" label_prefix="public_rw ->"> <parent identity="public"/> </service>
<service name="File_system" label_prefix="tcpip ->"> <child name="tcpip"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>

View File

@ -27,7 +27,7 @@
<null/>
</dir>
<dir name="vm">
<fs label="target"/>
<fs label="target -> /"/>
</dir>
<inline name=".profile">
cp /machine.vbox /disk0.vmdk /vm
@ -38,8 +38,8 @@ cp /machine.vbox /disk0.vmdk /vm
<default-policy root="/" writeable="yes"/>
</config>
<route>
<service name="File_system" label="target">
<parent label="target"/> </service>
<service name="File_system" label_prefix="target ->">
<parent identity="target"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -82,7 +82,7 @@ cp /machine.vbox /disk0.vmdk /vm
<vfs> <dir name="fonts"> <fs/> </dir> </vfs>
</config>
<route>
<service name="File_system"> <parent label="fonts"/> </service>
<service name="File_system"> <parent identity="fonts"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -126,7 +126,7 @@ cp /machine.vbox /disk0.vmdk /vm
</config>
<route>
<service name="File_system" label="target">
<parent label="target"/> </service>
<parent label="target -> /"/> </service>
<service name="LOG"> <parent/> </service>
<service name="Report"> <child name="report"/> </service>
<any-service> <parent/> </any-service>

View File

@ -335,10 +335,10 @@ proc prepare_to_run_genode { } {
<dir name="depot"> <tar name="depot.tar"/> </dir>
<dir name="gcov_data"> <ram/> </dir>
</vfs>
<policy label="depot_query -> depot" root="/depot" />
<policy label="fs_rom -> " root="/depot" />
<policy label="dynamic -> gcov -> gcov -> depot" root="/depot" />
<policy label_suffix=" -> gcov_data" root="/gcov_data" writeable="yes" />
<policy label_prefix="depot_query -> depot" root="/depot" />
<policy label_prefix="fs_rom ->" root="/depot" />
<policy label_prefix="dynamic -> gcov -> gcov -> depot" root="/depot" />
<policy label_suffix=" -> gcov_data -> /" root="/gcov_data" writeable="yes" />
</config>
</start>
@ -348,7 +348,7 @@ proc prepare_to_run_genode { } {
<start name="depot_query" priority="-1" ram="2M">
<config query="rom">
<vfs> <dir name="depot"> <fs label="depot"/> </dir> </vfs>
<vfs> <dir name="depot"> <fs label="depot -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="query"> <child name="report_rom"/> </service>
@ -375,16 +375,16 @@ proc prepare_to_run_genode { } {
} [single_test_module_routes] {
<service name="ROM" label_last="ld.lib.so"> <parent/> </service>
<service name="ROM" label_last="init"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="TRACE"> <parent/> </service>
<service name="File_system" label="gcov -> depot"> <parent/> </service>
<service name="File_system" label_suffix="gcov_data"> <parent/> </service>
<service name="ROM" label_last="ld.lib.so"> <parent/> </service>
<service name="ROM" label_last="init"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="TRACE"> <parent/> </service>
<service name="File_system" label="gcov -> depot -> /"> <parent/> </service>
<service name="File_system" label_suffix="gcov_data -> /"> <parent/> </service>
</common_routes>
<previous-results time_sec="} [expr ($previous_time_ms + 999) / 1000] {"

View File

@ -95,8 +95,8 @@ install_config {
<provides> <service name="File_system"/> </provides>
<config>
<vfs> <tar name="depot.tar"/> </vfs>
<policy label="depot_query -> depot" root="/" />
<policy label="fs_rom -> " root="/" />
<policy label_prefix="depot_query -> depot ->" root="/" />
<policy label_prefix="fs_rom ->" root="/" />
</config>
</start>
@ -110,7 +110,7 @@ install_config {
<start name="depot_query" ram="2M">
<config query="rom">
<vfs> <dir name="depot"> <fs label="depot"/> </dir> </vfs>
<vfs> <dir name="depot"> <fs label="depot -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="query"> <child name="report_rom"/> </service>
@ -172,17 +172,17 @@ install_config {
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="ROM" label="rules"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="recall"> <child name="recall_fs"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label_prefix="recall ->"> <child name="recall_fs"/> </service>
</route>
</start>
<start name="themed_decorator" pkg="} [depot_user]/pkg/[current_pkg themed_decorator] {">
<route>
<service name="ROM" label="window_layout"> <child name="wm"/> </service>
<service name="ROM" label="pointer"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="ROM" label="window_layout"> <child name="wm"/> </service>
<service name="ROM" label="pointer"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="Gui"> <child name="wm"/> </service>
</route>
</start>
@ -216,7 +216,7 @@ install_config {
<start name="system_shell" pkg="} [depot_user]/pkg/[current_pkg system_shell] {">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="File_system"> <parent/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>

View File

@ -116,8 +116,8 @@ append config {
</dir>
<dir name="public"> <ram/> </dir>
</vfs>
<policy label="depot_download -> depot" root="/depot" writeable="yes"/>
<policy label="depot_download -> public" root="/public" writeable="yes"/>
<policy label_prefix="depot_download -> depot ->" root="/depot" writeable="yes"/>
<policy label_prefix="depot_download -> public ->" root="/public" writeable="yes"/>
</config>
</start>

View File

@ -68,8 +68,8 @@ install_config {
</dir>
</dir>
</vfs>
<policy label="depot_query -> depot" root="/" />
<policy label="fs_rom -> " root="/" />
<policy label_prefix="depot_query -> depot ->" root="/" />
<policy label_prefix="fs_rom ->" root="/" />
</config>
</start>
@ -79,7 +79,7 @@ install_config {
<start name="depot_query" ram="2M">
<config query="rom">
<vfs> <dir name="depot"> <fs label="depot"/> </dir> </vfs>
<vfs> <dir name="depot"> <fs label="depot -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="query"> <child name="report_rom"/> </service>

View File

@ -56,7 +56,7 @@ install_config {
<start name="lx_fs" ld="no" ram="100M">
<provides> <service name="File_system"/> </provides>
<config>
<policy label="depot_remove -> " root="/depot" writeable="yes"/>
<policy label_prefix="depot_remove ->" root="/depot" writeable="yes"/>
</config>
</start>

View File

@ -191,20 +191,21 @@ append config {
<config jitterentropy_available="} [jent_avail_attr] {">
<vfs>
<dir name="tresor">
<fs label="tresor"/>
<fs label="tresor -> /"/>
</dir>
</vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report" label="ui_report"> <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <child name="trust_anchor_fs" label="file_vault -> trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="image_fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir">
<child name="trust_anchor_fs" identity="file_vault -> trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="image_fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>

View File

@ -216,8 +216,8 @@ append config {
<env key="PATH" value="/bin"/>
</config>
<route>
<service name="File_system" label="shell"> <child name="vfs"/> </service>
<service name="File_system" label="file_vault"> <parent/> </service>
<service name="File_system" label="shell"> <child name="vfs" label="/"/> </service>
<service name="File_system" label="file_vault"> <parent label="bash -> file_vault -> /"/> </service>
<service name="ROM" label_suffix=".lib.so"> <parent/> </service>
<service name="ROM" label_last="/bin/bash"> <child name="fs_rom"/> </service>
<service name="ROM" label_prefix="/bin"> <child name="fs_rom"/> </service>
@ -269,7 +269,7 @@ if {[have_board linux]} {
<service name="File_system"/>
</provides>
<config>
<policy label="file_vault -> data"
<policy label_prefix="file_vault -> data"
root="/} [file tail [lx_fs_dir]] {/data"
writeable="yes"/>
</config>
@ -288,7 +288,7 @@ if {[have_board linux]} {
<service name="File_system"/>
</provides>
<config>
<policy label="file_vault -> trust_anchor"
<policy label_prefix="file_vault -> trust_anchor"
root="/} [file tail [lx_fs_dir]] {/trust_anchor"
writeable="yes"/>
</config>
@ -315,7 +315,7 @@ if {[have_board linux]} {
<ram/>
</dir>
</vfs>
<policy label="file_vault -> data" root="/data" writeable="yes"/>
<policy label_prefix="file_vault -> data" root="/data" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -334,7 +334,7 @@ if {[have_board linux]} {
<ram/>
</dir>
</vfs>
<policy label="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
<policy label_prefix="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -354,20 +354,21 @@ append config {
<config jitterentropy_available="} [jent_avail_attr] {">
<vfs>
<dir name="tresor">
<fs label="tresor"/>
<fs label="tresor -> /"/>
</dir>
</vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="dynamic_rom" label="file_vault_ui_config"/> </service>
<service name="Report" label="ui_report"> <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <child name="trust_anchor_fs" label="file_vault -> trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="image_fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir">
<child name="trust_anchor_fs" identity="file_vault -> trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="image_fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
@ -381,7 +382,7 @@ append config {
<binary name="init"/>
<route>
<service name="ROM" label="config"> <child label="dynamic_init_config" name="dynamic_rom"/> </service>
<service name="File_system" label="bash -> file_vault"> <child name="file_vault"/> </service>
<service name="File_system" label_prefix="bash -> file_vault ->"> <child name="file_vault"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>

View File

@ -165,7 +165,7 @@ append_if [have_board linux] config {
<service name="File_system"/>
</provides>
<config>
<policy label="file_vault -> data" root="/file_vault_gui_dir/data" writeable="yes"/>
<policy label_prefix="file_vault -> data" root="/file_vault_gui_dir/data" writeable="yes"/>
</config>
<route>
<service name="Timer"> <child name="timer"/> </service>
@ -182,7 +182,7 @@ append_if [have_board linux] config {
<service name="File_system"/>
</provides>
<config>
<policy label="file_vault -> trust_anchor" root="/file_vault_gui_dir/trust_anchor" writeable="yes"/>
<policy label_prefix="file_vault -> trust_anchor" root="/file_vault_gui_dir/trust_anchor" writeable="yes"/>
</config>
<route>
<service name="Timer"> <child name="timer"/> </service>
@ -200,7 +200,7 @@ append_if [expr ![have_board linux]] config {
<provides><service name="File_system"/></provides>
<config>
<vfs> <dir name="data"> <ram/> </dir> </vfs>
<policy label="file_vault -> data" root="/data" writeable="yes"/>
<policy label_prefix="file_vault -> data" root="/data" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -215,7 +215,7 @@ append_if [expr ![have_board linux]] config {
<provides><service name="File_system"/></provides>
<config>
<vfs> <dir name="trust_anchor"> <ram/> </dir> </vfs>
<policy label="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
<policy label_prefix="file_vault -> trust_anchor" root="/trust_anchor" writeable="yes"/>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -243,17 +243,18 @@ append config {
<start name="file_vault" caps="1200" ram="100M">
<config jitterentropy_available="} [jent_avail_attr] {">
<vfs> <dir name="tresor"> <fs label="tresor"/> </dir> </vfs>
<vfs> <dir name="tresor"> <fs label="tresor -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="ui_config"> <child name="report_rom"/> </service>
<service name="Report" label="ui_report"> <child name="report_rom"/> </service>
<service name="File_system" label="tresor_trust_anchor_vfs -> storage_dir"> <child name="trust_anchor_fs" label="file_vault -> trust_anchor"/> </service>
<service name="File_system" label="tresor_init -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="image_fs_query -> "> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="tresor_vfs -> tresor_fs"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label="truncate_file -> tresor"> <child name="data_fs" label="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_trust_anchor_vfs -> storage_dir">
<child name="trust_anchor_fs" identity="file_vault -> trust_anchor"/> </service>
<service name="File_system" label_prefix="tresor_init ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="image_fs_query ->"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="tresor_vfs -> tresor_fs"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="File_system" label_prefix="truncate_file -> tresor"> <child name="data_fs" identity="file_vault -> data"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>
@ -265,7 +266,7 @@ append config {
<start name="file_vault_gui" caps="400" ram="8M">
<route>
<service name="File_system" label_last="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system"> <child name="fonts_fs"/> </service>
<service name="Gui"> <child name="nitpicker"/> </service>
<service name="ROM" label="ui_report"> <child name="report_rom"/> </service>
<service name="Report" label="ui_config"> <child name="report_rom"/> </service>

View File

@ -306,7 +306,7 @@ install_config {
<vfs>
<tar name="menu_view_styles.tar" />
<dir name="dev"> <log/> </dir>
<dir name="fonts"> <fs label="fonts"/> </dir>
<dir name="fonts"> <fs label="fonts -> /"/> </dir>
</vfs>
<dialog name="dialog" xpos="200" ypos="150"/>
<dialog name="fixed_dialog" xpos="400" ypos="50" width="400"/>
@ -314,7 +314,7 @@ install_config {
<route>
<service name="ROM" label="dialog"> <child name="dynamic_rom" /> </service>
<service name="Report" label="hover"> <child name="report_rom"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label="fonts -> /"> <child name="fonts_fs"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>

View File

@ -347,8 +347,8 @@ install_config {
<ram/>
<import> <tar name="initial_config.tar"/> </import>
</vfs>
<policy label="config_fs_rom -> " root="/" />
<policy label="rw" root="/" writeable="yes" />
<policy label_prefix="config_fs_rom ->" root="/"/>
<policy label_prefix="rw ->" root="/" writeable="yes"/>
</config>
</start>
@ -386,10 +386,10 @@ install_config {
</dir>
</import>
</vfs>
<policy label="fs_report -> " root="/" writeable="yes"/>
<policy label="log_terminal -> " root="/" writeable="yes"/>
<policy label="report_fs_rom -> " root="/"/>
<policy label="ro" root="/"/>
<policy label_prefix="fs_report ->" root="/" writeable="yes"/>
<policy label_prefix="log_terminal ->" root="/" writeable="yes"/>
<policy label_prefix="report_fs_rom ->" root="/"/>
<policy label_prefix="ro ->" root="/"/>
</config>
</start>
@ -637,12 +637,10 @@ install_config {
<service name="Report"> <child name="fs_report"/> </service>
<service name="Gui"> <child name="nitpicker"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="File_system" label="config">
<child name="config_fs" label="rw"/> </service>
<service name="File_system" label="report">
<child name="report_fs" label="ro"/> </service>
<service name="File_system" label="report">
<child name="report_fs" label="ro"/> </service>
<service name="File_system" label_prefix="config ->">
<child name="config_fs" identity="rw"/> </service>
<service name="File_system" label_prefix="report ->">
<child name="report_fs" identity="ro"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -670,10 +668,10 @@ install_config {
<child name="report_rom"/> </service>
<service name="ROM" label="clicked">
<child name="report_rom"/> </service>
<service name="File_system" label="config">
<child name="config_fs" label="rw"/> </service>
<service name="File_system" label="report">
<child name="report_fs" label="ro"/> </service>
<service name="File_system" label_prefix="config ->">
<child name="config_fs" identity="rw"/> </service>
<service name="File_system" label_prefix="report ->">
<child name="report_fs" identity="ro"/> </service>
<service name="Platform" label_prefix="acpica">
<child name="drivers" label="acpica"/> </service>
<service name="Platform"> <child name="drivers"/> </service>
@ -700,8 +698,8 @@ install_config {
<child name="leitzentrale"/> </service>
<service name="ROM" label_prefix="leitzentrale ->">
<child name="leitzentrale"/> </service>
<service name="File_system" label="leitzentrale -> fonts">
<child name="leitzentrale" label="fonts"/> </service>
<service name="File_system" label_prefix="leitzentrale -> fonts ->">
<child name="leitzentrale" identity="fonts"/> </service>
<service name="Report"> <child name="fs_report"/> </service>
<service name="LOG" label="unlogged"> <parent/> </service>
} [log_route] [driver_routes] {

View File

@ -105,12 +105,12 @@ install_config {
<start name="text_area.1" caps="250" ram="8M">
<binary name="text_area"/>
<config path="/data/drivers.config" max_lines="20" min_width="500" min_height="300" watch="yes">
<vfs> <dir name="data"> <fs label="data"/> </dir> </vfs>
<vfs> <dir name="data"> <fs label="data -> /"/> </dir> </vfs>
</config>
<route>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label="data"> <child name="data_fs"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="data ->"> <child name="data_fs"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
@ -121,13 +121,13 @@ install_config {
max_lines="10" min_width="600">
<report saved="yes"/>
<save version="1"/>
<vfs> <dir name="data"> <fs label="data"/> </dir> </vfs>
<vfs> <dir name="data"> <fs label="data -> /"/> </dir> </vfs>
</config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM" label="clipboard"> <child name="report_rom"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label="data"> <child name="data_fs"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="data ->"> <child name="data_fs"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>

View File

@ -190,7 +190,7 @@ append config {
<fs buffer_size="1M"/>
<tresor_crypto_aes_cbc name="crypto"/>
<dir name="trust_anchor">
<fs label="trust_anchor"/>
<fs label="trust_anchor -> /"/>
</dir>
</vfs>
@ -898,7 +898,7 @@ append config {
</config>
<route>
<service name="File_system" label_last="trust_anchor"> <child name="trust_anchor_fs"/> </service>
<service name="File_system" label="trust_anchor -> /"> <child name="trust_anchor_fs"/> </service>
<service name="File_system"> <child name="block_io_fs"/> </service>
<service name="Terminal"> <child name="log_terminal"/> </service>
<service name="Timer"> <child name="timer"/> </service>

View File

@ -67,7 +67,7 @@ append config {
<start name="tresor_init_trust_anchor" ram="4M">
<config passphrase="foobar" trust_anchor_dir="/trust_anchor">
<vfs> <dir name="trust_anchor"> <fs label="ta"/> </dir> </vfs>
<vfs> <dir name="trust_anchor"> <fs label="ta -> /"/> </dir> </vfs>
</config>
<route>
<service name="PD"> <parent/> </service>
@ -88,7 +88,7 @@ append config {
<fs buffer_size="1M"/>
<tresor_crypto_aes_cbc name="crypto"/>
<dir name="trust_anchor">
<fs label="ta"/>
<fs label="ta -> /"/>
</dir>
</vfs>
@ -112,7 +112,7 @@ append config {
<vfs>
<fs buffer_size="1M"/>
<tresor_crypto_aes_cbc name="crypto"/>
<dir name="trust_anchor"> <fs label="ta"/> </dir>
<dir name="trust_anchor"> <fs label="ta -> /"/> </dir>
</vfs>
</config>
<route>
@ -125,7 +125,7 @@ append config {
</config>
<route>
<service name="File_system" label_last="ta"> <child name="vfs"/> </service>
<service name="File_system" label_suffix="ta -> /"> <child name="vfs"/> </service>
<service name="File_system"> <child name="lx_fs"/> </service>
<service name="PD"> <parent/> </service>
<service name="ROM"> <parent/> </service>

View File

@ -108,7 +108,7 @@ append config {
<config passphrase="foobar" trust_anchor_dir="/trust_anchor">
<vfs>
<dir name="trust_anchor">
<fs label="tresor_trust_anchor"/>
<fs label="tresor_trust_anchor -> /"/>
</dir>
</vfs>
</config>
@ -122,10 +122,10 @@ append config {
<trust-anchor path="/trust_anchor"/>
<vfs>
<fs label="tresor_block_io" buffer_size="1M"/>
<fs label="tresor_block_io -> /" buffer_size="1M"/>
<tresor_crypto_aes_cbc name="crypto"/>
<dir name="trust_anchor">
<fs label="tresor_trust_anchor"/>
<fs label="tresor_trust_anchor -> /"/>
</dir>
</vfs>
@ -162,9 +162,9 @@ append config {
<provides><service name="File_system"/></provides>
<config>
<vfs>
<fs buffer_size="1M" label="tresor_block_io"/>
<fs buffer_size="1M" label="tresor_block_io -> /"/>
<tresor_crypto_aes_cbc name="tresor_crypto"/>
<dir name="ta"> <fs buffer_size="1M" label="tresor_trust_anchor"/> </dir>
<dir name="ta"> <fs buffer_size="1M" label="tresor_trust_anchor -> /"/> </dir>
<dir name="dev">
<tresor name="tresor" debug="no" verbose="yes"
block="/} [tresor_image_name] {"
@ -235,8 +235,8 @@ append config {
<env key="PATH" value="/bin"/>
</config>
<route>
<service name="File_system" label="shell"> <child name="vfs"/> </service>
<service name="File_system" label="tresor"> <child name="vfs_tresor"/> </service>
<service name="File_system" label="shell"> <child name="vfs" label="/"/> </service>
<service name="File_system" label="tresor"> <child name="vfs_tresor" label="/"/> </service>
<service name="ROM" label_suffix=".lib.so"> <parent/> </service>
<service name="ROM" label_last="/bin/bash"> <child name="vfs_rom"/> </service>
<service name="ROM" label_prefix="/bin"> <child name="vfs_rom"/> </service>
@ -250,8 +250,8 @@ append config {
</config>
<route>
<service name="Terminal"> <child name="log_terminal"/> </service>
<service name="File_system" label_suffix="tresor_block_io"> <child name="lx_fs"/> </service>
<service name="File_system" label_suffix="tresor_trust_anchor"> <child name="vfs_tresor_trust_anchor"/> </service>
<service name="File_system" label_suffix="tresor_block_io -> /"> <child name="lx_fs"/> </service>
<service name="File_system" label_suffix="tresor_trust_anchor -> /"> <child name="vfs_tresor_trust_anchor"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<any-service> <parent/> </any-service>
</route>

View File

@ -35,7 +35,8 @@
<service name="ROM" label="rules"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="recall"> <child name="recall_fs"/> </service>
<service name="File_system" label_prefix="recall ->">
<child name="recall_fs"/> </service>
</route>
</start>

View File

@ -21,7 +21,7 @@
<service name="ROM" label="hover"> <child name="wm"/> </service>
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="File_system" label="recall"> <child name="recall_fs"/> </service>
<service name="File_system" label_prefix="recall ->"> <child name="recall_fs"/> </service>
</route>
</start>
@ -68,8 +68,8 @@
<service name="Play"> <child name="mixer"/> </service>
<service name="Record"> <child name="mixer"/> </service>
<service name="Capture"> <child name="black_hole"/> </service>
<service name="File_system" label="config"> <child name="ram_fs"/> </service>
<service name="File_system" label="downloads"> <child name="ram_fs"/> </service>
<service name="File_system" label_prefix="config ->"> <child name="ram_fs"/> </service>
<service name="File_system" label_prefix="downloads ->"> <child name="ram_fs"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="Report" label="falkon -> shape"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>

View File

@ -14,10 +14,10 @@
<start name="system_shell" priority="-2" pkg="system_shell">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="config ->"> <parent identity="config"/> </service>
<service name="File_system" label_prefix="report ->"> <parent identity="report"/> </service>
<service name="File_system" label_prefix="target ->"> <child name="default_fs_rw"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>
<service name="ROM" label="clipboard"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>
@ -33,7 +33,7 @@
<service name="ROM" label="hover"> <child name="wm"/> </service>
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="File_system" label="recall">
<service name="File_system" label_prefix="recall ->">
<child name="recall_fs"/>
</service>
</route>

View File

@ -1,10 +1,10 @@
<launcher pkg="system_shell">
<route>
<service name="Gui"> <parent label="focus"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="target ->"> <child name="default_fs_rw"/> </service>
<service name="File_system" label_prefix="config ->"> <parent identity="config"/> </service>
<service name="File_system" label_prefix="report ->"> <parent identity="report"/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>

View File

@ -1,10 +1,10 @@
<launcher pkg="dbg_download" priority="-2">
<route>
<service name="File_system" label="system_config">
<parent label="config"/>
<service name="File_system" label_prefix="system_config ->">
<parent identity="config"/>
</service>
<service name="File_system" label="used">
<child name="default_fs_rw"/>
<service name="File_system" label_prefix="used ->">
<child identity="default_fs_rw"/>
</service>
<service name="ROM" label="build_info">
<parent label="build_info"/>

View File

@ -1,9 +1,9 @@
<launcher pkg="report_dump">
<route>
<service name="File_system" label="report">
<service name="File_system" label_prefix="report ->">
<parent label="report"/> </service>
<service name="File_system" label="target">
<service name="File_system" label_prefix="target ->">
<child name="default_fs_rw"/> </service>
<service name="Rtc">
<child name="system_clock-dummy"/> </service>

View File

@ -1,10 +1,10 @@
<launcher pkg="system_shell" priority="-2">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="target ->"> <child name="default_fs_rw"/> </service>
<service name="File_system" label_prefix="config ->"> <parent identity="config"/> </service>
<service name="File_system" label_prefix="report ->"> <parent identity="report"/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>

View File

@ -2,6 +2,6 @@
<route>
<service name="Gui"> <parent label="touch_keyboard"/> </service>
<service name="Event"> <parent label="global"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="File_system" label_prefix="fonts ->"> <child name="fonts_fs"/> </service>
</route>
</launcher>

View File

@ -190,7 +190,7 @@
<service name="ROM" label="pointer"> <child name="report_rom"/> </service>
<service name="Report" label="decorator_margins"> <child name="report_rom"/> </service>
<service name="Report" label="hover"> <child name="report_rom"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -200,7 +200,7 @@
<provides> <service name="Report"/> </provides>
<config> <vfs> <fs/> </vfs> </config>
<route>
<service name="File_system"> <parent label="config"/> </service>
<service name="File_system"> <parent identity="config"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -287,11 +287,11 @@
<libc stdin="/report/log" stdout="/dev/terminal"/>
<vfs>
<dir name="dev"> <terminal/> </dir>
<dir name="report"> <fs label="report"/> </dir>
<dir name="report"> <fs label="report -> /"/> </dir>
</vfs>
</config>
<route>
<service name="File_system"> <parent label="report"/> </service>
<service name="File_system"> <parent identity="report"/> </service>
<any-service> <child name="log_terminal"/> <parent/> </any-service>
</route>
</start>

View File

@ -107,7 +107,7 @@
<provides> <service name="Report"/> </provides>
<config> <vfs> <fs/> </vfs> </config>
<route>
<service name="File_system"> <parent label="config"/> </service>
<service name="File_system"> <parent identity="config"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -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");

View File

@ -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");

View File

@ -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); });
});

View File

@ -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");

View File

@ -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");

View File

@ -43,7 +43,7 @@ an example File Vault configuration with default values:
! <config jitterentropy_available="yes">
! <vfs>
! <dir name="tresor">
! <fs label="tresor"/>
! <fs label="tresor -> /"/>
! </dir>
! </vfs>
! </config>

View File

@ -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);
});

View File

@ -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"); }); });
});
});
}

View File

@ -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", [&] {

View File

@ -146,10 +146,17 @@ struct Sculpt::Route : List_model<Route>::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);

View File

@ -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" },

View File

@ -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 <service name="..."> 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);
});
}
};

View File

@ -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<Rom_session> (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"); }); });
});
}

View File

@ -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<Terminal::Session>(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<Gui::Session>(xml, [&] {
xml.node("parent", [&] {

View File

@ -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"); }); });
});
}

View File

@ -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<Timer::Session> (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"); }); });
});
}

View File

@ -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");

View File

@ -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)

View File

@ -39,8 +39,8 @@
<arg value="--demangled-names"/>
<vfs>
<dir name="dev"> <log/> </dir>
<fs label="depot"/>
<fs label="gcov_data"/>
<fs label="depot -> /"/>
<fs label="gcov_data -> /"/>
</vfs>
<libc stdout="/dev/log" stderr="/dev/log"/>
</config>

View File

@ -39,8 +39,8 @@
<fifo name="downstream"/>
</pipe>
</vfs>
<policy label="fifo-pipe-test -> in" root="/.upstream/in" writeable="yes"/>
<policy label="fifo-pipe-test -> out" root="/.downstream/out" writeable="no"/>
<policy label_prefix="fifo-pipe-test -> in ->" root="/.upstream/in" writeable="yes"/>
<policy label_prefix="fifo-pipe-test -> out ->" root="/.downstream/out" writeable="no"/>
<default-policy root="/" writeable="yes"/>
</config>
</start>
@ -70,8 +70,8 @@
<config type="echo">
<vfs>
<dir name="dev">
<fs label="downstream"/>
<fs label="upstream"/>
<fs label="downstream -> /"/>
<fs label="upstream -> /"/>
<log/>
</dir>
</vfs>
@ -85,7 +85,7 @@
</config>
</inline>
</vfs>
<policy label="fs_rom -> " root="/" writeable="no"/>
<policy label_prefix="fs_rom ->" root="/" writeable="no"/>
</config>
</start>
@ -118,10 +118,10 @@
</dir>
<dir name="dev">
<dir name="send-pipe">
<fs label="in"/>
<fs label="in -> /"/>
</dir>
<dir name="receive-pipe">
<fs label="out"/>
<fs label="out -> /"/>
</dir>
<log/>
</dir>

View File

@ -5,7 +5,7 @@
<inline name="rtc">2018-01-01 00:01</inline>
</dir>
<dir name="pipe"> <pipe/> </dir>
<dir name="edit"> <fs label="rw"/> </dir>
<dir name="edit"> <fs label="rw -> /"/> </dir>
<tar name="qt5_dejavusans.tar"/>
<tar name="qt5_libqgenode.tar"/>
</vfs>

View File

@ -10,8 +10,8 @@ multiple archives one at a time:
! <libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/null"
! update_mtime="no"/>
! <vfs>
! <dir name="download"> <fs label="download"/> </dir>
! <dir name="content"> <fs label="content" writeable="yes"/> </dir>
! <dir name="download"> <fs label="download -> /"/> </dir>
! <dir name="content"> <fs label="content -> /" writeable="yes"/> </dir>
! <dir name="dev"> <log/> <null/> </dir>
! </vfs>
! <extract archive="/download/foo.zip" to="/content/foo123/" strip="1"/>

View File

@ -46,7 +46,7 @@ Use the socket plugin of an other vfs (store file in a directory):
! <inline name="random">01234567890123456789</inline>
! </dir>
! <fs name="tcpip"/>
! <dir name="download"> <fs label="download"/> </dir>
! <dir name="download"> <fs label="download -> /"/> </dir>
! </vfs>
! <fetch url="http://genode.org/about/LICENSE"
! path="/download/LICENSE" retry="3"/>

View File

@ -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<Gcov_env> _fs_signal_handler {

View File

@ -58,22 +58,19 @@ struct File_system::Connection : Genode::Connection<Session>, 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<Session>(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())
{ }

View File

@ -34,7 +34,7 @@
<provides> <service name="Report"/> </provides>
<config> <vfs> <fs/> </vfs> </config>
<route>
<service name="File_system"> <parent label="recall"/> </service>
<service name="File_system"> <parent identity="recall"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
@ -43,7 +43,7 @@
<provides> <service name="ROM"/> </provides>
<config/>
<route>
<service name="File_system"> <parent label="recall"/> </service>
<service name="File_system"> <parent identity="recall"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -47,7 +47,7 @@ install_config {
<start name="lx_fs" ld="no" caps="100" ram="4M">
<provides> <service name="File_system"/> </provides>
<config> <policy label="test-internet_checksum -> " root="/} $lx_fs_root {" writeable="yes"/> </config>
<config> <policy label_prefix="test-internet_checksum -> " root="/} $lx_fs_root {" writeable="yes"/> </config>
<route> <any-service> <parent/> </any-service> </route>
</start>

View File

@ -45,7 +45,7 @@ install_config {
<service name="File_system"/>
</provides>
<config>
<policy label="import_showcase -> " root="/" writeable="yes"/>
<policy label_prefix="import_showcase ->" root="/" writeable="yes"/>
</config>
<route>
<any-service> <parent/> <any-child/> </any-service>

View File

@ -49,8 +49,8 @@ install_config {
</inline>
</import>
</vfs>
<policy label="fs_report -> " root="/" writeable="yes"/>
<policy label="report_fs_rom -> " root="/"/>
<policy label_prefix="fs_report ->" root="/" writeable="yes"/>
<policy label_prefix="report_fs_rom ->" root="/"/>
</config>
</start>

View File

@ -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: <fs> node uses deprecated 'root' attribute.");
Genode::warning(" Append the root dir to the label instead.");
}
_fs.sigh(_signal_handler);
}

View File

@ -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 };

View File

@ -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<Path>(label.string()).string());
root_path.append(path_from_label<Path>(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<Path>(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);
}

View File

@ -923,13 +923,20 @@ class Vfs_server::Root : public Genode::Root_component<Session_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 */

View File

@ -14,14 +14,14 @@ component:
! <config>
!
! <vfs>
! <fs buffer_size="2M" label="backend"/>
! <fs buffer_size="2M" label="backend -> /"/>
! </vfs>
!
! <policy label_prefix="client"
! file="/vfs_block.img" block_size="512" writeable="yes"/>
! </config>
! <route>
! <service name="File_system" label="backend">
! <service name="File_system" label_prefix="backend ->">
! <child name="fs_provider"/> </service>
! <any-service> <parent/> </any-service>
! </route>

View File

@ -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() };

View File

@ -19,7 +19,7 @@
<service name="ROM" label="hover"> <child name="wm"/> </service>
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="File_system" label="recall">
<service name="File_system" label_prefix="recall ->">
<child name="recall_fs"/>
</service>
</route>
@ -62,7 +62,7 @@
<start name="fs_rom" priority="-2" pkg="jschlatow/pkg/fs_rom/2024-10-07">
<route>
<service name="File_system"> <parent label="report"/> </service>
<service name="File_system"> <parent identity="report"/> </service>
</route>
</start>

View File

@ -36,7 +36,7 @@ dir-listing.activate = "enable"
</inline>
</dir>
</dir>
<dir name="webroot"> <fs label="webroot"/> </dir>
<dir name="webroot"> <fs label="webroot -> /"/> </dir>
<dir name="tmp"> <ram/> </dir>
</vfs>
<libc stdin="/dev/null" stdout="/dev/log" stderr="/dev/log"

View File

@ -49,8 +49,8 @@
<default-policy root="/" writeable="yes"/>
</config>
<route>
<service name="File_system" label="target"> <parent label="target"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <parent label="target -> /"/> </service>
<service name="File_system" label="report"> <parent label="report -> /"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -68,8 +68,8 @@
</config>
<route>
<service name="Audio_out"> <parent/> </service>
<service name="File_system" label="shared"> <parent label="shared"/> </service>
<service name="File_system"> <parent label="vm"/> </service>
<service name="File_system" label="shared"> <parent label="shared -> /"/> </service>
<service name="File_system"> <parent label="vm -> /"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM" label="platform_info">
<parent label="platform_info"/> </service>

View File

@ -29,10 +29,10 @@
<oss name="dsp" min_ofrag_size="8192" min_ifrag_size="8192"/>
</dir>
<dir name="pipe"> <pipe/> </dir>
<dir name="shared"> <fs label="shared" writeable="yes"/> </dir>
<dir name="shared"> <fs label="shared -> /" writeable="yes"/> </dir>
<rom name="VBoxSharedClipboard.so"/>
<rom name="VBoxSharedFolders.so"/>
<fs label="vm" writeable="yes"/>
<fs label="vm -> /" writeable="yes"/>
</vfs>
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc" pipe="/pipe">
<pthread placement="single-cpu"/>

View File

@ -28,10 +28,10 @@
<oss name="dsp" min_ofrag_size="8192" min_ifrag_size="8192"/>
</dir>
<dir name="pipe"> <pipe/> </dir>
<dir name="shared"> <fs label="shared" writeable="yes"/> </dir>
<dir name="shared"> <fs label="shared -> /" writeable="yes"/> </dir>
<rom name="VBoxSharedClipboard.so"/>
<rom name="VBoxSharedFolders.so"/>
<fs label="vm" writeable="yes"/>
<fs label="vm -> /" writeable="yes"/>
</vfs>
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc" pipe="/pipe">
<pthread placement="single-cpu"/>

View File

@ -41,7 +41,7 @@
<default-policy root="/" writeable="no"/>
</config>
<route>
<service name="File_system" label="depot">
<service name="File_system" label_prefix="depot ->">
<child name="depot_ro"/>
</service>
<any-service> <parent/> </any-service>
@ -56,10 +56,10 @@
</vfs>
</config>
<route>
<service name="File_system" label="config">
<parent label="system_config"/>
<service name="File_system" label_prefix="config ->">
<parent identity="system_config"/>
</service>
<service name="File_system" label="debug">
<service name="File_system" label_prefix="debug ->">
<child name="vfs"/>
</service>
<service name="ROM" label="build_info">

View File

@ -22,7 +22,7 @@
<vfs> <dir name="fonts"> <fs/> </dir> </vfs>
</config>
<route>
<service name="File_system"> <parent label="fonts"/> </service>
<service name="File_system"> <parent identity="fonts"/> </service>
<service name="Gui"> <parent label="terminal"/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>
@ -55,9 +55,9 @@
<default-policy root="/" writeable="yes"/>
</config>
<route>
<service name="File_system" label="target"> <parent label="target"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <parent label="target -> /"/> </service>
<service name="File_system" label="config"> <parent label="config -> /"/> </service>
<service name="File_system" label="report"> <parent label="report -> /"/> </service>
<service name="ROM" label="vimrc"> <parent label="vimrc"/> </service>
<service name="Terminal"> <child name="terminal"/> </service>
<any-service> <parent/> </any-service>

View File

@ -28,15 +28,15 @@
<log/>
<rtc/>
</dir>
<dir name="shared"> <fs label="shared" writeable="yes"/> </dir>
<dir name="shared"> <fs label="shared -> /" writeable="yes"/> </dir>
<fs writeable="yes"/>
</vfs>
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc"/>
</config>
<route>
<service name="Audio_out"> <parent/> </service>
<service name="File_system" label="shared"> <parent label="shared"/> </service>
<service name="File_system"> <parent label="vm"/> </service>
<service name="File_system" label_prefix="shared ->"> <parent identity="shared"/> </service>
<service name="File_system"> <parent identity="vm"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM" label="platform_info">
<parent label="platform_info"/> </service>

View File

@ -207,8 +207,8 @@ set config_of_app {
<tar name="coreutils.tar"/>
<tar name="bash.tar"/>
<dir name="from"> <fs label="share_from"/> </dir>
<dir name="to"> <fs label="share_to"/> </dir>
<dir name="from"> <fs label="share_from -> /"/> </dir>
<dir name="to"> <fs label="share_to -> /"/> </dir>
<dir name="tmp"> <ram/> </dir>
<dir name="dev">
@ -222,10 +222,10 @@ set config_of_app {
<default-policy root="/" writeable="yes"/>
</config>
<route>
<service name="File_system" label="share_from">
<service name="File_system" label_prefix="share_from ->">
<child name="ram_fs_from"/>
</service>
<service name="File_system" label="share_to">
<service name="File_system" label_prefix="share_to ->">
<child name="ram_fs_to"/>
</service>
<any-service> <parent/> <any-child/> </any-service>
@ -342,11 +342,11 @@ append config_of_app {
<rom name="} $vbox_file {"/>}
append_if [expr $use_ram_fs] config_of_app {
<dir name="ram"> <fs label="from_ram_fs"/> </dir>}
<dir name="ram"> <fs label="from_ram_fs -> /"/> </dir>}
append config_of_app {
<dir name="from"> <fs label="share_ram_fs_from"/> </dir>
<dir name="to"> <fs label="share_ram_fs_to"/> </dir>
<dir name="from"> <fs label="share_ram_fs_from -> /"/> </dir>
<dir name="to"> <fs label="share_ram_fs_to -> /"/> </dir>
<fs/>
</vfs>
</config>
@ -354,15 +354,15 @@ append config_of_app {
<service name="Report"> <child name="report_rom"/> </service>}
append_if [expr $use_ram_fs] config_of_app {
<service name="File_system" label="from_ram_fs">
<service name="File_system" label_prefix="from_ram_fs ->">
<child name="ram_fs"/>
</service>}
append config_of_app {
<service name="File_system" label="share_ram_fs_from">
<service name="File_system" label_prefix="share_ram_fs_from ->">
<child name="ram_fs_from"/>
</service>
<service name="File_system" label="share_ram_fs_to">
<service name="File_system" label_prefix="share_ram_fs_to ->">
<child name="ram_fs_to"/>
</service>
<service name="File_system"> <child name="rump_fs"/> </service>

View File

@ -276,7 +276,7 @@ for { set i 1} { $i <= $use_vms } { incr i} {
<dir name="pipe"> <pipe/> </dir>}
append_if [expr $use_ram_fs] config_of_app {
<dir name="ram"> <fs label="from_ram_fs"/> </dir>}
<dir name="ram"> <fs label="from_ram_fs -> /"/> </dir>}
append config_of_app "
<rom name=\"${vbox_file}\"/>"
@ -295,7 +295,7 @@ for { set i 1} { $i <= $use_vms } { incr i} {
<service name="Gui"> <child name="wm"/> </service>}
append_if [expr $use_ram_fs] config_of_app {
<service name="File_system" label="from_ram_fs"> <child name="ram_fs"/> </service>}
<service name="File_system" label_prefix="from_ram_fs ->"> <child name="ram_fs"/> </service>}
append_if [expr $use_rumpfs] config_of_app {
<service name="File_system"> <child name="rump_fs"/> </service>}