From a019a0fcd8dfb9d1eae5bc991fdd54b7cf55641e Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 8 Jan 2025 17:10:07 +0100 Subject: [PATCH] Stronger deprecate the --supervised option. * agent/gpg-agent.c (opts): Rename option supervised. * dirmngr/dirmngr.c (opts): Ditto. -- The --supervised way to start gpg-agent has been deprecated for 2.5 years and will probably entirely removed with version 2.6.0. To allow its use until its removal the systemd service description need to be adjusted to use this option. The reason for the deprecation are conflicts with the way systemd starts gpg-agent and gpg expects how gpg-agent is started. In particular gpg expects that the gpg-agent matching its own version is started. Further the systemd way is not portable to other platforms and long term experience on Windows has show that the standard way of starting gpg-agent is less error prone. Note to those who want to re-introduse this option: Pretty please do not use socket names conflicting with our standard socket names. For example use /run/user/1000/foo-gnupg/S.gpg-agent. --- agent/gpg-agent.c | 21 ++++++++++++--------- dirmngr/dirmngr.c | 2 +- doc/dirmngr.texi | 6 ++++-- doc/gpg-agent.texi | 12 ++++-------- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 5b1f155fe..758824144 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -169,7 +169,7 @@ static gpgrt_opt_t opts[] = { ARGPARSE_s_n (oDaemon, "daemon", N_("run in daemon mode (background)")), ARGPARSE_s_n (oServer, "server", N_("run in server mode (foreground)")), #ifndef HAVE_W32_SYSTEM - ARGPARSE_s_n (oSupervised, "supervised", "@"), + ARGPARSE_s_n (oSupervised, "deprecated-supervised", "@"), #endif ARGPARSE_s_n (oNoDetach, "no-detach", N_("do not detach from the console")), ARGPARSE_s_n (oSh, "sh", N_("sh-style command output")), @@ -714,10 +714,10 @@ map_supervised_sockets (gnupg_fd_t *r_fd, envvar = getenv ("LISTEN_PID"); if (!envvar) log_error ("no LISTEN_PID environment variable found in " - "--supervised mode (ignoring)\n"); + "--deprecated-supervised mode (ignoring)\n"); else if (strtoul (envvar, NULL, 10) != (unsigned long)getpid ()) log_error ("environment variable LISTEN_PID (%lu) does not match" - " our pid (%lu) in --supervised mode (ignoring)\n", + " our pid (%lu) in --deprecated-supervised mode (ignoring)\n", (unsigned long)strtoul (envvar, NULL, 10), (unsigned long)getpid ()); @@ -747,21 +747,23 @@ map_supervised_sockets (gnupg_fd_t *r_fd, fd_count = atoi (envvar); else if (fdnames) { - log_error ("no LISTEN_FDS environment variable found in --supervised" + log_error ("no LISTEN_FDS environment variable found in" + " --deprecated-supervised" " mode (relying on LISTEN_FDNAMES instead)\n"); fd_count = nfdnames; } else { log_error ("no LISTEN_FDS or LISTEN_FDNAMES environment variables " - "found in --supervised mode" + "found in --deprecated-supervised mode" " (assuming 1 active descriptor)\n"); fd_count = 1; } if (fd_count < 1) { - log_error ("--supervised mode expects at least one file descriptor" + log_error ("--deprecated-supervised mode expects at least" + " one file descriptor" " (was told %d, carrying on as though it were 1)\n", fd_count); fd_count = 1; @@ -774,11 +776,12 @@ map_supervised_sockets (gnupg_fd_t *r_fd, if (fd_count != 1) log_error ("no LISTEN_FDNAMES and LISTEN_FDS (%d) != 1" - " in --supervised mode." + " in --deprecated-supervised mode." " (ignoring all sockets but the first one)\n", fd_count); if (fstat (3, &statbuf) == -1 && errno ==EBADF) - log_fatal ("file descriptor 3 must be valid in --supervised mode" + log_fatal ("file descriptor 3 must be valid in" + " --depreacted-supervised mode" " if LISTEN_FDNAMES is not set\n"); *r_fd = 3; socket_name = gnupg_get_socket_name (3); @@ -786,7 +789,7 @@ map_supervised_sockets (gnupg_fd_t *r_fd, else if (fd_count != nfdnames) { log_fatal ("number of items in LISTEN_FDNAMES (%d) does not match " - "LISTEN_FDS (%d) in --supervised mode\n", + "LISTEN_FDS (%d) in --deprecated-supervised mode\n", nfdnames, fd_count); } else diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c index b2af737d5..e9709d766 100644 --- a/dirmngr/dirmngr.c +++ b/dirmngr/dirmngr.c @@ -177,7 +177,7 @@ static gpgrt_opt_t opts[] = { ARGPARSE_c (aServer, "server", N_("run in server mode (foreground)") ), ARGPARSE_c (aDaemon, "daemon", N_("run in daemon mode (background)") ), #ifndef HAVE_W32_SYSTEM - ARGPARSE_c (aSupervised, "supervised", "@"), + ARGPARSE_c (aSupervised, "deprecated-supervised", "@"), #endif ARGPARSE_c (aListCRLs, "list-crls", N_("list the contents of the CRL cache")), ARGPARSE_c (aLoadCRL, "load-crl", N_("|FILE|load CRL from FILE into cache")), diff --git a/doc/dirmngr.texi b/doc/dirmngr.texi index 16d4cd4ab..d986eaafa 100644 --- a/doc/dirmngr.texi +++ b/doc/dirmngr.texi @@ -86,11 +86,13 @@ This is the way @command{dirmngr} is started on demand by the other GnuPG components. To force starting @command{dirmngr} it is in general best to use @code{gpgconf --launch dirmngr}. -@item --supervised +@item --deprecated-supervised @opindex supervised Run in the foreground, sending logs to stderr, and listening on file descriptor 3, which must already be bound to a listening socket. This -option is deprecated and not supported on Windows. +option is not supported on Windows and deprecated since version 2.3.6. +To clarify its deprecation the option has been renamed with version +2.5.3. @item --list-crls @opindex list-crls diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi index 1d531fb57..42ac84019 100644 --- a/doc/gpg-agent.texi +++ b/doc/gpg-agent.texi @@ -167,21 +167,17 @@ gpg-agent: @code{gpg-agent --daemon /bin/sh}. This way you get a new shell with the environment setup properly; after you exit from this shell, gpg-agent terminates within a few seconds. -@item --supervised +@item --deprecated-supervised @opindex supervised Run in the foreground, sending logs by default to stderr, and listening on provided file descriptors, which must already be bound to -listening sockets. This option is deprecated and not supported on -Windows. +listening sockets. This option is not supported on Windows and +deprecated since version 2.3.6. To clarify its deprecation the option +has been renamed with version 2.5.3. If in @file{common.conf} the option @option{no-autostart} is set, any start attempts will be ignored. -In @option{--supervised} mode, different file descriptors can be provided for -use as different socket types (e.g., ssh, extra) as long as they are -identified in the environment variable @code{LISTEN_FDNAMES} (see -sd_listen_fds(3) on some Linux distributions for more information on -this convention). @end table @mansect options