Dynamic subversion repos via subdomains (in Apache) Dynamic subversion repos via subdomains (in Apache) apache apache

Dynamic subversion repos via subdomains (in Apache)


In the interest of Open Source (yay!), I'll post my solution. I found no built-in solution to my problem, so I spent a few hours on the mod_dav_svn.so sources and came up with this patch:

Index: subversion/mod_dav_svn/mod_dav_svn.c===================================================================--- subversion/mod_dav_svn/mod_dav_svn.c        (revision 1049733)+++ subversion/mod_dav_svn/mod_dav_svn.c        (working copy)@@ -426,9 +426,14 @@dav_svn__get_fs_parent_path(request_rec *r) {   dir_conf_t *conf;+  char *tokens, *subdomain, *last_str;   conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);-  return conf->fs_parent_path;++  tokens = apr_pstrdup(r->pool, r->hostname);   // copy hostname+  subdomain = apr_strtok(tokens, ".", &last_str);++  return (const char *) apr_pstrcat(r->pool, conf->fs_parent_path, "/", subdomain, NULL); }

Essentially, this grabs the current hostname (from the pending request 'request_rec'), slices away the first token (subdomain), and concatenates that with the proper SVNParentPath (conf->fs_parent_path) and voila! Everything works as it should. Here's my server config (notice how simple it is now):

<VirtualHost *:80 *:443>    ServerAdmin admin@domain.com    DocumentRoot "/server/www"    ServerName domain.com    ServerAlias *.domain.com www.domain.com domain.com    ErrorLog logs/domain-error_log    CustomLog logs/domain-access_log common    <Location /svn>        DAV svn        SVNParentPath /server/svn        SVNListParentPath on    </Location></VirtualHost>

Notes:

I hope that I used the apr_* functions correctly, if there are any caveats, I'd like some feedback :)

Tested on Centos with latest mod_dav_svn tree.