Index: subversion/libsvn_ra_dav/ra_dav.h =================================================================== --- subversion/libsvn_ra_dav/ra_dav.h (revision 6516) +++ subversion/libsvn_ra_dav/ra_dav.h (working copy) @@ -57,6 +57,9 @@ svn_boolean_t compression; /* should we use http compression? */ const char *uuid; /* repository UUID */ + svn_boolean_t was_ssl_certificate_verified; /* set if an SSL certificate had to be verified */ + svn_boolean_t was_ssl_certificate_rejected; /* set if an SSL certificated had been rejected */ + } svn_ra_session_t; Index: subversion/libsvn_ra_dav/session.c =================================================================== --- subversion/libsvn_ra_dav/session.c (revision 6516) +++ subversion/libsvn_ra_dav/session.c (working copy) @@ -124,6 +124,7 @@ svn_error_t *error; int failures_allowed = 0; + ras->was_ssl_certificate_verified = TRUE; svn_auth_set_parameter(ras->callbacks->auth_baton, SVN_AUTH_PARAM_SSL_SERVER_FAILURES_IN, (void*)failures); @@ -144,7 +145,15 @@ failures_allowed = (server_creds) ? server_creds->failures_allow : 0; } apr_pool_destroy(pool); - return (failures & ~failures_allowed); + { + int ret = (failures & ~failures_allowed); + if (ret) + { + ras->was_ssl_certificate_rejected = TRUE; + } + return ret; + } + } static int Index: subversion/libsvn_ra_dav/util.c =================================================================== --- subversion/libsvn_ra_dav/util.c (revision 6516) +++ subversion/libsvn_ra_dav/util.c (working copy) @@ -278,6 +278,13 @@ svn_error_t *err = SVN_NO_ERROR; svn_ra_session_t *ras = ne_get_session_private(sess, SVN_RA_NE_SESSION_ID); + /* + * Reset both flags so, if we encounter an SSL certificate rejection - + * we'll know about it. + * */ + ras->was_ssl_certificate_verified = FALSE; + ras->was_ssl_certificate_rejected = FALSE; + /* create/prep the request */ req = ne_request_create(sess, method, url); @@ -383,8 +390,17 @@ if ((code != expected_code) || (rv != NE_OK)) { - msg = apr_psprintf(pool, "%s of '%s'", method, url); - err = svn_ra_dav__convert_error(sess, msg, rv); + if (ras->was_ssl_certificate_verified && + ras->was_ssl_certificate_rejected) + { + msg = apr_psprintf (pool, "%s", "SSL certificate was rejected"); + err = svn_error_create (SVN_ERR_RA_NOT_AUTHORIZED, NULL, msg); + } + else + { + msg = apr_psprintf(pool, "%s of '%s'", method, url); + err = svn_ra_dav__convert_error(sess, msg, rv); + } goto error; }