# Included on spamassassin-vm from /etc/httpd/conf/httpd.conf:
#   Include /home/automc/svn/spamassassin/build/automc/etc-apache-local-conf-httpd.conf
#
# Update Apache config like so:
#
#   cd /export/home/svn-trunk; sudo -u automc svn up
#   sudo /etc/rc.d/init.d/httpd restart ; tail /var/log/httpd/error_log

# ---------------------------------------------------------------------------

<IfModule mod_dir.c>
    DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.phtml index.cgi
</IfModule>

UseCanonicalName On

NameVirtualHost *:80

### jm dec 9 : proxy shouldn't wait for EOF, we want partial files too
### SetEnv force-proxy-request-1.0 1
##SetEnv proxy-nokeepalive 1
### try to cause more frequent buf writes with a tiny buf size
##ProxyIOBufferSize 16
### reverse proxying only!
##ProxyRequests Off

# ---------------------------------------------------------------------------

<VirtualHost *:80>
  ServerName bbmass-trunk.spamassassin.org
  ServerAlias bbmass.spamassassin.org
  ServerAlias buildbot.spamassassin.org
  <Directory /var/www/bbmass.spamassassin.org>
    options indexes SymLinksIfOwnerMatch
    AllowOverride All
  </Directory>
  DocumentRoot /var/www/bbmass.spamassassin.org
  ServerAdmin webmaster@spamassassin.org
  userdir disabled

  #RewriteEngine On

  # index: straight through
  #RewriteRule ^/$ http://127.0.0.1:8011/ [P]

  # anything else; proxy, if it doesn't exist as a file/dir
  #RewriteCond /var/www/bbmass.spamassassin.org/%{REQUEST_FILENAME} !-d
  #RewriteCond /var/www/bbmass.spamassassin.org/%{REQUEST_FILENAME} !-f
  #RewriteRule ^/(.*) http://127.0.0.1:8011/$1 [P]

  # ProxyRequests Off
  # <Proxy *>
  # Order deny,allow
  # Allow from all
  # </Proxy>

</VirtualHost>

# ---------------------------------------------------------------------------

<VirtualHost *:80>
  ServerName ruleqa-trunk.spamassassin.org
  ServerAlias ruleqa.spamassassin.org
  <Directory /var/www/ruleqa.spamassassin.org>
    options indexes SymLinksIfOwnerMatch
    AllowOverride indexes
  </Directory>
  DocumentRoot /var/www/ruleqa.spamassassin.org
  ServerAdmin webmaster@spamassassin.org
  userdir disabled

  Alias /ruleqa.css /export/home/svn-trunk/masses/rule-qa/automc/ruleqa.css

  # debugging:
  # RewriteLogLevel 9
  # RewriteLog /var/apache2/logs/rewrite_log

  # "%2F" is used to grep rule subsets, allow it
  AllowEncodedSlashes On

  # strip out known-local files and loops; all else goes to the ruleqa code
  RewriteEngine On

  # index: straight through
  RewriteRule ^/$ /ruleqa.cgi [PT,L]

  RewriteRule ^/ruleqa.css$ /ruleqa.css [PT,L]

  # satisfy local files
  RewriteCond /var/www/ruleqa.spamassassin.org/%{REQUEST_FILENAME} !-d
  RewriteCond /var/www/ruleqa.spamassassin.org/%{REQUEST_FILENAME} !-f

  # otherwise the CGI
  RewriteCond %{REQUEST_URI} !^/ruleqa\.cgi
  RewriteRule ^/(.*) /ruleqa.cgi/$1 [PT,L]

  ScriptAlias /ruleqa.cgi /export/home/svn-trunk/masses/rule-qa/automc/ruleqa.cgi

</VirtualHost>

# ---------------------------------------------------------------------------

# <VirtualHost *:80>
  # ServerName bbmass-stable.spamassassin.org
  # <Directory /var/www/bbmass-stable.spamassassin.org>
    # options indexes SymLinksIfOwnerMatch
    # AllowOverride indexes
  # </Directory>
  # DocumentRoot /var/www/bbmass-stable.spamassassin.org
  # ServerAdmin webmaster@spamassassin.org
  # userdir disabled
#
  # RewriteEngine On
#
  # # index: straight through
  # RewriteRule ^/$ http://127.0.0.1:8011/ [P]
#
  # # anything else; proxy, if it doesn't exist as a file/dir
  # RewriteCond /var/www/bbmass-stable.spamassassin.org/%{REQUEST_FILENAME} !-d
  # RewriteCond /var/www/bbmass-stable.spamassassin.org/%{REQUEST_FILENAME} !-f
  # RewriteRule ^/(.*) http://127.0.0.1:8011/$1 [P]
#
  # ProxyRequests Off
  # <Proxy *>
  # Order deny,allow
  # Allow from all
  # </Proxy>
#
# </VirtualHost>

# ---------------------------------------------------------------------------

# <VirtualHost *:80>
  # ServerName ruleqa-stable.spamassassin.org
  # <Directory /var/www/ruleqa-stable.spamassassin.org>
    # options indexes SymLinksIfOwnerMatch
    # AllowOverride indexes
  # </Directory>
  # DocumentRoot /var/www/ruleqa-stable.spamassassin.org
  # ServerAdmin webmaster@spamassassin.org
  # userdir disabled
# 
  # # debugging:
  # # RewriteLogLevel 9
  # # RewriteLog /var/apache2/logs/rewrite_log
# 
  # # "%2F" is used to grep rule subsets, allow it
  # AllowEncodedSlashes On
# 
  # # strip out known-local files and loops; all else goes to the ruleqa code
  # RewriteEngine On
# 
  # # index: straight through
  # RewriteRule ^/$ /ruleqa.cgi [PT,L]
# 
  # # satisfy local files
  # RewriteCond /var/www/ruleqa-stable.spamassassin.org/%{REQUEST_FILENAME} !-d
  # RewriteCond /var/www/ruleqa-stable.spamassassin.org/%{REQUEST_FILENAME} !-f
# 
  # # otherwise the CGI
  # RewriteCond %{REQUEST_URI} !^/ruleqa\.cgi
  # RewriteRule ^/(.*) /ruleqa.cgi/$1 [PT,L]
# 
# </VirtualHost>

# ---------------------------------------------------------------------------

<VirtualHost *:80>
  ServerName rsync.spamassassin.org
  <Directory /export/home/corpus-rsync/corpus>
    options indexes SymLinksIfOwnerMatch
    AllowOverride indexes
  </Directory>
  DocumentRoot /export/home/corpus-rsync/corpus
  ServerAdmin webmaster@spamassassin.org
  userdir disabled
</VirtualHost>

# ---------------------------------------------------------------------------

<VirtualHost *:80>
  ServerName updatedist.spamassassin.org
  <Directory /var/www/buildbot.spamassassin.org/updatestage>
    options indexes SymLinksIfOwnerMatch
    AllowOverride indexes
  </Directory>
  DocumentRoot /var/www/buildbot.spamassassin.org/updatestage
  ServerAdmin webmaster@spamassassin.org
  userdir disabled
</VirtualHost>

# ---------------------------------------------------------------------------

