blob: f8b6b0bbeb022e9a3ead8c2ff1d0442742d1b89c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/bin/sh
# Форс-команда из authorized_keys: command="git-ns <namespace>".
# Пускает пользователя только в git-операции над репозиториями ЕГО неймспейса.
NS="$1"
REPOS="${REPOS_DIR:-/repos}"
set -- $SSH_ORIGINAL_COMMAND
cmd="$1"
repo=$(printf '%s' "$2" | tr -d "'\"")
repo="${repo#/}"
case "$cmd" in
git-receive-pack|git-upload-pack|git-upload-archive) ;;
*) echo "разрешены только git-команды" >&2; exit 1 ;;
esac
# без слеша -> свой неймспейс
case "$repo" in
*/*) ;;
*) repo="$NS/$repo" ;;
esac
# запрет выхода в чужой неймспейс
case "$repo" in
"$NS/"*) ;;
*) echo "чужой неймспейс запрещён" >&2; exit 1 ;;
esac
repo="${repo%/}"
exec git-shell -c "$cmd '$REPOS/$repo'"
|