Okay, subversion must be triggering sub requests to generate the GET based on the content of the original client request.
Give me a little while and I will send you a patch to try which exposes SCRIPT_NAME/PATH_INFO in AAA handlers. Graham On 31 March 2011 10:23, Brian Wasserman <[email protected]> wrote: > Here are my logs. I also made sure that I only used the access methods to > reduce the number of requests. > Thanks, > Brian > mod_python > svn.log > 30/Mar/2011:18:59:44 OPTIONS /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 OPTIONS /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 PROPFIND /project/trunk > 30/Mar/2011:18:59:44 GET /project/!svn/ver/2/trunk > 30/Mar/2011:18:59:44 GET /project/!svn/ver/2/trunk/b.txt > 30/Mar/2011:18:59:44 GET /project/!svn/ver/2/trunk/c > 30/Mar/2011:18:59:44 GET /project/!svn/ver/2/trunk/c/ac.txt > 30/Mar/2011:18:59:44 GET /project/!svn/ver/2/trunk/a.txt > access_log > 127.0.0.1 - - [30/Mar/2011:18:59:43 -0400] "OPTIONS /svn/project/trunk > HTTP/1.1" 200 2165 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/!svn/bln/2 > HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/!svn/bln/2 > HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/vcc/default HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/bc/2/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "OPTIONS /svn/project/trunk > HTTP/1.1" 200 2165 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/!svn/bln/2 > HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/trunk > HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND > /svn/project/!svn/vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "PROPFIND /svn/project/!svn/bln/2 > HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:18:59:44 -0400] "REPORT > /svn/project/!svn/vcc/default HTTP/1.1" 200 1058 "-" "SVN/1.6.6 (r40053) > neon/0.29.0" > > mod_wsgi > svn.log > 30/Mar/2011:19:19:23 OPTIONS /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/bln/6 > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/bln/6 > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/bc/6/project > 30/Mar/2011:19:19:23 OPTIONS /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/bln/6 > 30/Mar/2011:19:19:23 PROPFIND /svn/project > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 PROPFIND /svn/!svn/bln/6 > 30/Mar/2011:19:19:23 REPORT /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 GET /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 GET /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 GET /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 GET /svn/!svn/vcc/default > 30/Mar/2011:19:19:23 GET /svn/!svn/vcc/default > access_log > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "OPTIONS /svn/project HTTP/1.1" > 200 867 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/vcc/default > HTTP/1.1" 207 446 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/bln/6 > HTTP/1.1" 207 460 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/vcc/default > HTTP/1.1" 207 446 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/bln/6 > HTTP/1.1" 207 460 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/vcc/default > HTTP/1.1" 207 466 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/bc/6/project > HTTP/1.1" 207 561 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "OPTIONS /svn/project HTTP/1.1" > 200 867 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/vcc/default > HTTP/1.1" 207 446 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/bln/6 > HTTP/1.1" 207 460 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/project HTTP/1.1" > 207 557 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/vcc/default > HTTP/1.1" 207 446 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "PROPFIND /svn/!svn/bln/6 > HTTP/1.1" 207 460 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > 127.0.0.1 - - [30/Mar/2011:19:19:23 -0400] "REPORT /svn/!svn/vcc/default > HTTP/1.1" 200 849 "-" "SVN/1.6.6 (r40053) neon/0.29.0" > On Wed, Mar 30, 2011 at 5:48 PM, Graham Dumpleton > <[email protected]> wrote: >> >> Add date/time stamps to what you log from access script. The entries >> in the log file snippets don't appear to correspond to what you are >> outputing, ie., not GET's in one. >> >> Graham >> >> On 30 March 2011 03:33, Brian <[email protected]> wrote: >> > Graham, >> > >> > Thanks for your response. Here's some more info on my test scenario. >> > It includes Apache access logs and debug output for an access handler >> > for mod_wsgi vs mod_python. Even though the access_log resulting from >> > methods does not show anything from which an actual path or filename >> > can be determined, for some reason mod_python has access to this >> > data. Is it possible that in mod_wsgi I have to use <LimitExcept> >> > blocks and rewrite the config file instead of doing this exclusively >> > via custom code? >> > >> > Thanks again! >> > Brian >> > >> > localhost:~$ svn co http://localhost/svn/project >> > >> > svn response: >> > A project/b.txt >> > A project/c >> > A project/c/ac.txt >> > A project/a.txt >> > Checked out revision 6. >> > >> > ---------- Apache log from mod_wsgi ---------- >> > 127.0.0.1 - - [29/Mar/2011:10:55:01 -0400] "OPTIONS /svn/project HTTP/ >> > 1.1" 401 673 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:07 -0400] "OPTIONS /svn/ >> > project HTTP/1.1" 200 866 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:07 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:08 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:08 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 466 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/!svn/ >> > bc/6/project HTTP/1.1" 207 561 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - - [29/Mar/2011:10:55:09 -0400] "OPTIONS /svn/project HTTP/ >> > 1.1" 401 673 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "OPTIONS /svn/ >> > project HTTP/1.1" 200 866 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:09 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:10 -0400] "REPORT /svn/!svn/ >> > vcc/default HTTP/1.1" 200 570 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - - [29/Mar/2011:10:55:21 -0400] "OPTIONS /svn/project HTTP/ >> > 1.1" 401 673 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:23 -0400] "OPTIONS /svn/ >> > project HTTP/1.1" 200 866 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:23 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:23 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:23 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 466 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - - [29/Mar/2011:10:55:24 -0400] "OPTIONS /svn/project HTTP/ >> > 1.1" 401 673 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "OPTIONS /svn/ >> > project HTTP/1.1" 200 866 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > bc/6/project HTTP/1.1" 207 561 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/ >> > project HTTP/1.1" 207 557 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > vcc/default HTTP/1.1" 207 446 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "PROPFIND /svn/!svn/ >> > bln/6 HTTP/1.1" 207 460 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > 127.0.0.1 - testuser [29/Mar/2011:10:55:24 -0400] "REPORT /svn/!svn/ >> > vcc/default HTTP/1.1" 200 849 "-" "SVN/1.6.12 (r955767) neon/0.29.3" >> > >> > ---------- >> > >> > Here's code I am using to dump the path from the WSGIAccessScript. >> > def allow_access(environ, host): >> > path = environ['REQUEST_URI'] >> > method = environ['REQUEST_METHOD'] >> > >> > f = open('/tmp/svn.log', 'a') >> > f.write('access path = %s\nmethod = %s\n\n' % (path, method)) >> > f.close() >> > return True >> > >> > ---------- mod_wsgi svn.log dump ---------- >> > access path = /svn/project >> > method = OPTIONS >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = PROPFIND >> > >> > access path = /svn/!svn/bln/6 >> > method = PROPFIND >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = PROPFIND >> > >> > access path = /svn/!svn/bln/6 >> > method = PROPFIND >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = PROPFIND >> > >> > access path = /svn/!svn/bc/6/project >> > method = PROPFIND >> > >> > access path = /svn/project >> > method = OPTIONS >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = PROPFIND >> > >> > access path = /svn/!svn/bln/6 >> > method = PROPFIND >> > >> > access path = /svn/project >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = PROPFIND >> > >> > access path = /svn/!svn/bln/6 >> > method = PROPFIND >> > >> > access path = /svn/!svn/vcc/default >> > method = REPORT >> > >> > access path = /svn/!svn/vcc/default >> > method = GET >> > >> > access path = /svn/!svn/vcc/default >> > method = GET >> > >> > access path = /svn/!svn/vcc/default >> > method = GET >> > >> > access path = /svn/!svn/vcc/default >> > method = GET >> > >> > access path = /svn/!svn/vcc/default >> > method = GET >> > >> > ---------- Apache log for mod_python for the same repo ---------- >> > 127.0.0.1 - - [29/Mar/2011:11:59:37 -0400] "OPTIONS /svn/project/trunk >> > HTTP/1.1" 401 1957 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "OPTIONS /svn/ >> > project/trunk HTTP/1.1" 200 996 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > bln/2 HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > bln/2 HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - LOCAL\\test [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > vcc/default HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > bc/2/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "OPTIONS /svn/project/trunk >> > HTTP/1.1" 401 1957 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "OPTIONS /svn/ >> > project/trunk HTTP/1.1" 200 996 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > bln/2 HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - testuser [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/ >> > project/trunk HTTP/1.1" 207 692 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > vcc/default HTTP/1.1" 207 580 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "PROPFIND /svn/project/!svn/ >> > bln/2 HTTP/1.1" 207 596 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > 127.0.0.1 - - [29/Mar/2011:11:59:39 -0400] "REPORT /svn/project/!svn/ >> > vcc/default HTTP/1.1" 200 1058 "-" "SVN/1.6.6 (r40053) neon/0.29.0" >> > ---------- >> > This is the mod_python acces handler: >> > def access(req): >> > f = open('/tmp/svn.log', 'a') >> > f.write('access path = %s\nmethod = %s\n\n' % (req.path_info, >> > req.method)) >> > f.close() >> > return apache.OK >> > >> > ---------- mod_python svn.log dump ---------- >> > access path = /project/trunk >> > method = OPTIONS >> > >> > access path = /project/trunk >> > method = OPTIONS >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/trunk >> > method = OPTIONS >> > >> > access path = /project/trunk >> > method = OPTIONS >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/trunk >> > method = PROPFIND >> > >> > access path = /project/!svn/ver/2/trunk >> > method = GET >> > >> > access path = /project/!svn/ver/2/trunk/b.txt >> > method = GET >> > >> > access path = /project/!svn/ver/2/trunk/c >> > method = GET >> > >> > access path = /project/!svn/ver/2/trunk/c/ac.txt >> > method = GET >> > >> > access path = /project/!svn/ver/2/trunk/a.txt >> > method = GET >> > >> > >> > Graham Dumpleton wrote: >> >> On 29 March 2011 08:00, Brian <[email protected]> wrote: >> >> > I currently use mod_python to manage permissions for a svn >> >> > repository. The >> >> > key part of my apache2 config looks like this: >> >> > >> >> > PythonAccessHandler MyProject.svn_authz::access >> >> > PythonAuthenHandler MyProject.auth::authenticate >> >> > PythonAuthzHandler MyProject.svn_authz::authorize >> >> > >> >> > I have made attempts to replace this with mod_wsgi, like this: >> >> > >> >> > WSGIAccessScript /usr/local/myproject/auth.wsgi >> >> > WSGIAuthUserScript /usr/local/myproject/auth.wsgi >> >> > >> >> > In general, this works. I can allow control to the repository by >> >> > user or >> >> > allow anonymous access, but unfortunately I want to be able to allow >> >> > some >> >> > parts of the repo to be public and grant permissions by path. Even >> >> > though >> >> > the access_log looks the same between mod_python and mod_wsgi, in >> >> > mod_python >> >> > the request object had access to path_info, which would contain the >> >> > path to >> >> > the file being accessed. With mod_wsgi I seem to only have access to >> >> > the >> >> > environment variables, with only REQUEST_METHOD and REQUEST_URI being >> >> > potentially useful. Through inspection I see REQUEST_URI first >> >> > contains the >> >> > requested path, like when doing a checkout. Each subsequent request >> >> > in the >> >> > same checkout action only has /svn/!svn/vcc/default or similar URIs, >> >> > which >> >> > is what I see in the access_log both with mod_python and mod_wsgi. >> >> > For some >> >> > reason the path_info element in mod_python always had some flavor of >> >> > the >> >> > filename. Without being able to know the path in mod_wsgi, I'm not >> >> > sure how >> >> > I can use WSGIAccessScript and WSGIAuthUserScript to manage >> >> > fine-grained >> >> > permissions in svn. >> >> >> >> PATH_INFO is derived from whatever is in REQUEST_URI. The only >> >> additional thing with PATH_INFO is that it would have been normalised >> >> for bit a subversion client it should be using well formed URI so what >> >> you extract from REQUEST_URI should be fine, although might still be a >> >> good idea to do some sanity checks on it. Either way, the information >> >> to do it should be there. >> >> >> >> Alternatively and depending on what operations you want to block then >> >> you do it at Apache configuration level. For example the following >> >> Apache configuration duplicates the listed thing from subversion >> >> authnz file. >> >> >> >> # [Project1:/] >> >> # vishwajeet = rw >> >> >> >> <Location /svn/Project1/!svn/*/*/*> >> >> Require user vishwajeet >> >> </Location> >> >> >> >> # [Project2:/] >> >> # vishwajeet = r >> >> >> >> <Location /svn/Project2/!svn/*/*/*> >> >> Require user vishwajeet >> >> <LimitExcept OPTIONS GET PROPFIND REPORT COPY> >> >> deny from all >> >> </LimitExcept> >> >> </Location> >> >> >> >> You could also start to tie this in with WSGIAuthGroupScript and have >> >> what groups users are in defined by Python code. For example with >> >> Location with path have: >> >> >> >> Require wsgi-group svn_read >> >> <LimitExcept GET PROPFIND OPTIONS REPORT> >> >> Require wsgi-group svn_write >> >> </LimitExcept> >> >> >> >> Where for Django Python code behind might be: >> >> >> >> def groups_for_user(environ, user): >> >> db.reset_queries() >> >> >> >> kwargs = {'username': req.user, 'is_active': True} >> >> >> >> try: >> >> try: >> >> user = User.objects.get(**kwargs) >> >> except User.DoesNotExist: >> >> return None >> >> >> >> return user.groups >> >> >> >> finally: >> >> db.connection.close() >> >> >> >> BTW, just a warning. WSGIAuthUserScript/WSGIAuthGroupScript are called >> >> on every request when HTTP Basic authentication is being used. In high >> >> volume sites the overhead of this can be noticeable if you have to go >> >> back to a database to authenticate/authorise every time. You might >> >> want to look at some level of caching and credential expiration within >> >> the process to avoid going to the database all the time. >> >> >> >> That is probably all I can say at the moment without seeing the >> >> specific values of REQUEST_METHOD and REQUEST_URI you are getting for >> >> the request you think you are getting the wrong information for. >> >> >> >> Graham >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "modwsgi" group. >> > To post to this group, send email to [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]. >> > For more options, visit this group at >> > http://groups.google.com/group/modwsgi?hl=en. >> > >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "modwsgi" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/modwsgi?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/modwsgi?hl=en. > -- You received this message because you are subscribed to the Google Groups "modwsgi" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/modwsgi?hl=en.
