27
votes

Can any one tell me how to authenticate users(SVN users) for a repository using SharpSVN Library. That repository should only be committed by those users. Thanks

4

4 Answers

47
votes

Use the Authenticate properties of SVNClient:

client.Authentication.Clear(); // Clear a previous authentication
client.Authentication.DefaultCredentials = new System.Net.NetworkCredential("user", "password");
14
votes
client.Authentication.ForceCredentials("user", "password");

For those of you who don't want to blow away your default credentials (if you're running TortoiseSVN on the same machine).

10
votes

You can also override SSL certificate errors by adding an event handler to SslServerTrustHandlers like this:

SVN_Conn.Authentication.SslServerTrustHandlers += new EventHandler<SharpSvn.Security.SvnSslServerTrustEventArgs>(SVN_SSL_Override);

static void SVN_SSL_Override(object sender, SharpSvn.Security.SvnSslServerTrustEventArgs e)
{
    e.AcceptedFailures = e.Failures;
    e.Save = true;
}
3
votes

In my case, the SVN server was running VisualSVN Server 3.5.3 with Integrated Windows Authentication enabled. Using SharpSvn 1.9004.3879.127, the SVN client tried to use Windows authentication even when I configured it with a username and password:

client = new SvnClient();
client.Authentication.Clear(); //Prevents saving/loading config to/from disk
client.Authentication.DefaultCredentials = new NetworkCredential("username", "password");

This resulted in the following error when the application code was run by a Windows user that didn't have access to the repository:

SvnRepositoryIOException: Unable to connect to a repository at URL 'https://mysvnserver/svn/reponame'

I fixed this by only allowing basic and digest authentication:

client = new SvnClient();
client.Configuration.SetOption("servers", "global", "http-auth-types", "basic;digest");
client.Authentication.Clear(); // Prevents saving/loading config to/from disk
client.Authentication.DefaultCredentials = new NetworkCredential("username", "password");