Index: gnupg2-1.9.20/sm/gpgsm.h =================================================================== --- gnupg2-1.9.20/sm/gpgsm.h +++ gnupg2-1.9.20/sm/gpgsm.h @@ -181,7 +181,7 @@ void gpgsm_init_default_ctrl (struct server_control_s *ctrl); /*-- server.c --*/ -void gpgsm_server (certlist_t default_recplist); +void gpgsm_server (ctrl_t ctrl, certlist_t default_recplist); gpg_error_t gpgsm_status (ctrl_t ctrl, int no, const char *text); gpg_error_t gpgsm_status2 (ctrl_t ctrl, int no, ...); gpg_error_t gpgsm_status_with_err_code (ctrl_t ctrl, int no, const char *text, Index: gnupg2-1.9.20/sm/gpgsm.c =================================================================== --- gnupg2-1.9.20/sm/gpgsm.c +++ gnupg2-1.9.20/sm/gpgsm.c @@ -883,6 +883,7 @@ case aServer: opt.batch = 1; + ctrl.no_server = 0; set_cmd (&cmd, aServer); break; @@ -1397,7 +1398,7 @@ sleep (debug_wait); log_debug ("... okay\n"); } - gpgsm_server (recplist); + gpgsm_server (&ctrl, recplist); break; case aCallDirmngr: Index: gnupg2-1.9.20/sm/server.c =================================================================== --- gnupg2-1.9.20/sm/server.c +++ gnupg2-1.9.20/sm/server.c @@ -780,18 +780,14 @@ set from the command line or config file. We only require those marked as encrypt-to. */ void -gpgsm_server (certlist_t default_recplist) +gpgsm_server (ctrl_t ctrl, certlist_t default_recplist) { int rc; int filedes[2]; ASSUAN_CONTEXT ctx; - struct server_control_s ctrl; static const char hello[] = ("GNU Privacy Guard's S/M server " VERSION " ready"); - memset (&ctrl, 0, sizeof ctrl); - gpgsm_init_default_ctrl (&ctrl); - /* For now we use a simple pipe based server so that we can work from scripts. We will later add options to run as a daemon and wait for requests on a Unix domain socket */ @@ -841,13 +837,13 @@ assuan_register_output_notify (ctx, output_notify); assuan_register_option_handler (ctx, option_handler); - assuan_set_pointer (ctx, &ctrl); - ctrl.server_local = xcalloc (1, sizeof *ctrl.server_local); - ctrl.server_local->assuan_ctx = ctx; - ctrl.server_local->message_fd = -1; - ctrl.server_local->list_internal = 1; - ctrl.server_local->list_external = 0; - ctrl.server_local->default_recplist = default_recplist; + assuan_set_pointer (ctx, ctrl); + ctrl->server_local = xcalloc (1, sizeof *ctrl->server_local); + ctrl->server_local->assuan_ctx = ctx; + ctrl->server_local->message_fd = -1; + ctrl->server_local->list_internal = 1; + ctrl->server_local->list_external = 0; + ctrl->server_local->default_recplist = default_recplist; if (DBG_ASSUAN) assuan_set_log_stream (ctx, log_get_stream ()); @@ -873,10 +869,10 @@ } } - gpgsm_release_certlist (ctrl.server_local->recplist); - ctrl.server_local->recplist = NULL; - gpgsm_release_certlist (ctrl.server_local->signerlist); - ctrl.server_local->signerlist = NULL; + gpgsm_release_certlist (ctrl->server_local->recplist); + ctrl->server_local->recplist = NULL; + gpgsm_release_certlist (ctrl->server_local->signerlist); + ctrl->server_local->signerlist = NULL; assuan_deinit_server (ctx); }