static svn_error_t * parse(const char *filename, apr_pool_t *pool) { svn_stringbuf_t *buf; svn_x509_certinfo_t *certinfo; SVN_ERR(svn_stringbuf_from_file2(&buf, filename, pool)); SVN_ERR(svn_x509_parse_cert(&certinfo, buf->data, buf->len, pool, pool)); return SVN_NO_ERROR; }
svn_error_t * SVNAuthData::cleanup_callback(svn_boolean_t *delete_cred, void *cleanup_baton, const char *cred_kind, const char *realmstring, apr_hash_t * hash, apr_pool_t * scratch_pool) { std::tuple<std::vector<std::tuple<CString, CString, SVNAuthDataInfo>>*, std::vector<std::tuple<CString, CString, SVNAuthDataInfo>>> * tupleBaton = (std::tuple<std::vector<std::tuple<CString, CString, SVNAuthDataInfo>>*, std::vector<std::tuple<CString, CString, SVNAuthDataInfo>>>*)cleanup_baton; auto authList = std::get<0>(*tupleBaton); auto delList = std::get<1>(*tupleBaton); CString s1, s2; if (cred_kind) s1 = CUnicodeUtils::GetUnicode(cred_kind); if (realmstring) s2 = CUnicodeUtils::GetUnicode(realmstring); SVNAuthDataInfo authinfodata; for (apr_hash_index_t *hi = apr_hash_first(scratch_pool, hash); hi; hi = apr_hash_next(hi)) { const void *vkey; void *val; apr_hash_this(hi, &vkey, NULL, &val); const char * key = (const char*)vkey; svn_string_t *value = (svn_string_t *)val; if (strcmp(key, SVN_CONFIG_AUTHN_PASSWORD_KEY) == 0) { CStringA data(value->data, (int)value->len); authinfodata.password = CUnicodeUtils::GetUnicode(data); } else if (strcmp(key, SVN_CONFIG_AUTHN_PASSPHRASE_KEY) == 0) { CStringA data(value->data, (int)value->len); authinfodata.passphrase = CUnicodeUtils::GetUnicode(data); } else if (strcmp(key, SVN_CONFIG_AUTHN_PASSTYPE_KEY) == 0) { CStringA data(value->data, (int)value->len); authinfodata.passtype = CUnicodeUtils::GetUnicode(data); } else if (strcmp(key, SVN_CONFIG_AUTHN_USERNAME_KEY) == 0) { CStringA data(value->data, (int)value->len); authinfodata.username = CUnicodeUtils::GetUnicode(data); } else if (strcmp(key, SVN_CONFIG_AUTHN_ASCII_CERT_KEY) == 0) { const svn_string_t * der_cert = nullptr; svn_x509_certinfo_t * certinfo = nullptr; const apr_array_header_t * hostnames = nullptr; svn_error_t *err; /* Convert header-less PEM to DER by undoing base64 encoding. */ der_cert = svn_base64_decode_string(value, scratch_pool); err = svn_x509_parse_cert(&certinfo, der_cert->data, der_cert->len, scratch_pool, scratch_pool); if (err) continue; authinfodata.subject = svn_x509_certinfo_get_subject(certinfo, scratch_pool); authinfodata.validfrom = svn_time_to_human_cstring(svn_x509_certinfo_get_valid_from(certinfo), scratch_pool); authinfodata.validuntil = svn_time_to_human_cstring(svn_x509_certinfo_get_valid_to(certinfo), scratch_pool); authinfodata.issuer = svn_x509_certinfo_get_issuer(certinfo, scratch_pool); authinfodata.fingerprint = svn_checksum_to_cstring_display(svn_x509_certinfo_get_digest(certinfo), scratch_pool); hostnames = svn_x509_certinfo_get_hostnames(certinfo); if (hostnames && !apr_is_empty_array(hostnames)) { int i; svn_stringbuf_t *buf = svn_stringbuf_create_empty(scratch_pool); for (i = 0; i < hostnames->nelts; ++i) { const char *hostname = APR_ARRAY_IDX(hostnames, i, const char*); if (i > 0) svn_stringbuf_appendbytes(buf, ", ", 2); svn_stringbuf_appendbytes(buf, hostname, strlen(hostname)); } authinfodata.hostname = buf->data; } } else if (strcmp(key, SVN_CONFIG_AUTHN_FAILURES_KEY) == 0)