summaryrefslogtreecommitdiffstats
path: root/git_superproject.py
diff options
context:
space:
mode:
authorEmily Shaffer <nasamuffin@google.com>2023-09-15 13:26:38 -0700
committerLUCI <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-11-09 22:13:17 +0000
commit8a6d1724d9d9f4598d15338be9723542ba79467e (patch)
tree952ef4c542e5ef711bb675e6d9c8949efa30ae6f /git_superproject.py
parent3652b497bbbd6227b2cb84bb61a0fe8d21ba20d6 (diff)
downloadgit-repo-8a6d1724d9d9f4598d15338be9723542ba79467e.tar.gz
git_superproject: tell git that superproject is bare
The superproject is initialized as a bare repo in Superproject:_Init(). That means that later operations must treat it as a bare repository, specifying the gitdir and setting 'bare' appropriately when launching GitCommand()s. It's also OK not to specify cwd here because GitCommand() will drop cwd if bare == True anyways. With this change, it's possible to run `repo init` and `repo sync` with the Git config 'safe.bareRepository' set to 'explicit'. This config strengthens Git's security posture against embedded bare repository attacks like https://github.com/justinsteven/advisories/blob/main/2022_git_buried_bare_repos_and_fsmonitor_various_abuses.md. Bug: b/227257481 Change-Id: I954a64c6883d2ca2af9c603e7076fd83b52584e9 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/389794 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Jason R. Coombs <jaraco@google.com> Tested-by: Emily Shaffer <emilyshaffer@google.com> Reviewed-by: Emily Shaffer <emilyshaffer@google.com> Commit-Queue: Jason R. Coombs <jaraco@google.com>
Diffstat (limited to 'git_superproject.py')
-rw-r--r--git_superproject.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/git_superproject.py b/git_superproject.py
index b80f0130..fca0e6f7 100644
--- a/git_superproject.py
+++ b/git_superproject.py
@@ -69,9 +69,9 @@ class UpdateProjectsResult(NamedTuple):
69class Superproject: 69class Superproject:
70 """Get commit ids from superproject. 70 """Get commit ids from superproject.
71 71
72 Initializes a local copy of a superproject for the manifest. This allows 72 Initializes a bare local copy of a superproject for the manifest. This
73 lookup of commit ids for all projects. It contains _project_commit_ids which 73 allows lookup of commit ids for all projects. It contains
74 is a dictionary with project/commit id entries. 74 _project_commit_ids which is a dictionary with project/commit id entries.
75 """ 75 """
76 76
77 def __init__( 77 def __init__(
@@ -235,7 +235,8 @@ class Superproject:
235 p = GitCommand( 235 p = GitCommand(
236 None, 236 None,
237 cmd, 237 cmd,
238 cwd=self._work_git, 238 gitdir=self._work_git,
239 bare=True,
239 capture_stdout=True, 240 capture_stdout=True,
240 capture_stderr=True, 241 capture_stderr=True,
241 ) 242 )
@@ -271,7 +272,8 @@ class Superproject:
271 p = GitCommand( 272 p = GitCommand(
272 None, 273 None,
273 cmd, 274 cmd,
274 cwd=self._work_git, 275 gitdir=self._work_git,
276 bare=True,
275 capture_stdout=True, 277 capture_stdout=True,
276 capture_stderr=True, 278 capture_stderr=True,
277 ) 279 )