A quick comparison of the package sources hasn't revealed anything obvious.

So here is a reproducer (custom pinentry defined in gpg-agent.conf that dumps
its environment):

[~]$ grep ^pinentry-program .gnupg/gpg-agent.conf 
pinentry-program        /home/farblos/tmp/pinentry
[~]$ cat /home/farblos/tmp/pinentry
#!/bin/bash

( date; export; ) > /tmp/pinentry.log
[~]$ ls -al /home/farblos/tmp/pinentry
-rwxrwxr-x 1 farblos farblos 51 May  7 11:48 /home/farblos/tmp/pinentry

[~]$ gpg --encrypt --recipient BEA00D6B5803B828854E115908C216F6FF7B6B30 
/home/farblos/tmp/pinentry > /home/farblos/tmp/pinentry.gpg
[~]$ systemctl --user restart gpg-agent

[~]$ gpg --decrypt /home/farblos/tmp/pinentry.gpg
gpg: encrypted with 3072-bit RSA key, ID 646746DE42C89279, created 2022-11-30
      "backup"
gpg: decryption failed: No secret key
[~]$ cat /tmp/pinentry.log 
Tue May  7 11:55:11 CEST 2024
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DISPLAY=":0"
declare -x GSM_SKIP_SSH_AGENT_WORKAROUND="true"
declare -x HOME="/home/farblos"
declare -x INVOCATION_ID="73be729ef883415aaf43ca4a4de2049b"
declare -x JOURNAL_STREAM="8:18301"
declare -x LANG="en_US.UTF-8"
declare -x LANGUAGE="en_US:en"
declare -x LC_COLLATE="POSIX"
declare -x LC_MEASUREMENT="de_DE.UTF-8"
declare -x LC_PAPER="de_DE.UTF-8"
declare -x LC_TIME="POSIX"
declare -x LISTEN_FDNAMES="extra:ssh:std:browser"
declare -x LISTEN_FDS="4"
declare -x LISTEN_PID="4355"
declare -x LOGNAME="farblos"
declare -x MANAGERPID="1776"
declare -x 
MEMORY_PRESSURE_WATCH="/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/gpg-agent.service/memory.pressure"
declare -x MEMORY_PRESSURE_WRITE="c29tZSAyMDAwMDAgMjAwMDAwMAA="
declare -x OLDPWD
declare -x 
PATH="/home/farblos/bin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare -x PWD="/home/farblos"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AUTH_SOCK="/run/user/1000/gnupg/S.gpg-agent.ssh"
declare -x SYSTEMD_EXEC_PID="4355"
declare -x USER="farblos"
declare -x XAUTHORITY="/home/farblos/.Xauthority"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x _assuan_pipe_connect_pid="4355"

[~]$ PINENTRY_USER_DATA=foobarbaz gpg --decrypt /home/farblos/tmp/pinentry.gpg
gpg: encrypted with 3072-bit RSA key, ID 646746DE42C89279, created 2022-11-30
      "backup"
gpg: decryption failed: No secret key
[~]$ cat /tmp/pinentry.log
Tue May  7 12:08:16 CEST 2024
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DISPLAY=":0"
declare -x GSM_SKIP_SSH_AGENT_WORKAROUND="true"
declare -x HOME="/home/farblos"
declare -x INVOCATION_ID="73be729ef883415aaf43ca4a4de2049b"
declare -x JOURNAL_STREAM="8:18301"
declare -x LANG="en_US.UTF-8"
declare -x LANGUAGE="en_US:en"
declare -x LC_COLLATE="POSIX"
declare -x LC_MEASUREMENT="de_DE.UTF-8"
declare -x LC_PAPER="de_DE.UTF-8"
declare -x LC_TIME="POSIX"
declare -x LISTEN_FDNAMES="extra:ssh:std:browser"
declare -x LISTEN_FDS="4"
declare -x LISTEN_PID="4355"
declare -x LOGNAME="farblos"
declare -x MANAGERPID="1776"
declare -x 
MEMORY_PRESSURE_WATCH="/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/gpg-agent.service/memory.pressure"
declare -x MEMORY_PRESSURE_WRITE="c29tZSAyMDAwMDAgMjAwMDAwMAA="
declare -x OLDPWD
declare -x 
PATH="/home/farblos/bin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare -x PWD="/home/farblos"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AUTH_SOCK="/run/user/1000/gnupg/S.gpg-agent.ssh"
declare -x SYSTEMD_EXEC_PID="4355"
declare -x USER="farblos"
declare -x XAUTHORITY="/home/farblos/.Xauthority"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x _assuan_pipe_connect_pid="4355"

I also took debug traces of the agent, which show that the pinentry user
data is passed from gpg to the agent through assuan, but not forwarded
from there to the pinentry.  Data available on request.

Reply via email to