Re: [PATCH] gpg-agent: search gpg-agent socket in $GNUPGHOME
Hi Bert, On Thu, Oct 27, 2016 at 11:54:06AM +0200, Bert Huijben wrote: > > -Original Message- > > From: Patrick Steinhardt [mailto:p...@pks.im] > > Sent: donderdag 27 oktober 2016 11:15 > > To: Subversion> > Subject: [PATCH] gpg-agent: search gpg-agent socket in $GNUPGHOME > > > > Hi, > > > > a recent thread on issues with gpg-agent lead me to take a look > > at how the gpg-agent socket is located in subversion. The current > > code was lacking support for $GNUPGHOME, which allows a user to > > relocate his gnupg configuration directory. As setting this > > environment variable would also cause S.gpg-agent to be created > > inside of $GNUPGHOME, we might fail to correctly locate the file > > in this case. > > > > Attached patch fixes the problem. > > Hi Patrick, > > Last week (in r1766327) a slightly different patch was committed to resolve > this (or a similar problem). > > This patch was nominated for backport to 1.9.x, so test input is very > welcome. > > Do you know if we need both patches? > > Bert > > > > [[[ > > gpg_agent: search in $GNUPGHOME for gpg-agent socket > > > > The socket used to connect to the gpg-agent resides in the GnuPG > > home directory, which is by default located at "$HOME/.gnupg". > > But in fact, the home directory can be relocated by the user by > > setting the environment variable GNUPGHOME, in which case the > > gpg-agent socket will live at "$GNUPGHOME/S.gpg-agent". > > Subversion does only search the standard home directory, though, > > without evaluating $GNUPGHOME. > > > > Fix the issue by using the socket located at > > "$GNUPGHOME/S.gpg-agent" instead of using "$HOME/.gnupg" when the > > environment variable is set. > > > > * subversion/libsvn_subr/gpg_agent.c > > (find_running_gpg_agent): evaluate $GNUPGHOME > > ]]] heh, funny. Guess my mirror was out of sync, so I didn't have this commit yet. The commited fix is actually the same as my fix. So this patch can be dropped. Thanks, Patrick signature.asc Description: PGP signature
RE: [PATCH] gpg-agent: search gpg-agent socket in $GNUPGHOME
> -Original Message- > From: Patrick Steinhardt [mailto:p...@pks.im] > Sent: donderdag 27 oktober 2016 11:15 > To: Subversion> Subject: [PATCH] gpg-agent: search gpg-agent socket in $GNUPGHOME > > Hi, > > a recent thread on issues with gpg-agent lead me to take a look > at how the gpg-agent socket is located in subversion. The current > code was lacking support for $GNUPGHOME, which allows a user to > relocate his gnupg configuration directory. As setting this > environment variable would also cause S.gpg-agent to be created > inside of $GNUPGHOME, we might fail to correctly locate the file > in this case. > > Attached patch fixes the problem. Hi Patrick, Last week (in r1766327) a slightly different patch was committed to resolve this (or a similar problem). This patch was nominated for backport to 1.9.x, so test input is very welcome. Do you know if we need both patches? Bert > > [[[ > gpg_agent: search in $GNUPGHOME for gpg-agent socket > > The socket used to connect to the gpg-agent resides in the GnuPG > home directory, which is by default located at "$HOME/.gnupg". > But in fact, the home directory can be relocated by the user by > setting the environment variable GNUPGHOME, in which case the > gpg-agent socket will live at "$GNUPGHOME/S.gpg-agent". > Subversion does only search the standard home directory, though, > without evaluating $GNUPGHOME. > > Fix the issue by using the socket located at > "$GNUPGHOME/S.gpg-agent" instead of using "$HOME/.gnupg" when the > environment variable is set. > > * subversion/libsvn_subr/gpg_agent.c > (find_running_gpg_agent): evaluate $GNUPGHOME > ]]]
[PATCH] gpg-agent: search gpg-agent socket in $GNUPGHOME
Hi, a recent thread on issues with gpg-agent lead me to take a look at how the gpg-agent socket is located in subversion. The current code was lacking support for $GNUPGHOME, which allows a user to relocate his gnupg configuration directory. As setting this environment variable would also cause S.gpg-agent to be created inside of $GNUPGHOME, we might fail to correctly locate the file in this case. Attached patch fixes the problem. [[[ gpg_agent: search in $GNUPGHOME for gpg-agent socket The socket used to connect to the gpg-agent resides in the GnuPG home directory, which is by default located at "$HOME/.gnupg". But in fact, the home directory can be relocated by the user by setting the environment variable GNUPGHOME, in which case the gpg-agent socket will live at "$GNUPGHOME/S.gpg-agent". Subversion does only search the standard home directory, though, without evaluating $GNUPGHOME. Fix the issue by using the socket located at "$GNUPGHOME/S.gpg-agent" instead of using "$HOME/.gnupg" when the environment variable is set. * subversion/libsvn_subr/gpg_agent.c (find_running_gpg_agent): evaluate $GNUPGHOME ]]] diff --git a/subversion/libsvn_subr/gpg_agent.c b/subversion/libsvn_subr/gpg_agent.c index 217e14a..35bdf8f 100644 --- a/subversion/libsvn_subr/gpg_agent.c +++ b/subversion/libsvn_subr/gpg_agent.c @@ -233,6 +233,7 @@ find_running_gpg_agent(int *new_sd, apr_pool_t *pool) { char *buffer; char *gpg_agent_info = NULL; + char *gpg_home = NULL; const char *socket_name = NULL; const char *request = NULL; const char *p = NULL; @@ -245,9 +246,11 @@ find_running_gpg_agent(int *new_sd, apr_pool_t *pool) * the gpg-agent man page under the --use-standard-socket option. * The manage page misleadingly says the standard socket is * "named 'S.gpg-agent' located in the home directory." The standard - * socket path is actually in the .gnupg directory in the home directory, - * i.e. ~/.gnupg/S.gpg-agent */ + * socket path is actually in the the GnuPG home directory, + * i.e. either $GNUPGHOME/S.gpg-agent if $GNUPGHOME is defined + * or ~/.gnupg/S.gpg-agent otherwise */ gpg_agent_info = getenv("GPG_AGENT_INFO"); + gpg_home = getenv("GNUPGHOME"); if (gpg_agent_info != NULL) { apr_array_header_t *socket_details; @@ -259,6 +262,11 @@ find_running_gpg_agent(int *new_sd, apr_pool_t *pool) pool); socket_name = APR_ARRAY_IDX(socket_details, 0, const char *); } + else if (gpg_home != NULL) +{ + socket_name = svn_dirent_join_many(pool, gpg_home, + "S.gpg-agent", SVN_VA_NULL); +} else { const char *homedir = svn_user_get_homedir(pool); signature.asc Description: PGP signature