Comment vous connectez-vous à un domaine Apache?

J’écris une simple interface interne à Subversion. Grâce à WebDAV, nous avons une configuration Apache servant les référentiels SVN. En outre, l’authentification est effectuée via un royaume Apache et Open Directory. Pour ce que cela vaut, il s’agit essentiellement d’une jolie configuration Mac OS X Server 10.6.

Maintenant, certaines des tâches qui incombent à notre front-end doivent connaître le nom d’utilisateur de l’utilisateur qui appelle l’action. Par exemple, la création d’un référentiel en a besoin pour que nous obtenions des journaux corrects de ceux qui les ont créés. Si je ne fournis pas ces informations, SVN utilise simplement le processus qui l’a créé, dans notre cas, l’utilisateur exécute httpd.

Je le fais en php, mais je n’ai pas nécessairement besoin de l’implémenter en utilisant PHP. Si je peux obtenir les informations dans un script shell, c’est bien aussi. Ce qui compte, c’est que je reçois en quelque sorte l’information. La solution que j’ai développée pour la première fois et que je supposais efficace, car elle indiquait correctement mon nom d’utilisateur, consiste simplement à appeler:

get_current_user(); 

Cependant, cela semble toujours renvoyer mon nom d’utilisateur, même si un autre utilisateur lance l’action en étant connecté au royaume. Est-il possible d’obtenir le bon utilisateur?


EDIT: J’ai peut-être été un peu rapide pour sauter le pistolet ici. Il semble que la première variable ne soit pas définie après un certain temps. Cependant, l’utilisateur est toujours connecté car il n’y a pas de demande de connexion. Ainsi, la solution suggérée ci-dessous n’est pas vraiment applicable.


Maintenant je me sens comme un idjit. Cet extrait simple a fonctionné (même si c’était difficile à trouver):

 $username = $_SERVER["PHP_AUTH_USER"]; 

Cependant, cela n’a pas:

 $username = apache_getenv("REMOTE_USER"); 

Quelqu’un a une idée de la raison pour laquelle ce dernier ne fonctionne pas? Les seuls documents que je pourrais trouver suggèrent que cela ne fonctionne que sur Apache 2. Cependant, je suis en fait en train d’exécuter Apache 2 pour que ce ne soit pas le cas.

Donc, après avoir longuement consulté Google, j’ai réalisé que la méthode pour obtenir le nom d’utilisateur avait changé à peu près à chaque version de PHP. La solution actuelle qui semble être la seule consiste à obtenir les données de la variable suivante:

 $_SERVER['REMOTE_USER']; 

Cependant, cette variable peut ou non être définie. La raison pour laquelle j’ai probablement vu les informations correctement était que les informations étaient envoyées dans les en-têtes lorsque je me connectais au domaine, puis que je visitais le script PHP qui se trouvait en dehors de ce domaine. L’information est arrivée, mais n’était pas fiable.

Les documents Apache vous disent cela dans un mode “Oh BTW”. Je ne suis pas sûr si l’authentification est transmise sur plusieurs domaines sur le même hôte, mais dans tous les cas, cela a résolu le problème.