# create gpg-agent socket in TMPDIR Index: agent/gpg-agent.c =================================================================== --- agent/gpg-agent.c.orig +++ agent/gpg-agent.c @@ -874,6 +874,10 @@ main (int argc, char **argv ) gnupg_fd_t fd_ssh; pid_t pid; + char *tmp1, *tmp; + char *tmp2 = "gpg-XXXXXX/S.gpg-agent"; + size_t len; + /* Remove the DISPLAY variable so that a pinentry does not default to a specific display. There is still a default display when gpg-agent was started using --display or a @@ -885,16 +889,25 @@ main (int argc, char **argv ) unsetenv ("DISPLAY"); #endif + if ((tmp1 = getenv("TMPDIR")) == NULL) + tmp1 = "/tmp"; + + len = strlen(tmp1) + strlen(tmp2) + 10; + tmp = malloc(len); + + snprintf(tmp, len, "%s%s%s", tmp1, tmp1 && strlen(tmp1) > 0 ? "/" : "", tmp2); /* Create the sockets. */ socket_name = create_socket_name (use_standard_socket, "S.gpg-agent", - "/tmp/gpg-XXXXXX/S.gpg-agent"); - if (opt.ssh_support) + tmp); + if (opt.ssh_support) { + snprintf(tmp, len, "%s%s%s.ssh", tmp1, tmp1 && strlen(tmp1) > 0 ? "/" : "", tmp2); socket_name_ssh = create_socket_name (use_standard_socket, "S.gpg-agent.ssh", - "/tmp/gpg-XXXXXX/S.gpg-agent.ssh"); - + tmp); + } + free(tmp); fd = create_server_socket (use_standard_socket, socket_name, 0, &socket_nonce); if (opt.ssh_support)