Hi,

SVN features a mixed authentication/anonymous access (see 
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir.ex-3).

I want to achieve the same functionality using a PHP script: allow anonymous access until accessing some special content and than request authentification which should be checked according to a htaccess-file.
As far as i understand the SVN example the authentification is performed by the 
Apache modules.

I configured the ".htaccess" file to look similar:
  Order allow,deny
  Allow from all
  AuthType Basic
  AuthName "Realm"
  AuthUserFile "/path/to/.htusers"
  require valid-user
  Satisfy any

Additionally a PHP script is inside the same folder.
When you now browse to the URL of the PHP script, you can access it without any 
credentials requested.

At some point the PHP script "decides" that authentification is required (e.g. when 
passing a param like "?need-auth=1").
I suppose this is similar to how the mixed authentication/anonymous access in 
SVN works (?).

Therefore it sends the following two headers:
  WWW-Authenticate: Basic realm="Realm"
  HTTP/1.x 401 Unauthorized

Then the user is asked to insert username/password for the basic auth.
But now comes the problem:
The apache will ALWAYS let the user pass as anonymous access is always granted.
I suppose the webserver does not even try to authenticate the user credentials.
Therefore it is not possible to decide in PHP if the user is anonymous or has 
been successfully authenticated.

How is this performed in SVN for the mixed authentication/anonymous access?

What i do not want is:
- check the credentials in PHP (due to the many different auth-methods which 
could be configured with Apache)
- have a dummy anonymous user like "guest" with password "guest"
- split anonymous and authenticated parts in separate folders (to use separate 
.htaccess-files)

I hope to get some enlightenment from the way SVN realizes this feature.

Any feedback is highly appreciated.

Thank you
Dirk

Reply via email to