{"thread":{"id":"8604","subject":"[PATCH] cvsserver: Actually implement --export-all","startedAt":"2007-06-15T01:01:52Z","lastAt":"2007-06-17T01:01:10Z","messageCount":4,"participants":["Frank Lichtenheld","Alex Riesen","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"45102","messageId":"11818693133210-git-send-email-frank@lichtenheld.de","threadId":"8604","inReplyTo":null,"subject":"[PATCH] cvsserver: Let --base-path and pserver get along just fine","fromName":"Frank Lichtenheld","fromEmail":"frank@lichtenheld.de","sentAt":"2007-06-15T01:01:52Z","receivedAt":"2007-06-15T01:01:52Z","isPatch":true,"sender":{"key":"frank@lichtenheld.de","avatar":"https://gravatar.com/avatar/b9f1d4b120e138f157c9e480d0818197c474628923786adb98f30017cdb99c3c?d=mp&s=160"},"body":"Embarassing bug number one in my options patch.\n\nSince the code for --base-path support rewrote\nthe cvsroot value after comparing it with a possible\nexisting value (i.e. from pserver authentication)\nthe check always failed.\n\nSigned-off-by: Frank Lichtenheld <frank@lichtenheld.de>\n---\n git-cvsserver.perl              |   10 ++++++----\n t/t9400-git-cvsserver-server.sh |    1 +\n 2 files changed, 7 insertions(+), 4 deletions(-)\n\n I can also squash these two fix-ups into the previous commit\n if preferred.\n\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex 9fbd9db..f78afe8 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -212,15 +212,17 @@ sub req_Root\n \treturn 0;\n     }\n \n+    my $cvsroot = $state->{'base-path'} || '';\n+    $cvsroot =~ s#/+$##;\n+    $cvsroot .= $data;\n+\n     if ($state->{CVSROOT}\n-\t&& ($state->{CVSROOT} ne $data)) {\n+\t&& ($state->{CVSROOT} ne $cvsroot)) {\n \tprint \"error 1 Conflicting roots specified\\n\";\n \treturn 0;\n     }\n \n-    $state->{CVSROOT} = $state->{'base-path'} || '';\n-    $state->{CVSROOT} =~ s#/+$##;\n-    $state->{CVSROOT} .= $data;\n+    $state->{CVSROOT} = $cvsroot;\n \n     $ENV{GIT_DIR} = $state->{CVSROOT} . \"/\";\n \ndiff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh\nindex 392f890..9b69452 100755\n--- a/t/t9400-git-cvsserver-server.sh\n+++ b/t/t9400-git-cvsserver-server.sh\n@@ -163,6 +163,7 @@ BEGIN AUTH REQUEST\n anonymous\n \n END AUTH REQUEST\n+Root /gitcvs.git\n EOF\n \n test_expect_success 'req_Root (base-path)' \\\n-- \n1.5.2.1\n"},{"id":"45101","messageId":"11818693133098-git-send-email-frank@lichtenheld.de","threadId":"8604","inReplyTo":"11818693133210-git-send-email-frank@lichtenheld.de","subject":"[PATCH] cvsserver: Actually implement --export-all","fromName":"Frank Lichtenheld","fromEmail":"frank@lichtenheld.de","sentAt":"2007-06-15T01:01:53Z","receivedAt":"2007-06-15T01:01:53Z","isPatch":true,"sender":{"key":"frank@lichtenheld.de","avatar":"https://gravatar.com/avatar/b9f1d4b120e138f157c9e480d0818197c474628923786adb98f30017cdb99c3c?d=mp&s=160"},"body":"Embarrassing bug number two in my options patch.\n\nAlso enforce that --export-all is only ever used together with an\nexplicit whitelist. Otherwise people might export every git repository\non the whole system without realising.\n\nSigned-off-by: Frank Lichtenheld <frank@lichtenheld.de>\n---\n Documentation/git-cvsserver.txt |    3 ++-\n git-cvsserver.perl              |    8 +++++++-\n t/t9400-git-cvsserver-server.sh |   16 ++++++++++++++++\n 3 files changed, 25 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt\nindex 6d1e311..60d0bcf 100644\n--- a/Documentation/git-cvsserver.txt\n+++ b/Documentation/git-cvsserver.txt\n@@ -38,7 +38,8 @@ Prepend 'path' to requested CVSROOT\n Don't allow recursing into subdirectories\n \n --export-all::\n-Don't check for `gitcvs.enabled` in config\n+Don't check for `gitcvs.enabled` in config. You also have to specify a list\n+of allowed directories (see below) if you want to use this option.\n \n --version, -V::\n Print version information and exit\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex f78afe8..5cbf27e 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -130,6 +130,11 @@ if (@ARGV) {\n # everything else is a directory\n $state->{allowed_roots} = [ @ARGV ];\n \n+# don't export the whole system unless the users requests it\n+if ($state->{'export-all'} && !@{$state->{allowed_roots}}) {\n+    die \"--export-all can only be used together with an explicit whitelist\\n\";\n+}\n+\n # if we are called with a pserver argument,\n # deal with the authentication cat before entering the\n # main loop\n@@ -276,7 +281,8 @@ sub req_Root\n \n     my $enabled = ($cfg->{gitcvs}{$state->{method}}{enabled}\n \t\t   || $cfg->{gitcvs}{enabled});\n-    unless ($enabled && $enabled =~ /^\\s*(1|true|yes)\\s*$/i) {\n+    unless ($state->{'export-all'} ||\n+\t    ($enabled && $enabled =~ /^\\s*(1|true|yes)\\s*$/i)) {\n         print \"E GITCVS emulation needs to be enabled on this repo\\n\";\n         print \"E the repo config file needs a [gitcvs] section added, and the parameter 'enabled' set to 1\\n\";\n         print \"E \\n\";\ndiff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh\nindex 9b69452..b442b5d 100755\n--- a/t/t9400-git-cvsserver-server.sh\n+++ b/t/t9400-git-cvsserver-server.sh\n@@ -173,6 +173,22 @@ test_expect_success 'req_Root (base-path)' \\\n test_expect_failure 'req_Root failure (base-path)' \\\n   'cat request-anonymous | git-cvsserver --strict-paths --base-path $WORKDIR pserver $SERVERDIR >log 2>&1'\n \n+GIT_DIR=\"$SERVERDIR\" git config --bool gitcvs.enabled false || exit 1\n+\n+test_expect_success 'req_Root (export-all)' \\\n+  'cat request-anonymous | git-cvsserver --export-all pserver $WORKDIR >log 2>&1 &&\n+   tail -n1 log | grep -q \"^I LOVE YOU$\"'\n+\n+test_expect_failure 'req_Root failure (export-all w/o whitelist)' \\\n+  'cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1\n+   || false'\n+\n+test_expect_success 'req_Root (everything together)' \\\n+  'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&\n+   tail -n1 log | grep -q \"^I LOVE YOU$\"'\n+\n+GIT_DIR=\"$SERVERDIR\" git config --bool gitcvs.enabled true || exit 1\n+\n #--------------\n # CONFIG TESTS\n #--------------\n-- \n1.5.2.1\n"},{"id":"45197","messageId":"20070616235250.GA3231@steel.home","threadId":"8604","inReplyTo":"11818693133098-git-send-email-frank@lichtenheld.de","subject":"Re: [PATCH] cvsserver: Actually implement --export-all","fromName":"Alex Riesen","fromEmail":"raa.lkml@gmail.com","sentAt":"2007-06-16T23:52:50Z","receivedAt":"2007-06-16T23:52:50Z","isPatch":true,"sender":{"key":"raa.lkml@gmail.com","avatar":"https://avatars.githubusercontent.com/u/324101?v=4"},"body":"Frank Lichtenheld, Fri, Jun 15, 2007 03:01:53 +0200:\n> +test_expect_failure 'req_Root failure (export-all w/o whitelist)' \\\n> +  'cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1\n> +   || false'\n\nThis does not work, at least for bash in current Ubuntu:\n\n    GNU bash, version 3.2.13(1)-release\n\nYou have to put \"||\" on the previous line:\n\ndiff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh\nindex b442b5d..0331770 100755\n--- a/t/t9400-git-cvsserver-server.sh\n+++ b/t/t9400-git-cvsserver-server.sh\n@@ -180,8 +180,8 @@ test_expect_success 'req_Root (export-all)' \\\n    tail -n1 log | grep -q \"^I LOVE YOU$\"'\n \n test_expect_failure 'req_Root failure (export-all w/o whitelist)' \\\n-  'cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1\n-   || false'\n+  'cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 ||\n+   false'\n \n test_expect_success 'req_Root (everything together)' \\\n   'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&\n"},{"id":"45198","messageId":"7vy7ij1jjd.fsf@assigned-by-dhcp.pobox.com","threadId":"8604","inReplyTo":"20070616235250.GA3231@steel.home","subject":"Re: [PATCH] cvsserver: Actually implement --export-all","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-06-17T01:01:10Z","receivedAt":"2007-06-17T01:01:10Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thanks.\n"}]}