From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS53758 23.128.96.0/24 X-Spam-Status: No, score=-4.0 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by dcvr.yhbt.net (Postfix) with ESMTP id DCA621F8C6 for ; Wed, 4 Aug 2021 21:01:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238670AbhHDVBh (ORCPT ); Wed, 4 Aug 2021 17:01:37 -0400 Received: from mail-0201.mail-europe.com ([51.77.79.158]:47861 "EHLO mail-0201.mail-europe.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237671AbhHDVBg (ORCPT ); Wed, 4 Aug 2021 17:01:36 -0400 Date: Wed, 04 Aug 2021 21:00:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eagain.st; s=protonmail; t=1628110849; bh=xPeuZ24T5DIxPYWWiZVOo4fokwrlUk2YlOYcRZz5Y9o=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=vDGL3Qu8lhYo/33/ulH2CauQxpCGpvkobmf6MXDxNBOSS4oaq5mVBc64jAozqKV3o xANPdRm7TWaXWF4zLpIHLdXlcMV8N/VwvdkUFmyJ7o/CgHRTldgC4X/XKYUQ9rzT2z KpAsDukr0zeGJLx7mzHAdW5+liWzjvd4LuYttwMhLB7XWetIVy+xLf2WPkaNK8EBKd bOzL+K72gxs2xesgSSjk8otuK+BRYB3DRykfoMftkpnlOXTtjL4RS5rS+o6bFmpvtY M3YzdQh1CCWTMUXA8TnXPc0XpF6tUENRhHRfqHuDyGEO1DdLAJ2/h91wYdE1yWWWsi B1xnHGWAeMc3w== To: git@vger.kernel.org From: Kim Altintop Cc: Kim Altintop , Jonathan Tan , Junio C Hamano , Brandon Williams Reply-To: Kim Altintop Subject: [PATCH v4] upload-pack.c: treat want-ref relative to namespace Message-ID: <20210804205951.668140-1-kim@eagain.st> In-Reply-To: <20210804203829.661565-1-kim@eagain.st> References: <20210730135845.633234-1-kim@eagain.st> <20210731203415.618641-1-kim@eagain.st> <20210804203829.661565-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 v3: * t5703: make tests actually pass :) t/t5703-upload-pack-ref-in-want.sh | 140 +++++++++++++++++++++++++++++ upload-pack.c | 18 ++-- 2 files changed, 151 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..4da86d771b 100755 --- a/t/t5703-upload-pack-ref-in-want.sh +++ b/t/t5703-upload-pack-ref-in-want.sh @@ -298,6 +298,146 @@ 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 "refs/namespaces/ns/$wanted_ref") && +=09cat >expected_refs <<-EOF && +=09$oid $wanted_ref +=09EOF +=09cat >expected_commits <<-EOF && +=09$oid +=09$(git -C "$REPO" rev-parse a) +=09EOF + +=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 +=09cat >expected_commits <<-EOF && +=09$oid +=09$(git -C "$REPO" rev-parse a) +=09EOF + +=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