aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2022-08-01 02:59:43 +0000
committerNIIBE Yutaka <[email protected]>2022-08-01 02:59:43 +0000
commitc0a3748979cad8f06bc867f19e8b61a8cff8a73f (patch)
tree42980a36e672422fdfa798b1211d337a9d1e136a
parentSimplify the access control. (diff)
downloadgnupg-c0a3748979cad8f06bc867f19e8b61a8cff8a73f.tar.gz
gnupg-c0a3748979cad8f06bc867f19e8b61a8cff8a73f.zip
Support specifying the pipe name by the option.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--agent/command-ssh.c6
-rw-r--r--agent/gpg-agent.c70
2 files changed, 37 insertions, 39 deletions
diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index 5aa2ea8ba..50622850c 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -3785,7 +3785,7 @@ start_command_handler_ssh_stream (ctrl_t ctrl, estream_t stream)
if (ret)
{
log_error ("failed to disable buffering on socket stream: %s\n",
- strerror (errno));
+ strerror (errno));
goto out;
}
@@ -3793,7 +3793,7 @@ start_command_handler_ssh_stream (ctrl_t ctrl, estream_t stream)
while ( !ssh_request_process (ctrl, stream) )
{
/* Check whether we have reached EOF before trying to read
- another request. */
+ another request. */
int c;
c = es_fgetc (stream);
@@ -3830,7 +3830,7 @@ start_command_handler_ssh (ctrl_t ctrl, gnupg_fd_t sock_client)
if (!stream_sock)
{
log_error (_("failed to create stream from socket: %s\n"),
- strerror (errno));
+ strerror (errno));
return;
}
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index 6ceb0b0ad..9ef00cb9d 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -230,7 +230,7 @@ static gpgrt_opt_t opts[] = {
/* */ "@"
#endif
),
- ARGPARSE_s_n (oWin32OpenSSHSupport, "enable-win32-openssh-support",
+ ARGPARSE_o_s (oWin32OpenSSHSupport, "enable-win32-openssh-support",
#ifdef HAVE_W32_SYSTEM
/* */ N_("enable Win32-OpenSSH support")
#else
@@ -366,8 +366,9 @@ static int putty_support;
for the foreseeable future. */
#define PUTTY_IPC_MAXLEN 16384
-/* Flag indicating that support for Win32-OpenSSH has been enabled. */
-static int win32_openssh_support;
+/* Path to the pipe, which handles requests from Win32-OpenSSH. */
+static const char *win32_openssh_support;
+#define W32_DEFAILT_AGENT_PIPE_NAME "\\\\.\\pipe\\openssh-ssh-agent"
#endif /*HAVE_W32_SYSTEM*/
/* The list of open file descriptors at startup. Note that this list
@@ -1302,7 +1303,10 @@ main (int argc, char **argv)
case oWin32OpenSSHSupport:
# ifdef HAVE_W32_SYSTEM
- win32_openssh_support = 1;
+ if (pargs.r_type)
+ win32_openssh_support = pargs.r.ret_str;
+ else
+ win32_openssh_support = W32_DEFAILT_AGENT_PIPE_NAME;
# endif
break;
@@ -2763,9 +2767,7 @@ putty_message_thread (void *arg)
return NULL;
}
-/* FIXME: it would be good to be specified by an option. */
-#define AGENT_PIPE_NAME "\\\\.\\pipe\\openssh-ssh-agent"
-#define BUFSIZE 5 * 1024
+#define BUFSIZE (5 * 1024)
/* The thread handling Win32-OpenSSH requests through NamedPipe. */
static void *
@@ -2785,7 +2787,7 @@ win32_openssh_thread (void *arg)
es_syshd_t syshd;
npth_unprotect ();
- pipe = CreateNamedPipeA (AGENT_PIPE_NAME, PIPE_ACCESS_DUPLEX,
+ pipe = CreateNamedPipeA (win32_openssh_support, PIPE_ACCESS_DUPLEX,
(PIPE_TYPE_BYTE | PIPE_READMODE_BYTE
| PIPE_WAIT | PIPE_REJECT_REMOTE_CLIENTS),
PIPE_UNLIMITED_INSTANCES,
@@ -2793,7 +2795,7 @@ win32_openssh_thread (void *arg)
if (pipe == INVALID_HANDLE_VALUE)
{
- npth_protect ();
+ npth_protect ();
log_error ("cannot create pipe: %ld\n", GetLastError ());
break;
}
@@ -2803,41 +2805,41 @@ win32_openssh_thread (void *arg)
npth_protect ();
CloseHandle (pipe);
log_error ("Error at ConnectNamedPipe: %ld\n", GetLastError ());
- break;
+ break;
}
npth_protect ();
ctrl = xtrycalloc (1, sizeof *ctrl);
if (!ctrl)
- {
- CloseHandle (pipe);
- log_error ("error allocating connection control data: %s\n",
- strerror (errno));
- break;
- }
+ {
+ CloseHandle (pipe);
+ log_error ("error allocating connection control data: %s\n",
+ strerror (errno));
+ break;
+ }
ctrl->session_env = session_env_new ();
if (!ctrl->session_env)
- {
- log_error ("error allocating session environment block: %s\n",
- strerror (errno));
- agent_deinit_default_ctrl (ctrl);
- xfree (ctrl);
- CloseHandle (pipe);
- break;
- }
+ {
+ log_error ("error allocating session environment block: %s\n",
+ strerror (errno));
+ agent_deinit_default_ctrl (ctrl);
+ xfree (ctrl);
+ CloseHandle (pipe);
+ break;
+ }
agent_init_default_ctrl (ctrl);
syshd.type = ES_SYSHD_HANDLE;
syshd.u.handle = pipe;
ssh_stream = es_sysopen (&syshd, "r+b");
if (!ssh_stream)
- {
- agent_deinit_default_ctrl (ctrl);
- xfree (ctrl);
- CloseHandle (pipe);
- break;
- }
+ {
+ agent_deinit_default_ctrl (ctrl);
+ xfree (ctrl);
+ CloseHandle (pipe);
+ break;
+ }
start_command_handler_ssh_stream (ctrl, ssh_stream);
@@ -3042,9 +3044,7 @@ handle_connections (gnupg_fd_t listen_fd,
ret = npth_create (&thread, &tattr, putty_message_thread, NULL);
if (ret)
- {
- log_error ("error spawning putty message loop: %s\n", strerror (ret));
- }
+ log_error ("error spawning putty message loop: %s\n", strerror (ret));
}
if (win32_openssh_support)
@@ -3053,9 +3053,7 @@ handle_connections (gnupg_fd_t listen_fd,
ret = npth_create (&thread, &tattr, win32_openssh_thread, NULL);
if (ret)
- {
- log_error ("error spawning Win32-OpenSSH loop: %s\n", strerror (ret));
- }
+ log_error ("error spawning Win32-OpenSSH loop: %s\n", strerror (ret));
}
#endif /*HAVE_W32_SYSTEM*/