summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hosts/ahmed/git.linus.onl/default.nix14
-rw-r--r--hosts/ahmed/git.linus.onl/no-ownership-check-for-root.patch14
2 files changed, 28 insertions, 0 deletions
diff --git a/hosts/ahmed/git.linus.onl/default.nix b/hosts/ahmed/git.linus.onl/default.nix
index 1436eda..bf9fe0b 100644
--- a/hosts/ahmed/git.linus.onl/default.nix
+++ b/hosts/ahmed/git.linus.onl/default.nix
@@ -2,6 +2,7 @@
config,
pkgs,
metadata,
+ lib,
...
}: let
git-shell = "${pkgs.gitMinimal}/bin/git-shell";
@@ -54,6 +55,7 @@ in {
# Public git viewer.
services.cgit."git.linus.onl" = {
enable = true;
+
scanPath = location;
settings = let
package = config.services.cgit."git.linus.onl".package;
@@ -84,5 +86,17 @@ in {
enableACME = useACME;
forceSSL = useACME;
};
+
+ # Monkey-patch the version of Git used by CGit to handle requests.
+ services.nginx.virtualHosts."git.linus.onl" = {
+ locations."~ /.+/(info/refs|git-upload-pack)".fastcgiParams = {
+ SCRIPT_FILENAME = lib.mkForce "${pkgs.git.overrideAttrs (old: {
+ patches = (old.patches or []) ++ [
+ ./no-ownership-check-for-root.patch
+ ];
+ })}/libexec/git-core/git-http-backend";
+ GIT_NO_CHECK_OWNERSHIP = "1";
+ };
+ };
};
}
diff --git a/hosts/ahmed/git.linus.onl/no-ownership-check-for-root.patch b/hosts/ahmed/git.linus.onl/no-ownership-check-for-root.patch
new file mode 100644
index 0000000..7749d2d
--- /dev/null
+++ b/hosts/ahmed/git.linus.onl/no-ownership-check-for-root.patch
@@ -0,0 +1,14 @@
+diff --git a/setup.c b/setup.c
+index 18927a8..ac6823f 100644
+--- a/setup.c
++++ b/setup.c
+@@ -1159,6 +1159,9 @@ static int ensure_valid_ownership(const char *gitfile,
+ const char *worktree, const char *gitdir,
+ struct strbuf *report)
+ {
++ if (git_env_bool("GIT_NO_CHECK_OWNERSHIP", 0))
++ return 1;
++
+ struct safe_directory_data data = {
+ .path = worktree ? worktree : gitdir
+ };