Механизм пересылки пользователей в ScriptAliasMatch
Я следую этому руководству, чтобы настроить gitolite, и в какой-то момент используется следующий 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) ^ /(. * To))$, поэтому здесь нет ничего о пользователе.
Моя основная проблема заключается в том, что USER
в моем скрипте пусто, поэтому я не получаю авторизации в gitolite. Я передаю свое имя пользователя apache через обычную аутентификацию:
<Location />
# Crowd auth
AuthType Basic
AuthName "Git repositories"
...
Require valid-user
</Location>
определено только под предыдущим ScriptAliasMatch.
Так что мне действительно интересно, как это должно работать и какую часть механизма я пропустил, чтобы я не смог найти пользователя в моем скрипте.
1 ответ
Я нашел решение после 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
в моем скрипте, который действительно содержит аутентифицированное имя пользователя. Мне действительно интересно, как пример в учебнике должен работать.