Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_subr/auth.c view on Meta::CPAN
if (apr_strnatcmp(provider_name, "gnome_keyring") == 0 ||
apr_strnatcmp(provider_name, "kwallet") == 0)
{
#if defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET)
apr_dso_handle_t *dso;
apr_dso_handle_sym_t provider_function_symbol, version_function_symbol;
const char *library_label, *library_name;
const char *provider_function_name, *version_function_name;
library_name = apr_psprintf(pool,
"libsvn_auth_%s-%d.so.%d",
provider_name,
SVN_VER_MAJOR, SVN_SOVERSION);
library_label = apr_psprintf(pool, "svn_%s", provider_name);
provider_function_name = apr_psprintf(pool,
"svn_auth_get_%s_%s_provider",
provider_name, provider_type);
version_function_name = apr_psprintf(pool,
"svn_auth_%s_version",
provider_name);
SVN_ERR(svn_dso_load(&dso, library_name));
if (dso)
{
if (apr_dso_sym(&version_function_symbol,
dso,
version_function_name) == 0)
{
svn_version_func_t version_function
= version_function_symbol;
svn_version_checklist_t check_list[2];
check_list[0].label = library_label;
check_list[0].version_query = version_function;
check_list[1].label = NULL;
check_list[1].version_query = NULL;
SVN_ERR(svn_ver_check_list2(svn_subr_version(), check_list,
svn_ver_equal));
}
if (apr_dso_sym(&provider_function_symbol,
dso,
provider_function_name) == 0)
{
if (strcmp(provider_type, "simple") == 0)
{
svn_auth_simple_provider_func_t provider_function
= provider_function_symbol;
provider_function(provider, pool);
}
else if (strcmp(provider_type, "ssl_client_cert_pw") == 0)
{
svn_auth_ssl_client_cert_pw_provider_func_t provider_function
= provider_function_symbol;
provider_function(provider, pool);
}
}
}
#endif
}
else
{
#if defined(SVN_HAVE_GPG_AGENT)
if (strcmp(provider_name, "gpg_agent") == 0 &&
strcmp(provider_type, "simple") == 0)
{
svn_auth_get_gpg_agent_simple_provider(provider, pool);
}
#endif
#ifdef SVN_HAVE_KEYCHAIN_SERVICES
if (strcmp(provider_name, "keychain") == 0 &&
strcmp(provider_type, "simple") == 0)
{
svn_auth_get_keychain_simple_provider(provider, pool);
}
else if (strcmp(provider_name, "keychain") == 0 &&
strcmp(provider_type, "ssl_client_cert_pw") == 0)
{
svn_auth_get_keychain_ssl_client_cert_pw_provider(provider, pool);
}
#endif
#if defined(WIN32) && !defined(__MINGW32__)
if (strcmp(provider_name, "windows") == 0 &&
strcmp(provider_type, "simple") == 0)
{
svn_auth_get_windows_simple_provider(provider, pool);
}
else if (strcmp(provider_name, "windows") == 0 &&
strcmp(provider_type, "ssl_client_cert_pw") == 0)
{
svn_auth_get_windows_ssl_client_cert_pw_provider(provider, pool);
}
else if (strcmp(provider_name, "windows") == 0 &&
strcmp(provider_type, "ssl_server_trust") == 0)
{
svn_auth_get_windows_ssl_server_trust_provider(provider, pool);
}
else if (strcmp(provider_name, "windows") == 0 &&
strcmp(provider_type, "ssl_server_authority") == 0)
{
svn_auth__get_windows_ssl_server_authority_provider(provider, pool);
}
#endif
}
return SVN_NO_ERROR;
}
svn_error_t *
svn_auth_get_platform_specific_client_providers(apr_array_header_t **providers,
svn_config_t *config,
apr_pool_t *pool)
{
svn_auth_provider_object_t *provider;
const char *password_stores_config_option;
apr_array_header_t *password_stores;
int i;
#define SVN__MAYBE_ADD_PROVIDER(list, p) \
{ if (p) APR_ARRAY_PUSH(list, svn_auth_provider_object_t *) = p; }
#define SVN__DEFAULT_AUTH_PROVIDER_LIST \
"gnome-keyring,kwallet,keychain,gpg-agent,windows-cryptoapi"
*providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t *));
/* Fetch the configured list of password stores, and split them into
an array. */
svn_config_get(config,
&password_stores_config_option,
SVN_CONFIG_SECTION_AUTH,
SVN_CONFIG_OPTION_PASSWORD_STORES,
SVN__DEFAULT_AUTH_PROVIDER_LIST);
password_stores = svn_cstring_split(password_stores_config_option,
" ,", TRUE, pool);
for (i = 0; i < password_stores->nelts; i++)
{
const char *password_store = APR_ARRAY_IDX(password_stores, i,
const char *);
/* GNOME Keyring */
if (apr_strnatcmp(password_store, "gnome-keyring") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"gnome_keyring",
"simple",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"gnome_keyring",
"ssl_client_cert_pw",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
/* GPG-AGENT */
else if (apr_strnatcmp(password_store, "gpg-agent") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"gpg_agent",
"simple",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
/* KWallet */
else if (apr_strnatcmp(password_store, "kwallet") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"kwallet",
"simple",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"kwallet",
"ssl_client_cert_pw",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
/* Keychain */
else if (apr_strnatcmp(password_store, "keychain") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"keychain",
"simple",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"keychain",
"ssl_client_cert_pw",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
/* Windows */
else if (apr_strnatcmp(password_store, "windows-cryptoapi") == 0)
{
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"windows",
"simple",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
"windows",
"ssl_client_cert_pw",
pool));
SVN__MAYBE_ADD_PROVIDER(*providers, provider);
}
}
return SVN_NO_ERROR;
}
( run in 0.490 second using v1.01-cache-2.11-cpan-df04353d9ac )