Author: philip Date: Wed Jun 7 22:31:02 2017 New Revision: 1798004 URL: http://svn.apache.org/viewvc?rev=1798004&view=rev Log: Use libsecret to implement the GNOME Keyring provider by default instead of libgnome-keyring. The GNOME project have deprecated libgnome-keyring and libsecret is the preferred replacement. The old implementation using libgnome-keyring can still be chosen at configure time. Both implementations read and write passwords that can be used by the other implementation.
The configure option '--with-gnome-keyring' now controls the new implementation while the option '--with-old-gnome-keyring' controls the previous implementation. * build/ac-macros/libsecret.m4: New, provides --with-gnome-keyring. * configure.ac: Change --with-gnome-keyring to --with-old-gnome-keyring and disable by default. * aclocal.m4: Include libsecret.m4. * subversion/libsvn_auth_gnome_keyring/gnome_keyring.c: Add new libsecret implementation conditional on SVN_HAVE_LIBSECRET, make old code conditional on SVN_HAVE_GNOME_KEYRING, * subversion/libsvn_subr/auth.c (svn_auth_get_platform_specific_provider): Make already conditional code depend on SVN_HAVE_LIBSECRET. * subversion/include/svn_auth.h (SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC, SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON): Deprecate. * subversion/include/private/svn_cmdline_private.h (svn_cmdline__auth_gnome_keyring_unlock_prompt): Deprecate. * subversion/libsvn_subr/prompt.c (svn_cmdline__auth_gnome_keyring_unlock_prompt): Make conditional. * subversion/tests/libsvn_subr/auth-test.c (test_platform_specific_auth_providers): Make already conditional code depend on SVN_HAVE_LIBSECRET. Added: subversion/trunk/build/ac-macros/libsecret.m4 Modified: subversion/trunk/aclocal.m4 subversion/trunk/configure.ac subversion/trunk/subversion/include/private/svn_cmdline_private.h subversion/trunk/subversion/include/svn_auth.h subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c subversion/trunk/subversion/libsvn_subr/auth.c subversion/trunk/subversion/libsvn_subr/prompt.c subversion/trunk/subversion/tests/libsvn_subr/auth-test.c Modified: subversion/trunk/aclocal.m4 URL: http://svn.apache.org/viewvc/subversion/trunk/aclocal.m4?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/aclocal.m4 (original) +++ subversion/trunk/aclocal.m4 Wed Jun 7 22:31:02 2017 @@ -45,6 +45,7 @@ sinclude(build/ac-macros/sqlite.m4) sinclude(build/ac-macros/swig.m4) sinclude(build/ac-macros/zlib.m4) sinclude(build/ac-macros/kwallet.m4) +sinclude(build/ac-macros/libsecret.m4) sinclude(build/ac-macros/macosx.m4) # Include the libtool macros Added: subversion/trunk/build/ac-macros/libsecret.m4 URL: http://svn.apache.org/viewvc/subversion/trunk/build/ac-macros/libsecret.m4?rev=1798004&view=auto ============================================================================== --- subversion/trunk/build/ac-macros/libsecret.m4 (added) +++ subversion/trunk/build/ac-macros/libsecret.m4 Wed Jun 7 22:31:02 2017 @@ -0,0 +1,93 @@ +dnl =================================================================== +dnl Licensed to the Apache Software Foundation (ASF) under one +dnl or more contributor license agreements. See the NOTICE file +dnl distributed with this work for additional information +dnl regarding copyright ownership. The ASF licenses this file +dnl to you under the Apache License, Version 2.0 (the +dnl "License"); you may not use this file except in compliance +dnl with the License. You may obtain a copy of the License at +dnl +dnl http://www.apache.org/licenses/LICENSE-2.0 +dnl +dnl Unless required by applicable law or agreed to in writing, +dnl software distributed under the License is distributed on an +dnl "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +dnl KIND, either express or implied. See the License for the +dnl specific language governing permissions and limitations +dnl under the License. +dnl =================================================================== +dnl +dnl SVN_LIB_SECRET +dnl +dnl Check configure options and assign variables related to libsecret support + +AC_DEFUN(SVN_LIB_SECRET, +[ + AC_ARG_WITH(gnome_keyring, + AS_HELP_STRING([--with-gnome-keyring], + [Enable GNOME Keyring for auth credentials (enabled by default if found)]), + [with_gnome_keyring="$withval"], + [with_gnome_keyring=auto]) + + found_gnome_keyring="no" + AC_MSG_CHECKING([whether to look for GNOME Keyring]) + if test "$found_old_gnome_keyring" = "yes" && test "$with_gnome_keyring" = "auto"; then + with_gnome_keyring="no" + fi + if test "$with_gnome_keyring" != "no"; then + AC_MSG_RESULT([yes]) + case "$host" in + *-*-darwin*) + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([--with-gnome-keyring is not supported on Mac OS X.]) + fi + ;; + *) + AC_MSG_CHECKING([for GNOME Keyring]) + if test "$found_old_gnome_keyring" = "no"; then + if test "$svn_enable_shared" = "yes"; then + if test "$APR_HAS_DSO" = "yes"; then + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists libsecret-1; then + AC_MSG_RESULT([yes]) + AC_DEFINE([SVN_HAVE_LIBSECRET], [1], + [Is libsecret support enabled?]) + SVN_GNOME_KEYRING_INCLUDES="`$PKG_CONFIG --cflags libsecret-1`" + SVN_GNOME_KEYRING_LIBS="`$PKG_CONFIG --libs libsecret-1`" + found_gnome_keyring="yes" + else + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([cannot find libsecret]) + fi + fi + else + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([cannot find pkg-config]) + fi + fi + else + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([APR does not support DSOs]) + fi + fi + else + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([--with-gnome-keyring conflicts with --disable-shared]) + fi + fi + else + if test "$with_gnome_keyring" = "yes"; then + AC_MSG_ERROR([--with-gnome-keyring conflicts with --with-old-gnome-keyring]) + fi + fi + if test "$found_gnome_keyring" = "no"; then + AC_MSG_RESULT([no]) + fi + ;; + esac + else + AC_MSG_RESULT([no]) + fi + AC_SUBST(SVN_GNOME_KEYRING_INCLUDES) + AC_SUBST(SVN_GNOME_KEYRING_LIBS) +]) Modified: subversion/trunk/configure.ac URL: http://svn.apache.org/viewvc/subversion/trunk/configure.ac?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/configure.ac (original) +++ subversion/trunk/configure.ac Wed Jun 7 22:31:02 2017 @@ -555,22 +555,22 @@ AC_SUBST(SVN_HAVE_GPG_AGENT) dnl GNOME Keyring ------------------- -AC_ARG_WITH(gnome_keyring, - AS_HELP_STRING([--with-gnome-keyring], - [Enable use of GNOME Keyring for auth credentials (enabled by default if found)]), - [with_gnome_keyring="$withval"], - [with_gnome_keyring=auto]) - -found_gnome_keyring=no -AC_MSG_CHECKING([whether to look for GNOME Keyring]) -if test "$with_gnome_keyring" != "no"; then +AC_ARG_WITH(old_gnome_keyring, + AS_HELP_STRING([--with-old-gnome-keyring], + [Enable old GNOME Keyring for auth credentials (prefer --with-gnome-keyring)]), + [with_old_gnome_keyring="$withval"], + [with_old_gnome_keyring=no]) + +found_old_gnome_keyring=no +AC_MSG_CHECKING([whether to look for old GNOME Keyring]) +if test "$with_old_gnome_keyring" != "no"; then AC_MSG_RESULT([yes]) case "$host" in *-*-darwin*) - if test "$with_gnome_keyring" = "yes"; then - AC_MSG_ERROR([--with-gnome-keyring is not supported on Mac OS X.]) + if test "$with_old_gnome_keyring" = "yes"; then + AC_MSG_ERROR([--with-old-gnome-keyring is not supported on Mac OS X.]) else - with_gnome_keyring=no + with_old_gnome_keyring=no fi ;; *) @@ -583,9 +583,9 @@ if test "$with_gnome_keyring" != "no"; t old_CPPFLAGS="$CPPFLAGS" SVN_GNOME_KEYRING_INCLUDES="`$PKG_CONFIG --cflags glib-2.0 gnome-keyring-1`" CPPFLAGS="$CPPFLAGS $SVN_GNOME_KEYRING_INCLUDES" - AC_CHECK_HEADER(gnome-keyring.h, found_gnome_keyring=yes, found_gnome_keyring=no) + AC_CHECK_HEADER(gnome-keyring.h, found_old_gnome_keyring=yes, found_old_gnome_keyring=no) AC_MSG_CHECKING([for GNOME Keyring]) - if test "$found_gnome_keyring" = "yes"; then + if test "$found_old_gnome_keyring" = "yes"; then AC_MSG_RESULT([yes]) AC_DEFINE([SVN_HAVE_GNOME_KEYRING], [1], [Is GNOME Keyring support enabled?]) @@ -593,37 +593,37 @@ if test "$with_gnome_keyring" != "no"; t SVN_GNOME_KEYRING_LIBS="`$PKG_CONFIG --libs glib-2.0 gnome-keyring-1`" else AC_MSG_RESULT([no]) - if test "$with_gnome_keyring" = "yes"; then + if test "$with_old_gnome_keyring" = "yes"; then AC_MSG_ERROR([cannot find GNOME Keyring]) fi fi else AC_MSG_RESULT([no]) - if test "$with_gnome_keyring" = "yes"; then + if test "$with_old_gnome_keyring" = "yes"; then AC_MSG_ERROR([cannot find GLib and GNOME Keyring .pc files.]) else - with_gnome_keyring=no + with_old_gnome_keyring=no fi fi else - if test "$with_gnome_keyring" = "yes"; then + if test "$with_old_gnome_keyring" = "yes"; then AC_MSG_ERROR([cannot find pkg-config. GNOME Keyring requires this.]) else - with_gnome_keyring=no + with_old_gnome_keyring=no fi fi else - if test "$with_gnome_keyring" = "yes"; then + if test "$with_old_gnome_keyring" = "yes"; then AC_MSG_ERROR([APR does not have support for DSOs. GNOME Keyring requires this.]) else - with_gnome_keyring=no + with_old_gnome_keyring=no fi fi else - if test "$with_gnome_keyring" = "yes"; then - AC_MSG_ERROR([--with-gnome-keyring conflicts with --disable-shared]) + if test "$with_old_gnome_keyring" = "yes"; then + AC_MSG_ERROR([--with-old-gnome-keyring conflicts with --disable-shared]) else - with_gnome_keyring=no + with_old_gnome_keyring=no fi fi ;; @@ -634,6 +634,9 @@ fi AC_SUBST(SVN_GNOME_KEYRING_INCLUDES) AC_SUBST(SVN_GNOME_KEYRING_LIBS) +dnl LibSecret ------------------- +SVN_LIB_SECRET + dnl Googlemock ----------------- AC_ARG_ENABLE([googlemock], AS_HELP_STRING([--disable-googlemock], @@ -901,7 +904,7 @@ if test "$svn_lib_kwallet" = "yes"; then INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-kwallet-lib" fi -if test "$found_gnome_keyring" = "yes"; then +if test "$found_old_gnome_keyring" = "yes" || test "$found_gnome_keyring" = "yes"; then BUILD_RULES="$BUILD_RULES gnome-keyring-lib" INSTALL_RULES="`echo $INSTALL_RULES | $SED 's/install-lib/install-lib install-gnome-keyring-lib/'`" INSTALL_STATIC_RULES="$INSTALL_STATIC_RULES install-gnome-keyring-lib" Modified: subversion/trunk/subversion/include/private/svn_cmdline_private.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_cmdline_private.h?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/include/private/svn_cmdline_private.h (original) +++ subversion/trunk/subversion/include/private/svn_cmdline_private.h Wed Jun 7 22:31:02 2017 @@ -63,6 +63,7 @@ svn_cmdline__print_xml_prop(svn_stringbu * Expects a @c svn_cmdline_prompt_baton2_t to be passed as @a baton. * * @since New in 1.6. + * @deprecated Only used by old libgome-keyring implementation. */ svn_error_t * svn_cmdline__auth_gnome_keyring_unlock_prompt(char **keyring_password, Modified: subversion/trunk/subversion/include/svn_auth.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_auth.h?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/include/svn_auth.h (original) +++ subversion/trunk/subversion/include/svn_auth.h Wed Jun 7 22:31:02 2017 @@ -1012,11 +1012,13 @@ typedef svn_error_t *(*svn_auth_gnome_ke /** @brief The pointer to function which prompts user for GNOME Keyring * password. - * The type of this pointer should be svn_auth_gnome_keyring_unlock_prompt_func_t. */ + * The type of this pointer should be svn_auth_gnome_keyring_unlock_prompt_func_t. + * @deprecated Only used by old libgnome-keyring implementation. */ #define SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC "gnome-keyring-unlock-prompt-func" /** @brief The baton which is passed to - * @c *SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC. */ + * @c *SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC. + * @deprecated Only used by old libgnome-keyring implementation. */ #define SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_BATON "gnome-keyring-unlock-prompt-baton" #if (!defined(DARWIN) && !defined(WIN32)) || defined(DOXYGEN) @@ -1037,7 +1039,7 @@ svn_auth_gnome_keyring_version(void); * This is like svn_client_get_simple_provider(), except that the * password is stored in GNOME Keyring. * - * If the GNOME Keyring is locked the provider calls + * If the GNOME Keyring is locked the old libgnome-keyring provider calls * @c *SVN_AUTH_PARAM_GNOME_KEYRING_UNLOCK_PROMPT_FUNC in order to unlock * the keyring. * Modified: subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c (original) +++ subversion/trunk/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c Wed Jun 7 22:31:02 2017 @@ -23,31 +23,169 @@ /* ==================================================================== */ - /*** Includes. ***/ - #include <apr_pools.h> #include <apr_strings.h> -#include <glib.h> -#include <gnome-keyring.h> - #include "svn_auth.h" -#include "svn_config.h" -#include "svn_error.h" #include "svn_hash.h" -#include "svn_pools.h" - +#include "svn_version.h" #include "private/svn_auth_private.h" - #include "svn_private_config.h" +#ifdef SVN_HAVE_LIBSECRET - -/*-----------------------------------------------------------------------*/ -/* GNOME Keyring simple provider, puts passwords in GNOME Keyring */ -/*-----------------------------------------------------------------------*/ +#include <libsecret/secret.h> + +/* Return TRUE if the default collection is available and FALSE + otherwise. In interactive mode the collection only has to exist to + be available, it can be locked or unlocked. The default collection + will be created if necessary. + + In non-interactive mode the collection is only available if it + already exists and is unlocked. Such an available collection can + be used without prompting. Strictly this is racy: nothing ensures + the collection remains unlocked. A similar issue affects the + KWallet and original GNOME Keyring providers. + + As a non-racy alternative one could override prompt_async in the + _SecretServiceClass vtable, the get/set would still fail but there + would be no prompt and no race. This "works" but it is not clear + to me whether it is legitimate since the SecretService is a + singleton and the effect would be application-wide. + */ +static svn_boolean_t +available_collection(svn_boolean_t non_interactive, + apr_pool_t *pool) +{ + GError *gerror = NULL; + SecretService *service = NULL; + SecretCollection *collection = NULL; + + service = secret_service_get_sync(SECRET_SERVICE_NONE, NULL, &gerror); + if (gerror || !service) + goto error_return; + + collection = secret_collection_for_alias_sync(service, + SECRET_COLLECTION_DEFAULT, + SECRET_COLLECTION_NONE, + NULL, &gerror); + if (gerror) + goto error_return; + + if (!collection) + { + if (non_interactive) + goto error_return; + + /* "Default" is the label used by the old libgnome-keyring. */ + collection = secret_collection_create_sync(service, "Default", + SECRET_COLLECTION_DEFAULT, + 0, NULL, &gerror); + if (gerror || !collection) + goto error_return; + } + + if (non_interactive && secret_collection_get_locked(collection)) + goto error_return; + + g_object_unref(collection); + g_object_unref(service); + + return TRUE; + + error_return: + if (gerror) + g_error_free(gerror); + if (collection) + g_object_unref(collection); + if (service) + g_object_unref(service); + return FALSE; +} + +/* Implementation of svn_auth__password_get_t that retrieves the password + using libsecret. */ +static svn_error_t * +password_get_gnome_keyring(svn_boolean_t *done, + const char **password, + apr_hash_t *creds, + const char *realmstring, + const char *username, + apr_hash_t *parameters, + svn_boolean_t non_interactive, + apr_pool_t *pool) +{ + GError *gerror = NULL; + gchar *gpassword; + + if (!available_collection(non_interactive, pool)) + return SVN_NO_ERROR; + + gpassword = secret_password_lookup_sync(SECRET_SCHEMA_COMPAT_NETWORK, NULL, + &gerror, + "domain", realmstring, + "user", username, + NULL); + if (gerror) + { + g_error_free(gerror); + } + else if (gpassword) + { + *password = apr_pstrdup(pool, gpassword); + g_free(gpassword); + *done = TRUE; + } + + return SVN_NO_ERROR; +} + +/* Implementation of svn_auth__password_set_t that stores the password + using libsecret. */ +static svn_error_t * +password_set_gnome_keyring(svn_boolean_t *done, + apr_hash_t *creds, + const char *realmstring, + const char *username, + const char *password, + apr_hash_t *parameters, + svn_boolean_t non_interactive, + apr_pool_t *pool) +{ + GError *gerror = NULL; + gboolean gstatus; + + if (!available_collection(non_interactive, pool)) + return SVN_NO_ERROR; + + /* "network password" is the label used by the old libgnome-keyring. */ + gstatus = secret_password_store_sync(SECRET_SCHEMA_COMPAT_NETWORK, + SECRET_COLLECTION_DEFAULT, + "network password", + password, + NULL, &gerror, + "domain", realmstring, + "user", username, + NULL); + if (gerror) + { + g_error_free(gerror); + } + else if (gstatus) + { + *done = TRUE; + } + + return SVN_NO_ERROR; +} + +#endif /* SVN_HAVE_LIBSECRET */ +#ifdef SVN_HAVE_GNOME_KEYRING + +#include <glib.h> +#include <gnome-keyring.h> /* Returns the default keyring name, allocated in RESULT_POOL. */ static char* @@ -252,6 +390,41 @@ password_set_gnome_keyring(svn_boolean_t return SVN_NO_ERROR; } +#if GLIB_CHECK_VERSION(2,6,0) +static void +log_noop(const gchar *log_domain, GLogLevelFlags log_level, + const gchar *message, gpointer user_data) +{ + /* do nothing */ +} +#endif + +static void +init_gnome_keyring(void) +{ + const char *application_name = NULL; + application_name = g_get_application_name(); + if (!application_name) + g_set_application_name("Subversion"); + + /* Ideally we call g_log_set_handler() with a log_domain specific to + libgnome-keyring. Unfortunately, at least as of gnome-keyring + 2.22.3, it doesn't have its own log_domain. As a result, we + suppress stderr spam for not only libgnome-keyring, but for + anything else the app is linked to that uses glib logging and + doesn't specify a log_domain. */ +#if GLIB_CHECK_VERSION(2,6,0) + g_log_set_default_handler(log_noop, NULL); +#endif +} + +#endif /* SVN_HAVE_GNOME_KEYRING */ + + +/*-----------------------------------------------------------------------*/ +/* GNOME Keyring simple provider, puts passwords in GNOME Keyring */ +/*-----------------------------------------------------------------------*/ + /* Get cached encrypted credentials from the simple provider's cache. */ static svn_error_t * simple_gnome_keyring_first_creds(void **credentials, @@ -286,34 +459,6 @@ simple_gnome_keyring_save_creds(svn_bool pool); } -#if GLIB_CHECK_VERSION(2,6,0) -static void -log_noop(const gchar *log_domain, GLogLevelFlags log_level, - const gchar *message, gpointer user_data) -{ - /* do nothing */ -} -#endif - -static void -init_gnome_keyring(void) -{ - const char *application_name = NULL; - application_name = g_get_application_name(); - if (!application_name) - g_set_application_name("Subversion"); - - /* Ideally we call g_log_set_handler() with a log_domain specific to - libgnome-keyring. Unfortunately, at least as of gnome-keyring - 2.22.3, it doesn't have its own log_domain. As a result, we - suppress stderr spam for not only libgnome-keyring, but for - anything else the app is linked to that uses glib logging and - doesn't specify a log_domain. */ -#if GLIB_CHECK_VERSION(2,6,0) - g_log_set_default_handler(log_noop, NULL); -#endif -} - static const svn_auth_provider_t gnome_keyring_simple_provider = { SVN_AUTH_CRED_SIMPLE, simple_gnome_keyring_first_creds, @@ -332,9 +477,12 @@ svn_auth_get_gnome_keyring_simple_provid po->vtable = &gnome_keyring_simple_provider; *provider = po; +#ifdef SVN_HAVE_GNOME_KEYRING init_gnome_keyring(); +#endif } + /*-----------------------------------------------------------------------*/ /* GNOME Keyring SSL client certificate passphrase provider, */ @@ -391,5 +539,7 @@ svn_auth_get_gnome_keyring_ssl_client_ce po->vtable = &gnome_keyring_ssl_client_cert_pw_provider; *provider = po; +#ifdef SVN_HAVE_GNOME_KEYRING init_gnome_keyring(); +#endif } Modified: subversion/trunk/subversion/libsvn_subr/auth.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/auth.c?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/auth.c (original) +++ subversion/trunk/subversion/libsvn_subr/auth.c Wed Jun 7 22:31:02 2017 @@ -502,7 +502,7 @@ svn_auth_get_platform_specific_provider( if (apr_strnatcmp(provider_name, "gnome_keyring") == 0 || apr_strnatcmp(provider_name, "kwallet") == 0) { -#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET) +#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET) || defined (SVN_HAVE_LIBSECRET) apr_dso_handle_t *dso; apr_dso_handle_sym_t provider_function_symbol, version_function_symbol; const char *library_label, *library_name; Modified: subversion/trunk/subversion/libsvn_subr/prompt.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/prompt.c?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/prompt.c (original) +++ subversion/trunk/subversion/libsvn_subr/prompt.c Wed Jun 7 22:31:02 2017 @@ -922,6 +922,7 @@ svn_cmdline_prompt_user2(const char **re (svn_cmdline_prompt_baton2_t *)baton, pool); } +#if SVN_HAVE_GNOME_KEYRING /* This implements 'svn_auth_gnome_keyring_unlock_prompt_func_t'. */ svn_error_t * svn_cmdline__auth_gnome_keyring_unlock_prompt(char **keyring_password, @@ -939,3 +940,4 @@ svn_cmdline__auth_gnome_keyring_unlock_p *keyring_password = apr_pstrdup(pool, password); return SVN_NO_ERROR; } +#endif Modified: subversion/trunk/subversion/tests/libsvn_subr/auth-test.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/auth-test.c?rev=1798004&r1=1798003&r2=1798004&view=diff ============================================================================== --- subversion/trunk/subversion/tests/libsvn_subr/auth-test.c (original) +++ subversion/trunk/subversion/tests/libsvn_subr/auth-test.c Wed Jun 7 22:31:02 2017 @@ -50,7 +50,7 @@ test_platform_specific_auth_providers(ap SVN_ERR(svn_auth_get_platform_specific_client_providers(&providers, NULL, pool)); -#ifdef SVN_HAVE_GNOME_KEYRING +#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_LIBSECRET) number_of_providers += 2; #endif #ifdef SVN_HAVE_KWALLET @@ -145,7 +145,7 @@ test_platform_specific_auth_providers(ap #endif /* Test GNOME Keyring auth providers */ -#ifdef SVN_HAVE_GNOME_KEYRING +#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_LIBSECRET) SVN_ERR(svn_auth_get_platform_specific_provider(&provider, "gnome_keyring", "simple", pool));