Skip to content

Commit

Permalink
🔧 Read Vec<Element> into consumer-ready Config
Browse files Browse the repository at this point in the history
Fixes dbus2#78
Fixes dbus2#79
Fixes dbus2#148
  • Loading branch information
jokeyrhyme committed Nov 30, 2024
1 parent 54b87dc commit a1ddba0
Show file tree
Hide file tree
Showing 12 changed files with 1,993 additions and 0 deletions.
1,198 changes: 1,198 additions & 0 deletions src/config/mod.rs

Large diffs are not rendered by default.

490 changes: 490 additions & 0 deletions tests/config.rs

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions tests/data/example-session-disable-stats.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!-- busd: from: https://gitlab.freedesktop.org/dbus/dbus/-/commit/776e6e0b04a14de4cafc13cc74ffb4a55a23a074 -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

<!-- If the Stats interface was enabled at compile-time, users can use it on
the session bus by default. Systems providing isolation of processes
with LSMs might want to restrict this. This can be achieved by copying
this file in @EXPANDED_SYSCONFDIR@/dbus-1/session.d/ -->

<policy context="default">
<deny send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Debug.Stats"/>
</policy>

</busconfig>
17 changes: 17 additions & 0 deletions tests/data/example-system-enable-stats.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!-- busd: from: https://gitlab.freedesktop.org/dbus/dbus/-/commit/776e6e0b04a14de4cafc13cc74ffb4a55a23a074 -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

<!-- If the Stats interface was enabled at compile-time, only root may use it.
Replace USERNAME and copy this file in @EXPANDED_SYSCONFDIR@/dbus-1/system.d/
if you want to enable other privileged users to view statistics and
debug info -->

<policy user="USERNAME">
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Debug.Stats"/>
</policy>

</busconfig>
5 changes: 5 additions & 0 deletions tests/data/includedir/a.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<listen>unix:path=/tmp/a</listen>
</busconfig>
5 changes: 5 additions & 0 deletions tests/data/includedir/not_included.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<listen>unix:path=/tmp/not_included</listen>
</busconfig>
5 changes: 5 additions & 0 deletions tests/data/missing_include.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<include>./missing.conf</include>
</busconfig>
83 changes: 83 additions & 0 deletions tests/data/session.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<!-- busd: from: https://gitlab.freedesktop.org/dbus/dbus/-/commit/776e6e0b04a14de4cafc13cc74ffb4a55a23a074 -->
<!-- busd: we've commented out any blocking includes or includedirs -->

<!-- This configuration file controls the per-user-login-session message bus.
Add a session-local.conf and edit that rather than changing this
file directly. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Our well-known bus type, don't change this -->
<type>session</type>

<!-- If we fork, keep the user's original umask to avoid affecting
the behavior of child processes. -->
<keep_umask/>

<listen>unix:path=/run/user/1000/bus</listen>

<!-- On Unix systems, the most secure authentication mechanism is
EXTERNAL, which uses credential-passing over Unix sockets.

This authentication mechanism is not available on Windows,
is not suitable for use with the tcp: or nonce-tcp: transports,
and will not work on obscure flavours of Unix that do not have
a supported credentials-passing mechanism. On those platforms/transports,
comment out the <auth> element to allow fallback to DBUS_COOKIE_SHA1. -->
<!-- @DBUS_SESSION_CONF_MAYBE_AUTH_EXTERNAL@ -->

<standard_session_servicedirs />

<policy context="default">
<!-- Allow everything to be sent -->
<allow send_destination="*" eavesdrop="true"/>
<!-- Allow everything to be received -->
<allow eavesdrop="true"/>
<!-- Allow anyone to own anything -->
<allow own="*"/>
</policy>

<!-- Include legacy configuration location -->
<include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/session.conf</include>

<!-- Config files are placed here that among other things,
further restrict the above policy for specific services. -->
<!-- <includedir>session.d</includedir> -->

<!-- <includedir>@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/session.d</includedir> -->

<!-- This is included last so local configuration can override what's
in this standard file -->
<include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/session-local.conf</include>

<!-- <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include> -->

<!-- For the session bus, override the default relatively-low limits
with essentially infinite limits, since the bus is just running
as the user anyway, using up bus resources is not something we need
to worry about. In some cases, we do set the limits lower than
"all available memory" if exceeding the limit is almost certainly a bug,
having the bus enforce a limit is nicer than a huge memory leak. But the
intent is that these limits should never be hit. -->

<!-- the memory limits are 1G instead of say 4G because they can't exceed 32-bit signed int max -->
<limit name="max_incoming_bytes">1000000000</limit>
<limit name="max_incoming_unix_fds">250000000</limit>
<limit name="max_outgoing_bytes">1000000000</limit>
<limit name="max_outgoing_unix_fds">250000000</limit>
<limit name="max_message_size">1000000000</limit>
<!-- We do not override max_message_unix_fds here since the in-kernel
limit is also relatively low -->
<limit name="service_start_timeout">120000</limit>
<limit name="auth_timeout">240000</limit>
<limit name="pending_fd_timeout">150000</limit>
<limit name="max_completed_connections">100000</limit>
<limit name="max_incomplete_connections">10000</limit>
<limit name="max_connections_per_user">100000</limit>
<limit name="max_pending_service_starts">10000</limit>
<limit name="max_names_per_connection">50000</limit>
<limit name="max_match_rules_per_connection">50000</limit>
<limit name="max_replies_per_connection">50000</limit>

</busconfig>
145 changes: 145 additions & 0 deletions tests/data/system.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<!-- from: https://gitlab.freedesktop.org/dbus/dbus/-/commit/776e6e0b04a14de4cafc13cc74ffb4a55a23a074 -->
<!-- busd: we've commented out any blocking includes or includedirs -->

<!-- This configuration file controls the systemwide message bus.
Add a system-local.conf and edit that rather than changing this
file directly. -->

<!-- Note that there are any number of ways you can hose yourself
security-wise by screwing up this file; in particular, you
probably don't want to listen on any more addresses, add any more
auth mechanisms, run as a different user, etc. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

<!-- Our well-known bus type, do not change this -->
<type>system</type>

<!-- Run as special user -->
<user>@DBUS_USER@</user>

<!-- Fork into daemon mode -->
<fork/>

<!-- We use system service launching using a helper -->
<standard_system_servicedirs/>

<!-- This is a setuid helper that is used to launch system services -->
<servicehelper>@DBUS_LIBEXECDIR@/dbus-daemon-launch-helper</servicehelper>

<!-- Write a pid file -->
<pidfile>@DBUS_SYSTEM_PID_FILE@</pidfile>

<!-- Enable logging to syslog -->
<syslog/>

<!-- Only allow socket-credentials-based authentication -->
<auth>EXTERNAL</auth>

<!-- Only listen on a local socket. (abstract=/path/to/socket
means use abstract namespace, don't really create filesystem
file; only Linux supports this. Use path=/whatever on other
systems.) -->
<listen>unix:path=/var/run/dbus/system_bus_socket</listen>

<policy context="default">
<!-- All users can connect to system bus -->
<allow user="*"/>

<!-- Holes must be punched in service configuration files for
name ownership and sending method calls -->
<deny own="*"/>
<deny send_type="method_call"/>

<!-- Signals and reply messages (method returns, errors) are allowed
by default -->
<allow send_type="signal"/>
<allow send_requested_reply="true" send_type="method_return"/>
<allow send_requested_reply="true" send_type="error"/>

<!-- All messages may be received by default -->
<allow receive_type="method_call"/>
<allow receive_type="method_return"/>
<allow receive_type="error"/>
<allow receive_type="signal"/>

<!-- Allow anyone to talk to the message bus -->
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus" />
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Introspectable"/>
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Properties"/>
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Containers1"/>
<!-- But disallow some specific bus services -->
<deny send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus"
send_member="UpdateActivationEnvironment"/>
<deny send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Debug.Stats"/>
<deny send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.systemd1.Activator"/>
</policy>

<!-- Only systemd, which runs as root, may report activation failures. -->
<policy user="root">
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.systemd1.Activator"/>
</policy>

<!-- root may monitor the system bus. -->
<policy user="root">
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Monitoring"/>
</policy>

<!-- If the Stats interface was enabled at compile-time, root may use it.
Copy this into system.local.conf or system.d/*.conf if you want to
enable other privileged users to view statistics and debug info -->
<policy user="root">
<allow send_destination="org.freedesktop.DBus"
send_interface="org.freedesktop.DBus.Debug.Stats"/>
</policy>

<!-- Include legacy configuration location -->
<include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system.conf</include>

<!-- The defaults for these limits are hard-coded in dbus-daemon.
Some clarifications:
Times are in milliseconds (ms); 1000ms = 1 second
133169152 bytes = 127 MiB
33554432 bytes = 32 MiB
150000ms = 2.5 minutes -->
<!-- <limit name="max_incoming_bytes">133169152</limit> -->
<!-- <limit name="max_incoming_unix_fds">64</limit> -->
<!-- <limit name="max_outgoing_bytes">133169152</limit> -->
<!-- <limit name="max_outgoing_unix_fds">64</limit> -->
<!-- <limit name="max_message_size">33554432</limit> -->
<!-- <limit name="max_message_unix_fds">16</limit> -->
<!-- <limit name="service_start_timeout">25000</limit> -->
<!-- <limit name="auth_timeout">5000</limit> -->
<!-- <limit name="pending_fd_timeout">150000</limit> -->
<!-- <limit name="max_completed_connections">2048</limit> -->
<!-- <limit name="max_incomplete_connections">64</limit> -->
<!-- <limit name="max_connections_per_user">256</limit> -->
<!-- <limit name="max_pending_service_starts">512</limit> -->
<!-- <limit name="max_names_per_connection">512</limit> -->
<!-- <limit name="max_match_rules_per_connection">512</limit> -->
<!-- <limit name="max_replies_per_connection">128</limit> -->

<!-- Config files are placed here that among other things, punch
holes in the above policy for specific services. -->
<!-- <includedir>system.d</includedir> -->

<!-- <includedir>@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system.d</includedir> -->

<!-- This is included last so local configuration can override what's
in this standard file -->
<include ignore_missing="yes">@SYSCONFDIR_FROM_PKGDATADIR@/dbus-1/system-local.conf</include>

<!-- <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include> -->

</busconfig>
5 changes: 5 additions & 0 deletions tests/data/transitive_missing_include.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<include>./missing_include.conf</include>
</busconfig>
13 changes: 13 additions & 0 deletions tests/data/valid.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<auth>ANONYMOUS</auth>
<listen>unix:path=/tmp/foo</listen>
<policy context="default">
<allow own="*"/>
<deny own="*"/>
</policy>
<include>./valid_included.conf</include>
<include ignore_missing="yes">./valid_missing.conf</include>
<includedir>./includedir</includedir>
</busconfig>
10 changes: 10 additions & 0 deletions tests/data/valid_included.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<auth>EXTERNAL</auth>
<listen>tcp:host=localhost,port=1234</listen>
<policy context="mandatory">
<deny own="*"/>
<allow own="*"/>
</policy>
</busconfig>

0 comments on commit a1ddba0

Please sign in to comment.