Я слежу это руководство по настройке гитолита и в какой-то момент используется следующий ScriptAliasMatch:
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/var/www/bin/gitolite-suexec-wrapper.sh/$1
И целевой сценарий начинается с
USER=$1
Итак, я предполагаю, что это используется для перенаправления имени пользователя из apache в сценарий suexec (который действительно требует). Но я не понимаю, как это делается. В Документация ScriptAliasMatch заставляет меня думать, что /$1
будет заменен первой совпадающей группой регулярного выражения перед ним. Для меня он захватывает из (? X) ^ /(. * к))$, поэтому здесь нет ничего о пользователе.
Моя основная проблема в том, что USER
в моем скрипте пусто, поэтому я не получаю авторизации в гитолите. Я передаю свое имя пользователя apache через базовую аутентификацию:
<Location />
# Crowd auth
AuthType Basic
AuthName "Git repositories"
...
Require valid-user
</Location>
определен непосредственно под предыдущим ScriptAliasMatch.
Поэтому мне действительно интересно, как это должно работать и какую часть механизма я пропустил, чтобы не получить пользователя в моем скрипте.
Я нашел решение после https://stackoverflow.com/questions/3817478/setting-up-git-server-on-windows-with-git-http-backend-exe и https://stackoverflow.com/questions/8021167/git-debian-apache-and-smart-http который должен был добавить
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
в мою конфигурацию apache и использовать $REMOTE_USER
в моем сценарии, который действительно содержит аутентифицированное имя пользователя. Мне действительно интересно, как должен работать образец в руководстве.