Как сделать так, чтобы текущий пользователь вошел в систему Apache realm?


Я пишу простой внутренний интерфейс для Subversion. У нас есть установка Apache, обслуживающая репозитории SVN благодаря WebDAV. Кроме того, аутентификация осуществляется через область Apache и Открытый Каталог. Как бы то ни было, это в основном довольно ванильный Mac OS X Server 10.6 setup.

Теперь некоторые из задач, за выполнение которых отвечает наш интерфейс, должны знать имя пользователя, вызывающего действие. Например, создание репозитория необходимо для того, чтобы мы получили правильный журналы того, кто на самом деле его создал. Если я не предоставлю эту информацию, SVN просто использует процесс, который ее создал, который в нашем случае является пользователем, выполняющим httpd.

Я делаю это на php, но мне не обязательно реализовывать это с помощью php. Если я могу получить информацию в скрипте оболочки, это тоже хорошо. Важно то, что я каким-то образом получаю информацию. Решение, которое я впервые разработал, которое, как я предполагал, работало, так как оно правильно сообщало мое имя пользователя, просто вызов:

get_current_user();

Тем не менее, это, кажется, Всегда возвращает мое имя пользователя, даже если какой-то другой пользователь запускает действие во время входа в область. Есть ли способ получить правильного пользователя?


EDIT: я, возможно, был немного слишком быстр, чтобы прыгать с пистолета здесь. Похоже, что первая переменная не устанавливается через определенное время. Однако пользователь все еще входит в систему, так как нет запроса на вход. Таким образом, ниже предлагается решение на самом деле неприменимо.


Теперь я чувствую себя как идиот. Этот простой фрагмент работал (хотя его было трудно найти):

$username = $_SERVER["PHP_AUTH_USER"];

Однако этого не произошло:

$username = apache_getenv("REMOTE_USER");
У кого-нибудь есть идея, почему последнее не работает? Единственные документы, которые я смог найти, предполагают, что это работает только на Apache 2. Тем не менее, я на самом деле запускаю Apache 2, так что это не может быть так.
1   3   2009-11-16 15:18:48

1 ответ:

Итак, после того, как я долго гуглил, я понял, что метод получения имени пользователя меняется практически с каждой проходящей версией PHP. Текущее решение, которое кажется единственным, состоит в том, чтобы получить данные из следующей переменной:

$_SERVER['REMOTE_USER'];

Однако эта переменная может быть установлена, а может и не быть. Причина, по которой я, вероятно, правильно увидел информацию, заключалась в том, что информация была отправлена в заголовках, когда я вошел в realm, а затем посетил скрипт PHP, который был за пределами упомянутого царства. Информация действительно поступила, но не была достоверной.

Apache docs на самом деле говорит вам это в "Oh BTW"-моде. Я не уверен, что аутентификация переносится через несколько областей на одном хосте, но в любом случае это решило проблему.