On Aug 12, 2010, at 11:12 AM, Hyrum K. Wright wrote: > On Thu, Aug 12, 2010 at 11:07 AM, C. Michael Pilato <cmpil...@collab.net> > wrote: >> On 08/12/2010 12:04 PM, Loren Cahlander wrote: >>> Hello there, >>> >>> I am trying to make a change to mod_dav_svn on my server and need to get >>> a value out of the HTTP headers. I have not developed in C in quite a >>> while and would appreciate any help by pointing me in the right >>> direction. I can take it from there, but I do need some help. >> >> Apache passes around the request structure (often just called 'r'), and >> inside that is a table called 'headers_in'. Grep for 'r->headers_in' in, >> say, subversion/mod_dav_svn/repos.c. > > I know next-to-nothing about mod_dav_svn, but why would an Apache > request appear in libsvn_repos? I thought all that stuff was handled > higher up, and libsvn_repos was ra-agnostic. > > -Hyrum
I am trying to make a hack in mod_dav_svn to get some additional headers from a HTTP put. I have the following XQuery code: declare function http:put-basic-auth($url, $content, $username, $password, $header) as node(){ let $credentials := concat($username, ':', $password) let $encode := util:base64-encode($credentials) let $value := concat('Basic ', $encode) let $headers := <headers> {$header//header} <header name="Authorization" value="{$value}"/> </headers> let $response := httpclient:put($url, $content, false(), $headers) return $response }; Where $header will contain: <headers> <header name="X-SVN-Log" value="This is the commit log message"/> <header name="X-SVN-User" value="fred"/> </headers> I want to change the following function in subversion/mod_dav_svn/version.c to get those two headers values and set the values for SVN_PROP_REVISION_LOG and SVN_PROP_REVISION_AUTHOR. Is there a simple way to get the request_rec structure from the svn_fs_txn_t or apr_pool_t structures? Another thing that might help is where is the entry into mod_dav_svn for a HTTP PUT request? svn_error_t * dav_svn__attach_auto_revprops(svn_fs_txn_t *txn, const char *fs_path, apr_pool_t *pool) { const char *logmsg; svn_string_t *logval; svn_error_t *serr; logmsg = apr_psprintf(pool, "Autoversioning commit: a non-deltaV client made " "a change to\n%s", fs_path); logval = svn_string_create(logmsg, pool); if ((serr = svn_repos_fs_change_txn_prop(txn, SVN_PROP_REVISION_LOG, logval, pool))) return serr; /* Notate that this revision was created by autoversioning. (Tools like post-commit email scripts might not care to send an email for every autoversioning change.) */ if ((serr = svn_repos_fs_change_txn_prop(txn, SVN_PROP_REVISION_AUTOVERSIONED, svn_string_create("*", pool), pool))) return serr; return SVN_NO_ERROR; } I thank you for replying to me. I will keep code diving until I find the solution.