Skip to content

fix: route DHCP renew through AppletDhcpClientService proxy#3288

Open
geraldo-netto wants to merge 1 commit into
blueman-project:mainfrom
geraldo-netto:fix/wire-dhcp-proxy
Open

fix: route DHCP renew through AppletDhcpClientService proxy#3288
geraldo-netto wants to merge 1 commit into
blueman-project:mainfrom
geraldo-netto:fix/wire-dhcp-proxy

Conversation

@geraldo-netto

Copy link
Copy Markdown

NetworkService.common_actions called AppletService().dchp_client(), but the dchp_client method lives on the org.blueman.Applet.DhcpClient interface, exposed by AppletDhcpClientService — AppletService has no such method, so the "Renew IP Address" action raised AttributeError at call time. This also gives AppletDhcpClientService a real production call site.

Add unit + fuzz coverage:

  • AppletDhcpClientService.dchp_client dispatches the correct method name and object-path variant; valid paths forwarded verbatim, malformed object paths rejected by GLib before any D-Bus call.
  • NetworkService renew action dispatches to AppletDhcpClientService with the device object path; regression guard that AppletService is not referenced.
  • Guard that AppletStatusIconService remains a ProxyBase subclass: it is a signal-only proxy required in Tray.py to receive StatusIcon-interface signals, so it must not be removed.

Tests avoid dbusmock so they run without a live bus.

NetworkService.common_actions called AppletService().dchp_client(), but the
dchp_client method lives on the org.blueman.Applet.DhcpClient interface,
exposed by AppletDhcpClientService — AppletService has no such method, so the
"Renew IP Address" action raised AttributeError at call time. This also gives
AppletDhcpClientService a real production call site.

Add unit + fuzz coverage:
- AppletDhcpClientService.dchp_client dispatches the correct method name and
  object-path variant; valid paths forwarded verbatim, malformed object paths
  rejected by GLib before any D-Bus call.
- NetworkService renew action dispatches to AppletDhcpClientService with the
  device object path; regression guard that AppletService is not referenced.
- Guard that AppletStatusIconService remains a ProxyBase subclass: it is a
  signal-only proxy required in Tray.py to receive StatusIcon-interface
  signals, so it must not be removed.

Tests avoid dbusmock so they run without a live bus.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Jun 2, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant