1
0
mirror of https://github.com/systemd/systemd synced 2026-03-02 03:04:46 +01:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Kai Lüke
bad16f324a openssl-util: pass the UI callback for interactive PIN prompts
Observed with the tpm2 provider and the tpm2tss engine was that the
auth process failed because the provider/engine could not ask for the
PIN through the callback, resulting in:
  "Failed to load private key from ...: Input/output error"
Apparently the default UI method is not enough and the key setup
functions expect an explicit method.
Pass the existing UI method through as callback for the key setup.
2026-02-19 10:21:01 +01:00
Dmytro Bagrii
8df975bb67 xorg/50-systemd-user: import XAUTHORITY only if set
The warning will still be reported if XAUTHORITY is set but not exported.
However, such scenario is unlikely for xinitrc.d scripts environment.

Fixes #40745

Signed-off-by: Dmytro Bagrii <dimich.dmb@gmail.com>
2026-02-19 08:15:33 +01:00
2 changed files with 13 additions and 7 deletions

View File

@ -1208,6 +1208,7 @@ int pkey_generate_volume_keys(
static int load_key_from_provider(
const char *provider,
const char *private_key_uri,
UI_METHOD *ui_method,
EVP_PKEY **ret) {
assert(provider);
@ -1223,8 +1224,8 @@ static int load_key_from_provider(
_cleanup_(OSSL_STORE_closep) OSSL_STORE_CTX *store = OSSL_STORE_open(
private_key_uri,
/* ui_method= */ NULL,
/* ui_method= */ NULL,
ui_method,
/* ui_data= */ NULL,
/* post_process= */ NULL,
/* post_process_data= */ NULL);
if (!store)
@ -1246,7 +1247,7 @@ static int load_key_from_provider(
return 0;
}
static int load_key_from_engine(const char *engine, const char *private_key_uri, EVP_PKEY **ret) {
static int load_key_from_engine(const char *engine, const char *private_key_uri, UI_METHOD *ui_method, EVP_PKEY **ret) {
assert(engine);
assert(private_key_uri);
assert(ret);
@ -1260,7 +1261,7 @@ static int load_key_from_engine(const char *engine, const char *private_key_uri,
if (ENGINE_init(e) == 0)
return log_openssl_errors("Failed to initialize signing engine '%s'", engine);
_cleanup_(EVP_PKEY_freep) EVP_PKEY *private_key = ENGINE_load_private_key(e, private_key_uri, /* ui_method= */ NULL, /* callback_data= */ NULL);
_cleanup_(EVP_PKEY_freep) EVP_PKEY *private_key = ENGINE_load_private_key(e, private_key_uri, ui_method, /* callback_data= */ NULL);
if (!private_key)
return log_openssl_errors("Failed to load private key from '%s'", private_key_uri);
REENABLE_WARNING;
@ -1533,13 +1534,18 @@ int openssl_load_private_key(
if (r < 0)
return log_debug_errno(r, "Failed to allocate ask-password user interface: %m");
UI_METHOD *ui_method = NULL;
#ifndef OPENSSL_NO_UI_CONSOLE
ui_method = ui->method;
#endif
switch (private_key_source_type) {
case OPENSSL_KEY_SOURCE_ENGINE:
r = load_key_from_engine(private_key_source, private_key, ret_private_key);
r = load_key_from_engine(private_key_source, private_key, ui_method, ret_private_key);
break;
case OPENSSL_KEY_SOURCE_PROVIDER:
r = load_key_from_provider(private_key_source, private_key, ret_private_key);
r = load_key_from_provider(private_key_source, private_key, ui_method, ret_private_key);
break;
default:
assert_not_reached();

View File

@ -8,7 +8,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
systemctl --user import-environment DISPLAY XAUTHORITY
systemctl --user import-environment DISPLAY ${XAUTHORITY+XAUTHORITY}
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY