From 93686e7d88ad411512c5882739e387216e019373 Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Wed, 6 Aug 2025 10:15:39 -0500 Subject: [PATCH 1/3] Add D-Bus service activation --- credentialsd/tests/meson.build | 2 +- dbus/meson.build | 25 +++++++++++++++++++ ...iinuwa.credentialsd.Credentials.service.in | 3 +++ ...iinuwa.credentialsd.FlowControl.service.in | 3 +++ ...z.iinuwa.credentialsd.UiControl.service.in | 3 +++ meson.build | 3 ++- 6 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 dbus/meson.build create mode 100644 dbus/xyz.iinuwa.credentialsd.Credentials.service.in create mode 100644 dbus/xyz.iinuwa.credentialsd.FlowControl.service.in create mode 100644 dbus/xyz.iinuwa.credentialsd.UiControl.service.in diff --git a/credentialsd/tests/meson.build b/credentialsd/tests/meson.build index 46bb365f..b5cb181a 100644 --- a/credentialsd/tests/meson.build +++ b/credentialsd/tests/meson.build @@ -40,4 +40,4 @@ test( ], protocol: 'exitcode', verbose: true, -) +) \ No newline at end of file diff --git a/dbus/meson.build b/dbus/meson.build new file mode 100644 index 00000000..e1e22aba --- /dev/null +++ b/dbus/meson.build @@ -0,0 +1,25 @@ +dbus_config = configuration_data() +dbus_service_dir = datadir / 'dbus-1' / 'services' +dbus_config.set('DAEMON_EXECUTABLE', bindir / backend_executable_name) +dbus_config.set( + 'UI_EXECUTABLE', + bindir / gui_executable_name, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.Credentials.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.Credentials.service', + configuration: dbus_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.FlowControl.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.FlowControl.service', + configuration: dbus_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.UiControl.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.UiControl.service', + configuration: dbus_config, +) \ No newline at end of file diff --git a/dbus/xyz.iinuwa.credentialsd.Credentials.service.in b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in new file mode 100644 index 00000000..d2b336df --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.Credentials +Exec=@DAEMON_EXECUTABLE@ diff --git a/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in new file mode 100644 index 00000000..5ab0256c --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.FlowControl +Exec=@DAEMON_EXECUTABLE@ diff --git a/dbus/xyz.iinuwa.credentialsd.UiControl.service.in b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in new file mode 100644 index 00000000..3adf34d7 --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.UiControl +Exec=@UI_EXECUTABLE@ diff --git a/meson.build b/meson.build index a33b7ccf..be5a6442 100644 --- a/meson.build +++ b/meson.build @@ -22,4 +22,5 @@ meson.add_dist_script( subdir('credentialsd-common') subdir('credentialsd') -subdir('credentialsd-ui') \ No newline at end of file +subdir('credentialsd-ui') +subdir('dbus') \ No newline at end of file From c956dd4368519f1494552616ca2f612617b255bb Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Wed, 6 Aug 2025 11:47:34 -0500 Subject: [PATCH 2/3] Don't claim well-known name for client connections --- credentialsd-ui/src/main.rs | 7 ++----- credentialsd/src/main.rs | 5 +---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/credentialsd-ui/src/main.rs b/credentialsd-ui/src/main.rs index 9e8b927a..701e0ba3 100644 --- a/credentialsd-ui/src/main.rs +++ b/credentialsd-ui/src/main.rs @@ -19,11 +19,8 @@ async fn run() -> Result<(), Box> { let (request_tx, request_rx) = async_std::channel::bounded(2); // this allows the D-Bus service to signal to the GUI to draw a window for // executing the credential flow. - let conn = zbus::connection::Builder::session()? - .name("xyz.iinuwa.credentialsd.UiControl")? - .build() - .await?; - let cred_client = DbusCredentialClient::new(conn); + let client_conn = zbus::connection::Builder::session()?.build().await?; + let cred_client = DbusCredentialClient::new(client_conn); let _handle = gui::start_gui_thread(request_rx, cred_client)?; println!(" ✅"); diff --git a/credentialsd/src/main.rs b/credentialsd/src/main.rs index 5b700613..e80915a6 100644 --- a/credentialsd/src/main.rs +++ b/credentialsd/src/main.rs @@ -28,10 +28,7 @@ async fn main() { async fn run() -> Result<(), Box> { print!("Connecting to D-Bus as client...\t"); - let dbus_client_conn = zbus::connection::Builder::session()? - .name("xyz.iinuwa.credentialsd.Credentialsd")? - .build() - .await?; + let dbus_client_conn = zbus::connection::Builder::session()?.build().await?; println!(" ✅"); print!("Starting D-Bus UI -> Credential control service..."); From b715a103a3c6ab309260d7b0ff6fddb456e27071 Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Wed, 6 Aug 2025 11:47:34 -0500 Subject: [PATCH 3/3] Add systemd D-Bus activation --- ...iinuwa.credentialsd.Credentials.service.in | 1 + ...iinuwa.credentialsd.FlowControl.service.in | 1 + ...z.iinuwa.credentialsd.UiControl.service.in | 1 + meson.build | 3 ++- systemd/meson.build | 27 +++++++++++++++++++ ...iinuwa.credentialsd.Credentials.service.in | 7 +++++ ...iinuwa.credentialsd.FlowControl.service.in | 7 +++++ ...z.iinuwa.credentialsd.UiControl.service.in | 7 +++++ 8 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 systemd/meson.build create mode 100644 systemd/xyz.iinuwa.credentialsd.Credentials.service.in create mode 100644 systemd/xyz.iinuwa.credentialsd.FlowControl.service.in create mode 100644 systemd/xyz.iinuwa.credentialsd.UiControl.service.in diff --git a/dbus/xyz.iinuwa.credentialsd.Credentials.service.in b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in index d2b336df..c6d2e8ee 100644 --- a/dbus/xyz.iinuwa.credentialsd.Credentials.service.in +++ b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in @@ -1,3 +1,4 @@ [D-BUS Service] Name=xyz.iinuwa.credentialsd.Credentials Exec=@DAEMON_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.Credentials.service diff --git a/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in index 5ab0256c..f1e858fe 100644 --- a/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in +++ b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in @@ -1,3 +1,4 @@ [D-BUS Service] Name=xyz.iinuwa.credentialsd.FlowControl Exec=@DAEMON_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.FlowControl.service diff --git a/dbus/xyz.iinuwa.credentialsd.UiControl.service.in b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in index 3adf34d7..1071d910 100644 --- a/dbus/xyz.iinuwa.credentialsd.UiControl.service.in +++ b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in @@ -1,3 +1,4 @@ [D-BUS Service] Name=xyz.iinuwa.credentialsd.UiControl Exec=@UI_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.UiControl.service diff --git a/meson.build b/meson.build index be5a6442..0210f0e3 100644 --- a/meson.build +++ b/meson.build @@ -23,4 +23,5 @@ meson.add_dist_script( subdir('credentialsd-common') subdir('credentialsd') subdir('credentialsd-ui') -subdir('dbus') \ No newline at end of file +subdir('dbus') +subdir('systemd') \ No newline at end of file diff --git a/systemd/meson.build b/systemd/meson.build new file mode 100644 index 00000000..f38275c4 --- /dev/null +++ b/systemd/meson.build @@ -0,0 +1,27 @@ +systemd_config = configuration_data() +# HACK: Not using libdir option, since on some distros (Fedora), libdir is `lib64`, but systemd is always in `lib` +# If you know of a better way to do this, let me know +systemd_user_service_dir = prefix / 'lib' / 'systemd' / 'user' +systemd_config.set('DAEMON_EXECUTABLE', bindir / backend_executable_name) +systemd_config.set( + 'UI_EXECUTABLE', + bindir / gui_executable_name, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.Credentials.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.Credentials.service', + configuration: systemd_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.FlowControl.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.FlowControl.service', + configuration: systemd_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.UiControl.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.UiControl.service', + configuration: systemd_config, +) \ No newline at end of file diff --git a/systemd/xyz.iinuwa.credentialsd.Credentials.service.in b/systemd/xyz.iinuwa.credentialsd.Credentials.service.in new file mode 100644 index 00000000..3c17b221 --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.Credentials.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Service for creating and storing user credentials + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.Credentials +ExecStart=@DAEMON_EXECUTABLE@ diff --git a/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in b/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in new file mode 100644 index 00000000..fbe18e8f --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Internal helper service for credentialsd + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.FlowControl +ExecStart=@DAEMON_EXECUTABLE@ diff --git a/systemd/xyz.iinuwa.credentialsd.UiControl.service.in b/systemd/xyz.iinuwa.credentialsd.UiControl.service.in new file mode 100644 index 00000000..813d61aa --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.UiControl.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Internal helper service for credentialsd + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.UiControl +ExecStart=@UI_EXECUTABLE@