1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-30 19:39:07 +00:00

Use svn_cmdline_create_auth_baton.

This is in place of our own auth providers. This appears to do the same
things that the svn client does, like prompt on an unknown server
certificate and prompt for and cache credentials.
This commit is contained in:
david
2011-12-19 20:27:59 +00:00
parent 5c0b85261b
commit 21921dae6b

View File

@@ -693,45 +693,15 @@ static void fatal_err_svn(svn_error_t *err)
svn_handle_error2(err, stderr, TRUE, "nmap-update: ");
}
static svn_error_t *simple_auth_callback(svn_auth_cred_simple_t **cred,
void *baton, const char *realm, const char *username,
svn_boolean_t may_save, apr_pool_t *pool)
{
svn_auth_cred_simple_t *ret;
ret = apr_pcalloc(pool, sizeof(*ret));
if (options.verbose) {
if (realm != NULL)
printf("Authenticating to realm %s.\n", realm);
}
if (!(username || options.username) || !options.password) {
return svn_error_create(SVN_ERR_RA_UNKNOWN_AUTH, NULL,
"Don't have authentication credentials");
}
if (options.username != NULL)
ret->username = apr_pstrdup(pool, options.username);
else
ret->username = apr_pstrdup(pool, username);
ret->password = apr_pstrdup(pool, options.password);
*cred = ret;
return SVN_NO_ERROR;
}
static svn_error_t *checkout_svn(const char *url, const char *path)
{
svn_error_t *err;
apr_pool_t *pool;
svn_opt_revision_t peg_revision, revision;
svn_client_ctx_t *ctx;
svn_auth_baton_t *ab;
svn_revnum_t revnum;
svn_auth_provider_object_t *provider;
apr_array_header_t *providers;
svn_config_t *cfg;
peg_revision.kind = svn_opt_revision_unspecified;
revision.kind = svn_opt_revision_head;
@@ -742,19 +712,25 @@ static svn_error_t *checkout_svn(const char *url, const char *path)
if (err != NULL)
fatal_err_svn(err);
providers = apr_array_make(pool, 10, sizeof (svn_auth_provider_object_t *));
svn_auth_get_simple_prompt_provider(&provider,
simple_auth_callback,
NULL, /* baton */
0, /* retry limit */
err = svn_config_get_config(&ctx->config, NULL, pool);
if (err != NULL)
fatal_err_svn(err);
cfg = apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
APR_HASH_KEY_STRING);
svn_config_set_bool(cfg, SVN_CONFIG_SECTION_GLOBAL,
SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA, TRUE);
svn_cmdline_create_auth_baton(&ab,
FALSE, /* non_interactive */
options.username, /* username */
options.password, /* password */
NULL, /* config_dir */
FALSE, /* no_auth_cache */
FALSE, /* trust_server_cert */
cfg, /* cfg */
NULL, /* cancel_func */
NULL, /* cancel_baton */
pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_platform_specific_provider(&provider,
"windows", "ssl_server_trust", pool);
if (provider != NULL)
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
/* Register the auth providers into the client context's auth_baton. */
svn_auth_open(&ctx->auth_baton, providers, pool);
ctx->auth_baton = ab;
err = svn_client_checkout3(&revnum, url, path,
&peg_revision, &revision,