diff options
Diffstat (limited to 'run')
| -rwxr-xr-x | run | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -1,10 +1,16 @@ #!/usr/bin/env fish +set REPO_PERMISSIONS /etc/repo-permissions +set GIT_COMMAND_REGEX "^(git-(?:upload-pack|receive-pack|upload-archive)) '((?:\/[a-zA-Z-]+)+.git)'\$" # echo check for permissions -set -l USER (whoami) -set matcher (string match -r -g "^.*'(.*)'\$" "$argv") -cat /srv/repos/permissions | grep -q -E "^$matcher[1]:$USER" +set -l checkUser (whoami) +set -l matcher (string match -r -g $GIT_COMMAND_REGEX "$argv") +set -l gitCommand $matcher[1] +set -l repo $matcher[2] +set -l repoDir srv repos +set -l repoDir /(string join -n '/' $repoDir (string split '/' $repo)) +cat $REPO_PERMISSIONS | grep -q -E "^$repoDir:$checkUser" or exit 1; # run command -/usr/bin/sudo -u git /usr/bin/git-shell -c "$argv" +/usr/bin/sudo -u git /usr/bin/git-shell -c "$gitCommand '$repoDir'" |
