Deal all,
I'm trying to write application which works with svn repository via https.
But I have trouble... But application can access repository only using svn
protocol.
For https it writes:
PROPFIND request failed on '/svn/KG810'
I can't understand why function
svn_test1_auth_ssl_client_server_trust_prompt was not called.
Please help me to solve this problem and understand what is my mistake.
Many thanks is advance
Fedor
// test1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "svn_pools.h"
#include "svn_client.h"
#include "svn_config.h"
#include "svn_path.h"
#include "svn_cmdline.h"
static apr_pool_t *pool = 0;
static svn_client_ctx_t* ctx = 0;
static svn_error_t *svn_test1_auth_ssl_client_server_trust_prompt (
svn_auth_cred_ssl_server_trust_t **cred,
void *baton,
const char *realm,
apr_uint32_t failures,
const svn_auth_ssl_server_cert_info_t *cert_info,
svn_boolean_t may_save,
apr_pool_t *pool)
{
printf("hostname=%s\n", cert_info->hostname);
printf("fingerprint=%s\n", cert_info->fingerprint);
printf("valid_from=%s\n", cert_info->valid_from);
printf("valid_until=%s\n", cert_info->valid_until);
printf("issuer_dname=%s\n", cert_info->issuer_dname);
printf("ascii_cert=%s\n", cert_info->ascii_cert);
*cred = (svn_auth_cred_ssl_server_trust_t*) apr_palloc(pool,
sizeof(svn_auth_cred_ssl_server_trust_t));
(*cred)->may_save = 0;
(*cred)->accepted_failures = failures;
return SVN_NO_ERROR;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char *repos_url="https://172.26.40.85/svn/KG810";
// const char *repos_url="svn://localhost/Test1";
const char *target_dir="C:\\KG810wc";
const char *config_dir="C:\\KG810cnf";
const char *auth_username="turin";
const char *auth_password="turinturin";
apr_allocator_t *allocator;
svn_error_t *err;
svn_opt_revision_t revision;
svn_opt_revision_t peg_revision;
svn_auth_baton_t *ab;
svn_config_t *cfg = 0;
const char *true_url;
svn_boolean_t store_password_val = TRUE;
svn_auth_provider_object_t *provider = NULL;
apr_array_header_t *providers = NULL;
apr_initialize();
if (apr_allocator_create(&allocator))
return EXIT_FAILURE;
apr_allocator_max_free_set(allocator,
SVN_ALLOCATOR_RECOMMENDED_MAX_FREE);
pool = svn_pool_create_ex(NULL, allocator);
apr_allocator_owner_set(allocator, pool);
err = svn_client_create_context(&ctx, pool);
if (err) {printf("%s", err->message);}
err = svn_config_ensure(config_dir, pool);
if (err) {printf("%s", err->message);}
err = svn_config_get_config(&(ctx->config), config_dir, pool);
if (err) {printf("%s", err->message);}
cfg = (svn_config_t*) apr_hash_get(ctx->config,
SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING);
////////////////////////////////
providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t
*));
svn_auth_get_windows_simple_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_simple_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_username_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_ssl_server_trust_prompt_provider (&provider,
svn_test1_auth_ssl_client_server_trust_prompt, NULL, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_ssl_server_trust_file_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_ssl_client_cert_file_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_get_ssl_client_cert_pw_file_provider(&provider, pool);
APR_ARRAY_PUSH(providers, svn_auth_provider_object_t *) = provider;
svn_auth_open(&ab, providers, pool);
if (auth_username)
svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_USERNAME,
auth_username);
if (auth_password)
svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_PASSWORD,
auth_password);
if (config_dir)
svn_auth_set_parameter(ab, SVN_AUTH_PARAM_CONFIG_DIR, config_dir);
/////////////////////////////////
ctx->auth_baton = ab;
revision.kind = svn_opt_revision_head;
if (!svn_path_is_url(repos_url)) {
printf("Wrong url\n");
return -1;
}
err = svn_opt_parse_path(&peg_revision, &true_url, repos_url, pool);
if (err) {printf("%s\n", err->message);}
true_url = svn_path_canonicalize(true_url, pool);
if (revision.kind == svn_opt_revision_unspecified) {
if (peg_revision.kind != svn_opt_revision_unspecified)
revision = peg_revision;
else
revision.kind = svn_opt_revision_head;
}
printf("true_url=%s\n", true_url);
err = svn_client_checkout2(NULL, true_url, target_dir,
&peg_revision,
&revision,
TRUE,
FALSE,
ctx, pool);
if (err) {printf("%s\n", err->message);}
svn_pool_destroy(pool);
return 0;
}
On 11/22/06, Ulrich Eckhardt <eckhardt@satorlaser.com> wrote:
>
> On Wednesday 22 November 2006 16:50, Fedor Tyurin wrote:
> > I am trying to write an application that will used as a tool for
> > Subversion. I am using C++ with VS .NET 2003 on WinXP SP2. In the
> > properties page for the Solution I have pointed the links to the library
> > and include files. But when building the solution I get the following
> > linker errors:
> >
> > Linking...
> > RepositoryView.obj : error LNK2019: unresolved external symbol
> > _svn_repos_open referenced in function "private: void __thiscall
> > CRepositoryView::FillRepositoryTree(void)"
> > (?FillRepositoryTree@CRepositoryView@@AAEXXZ)
>
> You need to setup three things typically:
> 1. The path to the headers. Otherwise the compiler will complain when you
> try
> to #include them.
> 2. You need to tell the linker that it should link with the .lib files.
> Either
> you do that manually in the project setup or [this part is MS specific]
> you
> add a line in one of your sourcefiles containing
> #pragma comment( lib, "foobar.lib")
> 3. You need to tell the linker where to find the libraries. Either you
> move
> them or you add their location to you project/workspace/system setup.
>
> I'd say you forgot step #2.
>
> Uli
>
>
> **************************************************************************************
> Visit our website at <http://www.satorlaser.de/>
>
> **************************************************************************************
> Diese E-Mail einschließlich sämtlicher Anhänge ist nur für den Adressaten
> bestimmt und kann vertrauliche Informationen enthalten. Bitte
> benachrichtigen Sie den Absender umgehend, falls Sie nicht der beabsichtigte
> Empfänger sein sollten. Die E-Mail ist in diesem Fall zu löschen und darf
> weder gelesen, weitergeleitet, veröffentlicht oder anderweitig benutzt
> werden.
> E-Mails können durch Dritte gelesen werden und Viren sowie
> nichtautorisierte Änderungen enthalten. Sator Laser GmbH ist für diese
> Folgen nicht verantwortlich.
>
>
> **************************************************************************************
>
>
Received on Tue Nov 28 13:23:51 2006