From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E923C432BE for ; Wed, 4 Aug 2021 20:43:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7315C61040 for ; Wed, 4 Aug 2021 20:43:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240979AbhHDUnN (ORCPT ); Wed, 4 Aug 2021 16:43:13 -0400 Received: from mail-0201.mail-europe.com ([51.77.79.158]:37186 "EHLO mail-0201.mail-europe.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240977AbhHDUnH (ORCPT ); Wed, 4 Aug 2021 16:43:07 -0400 Date: Wed, 04 Aug 2021 20:42:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eagain.st; s=protonmail; t=1628109770; bh=7D2hSLEnw01n7ZQ00fSp/w6mGyEyM3g/mTPGsf0Vs84=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=tdTYQpHoaVWQoYuQ8pWLlEJi+saYwb3PBxQXYSDyBDp9CAhwfJo350uqVF9XSCQrw bko3d2t3aGnTZYldL5i5mfTawtqKUfoTZmclP6dlKdSUIUgNV9wBvh417Hc+Q3W1wt mMZD/qTeQAGY37KZlspBqDdhvQXC9lcCbU9mvyQHLEUEHdjN60ivtZvCcrlP8MtakM xLTymrMA1yFQFWohXfnqty4LlqLloownF1QUP1knFbe9HDXchTmDWn+/bdKIWaZifm hPwn05+QwxtdKCtEWlQ9tv0rn/iAKPagm/qNxzSd30MWTh6O4u1RRKBpUfULOV8zmi cW/qiYPCOtzCw== To: git@vger.kernel.org From: Kim Altintop Cc: Kim Altintop , Jonathan Tan , Junio C Hamano , Brandon Williams Reply-To: Kim Altintop Subject: [PATCH v3] upload-pack.c: treat want-ref relative to namespace Message-ID: <20210804203829.661565-1-kim@eagain.st> In-Reply-To: <20210731203415.618641-1-kim@eagain.st> References: <20210730135845.633234-1-kim@eagain.st> <20210731203415.618641-1-kim@eagain.st> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org When 'upload-pack' runs within the context of a git namespace, treat any 'want-ref' lines the client sends as relative to that namespace. Also check if the wanted ref is hidden via 'hideRefs'. If it is hidden, respond with an error as if the ref didn't exist. Helped-by: Jonathan Tan Signed-off-by: Kim Altintop --- Changes from v2: * upload-pack.c: release strbuf * t5730: revert to scoping to $REPO via subshell in setup * t5730: add "cross-check" tests as per review comments from Jonathan t/t5703-upload-pack-ref-in-want.sh | 128 +++++++++++++++++++++++++++++ upload-pack.c | 18 ++-- 2 files changed, 139 insertions(+), 7 deletions(-) diff --git a/t/t5703-upload-pack-ref-in-want.sh b/t/t5703-upload-pack-ref-i= n-want.sh index e9e471621d..4a828042bb 100755 --- a/t/t5703-upload-pack-ref-in-want.sh +++ b/t/t5703-upload-pack-ref-in-want.sh @@ -298,6 +298,134 @@ test_expect_success 'fetching with wildcard that matc= hes multiple refs' ' =09grep "want-ref refs/heads/o/bar" log ' +REPO=3D"$(pwd)/repo-ns" + +write_fetch_want_ref() { +=09local wanted_ref=3D"$1" + +=09write_command fetch +=09echo "0001" +=09echo "no-progress" +=09echo "want-ref $1" +=09echo "done" +=09echo "0000" +} + +test_expect_success 'setup namespaced repo' ' +=09( +=09=09git init -b main "$REPO" && +=09=09cd "$REPO" && +=09=09test_commit a && +=09=09test_commit b && +=09=09git checkout a && +=09=09test_commit c && +=09=09git checkout a && +=09=09test_commit d && +=09=09git update-ref refs/heads/ns-no b && +=09=09git update-ref refs/namespaces/ns/refs/heads/ns-yes c && +=09=09git update-ref refs/namespaces/ns/refs/heads/hidden d +=09) && +=09git -C "$REPO" config uploadpack.allowRefInWant true +' + +test_expect_success 'with namespace: want-ref is considered relative to na= mespace' ' +=09wanted_ref=3Drefs/heads/ns-yes && + +=09oid=3D$(git -C "$REPO" rev-parse $wanted_ref) && +=09cat >expected_refs <<-EOF && +=09$oid $wanted_ref +=09EOF +=09git -C "$REPO" rev-parse a $wanted_ref >expected_commits && + +=09test-tool pkt-line pack >in <<-EOF && +=09$(write_fetch_want_ref $wanted_ref) +=09EOF + +=09env GIT_NAMESPACE=3Dns test-tool -C "$REPO" serve-v2 --stateless-rpc >o= ut in <<-EOF && +=09$(write_fetch_want_ref $wanted_ref) +=09EOF + +=09test_must_fail env GIT_NAMESPACE=3Dns \ +=09=09test-tool -C "$REPO" serve-v2 --stateless-rpc >out expected_refs <<-EOF && +=09$oid $wanted_ref +=09EOF +=09git -C "$REPO" rev-parse a $wanted_ref >expected_commits && + +=09test-tool pkt-line pack >in <<-EOF && +=09$(write_fetch_want_ref $wanted_ref) +=09EOF + +=09test-tool -C "$REPO" serve-v2 --stateless-rpc >out in <<-EOF && +=09$(write_fetch_want_ref $wanted_ref) +=09EOF + +=09test_must_fail env GIT_NAMESPACE=3Dns \ +=09=09test-tool -C "$REPO" serve-v2 --stateless-rpc >out