You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/07/25 19:14:17 UTC

svn commit: r1150783 - in /subversion/trunk: ./ subversion/include/ subversion/include/private/ subversion/libsvn_auth_gpg_agent/ subversion/libsvn_subr/

Author: stsp
Date: Mon Jul 25 17:14:15 2011
New Revision: 1150783

URL: http://svn.apache.org/viewvc?rev=1150783&view=rev
Log:
Reintegrate the gpg-agent-password-store branch.
It is now working quite well. Further cleanup can happen on trunk.

The merge was an interesting experience. In addition to the problems
fixed by r1150760 and r1150762, I ended up with 3 unrelated content
and 8 unrelated svn:mergeinfo changes on the following files:

       M      subversion/include/private/svn_temp_serializer.h
       M      subversion/include/private/svn_string_private.h
       M      subversion/include/private/svn_adler32.h
       M      subversion/libsvn_fs_fs/temp_serializer.c
       M      subversion/libsvn_fs_fs/temp_serializer.h
       M      subversion/libsvn_subr/hash.c
       M      subversion/libsvn_subr/svn_temp_serializer.c
       M      subversion/libsvn_subr/adler32.c
      D       tools/dist/templates/stable-release-ann.ezt
      D       tools/dist/templates/rc-release-ann.ezt
      M       notes/ra-serf-testing.txt

All these changes were reverted before commit. I suppose they were due
to faulty sync merges from trunk, probably done by myself.
But I don't really know what happened here...

Added:
    subversion/trunk/subversion/libsvn_auth_gpg_agent/
      - copied from r1150766, subversion/branches/gpg-agent-password-store/subversion/libsvn_auth_gpg_agent/
Modified:
    subversion/trunk/   (props changed)
    subversion/trunk/Makefile.in
    subversion/trunk/build.conf
    subversion/trunk/configure.ac
    subversion/trunk/subversion/include/private/svn_auth_private.h
    subversion/trunk/subversion/include/svn_auth.h
    subversion/trunk/subversion/libsvn_subr/auth.c
    subversion/trunk/subversion/libsvn_subr/config_file.c
    subversion/trunk/subversion/libsvn_subr/simple_providers.c

Propchange: subversion/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 25 17:14:15 2011
@@ -11,6 +11,7 @@
 /subversion/branches/fs-rep-sharing:869036-873803
 /subversion/branches/fsfs-pack:873717-874575
 /subversion/branches/gnome-keyring:870558-871410
+/subversion/branches/gpg-agent-password-store:1005036-1150766
 /subversion/branches/http-protocol-v2:874395-876041
 /subversion/branches/in-memory-cache:869829-871452
 /subversion/branches/integrate-cache-item-serialization:1068724-1068739

Modified: subversion/trunk/Makefile.in
URL: http://svn.apache.org/viewvc/subversion/trunk/Makefile.in?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/Makefile.in (original)
+++ subversion/trunk/Makefile.in Mon Jul 25 17:14:15 2011
@@ -47,6 +47,7 @@ SVN_APR_LIBS = @SVN_APR_LIBS@
 SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@
 SVN_APR_MEMCACHE_LIBS = @SVN_APR_MEMCACHE_LIBS@
 SVN_DB_LIBS = @SVN_DB_LIBS@
+SVN_GPG_AGENT_LIBS = @SVN_GPG_AGENT_LIBS@
 SVN_GNOME_KEYRING_LIBS = @SVN_GNOME_KEYRING_LIBS@
 SVN_GSSAPI_LIBS = @SVN_GSSAPI_LIBS@
 SVN_KWALLET_LIBS = @SVN_KWALLET_LIBS@
@@ -66,6 +67,7 @@ fsmod_libdir = @libdir@
 ramod_libdir = @libdir@
 bdb_libdir = @libdir@
 gnome_keyring_libdir = @libdir@
+gpg_agent_libdir = @libdir@
 gssapi_libdir = @libdir@
 kwallet_libdir = @libdir@
 neon_libdir = @libdir@
@@ -235,6 +237,7 @@ INSTALL_FSMOD_LIB = $(INSTALL_LIB)
 INSTALL_RAMOD_LIB = $(INSTALL_LIB)
 INSTALL_APR_MEMCACHE_LIB = $(INSTALL_LIB)
 INSTALL_BDB_LIB = $(INSTALL_LIB)
+INSTALL_GPG_AGENT_LIB = $(INSTALL_LIB)
 INSTALL_GNOME_KEYRING_LIB = $(INSTALL_LIB)
 INSTALL_GSSAPI_LIB = $(INSTALL_LIB)
 INSTALL_KWALLET_LIB = $(INSTALL_LIB)

Modified: subversion/trunk/build.conf
URL: http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Mon Jul 25 17:14:15 2011
@@ -174,6 +174,14 @@ libs = libsvn_client libsvn_ra libsvn_re
 install = bin
 manpages = subversion/svnrdump/svnrdump.1
 
+# Support for GPG Agent
+[libsvn_auth_gpg_agent]]
+description = Subversion GPG Agent library
+type = lib
+install = gpg-agent-lib
+path = subversion/libsvn_auth_gpg_agent
+libs = apr libsvn_subr
+
 # Support for GNOME Keyring
 [libsvn_auth_gnome_keyring]
 description = Subversion GNOME Keyring Library

Modified: subversion/trunk/configure.ac
URL: http://svn.apache.org/viewvc/subversion/trunk/configure.ac?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/configure.ac (original)
+++ subversion/trunk/configure.ac Mon Jul 25 17:14:15 2011
@@ -567,6 +567,25 @@ int main()
   fi
 fi
 
+dnl GPG Agent -------------------
+
+AC_ARG_WITH(gpg_agent,
+AS_HELP_STRING([--without-gpg-agent], 
+               [Disable support for GPG-Agent]),
+               [with_gpg_agent=no], [with_gpg_agent=yes])
+AC_MSG_CHECKING([whether to support GPG-Agent])
+if test "$svn_enable_shared" != "yes"; then
+  AC_MSG_RESULT([no (shared library support is disabled)])
+elif test "$with_gpg_agent" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_DEFINE([SVN_HAVE_GPG_AGENT], [1], 
+            [Is GPG Agent support enabled?])
+else
+  AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(SVN_HAVE_GPG_AGENT)
+
 dnl GNOME Keyring -------------------
 
 AC_ARG_WITH(gnome_keyring,
@@ -801,6 +820,12 @@ if test "$with_gnome_keyring" = "yes"; t
   INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gnome-keyring-lib"
 fi
 
+if test "$with_gpg_agent" = "yes"; then
+  BUILD_RULES="$BUILD_RULES gpg-agent-lib"
+  INSTALL_RULES="`echo $INSTALL_RULES | sed 's/install-lib/install-lib install-gpg-agent-lib/'`"
+  INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gpg-agent-lib"
+fi
+
 if test "$USE_NLS" = "yes"; then
   BUILD_RULES="$BUILD_RULES locale"
   INSTALL_RULES="$INSTALL_RULES install-locale"

Modified: subversion/trunk/subversion/include/private/svn_auth_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_auth_private.h?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_auth_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_auth_private.h Mon Jul 25 17:14:15 2011
@@ -46,6 +46,7 @@ extern "C" {
 #define SVN_AUTH__KEYCHAIN_PASSWORD_TYPE           "keychain"
 #define SVN_AUTH__KWALLET_PASSWORD_TYPE            "kwallet"
 #define SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE      "gnome-keyring"
+#define SVN_AUTH__GPG_AGENT_PASSWORD_TYPE          "gpg-agent"
 
 /* A function that stores in *PASSWORD (potentially after decrypting it)
    the user's password.  It might be obtained directly from CREDS, or

Modified: subversion/trunk/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_auth.h?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_auth.h (original)
+++ subversion/trunk/subversion/include/svn_auth.h Mon Jul 25 17:14:15 2011
@@ -1069,6 +1069,35 @@ void
 svn_auth_get_kwallet_ssl_client_cert_pw_provider(
   svn_auth_provider_object_t **provider,
   apr_pool_t *pool);
+
+
+/**
+ * Get libsvn_auth_gpg_agent version information.
+ *
+ */
+const svn_version_t *
+svn_auth_gpg_agent_version(void);
+
+
+/**
+ * Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_simple_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * This is like svn_client_get_simple_provider(), except that the
+ * password is obtained from gpg_agent, which will keep it in
+ * a memory cache.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * @since New in 1.7
+ * @note This function actually works only on systems with
+ * libsvn_auth_gpg_agent and GNU Privacy Guard installed.
+ */
+void
+svn_auth_get_gpg_agent_simple_provider
+    (svn_auth_provider_object_t **provider,
+     apr_pool_t *pool);
 #endif /* (!DARWIN && !WIN32) || DOXYGEN */
 
 

Modified: subversion/trunk/subversion/libsvn_subr/auth.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/auth.c?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/auth.c (original)
+++ subversion/trunk/subversion/libsvn_subr/auth.c Mon Jul 25 17:14:15 2011
@@ -391,9 +391,11 @@ svn_auth_get_platform_specific_provider
   *provider = NULL;
 
   if (apr_strnatcmp(provider_name, "gnome_keyring") == 0 ||
-      apr_strnatcmp(provider_name, "kwallet") == 0)
+      apr_strnatcmp(provider_name, "kwallet") == 0 ||
+      apr_strnatcmp(provider_name, "gpg_agent") == 0)
     {
-#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET)
+#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET) || \
+defined(SVN_HAVE_GPG_AGENT)
       apr_dso_handle_t *dso;
       apr_dso_handle_sym_t provider_function_symbol, version_function_symbol;
       const char *library_label, *library_name;
@@ -495,15 +497,17 @@ svn_auth_get_platform_specific_client_pr
 
   if (config)
     {
-      svn_config_get(config,
-                     &password_stores_config_option,
-                     SVN_CONFIG_SECTION_AUTH,
-                     SVN_CONFIG_OPTION_PASSWORD_STORES,
-                     "gnome-keyring,kwallet,keychain,windows-cryptoapi");
+      svn_config_get
+        (config,
+         &password_stores_config_option,
+         SVN_CONFIG_SECTION_AUTH,
+         SVN_CONFIG_OPTION_PASSWORD_STORES,
+         "gpg-agent,gnome-keyring,kwallet,keychain,windows-cryptoapi");
     }
   else
     {
-      password_stores_config_option = "gnome-keyring,kwallet,keychain,windows-cryptoapi";
+      password_stores_config_option =
+        "gpg-agent,gnome-keyring,kwallet,keychain,windows-cryptoapi";
     }
 
   *providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t *));
@@ -539,6 +543,20 @@ svn_auth_get_platform_specific_client_pr
           continue;
         }
 
+      /* GPG-AGENT */
+      if (apr_strnatcmp(password_store, "gpg-agent") == 0)
+        {
+          SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+                                                          "gpg_agent",
+                                                          "simple",
+                                                          pool));
+
+          if (provider)
+            APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+          continue;
+        }
+
       /* KWallet */
       if (apr_strnatcmp(password_store, "kwallet") == 0)
         {

Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config_file.c?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config_file.c Mon Jul 25 17:14:15 2011
@@ -956,12 +956,13 @@ svn_config_ensure(const char *config_dir
         "###   kwallet              (Unix-like systems)"                     NL
         "###   keychain             (Mac OS X)"                              NL
         "###   windows-cryptoapi    (Windows)"                               NL
+        "###   gpg-agent            (All platforms)"                         NL
 #ifdef SVN_HAVE_KEYCHAIN_SERVICES
-        "# password-stores = keychain"                                       NL
+        "# password-stores = keychain,gpg-agent"                             NL
 #elif defined(WIN32) && !defined(__MINGW32__)
         "# password-stores = windows-cryptoapi"                              NL
 #else
-        "# password-stores = gnome-keyring,kwallet"                          NL
+        "# password-stores = gpg-agent,gnome-keyring,kwallet"                NL
 #endif
         "### To disable all password stores, use an empty list:"             NL
         "# password-stores ="                                                NL

Modified: subversion/trunk/subversion/libsvn_subr/simple_providers.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/simple_providers.c?rev=1150783&r1=1150782&r2=1150783&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/simple_providers.c (original)
+++ subversion/trunk/subversion/libsvn_subr/simple_providers.c Mon Jul 25 17:14:15 2011
@@ -358,7 +358,8 @@ svn_auth__simple_save_creds_helper(svn_b
            (strcmp(passtype, SVN_AUTH__WINCRYPT_PASSWORD_TYPE) == 0
             || strcmp(passtype, SVN_AUTH__KEYCHAIN_PASSWORD_TYPE) == 0
             || strcmp(passtype, SVN_AUTH__KWALLET_PASSWORD_TYPE) == 0
-            || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0) )
+            || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0
+            || strcmp(passtype, SVN_AUTH__GPG_AGENT_PASSWORD_TYPE) == 0))
         {
           may_save_password = TRUE;
         }



Re: svn commit: r1150783 - in /subversion/trunk: ./ subversion/include/ subversion/include/private/ subversion/libsvn_auth_gpg_agent/ subversion/libsvn_subr/

Posted by Stefan Sperling <st...@elego.de>.
On Tue, Jul 26, 2011 at 05:37:39AM -0400, Greg Stein wrote:
> Is the log message the right place for exposition? Seems like there may be
> something for discussion here.

Yes, I've been discussing it with Paul on IRC.
Starts here: http://colabti.org/irclogger/irclogger_log/svn-dev?date=2011-07-25#l153

The conclusion was:

[17:28] <stsp> then what i'll do is i'll add all these mergeinfo diffs
to trunk,
[17:29] <stsp> and we can revert them again later if we find that one of
them was wrong
[17:29] <pburba> stsp: It may not be necessary
[17:29] <stsp> well a few changes are actually deleting subtree
mergeinfo
[17:29] <pburba> I'd hold off till I figure out what the heck has
happened on that branch.
[17:29] <stsp> maybe that is good (because we no longer need it)?
[17:29] <stsp> ok

Re: svn commit: r1150783 - in /subversion/trunk: ./ subversion/include/ subversion/include/private/ subversion/libsvn_auth_gpg_agent/ subversion/libsvn_subr/

Posted by Greg Stein <gs...@gmail.com>.
Is the log message the right place for exposition? Seems like there may be
something for discussion here.
On Jul 25, 2011 1:14 PM, <st...@apache.org> wrote:
> Author: stsp
> Date: Mon Jul 25 17:14:15 2011
> New Revision: 1150783
>
> URL: http://svn.apache.org/viewvc?rev=1150783&view=rev
> Log:
> Reintegrate the gpg-agent-password-store branch.
> It is now working quite well. Further cleanup can happen on trunk.
>
> The merge was an interesting experience. In addition to the problems
> fixed by r1150760 and r1150762, I ended up with 3 unrelated content
> and 8 unrelated svn:mergeinfo changes on the following files:
>
> M subversion/include/private/svn_temp_serializer.h
> M subversion/include/private/svn_string_private.h
> M subversion/include/private/svn_adler32.h
> M subversion/libsvn_fs_fs/temp_serializer.c
> M subversion/libsvn_fs_fs/temp_serializer.h
> M subversion/libsvn_subr/hash.c
> M subversion/libsvn_subr/svn_temp_serializer.c
> M subversion/libsvn_subr/adler32.c
> D tools/dist/templates/stable-release-ann.ezt
> D tools/dist/templates/rc-release-ann.ezt
> M notes/ra-serf-testing.txt
>
> All these changes were reverted before commit. I suppose they were due
> to faulty sync merges from trunk, probably done by myself.
> But I don't really know what happened here...
>
> Added:
> subversion/trunk/subversion/libsvn_auth_gpg_agent/
> - copied from r1150766,
subversion/branches/gpg-agent-password-store/subversion/libsvn_auth_gpg_agent/
> Modified:
> subversion/trunk/ (props changed)
> subversion/trunk/Makefile.in
> subversion/trunk/build.conf
> subversion/trunk/configure.ac
> subversion/trunk/subversion/include/private/svn_auth_private.h
> subversion/trunk/subversion/include/svn_auth.h
> subversion/trunk/subversion/libsvn_subr/auth.c
> subversion/trunk/subversion/libsvn_subr/config_file.c
> subversion/trunk/subversion/libsvn_subr/simple_providers.c
>
> Propchange: subversion/trunk/
>
------------------------------------------------------------------------------
> --- svn:mergeinfo (original)
> +++ svn:mergeinfo Mon Jul 25 17:14:15 2011
> @@ -11,6 +11,7 @@
> /subversion/branches/fs-rep-sharing:869036-873803
> /subversion/branches/fsfs-pack:873717-874575
> /subversion/branches/gnome-keyring:870558-871410
> +/subversion/branches/gpg-agent-password-store:1005036-1150766
> /subversion/branches/http-protocol-v2:874395-876041
> /subversion/branches/in-memory-cache:869829-871452
> /subversion/branches/integrate-cache-item-serialization:1068724-1068739
>
> Modified: subversion/trunk/Makefile.in
> URL:
http://svn.apache.org/viewvc/subversion/trunk/Makefile.in?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/Makefile.in (original)
> +++ subversion/trunk/Makefile.in Mon Jul 25 17:14:15 2011
> @@ -47,6 +47,7 @@ SVN_APR_LIBS = @SVN_APR_LIBS@
> SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@
> SVN_APR_MEMCACHE_LIBS = @SVN_APR_MEMCACHE_LIBS@
> SVN_DB_LIBS = @SVN_DB_LIBS@
> +SVN_GPG_AGENT_LIBS = @SVN_GPG_AGENT_LIBS@
> SVN_GNOME_KEYRING_LIBS = @SVN_GNOME_KEYRING_LIBS@
> SVN_GSSAPI_LIBS = @SVN_GSSAPI_LIBS@
> SVN_KWALLET_LIBS = @SVN_KWALLET_LIBS@
> @@ -66,6 +67,7 @@ fsmod_libdir = @libdir@
> ramod_libdir = @libdir@
> bdb_libdir = @libdir@
> gnome_keyring_libdir = @libdir@
> +gpg_agent_libdir = @libdir@
> gssapi_libdir = @libdir@
> kwallet_libdir = @libdir@
> neon_libdir = @libdir@
> @@ -235,6 +237,7 @@ INSTALL_FSMOD_LIB = $(INSTALL_LIB)
> INSTALL_RAMOD_LIB = $(INSTALL_LIB)
> INSTALL_APR_MEMCACHE_LIB = $(INSTALL_LIB)
> INSTALL_BDB_LIB = $(INSTALL_LIB)
> +INSTALL_GPG_AGENT_LIB = $(INSTALL_LIB)
> INSTALL_GNOME_KEYRING_LIB = $(INSTALL_LIB)
> INSTALL_GSSAPI_LIB = $(INSTALL_LIB)
> INSTALL_KWALLET_LIB = $(INSTALL_LIB)
>
> Modified: subversion/trunk/build.conf
> URL:
http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/build.conf (original)
> +++ subversion/trunk/build.conf Mon Jul 25 17:14:15 2011
> @@ -174,6 +174,14 @@ libs = libsvn_client libsvn_ra libsvn_re
> install = bin
> manpages = subversion/svnrdump/svnrdump.1
>
> +# Support for GPG Agent
> +[libsvn_auth_gpg_agent]]
> +description = Subversion GPG Agent library
> +type = lib
> +install = gpg-agent-lib
> +path = subversion/libsvn_auth_gpg_agent
> +libs = apr libsvn_subr
> +
> # Support for GNOME Keyring
> [libsvn_auth_gnome_keyring]
> description = Subversion GNOME Keyring Library
>
> Modified: subversion/trunk/configure.ac
> URL:
http://svn.apache.org/viewvc/subversion/trunk/configure.ac?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/configure.ac (original)
> +++ subversion/trunk/configure.ac Mon Jul 25 17:14:15 2011
> @@ -567,6 +567,25 @@ int main()
> fi
> fi
>
> +dnl GPG Agent -------------------
> +
> +AC_ARG_WITH(gpg_agent,
> +AS_HELP_STRING([--without-gpg-agent],
> + [Disable support for GPG-Agent]),
> + [with_gpg_agent=no], [with_gpg_agent=yes])
> +AC_MSG_CHECKING([whether to support GPG-Agent])
> +if test "$svn_enable_shared" != "yes"; then
> + AC_MSG_RESULT([no (shared library support is disabled)])
> +elif test "$with_gpg_agent" = "yes"; then
> + AC_MSG_RESULT([yes])
> + AC_DEFINE([SVN_HAVE_GPG_AGENT], [1],
> + [Is GPG Agent support enabled?])
> +else
> + AC_MSG_RESULT([no])
> +fi
> +
> +AC_SUBST(SVN_HAVE_GPG_AGENT)
> +
> dnl GNOME Keyring -------------------
>
> AC_ARG_WITH(gnome_keyring,
> @@ -801,6 +820,12 @@ if test "$with_gnome_keyring" = "yes"; t
> INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gnome-keyring-lib"
> fi
>
> +if test "$with_gpg_agent" = "yes"; then
> + BUILD_RULES="$BUILD_RULES gpg-agent-lib"
> + INSTALL_RULES="`echo $INSTALL_RULES | sed 's/install-lib/install-lib
install-gpg-agent-lib/'`"
> + INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gpg-agent-lib"
> +fi
> +
> if test "$USE_NLS" = "yes"; then
> BUILD_RULES="$BUILD_RULES locale"
> INSTALL_RULES="$INSTALL_RULES install-locale"
>
> Modified: subversion/trunk/subversion/include/private/svn_auth_private.h
> URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_auth_private.h?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/subversion/include/private/svn_auth_private.h
(original)
> +++ subversion/trunk/subversion/include/private/svn_auth_private.h Mon Jul
25 17:14:15 2011
> @@ -46,6 +46,7 @@ extern "C" {
> #define SVN_AUTH__KEYCHAIN_PASSWORD_TYPE "keychain"
> #define SVN_AUTH__KWALLET_PASSWORD_TYPE "kwallet"
> #define SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE "gnome-keyring"
> +#define SVN_AUTH__GPG_AGENT_PASSWORD_TYPE "gpg-agent"
>
> /* A function that stores in *PASSWORD (potentially after decrypting it)
> the user's password. It might be obtained directly from CREDS, or
>
> Modified: subversion/trunk/subversion/include/svn_auth.h
> URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_auth.h?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/subversion/include/svn_auth.h (original)
> +++ subversion/trunk/subversion/include/svn_auth.h Mon Jul 25 17:14:15
2011
> @@ -1069,6 +1069,35 @@ void
> svn_auth_get_kwallet_ssl_client_cert_pw_provider(
> svn_auth_provider_object_t **provider,
> apr_pool_t *pool);
> +
> +
> +/**
> + * Get libsvn_auth_gpg_agent version information.
> + *
> + */
> +const svn_version_t *
> +svn_auth_gpg_agent_version(void);
> +
> +
> +/**
> + * Set @a *provider to an authentication provider of type @c
> + * svn_auth_cred_simple_t that gets/sets information from the user's
> + * ~/.subversion configuration directory.
> + *
> + * This is like svn_client_get_simple_provider(), except that the
> + * password is obtained from gpg_agent, which will keep it in
> + * a memory cache.
> + *
> + * Allocate @a *provider in @a pool.
> + *
> + * @since New in 1.7
> + * @note This function actually works only on systems with
> + * libsvn_auth_gpg_agent and GNU Privacy Guard installed.
> + */
> +void
> +svn_auth_get_gpg_agent_simple_provider
> + (svn_auth_provider_object_t **provider,
> + apr_pool_t *pool);
> #endif /* (!DARWIN && !WIN32) || DOXYGEN */
>
>
>
> Modified: subversion/trunk/subversion/libsvn_subr/auth.c
> URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/auth.c?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/subversion/libsvn_subr/auth.c (original)
> +++ subversion/trunk/subversion/libsvn_subr/auth.c Mon Jul 25 17:14:15
2011
> @@ -391,9 +391,11 @@ svn_auth_get_platform_specific_provider
> *provider = NULL;
>
> if (apr_strnatcmp(provider_name, "gnome_keyring") == 0 ||
> - apr_strnatcmp(provider_name, "kwallet") == 0)
> + apr_strnatcmp(provider_name, "kwallet") == 0 ||
> + apr_strnatcmp(provider_name, "gpg_agent") == 0)
> {
> -#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET)
> +#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET) || \
> +defined(SVN_HAVE_GPG_AGENT)
> apr_dso_handle_t *dso;
> apr_dso_handle_sym_t provider_function_symbol, version_function_symbol;
> const char *library_label, *library_name;
> @@ -495,15 +497,17 @@ svn_auth_get_platform_specific_client_pr
>
> if (config)
> {
> - svn_config_get(config,
> - &password_stores_config_option,
> - SVN_CONFIG_SECTION_AUTH,
> - SVN_CONFIG_OPTION_PASSWORD_STORES,
> - "gnome-keyring,kwallet,keychain,windows-cryptoapi");
> + svn_config_get
> + (config,
> + &password_stores_config_option,
> + SVN_CONFIG_SECTION_AUTH,
> + SVN_CONFIG_OPTION_PASSWORD_STORES,
> + "gpg-agent,gnome-keyring,kwallet,keychain,windows-cryptoapi");
> }
> else
> {
> - password_stores_config_option =
"gnome-keyring,kwallet,keychain,windows-cryptoapi";
> + password_stores_config_option =
> + "gpg-agent,gnome-keyring,kwallet,keychain,windows-cryptoapi";
> }
>
> *providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t
*));
> @@ -539,6 +543,20 @@ svn_auth_get_platform_specific_client_pr
> continue;
> }
>
> + /* GPG-AGENT */
> + if (apr_strnatcmp(password_store, "gpg-agent") == 0)
> + {
> + SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
> + "gpg_agent",
> + "simple",
> + pool));
> +
> + if (provider)
> + APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
> +
> + continue;
> + }
> +
> /* KWallet */
> if (apr_strnatcmp(password_store, "kwallet") == 0)
> {
>
> Modified: subversion/trunk/subversion/libsvn_subr/config_file.c
> URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config_file.c?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/subversion/libsvn_subr/config_file.c (original)
> +++ subversion/trunk/subversion/libsvn_subr/config_file.c Mon Jul 25
17:14:15 2011
> @@ -956,12 +956,13 @@ svn_config_ensure(const char *config_dir
> "### kwallet (Unix-like systems)" NL
> "### keychain (Mac OS X)" NL
> "### windows-cryptoapi (Windows)" NL
> + "### gpg-agent (All platforms)" NL
> #ifdef SVN_HAVE_KEYCHAIN_SERVICES
> - "# password-stores = keychain" NL
> + "# password-stores = keychain,gpg-agent" NL
> #elif defined(WIN32) && !defined(__MINGW32__)
> "# password-stores = windows-cryptoapi" NL
> #else
> - "# password-stores = gnome-keyring,kwallet" NL
> + "# password-stores = gpg-agent,gnome-keyring,kwallet" NL
> #endif
> "### To disable all password stores, use an empty list:" NL
> "# password-stores =" NL
>
> Modified: subversion/trunk/subversion/libsvn_subr/simple_providers.c
> URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/simple_providers.c?rev=1150783&r1=1150782&r2=1150783&view=diff
>
==============================================================================
> --- subversion/trunk/subversion/libsvn_subr/simple_providers.c (original)
> +++ subversion/trunk/subversion/libsvn_subr/simple_providers.c Mon Jul 25
17:14:15 2011
> @@ -358,7 +358,8 @@ svn_auth__simple_save_creds_helper(svn_b
> (strcmp(passtype, SVN_AUTH__WINCRYPT_PASSWORD_TYPE) == 0
> || strcmp(passtype, SVN_AUTH__KEYCHAIN_PASSWORD_TYPE) == 0
> || strcmp(passtype, SVN_AUTH__KWALLET_PASSWORD_TYPE) == 0
> - || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0) )
> + || strcmp(passtype, SVN_AUTH__GNOME_KEYRING_PASSWORD_TYPE) == 0
> + || strcmp(passtype, SVN_AUTH__GPG_AGENT_PASSWORD_TYPE) == 0))
> {
> may_save_password = TRUE;
> }
>
>