1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-10 21:38:50 +01:00

scd: Fix how scdaemon pipe server finishes.

* scd/scdaemon.h (scd_command_handler): Fix the return type.
* scd/command.c (scd_command_handler): Not return a value.
* scd/scdaemon.c (pipe_server): Make it auto variable in main.
(main): Use auto PIPE_SERVER variable.
(start_connection_thread): When it's a pipe connection and it
finishes, let the service shutdown.

--

GnuPG-bug-id: 7151
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 01fa318be0)
This commit is contained in:
NIIBE Yutaka 2024-06-17 11:44:41 +09:00 committed by Werner Koch
parent 76066d71f4
commit 70bb9c5127
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 8 additions and 15 deletions

View File

@ -2472,9 +2472,8 @@ register_commands (assuan_context_t ctx)
/* Startup the server. If FD is given as -1 this is simple pipe
server, otherwise it is a regular server. Returns true if there
are no more active asessions. */
int
server, otherwise it is a regular server. */
void
scd_command_handler (ctrl_t ctrl, gnupg_fd_t fd)
{
int rc;
@ -2573,9 +2572,6 @@ scd_command_handler (ctrl_t ctrl, gnupg_fd_t fd)
if (stopme)
scd_exit (0);
/* If there are no more sessions return true. */
return !session_list;
}

View File

@ -249,9 +249,6 @@ static int shutdown_pending;
/* It is possible that we are currently running under setuid permissions */
static int maybe_setuid = 1;
/* Flag telling whether we are running as a pipe server. */
static int pipe_server;
/* Name of the communication socket */
static char *socket_name;
/* Name of the redirected socket or NULL. */
@ -460,6 +457,7 @@ main (int argc, char **argv )
int greeting = 0;
int nogreeting = 0;
int multi_server = 0;
int pipe_server = 0;
int is_daemon = 0;
int nodetach = 0;
int csh_style = 0;
@ -470,7 +468,6 @@ main (int argc, char **argv )
int allow_coredump = 0;
struct assuan_malloc_hooks malloc_hooks;
int res;
npth_t pipecon_handler;
const char *application_priority = NULL;
early_system_init ();
@ -767,6 +764,7 @@ main (int argc, char **argv )
ctrl_t ctrl;
npth_attr_t tattr;
gnupg_fd_t fd = GNUPG_INVALID_FD;
npth_t pipecon_handler;
#ifndef HAVE_W32_SYSTEM
{
@ -1220,12 +1218,11 @@ start_connection_thread (void *arg)
log_info (_("handler for fd %d started\n"),
FD2INT(ctrl->thread_startup.fd));
/* If this is a pipe server, we request a shutdown if the command
handler asked for it. With the next ticker event and given that
/* If this thread is the pipe connection thread, flag that a
shutdown is required. With the next ticker event and given that
no other connections are running the shutdown will then
happen. */
if (scd_command_handler (ctrl, ctrl->thread_startup.fd)
&& pipe_server)
if (ctrl->thread_startup.fd == GNUPG_INVALID_FD)
shutdown_pending = 1;
if (opt.verbose)

View File

@ -141,7 +141,7 @@ const char *scd_get_socket_name (void);
/*-- command.c --*/
gpg_error_t initialize_module_command (void);
int scd_command_handler (ctrl_t, gnupg_fd_t);
void scd_command_handler (ctrl_t, gnupg_fd_t);
void send_status_info (ctrl_t ctrl, const char *keyword, ...)
GPGRT_ATTR_SENTINEL(1);
gpg_error_t send_status_direct (ctrl_t ctrl,