]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_lua.xml.fr
265967d353141114799c3db3acaafe664e48b358
[apache] / docs / manual / mod / mod_lua.xml.fr
1 <?xml version="1.0"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision: 1355934:1367300 (outdated) -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <modulesynopsis metafile="mod_lua.xml.meta">
26
27 <name>mod_lua</name>
28
29 <description>Fournit des points d'entr&eacute;e Lua dans diff&eacute;rentes parties du
30 traitement des requ&ecirc;tes httpd</description>
31 <status>Experimental</status>
32 <sourcefile>mod_lua.c</sourcefile>
33 <identifier>lua_module</identifier>
34 <compatibility>versions 2.3 et sup&eacute;rieures</compatibility>
35
36 <summary>
37 <p>Ce module permet d'ajouter au serveur des extensions sous forme de
38 scripts &eacute;crits dans le langage de programmation Lua.
39 <module>mod_lua</module> fournit de nombreuses extensions
40 (hooks) disponibles avec les modules natifs du serveur HTTP Apache,
41 comme les associations de requ&ecirc;tes &agrave; des fichiers, la g&eacute;n&eacute;ration de
42 r&eacute;ponses dynamiques, le contr&ocirc;le d'acc&egrave;s, l'authentification et
43 l'autorisation.</p>
44
45 <p>Vous trouverez davantage d'informations &agrave; propos du langage de
46 programmation Lua sur <a href="http://www.lua.org/">le site web de
47 Lua</a>.</p>
48
49 <note><code>mod_lua</code> est encore au stade exp&eacute;rimental. Son mode
50 d'utilisation et son comportement pourront changer &agrave; tout moment jusqu'&agrave;
51 ce qu'il passe au stade stable, et ce m&ecirc;me entre deux versions stables
52 2.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise &agrave;
53 jour.</note>
54
55 </summary>
56
57 <section id="basicconf"><title>Configuration de base</title>
58
59 <p>La directive de base pour le chargement du module est</p>
60
61 <highlight language="config">
62     LoadModule lua_module modules/mod_lua.so
63 </highlight>
64
65 <p>
66 <code>mod_lua</code> fournit un gestionnaire nomm&eacute;
67 <code>lua-script</code> qui peut &ecirc;tre utilis&eacute; avec une directive
68 <code>AddHandler</code> :</p>
69
70 <highlight language="config">
71 AddHandler lua-script .lua
72 </highlight>
73
74 <p>
75 Ceci aura pour effet de faire traiter les requ&ecirc;tes pour les fichiers
76 dont l'extension est <code>.lua</code> par <code>mod_lua</code> en
77 invoquant cette fonction de <code>gestion</code> de fichier.
78 </p>
79
80 <p>Pour plus de d&eacute;tails, voir la directive
81 <directive>LuaMapHandler</directive>.
82  </p>
83 </section>
84
85 <section id="writinghandlers"><title>Ecrire des gestionnaires</title>
86 <p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
87 point d'accroche (hook) sp&eacute;cifique responsable de la g&eacute;n&eacute;ration de la
88 r&eacute;ponse. <module>mod_proxy</module>, <module>mod_cgi</module> et
89 <module>mod_status</module> sont des exemples de modules comportant un
90 gestionnaire.</p>
91
92 <p><code>mod_lua</code> cherche toujours &agrave; invoquer une fonction Lua pour le
93 gestionnaire, plut&ocirc;t que de simplement &eacute;valuer le corps d'un script dans
94 le style de CGI. Une fonction de gestionnaire se pr&eacute;sente comme suit :</p>
95
96
97 <highlight language="lua">
98 <strong>example.lua</strong><br/>
99 -- exemple de gestionnaire
100
101 require "string"
102
103 --[[
104      Il s'agit du nom de m&eacute;thode par d&eacute;faut pour les gestionnaires Lua ;
105      voir les noms de fonctions optionnels dans la directive
106      LuaMapHandler pour choisir un point d'entr&eacute;e diff&eacute;rent.
107 --]]
108 function handle(r)
109     r.content_type = "text/plain"
110     r:puts("Hello Lua World!\n")
111
112     if r.method == 'GET' then
113         for k, v in pairs( r:parseargs() ) do
114             r:puts( string.format("%s: %s\n", k, v) )
115         end
116     elseif r.method == 'POST' then
117         for k, v in pairs( r:parsebody() ) do
118             r:puts( string.format("%s: %s\n", k, v) )
119         end
120     else
121         r:puts("Unsupported HTTP method " .. r.method)
122     end
123 end
124 </highlight>
125
126 <p>
127 Ce gestionnaire se contente d'afficher les arguments cod&eacute;s d'un uri ou
128 d'un formulaire dans un page au format texte.
129 </p>
130
131 <p>
132 Cela signifie que vous pouvez (et &ecirc;tes encourag&eacute; &agrave;) avoir plusieurs
133 gestionnaires (ou points d'entr&eacute;e, ou filtres) dans le m&ecirc;me script.
134 </p>
135
136 </section>
137 <section id="writingauthzproviders">
138 <title>Ecriture de fournisseurs d'autorisation</title>
139
140 <p><module>mod_authz_core</module> fournit une interface d'autorisation
141 de haut niveau bien plus facile &agrave; utiliser que dans les hooks
142 correspondants. Le premier argument de la directive <directive
143 module="mod_authz_core">Require</directive> permet de sp&eacute;cifier le
144 fournisseur d'autorisation &agrave; utiliser. Pour chaque directive <directive
145 module="mod_authz_core">Require</directive>,
146 <module>mod_authz_core</module> appellera le fournisseur d'autorisation
147 sp&eacute;cifi&eacute;, le reste de la ligne constituant les param&egrave;tres. Le
148 fournisseur consid&eacute;r&eacute; va alors v&eacute;rifier les autorisations et fournir le
149 r&eacute;sultat dans une valeur de retour.</p>
150
151 <p>En g&eacute;n&eacute;ral, le fournisseur authz est appel&eacute; avant l'authentification.
152 S'il doit conna&icirc;tre le nom d'utilisateur authentifi&eacute; (ou si
153 l'utilisateur est appel&eacute; &agrave; &ecirc;tre authentifi&eacute;), le fournisseur doit
154 renvoyer <code>apache2.AUTHZ_DENIED_NO_USER</code>, ce qui va
155 d&eacute;clancher le processus d'authentification et un deuxi&egrave;me appel du
156 fournisseur authz.</p>
157
158 <p>La fonction du fournisseur authz ci-dessous accepte deux arguments,
159 une adresse IP et un nom d'utilisateur. Elle autorise l'acc&egrave;s dans le
160 cas o&ugrave; la requ&ecirc;te provient de l'adresse IP sp&eacute;cifi&eacute;e, ou si
161 l'utilisateur authentifi&eacute; correspond au second argument :</p>
162
163 <highlight language="lua">
164 <strong>authz_provider.lua</strong><br/>
165
166 require 'apache2'
167
168 function authz_check_foo(r, ip, user)
169     if r.useragent_ip == ip then
170         return apache2.AUTHZ_GRANTED
171     elseif r.user == nil then
172         return apache2.AUTHZ_DENIED_NO_USER
173     elseif r.user == user then
174         return apache2.AUTHZ_GRANTED
175     else
176         return apache2.AUTHZ_DENIED
177     end
178 end
179 </highlight>
180
181 <p>La configuration suivante enregistre cette fonction en tant que
182 fournisseur <code>foo</code>, et la configure por l'URL <code>/</code> :</p>
183 <highlight language="config">
184 LuaAuthzProvider foo authz_provider.lua authz_check_foo
185 &lt;Location /&gt;
186   Require foo 10.1.2.3 john_doe
187 &lt;/Location&gt;
188 </highlight>
189
190 </section>
191
192 <section id="writinghooks"><title>Ecriture de fonctions d'accroche
193 (hooks)</title>
194
195 <p>Les fonctions d'accroche d&eacute;terminent la mani&egrave;re dont les modules (et
196 les scripts Lua) participent au traitement des requ&ecirc;tes. Chaque type
197 d'accroche propos&eacute; par le serveur a un r&ocirc;le sp&eacute;cifique, comme
198 l'association de requ&ecirc;tes au syst&egrave;me de fichiers, le contr&ocirc;le d'acc&egrave;s,
199 ou la d&eacute;finition de types MIME. Il existe aussi des accroches &agrave; usage
200 g&eacute;n&eacute;ral qui s'ex&eacute;cutent simplement &agrave; des moments opportuns du cycle
201 de vie de la requ&ecirc;te.</p>
202
203 <p>Les fonctions d'accroche acceptent l'objet de la requ&ecirc;te comme seul
204 et unique argument. Elles peuvent renvoyer une valeur, selon la
205 fonction, mais il s'agit en g&eacute;n&eacute;ral d'un
206 code d'&eacute;tat HTTP ou des valeurs OK, DONE, ou DECLINED,
207 que vous pouvez &eacute;crire dans lua sous la forme <code>apache2.OK</code>,
208 <code>apache2.DONE</code>, ou <code>apache2.DECLINED</code>.</p>
209
210
211 <highlight language="lua">
212 <strong>translate_name.lua</strong><br/>
213 -- exemple d'accroche qui r&eacute;&eacute;crit un URI en chemin du syst&egrave;me de
214 fichiers.
215
216 require 'apache2'
217
218 function translate_name(r)
219     if r.uri == "/translate-name" then
220         r.filename = r.document_root .. "/find_me.txt"
221         return apache2.OK
222     end
223     -- on ne g&egrave;re pas cette URL et on donne sa chance &agrave; un autre module
224     return apache2.DECLINED
225 end
226 </highlight>
227
228
229 <highlight language="lua">
230 <strong>translate_name2.lua</strong><br/>
231 --[[ exemple d'accroche qui r&eacute;&eacute;crit un URI vers un autre URI. Il renvoie
232         un apache2.DECLINED pour permettre &agrave; un autre interpr&eacute;teur d'URL de
233         travailler sur la substitution, y compris l'accroche translate_name
234         de base dont les tables de correspondances se basent sur DocumentRoot.
235
236      Note: actuellement, il est impossible de pr&eacute;voir si cette action
237      s'ex&eacute;cute avant ou apr&egrave;s mod_alias.
238 --]]
239
240 require 'apache2'
241
242 function translate_name(r)
243     if r.uri == "/translate-name" then
244         r.uri = "/find_me.txt"
245         return apache2.DECLINED
246     end
247     return apache2.DECLINED
248 end
249 </highlight>
250 </section>
251
252 <section id="datastructures"><title>Structures de donn&eacute;es</title>
253
254 <dl>
255 <dt>request_rec</dt>
256         <dd>
257         <p>request_rec est consid&eacute;r&eacute;e en tant que donn&eacute;e utilisateur.
258         Elle poss&egrave;de une m&eacute;tatable qui vous permet d'accomplir des
259         choses int&eacute;ressantes. Pour la plus grande partie, elle poss&egrave;de
260         les m&ecirc;mes champs que la structure request_rec (voir httpd.h en
261         attendant que cette documentation soit plus compl&egrave;te), la
262         plupart d'entre eux &eacute;tant accessibles en lecture et &eacute;criture (le
263         contenu des champs de la table peut &ecirc;tre modifi&eacute;, mais les
264         champs eux-m&ecirc;mes ne peuvent pas &ecirc;tre &eacute;tablis en tant que tables
265         distinctes).</p>
266
267         <table border="1">
268
269         <tr>
270           <th><strong>Nom</strong></th>
271           <th><strong>Type Lua</strong></th>
272           <th><strong>Modifiable</strong></th>
273         </tr>
274         <tr>
275           <td><code>ap_auth_type</code></td>
276           <td>string</td>
277           <td>non</td>
278         </tr>
279         <tr>
280           <td><code>args</code></td>
281           <td>string</td>
282           <td>oui</td>
283         </tr>
284         <tr>
285           <td><code>assbackwards</code></td>
286           <td>boolean</td>
287           <td>non</td>
288         </tr>
289
290         <tr>
291           <td><code>canonical_filename</code></td>
292           <td>string</td>
293           <td>non</td>
294         </tr>
295         <tr>
296           <td><code>content_encoding</code></td>
297           <td>string</td>
298           <td>non</td>
299         </tr>
300         <tr>
301           <td><code>content_type</code></td>
302           <td>string</td>
303           <td>oui</td>
304         </tr>
305
306         <tr>
307           <td><code>context_prefix</code></td>
308           <td>string</td>
309           <td>non</td>
310         </tr>
311         <tr>
312           <td><code>context_document_root</code></td>
313           <td>string</td>
314           <td>non</td>
315         </tr>
316
317         <tr>
318           <td><code>document_root</code></td>
319           <td>string</td>
320           <td>non</td>
321         </tr>
322         <tr>
323           <td><code>err_headers_out</code></td>
324           <td>table</td>
325           <td>non</td>
326         </tr>
327         <tr>
328           <td><code>filename</code></td>
329           <td>string</td>
330           <td>oui</td>
331         </tr>
332         <tr>
333           <td><code>handler</code></td>
334           <td>string</td>
335           <td>oui</td>
336         </tr>
337         <tr>
338           <td><code>headers_in</code></td>
339           <td>table</td>
340           <td>oui</td>
341         </tr>
342         <tr>
343           <td><code>headers_out</code></td>
344           <td>table</td>
345           <td>oui</td>
346         </tr>
347         <tr>
348           <td><code>hostname</code></td>
349           <td>string</td>
350           <td>non</td>
351         </tr>
352         <tr>
353         <td><code>log_id</code></td>
354           <td>string</td>
355           <td>non</td>
356         </tr>
357         <tr>
358           <td><code>method</code></td>
359           <td>string</td>
360           <td>non</td>
361         </tr>
362         <tr>
363           <td><code>notes</code></td>
364           <td>table</td>
365           <td>oui</td>
366         </tr>
367         <tr>
368           <td><code>path_info</code></td>
369           <td>string</td>
370           <td>non</td>
371         </tr>
372         <tr>
373           <td><code>protocol</code></td>
374           <td>string</td>
375           <td>non</td>
376         </tr>
377         <tr>
378           <td><code>proxyreq</code></td>
379           <td>string</td>
380           <td>oui</td>
381         </tr>
382         <tr>
383           <td><code>range</code></td>
384           <td>string</td>
385           <td>non</td>
386         </tr>
387         <tr>
388           <td><code>subprocess_env</code></td>
389           <td>table</td>
390           <td>oui</td>
391         </tr>
392         <tr>
393           <td><code>status</code></td>
394           <td>number</td>
395           <td>oui</td>
396         </tr>
397         <tr>
398           <td><code>the_request</code></td>
399           <td>string</td>
400           <td>non</td>
401         </tr>
402         <tr>
403           <td><code>unparsed_uri</code></td>
404           <td>string</td>
405           <td>non</td>
406         </tr>
407         <tr>
408           <td><code>uri</code></td>
409           <td>string</td>
410           <td>oui</td>
411         </tr>
412         <tr>
413           <td><code>user</code></td>
414           <td>string</td>
415           <td>oui</td>
416         </tr>
417         <tr>
418           <td><code>useragent_ip</code></td>
419           <td>string</td>
420           <td>non</td>
421         </tr>
422         </table>
423
424         <p>La structure request_rec poss&egrave;de (au minimum) les m&eacute;thodes
425         suivantes :</p>
426
427         <highlight language="lua">
428         r:addoutputfilter(name|function) -- ajoute un filtre en sortie
429         </highlight>
430
431         <highlight language="lua">
432         r:parseargs() -- renvoie une table Lua contenant la cha&icirc;ne
433         d'arguments de la requ&ecirc;te
434         </highlight>
435
436
437         <highlight language="lua">
438         r:parsebody() -- interpr&egrave;te toutes donn&eacute;es POST de la requ&ecirc;te et
439         les renvoie sous forme de table Lua
440         </highlight>
441
442
443         <highlight language="lua">
444         r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la r&eacute;ponse
445         </highlight>
446
447         <highlight language="lua">
448         r:write("une simple cha&icirc;ne") -- affichage dans le
449         corps de la r&eacute;ponse
450         </highlight>
451         </dd>
452     </dl>
453
454 </section>
455
456 <section id="logging"><title>Fonctions de journalisation</title>
457
458 <highlight language="lua">
459         -- exemples de messages de journalisation
460         r:trace1("Ceci est un message de journalisation de niveau
461         trace") -- les niveaux valides vont de trace1 &agrave; trace8 <br />
462         r:debug("Ceci est un message de journalisation de niveau debug")<br />
463         r:info("Ceci est un message de journalisation de niveau info")<br />
464         r:notice("Ceci est un message de journalisation de niveau notice")<br />
465         r:warn("Ceci est un message de journalisation de niveau warn")<br />
466         r:err("Ceci est un message de journalisation de niveau err")<br />
467         r:alert("Ceci est un message de journalisation de niveau alert")<br />
468         r:crit("Ceci est un message de journalisation de niveau crit")<br />
469         r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
470 </highlight>
471
472 </section>
473
474 <section id="apache2"><title>Paquet apache2</title>
475 <p>Le paquet nomm&eacute; <code>apache2</code> est fourni avec (au minimum) le
476 contenu suivant :</p>
477 <dl>
478   <dt>apache2.OK</dt>
479   <dd>Constante interne OK. Les gestionnaires renverront cette valeur
480   s'ils ont trait&eacute; la requ&ecirc;te.</dd>
481   <dt>apache2.DECLINED</dt>
482   <dd>Constante interne DECLINED. Les gestionnaires renverront cette
483   valeur s'ils n'ont pas l'intention de traiter la requ&ecirc;te.</dd>
484   <dt>apache2.DONE</dt>
485   <dd>Constante interne DONE.</dd>
486   <dt>apache2.version</dt>
487   <dd>Cha&icirc;ne contenant la version du serveur HTTP Apache</dd>
488   <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
489   <dd>Code d'&eacute;tat HTTP</dd>
490   <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
491   <dd>Constantes internes utilis&eacute;es par <module>mod_proxy</module></dd>
492 </dl>
493 <p>Les autres codes d'&eacute;tat HTTP ne sont pas encore impl&eacute;ment&eacute;s.</p>
494 </section>
495
496
497
498 <directivesynopsis>
499 <name>LuaRoot</name>
500 <description>Sp&eacute;cifie le chemin de base pour la r&eacute;solution des chemins
501 relatifs dans les directives de mod_lua</description>
502 <syntax>LuaRoot /chemin/vers/un/r&eacute;pertoire</syntax>
503 <contextlist><context>server config</context><context>virtual host</context>
504 <context>directory</context><context>.htaccess</context>
505 </contextlist>
506 <override>All</override>
507
508 <usage>
509     <p>Cette directive permet de sp&eacute;cifier le chemin de base qui sera
510     utilis&eacute; pour &eacute;valuer tous les chemins relatifs dans mod_lua. En
511     l'absence de cette directive, les chemins relatifs sont r&eacute;solus par
512     rapport au r&eacute;pertoire de travail courant, ce qui ne sera pas
513     toujours appropri&eacute; pour un serveur.</p>
514 </usage>
515 </directivesynopsis>
516
517 <directivesynopsis>
518 <name>LuaScope</name>
519 <description>Une valeur parmi once, request, conn, server -- la valeur
520 par d&eacute;faut est once</description>
521 <syntax>LuaScope once|request|conn|server [max|min max]</syntax>
522 <default>LuaScope once</default>
523 <contextlist><context>server config</context><context>virtual host</context>
524 <context>directory</context><context>.htaccess</context>
525 </contextlist>
526 <override>All</override>
527
528 <usage>
529     <p>Cette directive permet de sp&eacute;cifier la dur&eacute;e de vie de
530     l'interpr&eacute;teur Lua qui sera utilis&eacute; dans ce "r&eacute;pertoire". La valeur
531     par d&eacute;faut est "once".</p>
532
533    <dl>
534     <dt>once:</dt> <dd>utilise l'interpr&eacute;teur une fois.</dd>
535
536     <dt>request:</dt> <dd>utilise l'interpr&eacute;teur pour traiter tout ce
537     qui est bas&eacute; sur le m&ecirc;me fichier dans la requ&ecirc;te, et qui se trouve
538     aussi dans la port&eacute;e de la requ&ecirc;te.</dd>
539
540     <dt>conn:</dt> <dd>idem request, mais attach&eacute; &agrave; connection_rec</dd>
541
542     <dt>server:</dt>  <dd>Le comportement est ici diff&eacute;rent, car la
543     port&eacute;e du serveur pr&eacute;sente une dur&eacute;e de vie assez longue, et
544     plusieurs threads vont partager le m&ecirc;me server_rec. Pour g&eacute;rer tout
545     ceci, les interpr&eacute;teurs sont stock&eacute;s dans une liste de ressources
546     apr. Les arguments min et max ont &eacute;t&eacute; pr&eacute;vus pour sp&eacute;cifier une
547     taille de jeu, mais sont inutilis&eacute;s pour le moment.</dd>
548    </dl>
549 </usage>
550 </directivesynopsis>
551
552 <directivesynopsis>
553 <name>LuaMapHandler</name>
554 <description>Met en correspondance un chemin avec un gestionnaire lua</description>
555 <syntax>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
556 [nom-fonction]</syntax>
557 <contextlist><context>server config</context><context>virtual host</context>
558 <context>directory</context><context>.htaccess</context>
559 </contextlist>
560 <override>All</override>
561 <usage>
562     <p>Cette directive permet de faire correspondre un mod&egrave;le d'uri avec
563     une fonction de gestionnaire situ&eacute;e dans un fichier sp&eacute;cifique. Elle
564     utilise les expressions rationnelles PCRE pour mettre en
565     correspondance l'uri, et supporte les groupes de correspondance
566     d'interpolation dans le chemin du fichier et le nom de la fonction.
567     Prenez garde aux probl&egrave;mes de s&eacute;curit&eacute; en &eacute;crivant vos expressions
568     rationnelles.</p>
569    <example><title>Exemples :</title>
570     <highlight language="config">
571     LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2
572     </highlight>
573    </example>
574         <p>Cette directive va faire correspondre des uri comme
575         /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
576         fonction de gestionnaire handle_show au niveau de la vm lua
577         apr&egrave;s chargement de ce fichier.</p>
578
579 <highlight language="config">
580     LuaMapHandler /bingo /scripts/wombat.lua
581 </highlight>
582         <p>Cette directive invoquera la fonction "handle" qui est la
583         valeur par d&eacute;faut si aucun nom de fonction sp&eacute;cifique n'est
584         sp&eacute;cifi&eacute;.</p>
585 </usage>
586 </directivesynopsis>
587
588 <directivesynopsis>
589 <name>LuaPackagePath</name>
590 <description>Ajoute un r&eacute;pertoire au package.path de lua</description>
591 <syntax>LuaPackagePath /chemin/vers/include/?.lua</syntax>
592 <contextlist><context>server config</context><context>virtual host</context>
593 <context>directory</context><context>.htaccess</context>
594 </contextlist>
595 <override>All</override>
596     <usage><p>Cette directive permet d'ajouter un chemin &agrave; la liste des
597     chemins de recherche du module lua. Elle suit les m&ecirc;mes conventions
598     que lua. Ceci modifie le package.path dans les vms lua.</p>
599
600     <example><title>Exemples :</title>
601         <highlight language="config">
602 LuaPackagePath /scripts/lib/?.lua
603 LuaPackagePath /scripts/lib/?/init.lua
604     </highlight>
605     </example>
606 </usage>
607 </directivesynopsis>
608
609 <directivesynopsis>
610 <name>LuaPackageCPath</name>
611 <description>Ajoute un r&eacute;pertoire au package.cpath de lua</description>
612 <syntax>LuaPackageCPath /chemin/vers/include/?.soa</syntax>
613 <contextlist><context>server config</context><context>virtual host</context>
614 <context>directory</context><context>.htaccess</context>
615 </contextlist>
616 <override>All</override>
617
618 <usage>
619     <p>Cette directive permet d'ajouter un chemin &agrave; la liste des chemins
620     de recherche des biblioth&egrave;ques partag&eacute;es de lua. Ceci modifie le
621     package.cpath dans les vms lua.</p>
622
623 </usage>
624 </directivesynopsis>
625
626 <directivesynopsis>
627 <name>LuaCodeCache</name>
628 <description>Configure le cache de code compil&eacute;.</description>
629 <syntax>LuaCodeCache stat|forever|never</syntax>
630 <default>LuaCodeCache stat</default>
631 <contextlist><context>server config</context><context>virtual host</context>
632 <context>directory</context><context>.htaccess</context>
633 </contextlist>
634 <override>All</override>
635
636 <usage><p>
637     Cette directive permet de d&eacute;finir le comportement du cache de code
638     en m&eacute;moire. La valeur par d&eacute;faut est stat ; dans ce cas, le script
639     du niveau le plus haut (et pas les scripts inclus) est v&eacute;rifi&eacute; &agrave;
640     chaque fois que ce fichier est n&eacute;cessaire, et est recharg&eacute; si la
641     date de modification est plus r&eacute;cente que celle du script d&eacute;j&agrave;
642     charg&eacute;. Les autres valeurs permettent respectivement de garder le
643     fichier en cache perp&eacute;tuellement (forever - jamais v&eacute;rifi&eacute; ni
644     remplac&eacute;), ou de ne jamais le mettre en cache (never).</p>
645
646     <p>En g&eacute;n&eacute;ral, les valeurs stat et forever sont utilis&eacute;es pour un
647     serveur en production, et les valeurs stat ou never pour un serveur
648     en d&eacute;veloppement.</p>
649
650     <example><title>Exemples :</title>
651         <highlight language="config">
652 LuaCodeCache stat
653 LuaCodeCache forever
654 LuaCodeCache never
655     </highlight>
656     </example>
657
658 </usage>
659 </directivesynopsis>
660
661 <directivesynopsis>
662 <name>LuaHookTranslateName</name>
663 <description>Fournit un point d'entr&eacute;e &agrave; la phase du nom de
664 traduction du traitement de la requ&ecirc;te</description>
665 <syntax>LuaHookTranslateName  /chemin/vers/lua/script.lua  nom_fonction_hook [early|late]</syntax>
666 <contextlist><context>server config</context><context>virtual host</context>
667 <context>directory</context>
668 </contextlist>
669 <override>All</override>
670 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
671 version 2.3.15 du serveur HTTP Apache.</compatibility>
672
673 <usage><p>
674     Cette directive permet d'ajouter un point d'entr&eacute;e (&agrave;
675     APR_HOOK_MIDDLE) &agrave; la phase du nom de traduction du traitement de la
676     requ&ecirc;te. La fonction hook accepte un seul argument, le request_rec,
677     et doit renvoyer un code d'&eacute;tat qui est soit un code d'erreur HTTP,
678     ou une constante d&eacute;finie dans le module apache2 :  apache2.OK,
679     apache2.DECLINED, ou apache2.DONE.</p>
680
681     <p>Pour ceux qui ne sont pas familiers avec les points d'entr&eacute;e
682     (hook), en gros, chaque hook sera invoqu&eacute; jusqu'&agrave; ce que l'un
683     d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
684     traduction, il doit juste renvoyer apache2.DECLINED. Si le
685     traitement de la requ&ecirc;te doit &ecirc;tre interrompu, la valeur renvoy&eacute;e
686     doit &ecirc;tre apache2.DONE.</p>
687
688     <p>Exemple :</p>
689
690 <highlight language="config">
691 # httpd.conf
692 LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper
693 </highlight>
694
695 <highlight language="lua">
696 -- /scripts/conf/hooks.lua --
697 require "apache2"
698 function silly_mapper(r)
699     if r.uri == "/" then
700         r.filename = "/var/www/home.lua"
701         return apache2.OK
702     else
703         return apache2.DECLINED
704     end
705 end
706 </highlight>
707
708    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
709    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
710    module="core">Directory</directive> ou <directive type="section"
711    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
712
713    <note><title>Ordonnancement</title><p>Les arguments optionnels
714    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
715    s'ex&eacute;cute par rapport aux autres modules.</p></note>
716 </usage>
717 </directivesynopsis>
718
719 <directivesynopsis>
720 <name>LuaHookFixups</name>
721 <description>Fournit un point d'entr&eacute;e pour la phase de correction du
722 traitement de la requ&ecirc;te</description>
723 <syntax>LuaHookFixups  /chemin/vers/lua/script.lua hook_function_name</syntax>
724 <contextlist><context>server config</context><context>virtual host</context>
725 <context>directory</context><context>.htaccess</context>
726 </contextlist>
727 <override>All</override>
728 <usage>
729 <p>
730     Idem LuaHookTranslateName, mais s'ex&eacute;cute durant la phase de
731     correction.
732 </p>
733 </usage>
734 </directivesynopsis>
735
736 <directivesynopsis>
737 <name>LuaHookMapToStorage</name>
738 <description>Fournit un point d'entr&eacute;e pour la phase map_to_storage du
739 traitement de la requ&ecirc;te</description>
740 <syntax>LuaHookMapToStorage  /chemin/vers/lua/script.lua hook_function_name</syntax>
741 <contextlist><context>server config</context><context>virtual host</context>
742 <context>directory</context><context>.htaccess</context>
743 </contextlist>
744 <override>All</override>
745     <usage><p>...</p></usage>
746 </directivesynopsis>
747
748 <directivesynopsis>
749 <name>LuaHookCheckUserID</name>
750 <description>Fournit un point d'entr&eacute;e pour la phase check_user_id du
751 traitement de la requ&ecirc;te</description>
752 <syntax>LuaHookCheckUserID  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
753 <contextlist><context>server config</context><context>virtual host</context>
754 <context>directory</context><context>.htaccess</context>
755 </contextlist>
756 <override>All</override>
757 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
758 version 2.3.15 du serveur HTTP Apache.</compatibility>
759 <usage><p>...</p>
760    <note><title>Ordonnancement</title><p>Les arguments optionnels
761    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
762    s'ex&eacute;cute par rapport aux autres modules.</p></note>
763 </usage>
764 </directivesynopsis>
765
766 <directivesynopsis>
767 <name>LuaHookTypeChecker</name>
768 <description>Fournit un point d'entr&eacute;e pour la phase type_checker du
769 traitement de la requ&ecirc;te</description>
770 <syntax>LuaHookTypeChecker  /chemin/vers/lua/script.lua hook_function_name</syntax>
771 <contextlist><context>server config</context><context>virtual host</context>
772 <context>directory</context><context>.htaccess</context>
773 </contextlist>
774 <override>All</override>
775     <usage><p>...</p></usage>
776 </directivesynopsis>
777
778 <directivesynopsis>
779 <name>LuaHookAuthChecker</name>
780 <description>Fournit un point d'entr&eacute;e pour la phase auth_checker du
781 traitement de la requ&ecirc;te</description>
782 <syntax>LuaHookAuthChecker  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
783 <contextlist><context>server config</context><context>virtual host</context>
784 <context>directory</context><context>.htaccess</context>
785 </contextlist>
786 <override>All</override>
787 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
788 version 2.3.15 du serveur HTTP Apache.</compatibility>
789     <usage>
790 <p>Invoque une fonction lua au cours de la phase auth_checker du
791 traitement de la requ&ecirc;te. Cette directive peut s'utiliser pour
792 impl&eacute;menter une v&eacute;rification arbitraire de l'authentification et de
793 l'autorisation. Voici un exemple tr&egrave;s simple :
794 </p>
795 <highlight language="lua">
796 require 'apache2'
797
798 -- fonction d'accroche authcheck fictive
799 -- Si la requ&ecirc;te ne contient aucune donn&eacute;e d'authentification, l'en-t&ecirc;te
800 -- de la r&eacute;ponse est d&eacute;fini et un code 401 est renvoy&eacute; afin de demander au
801 -- navigateur d'effectuer une authentification basique. Si la requ&ecirc;te
802 -- comporte des donn&eacute;es d'authentification, elles ne sont pas vraiment
803 -- consult&eacute;es, mais on admet la prise en compte de l'utilisateur 'foo' et
804 -- on la valide. On v&eacute;rifie ensuite si l'utilisateur est bien 'foo' et on
805 -- accepte la requ&ecirc;te.
806 function authcheck_hook(r)
807
808    -- recherche des informations d'authentification
809    auth = r.headers_in['Authorization']
810    if auth ~= nil then
811      -- d&eacute;finition d'un utilisateur par d&eacute;faut
812      r.user = 'foo'
813    end
814
815    if r.user == nil then
816       r:debug("authcheck: user is nil, returning 401")
817       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
818       return 401
819    elseif r.user == "foo" then
820       r:debug('user foo: OK')
821    else
822       r:debug("authcheck: user='" .. r.user .. "'")
823       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
824       return 401
825    end
826    return apache2.OK
827 end
828 </highlight>
829 <note><title>Ordonnancement</title><p>Les arguments optionnels
830    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
831    s'ex&eacute;cute par rapport aux autres modules.</p></note>
832 </usage>
833 </directivesynopsis>
834
835 <directivesynopsis>
836 <name>LuaHookAccessChecker</name>
837 <description>Fournit un point d'entr&eacute;e pour la phase access_checker du
838 traitement de la requ&ecirc;te</description>
839 <syntax>LuaHookAccessChecker  /chemin/vers/lua/script.lua  hook_function_name [early|late]</syntax>
840 <contextlist><context>server config</context><context>virtual host</context>
841 <context>directory</context><context>.htaccess</context>
842 </contextlist>
843 <override>All</override>
844 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
845 version 2.3.15 du serveur HTTP Apache.</compatibility>
846
847 <usage>
848 <p>Ajoute votre fonction d'accroche &agrave; la phase access_checker. Une
849 fonction d'accroche access checker renvoie en g&eacute;n&eacute;ral OK, DECLINED, ou
850 HTTP_FORBIDDEN.</p>
851 <note><title>Ordonnancement</title><p>Les arguments optionnels
852    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
853    s'ex&eacute;cute par rapport aux autres modules.</p></note>
854 </usage>
855 </directivesynopsis>
856 <directivesynopsis>
857 <name>LuaHookInsertFilter</name>
858 <description>Fournit un point d'entr&eacute;e pour la phase insert_filter du
859 traitement de la requ&ecirc;te</description>
860 <syntax>LuaHookInsertFilter  /chemin/vers/lua/script.lua hook_function_name</syntax>
861 <contextlist><context>server config</context><context>virtual host</context>
862 <context>directory</context><context>.htaccess</context>
863 </contextlist>
864 <override>All</override>
865     <usage><p>Non encore impl&eacute;ment&eacute;</p></usage>
866 </directivesynopsis>
867
868 <directivesynopsis>
869 <name>LuaInherit</name>
870 <description>Contr&ocirc;le la mani&egrave;re dont les sections de configuration
871 parentes sont fusionn&eacute;es dans les enfants</description>
872 <syntax>LuaInherit none|parent-first|parent-last</syntax>
873 <default>LuaInherit parent-first</default>
874 <contextlist><context>server config</context><context>virtual host</context>
875 <context>directory</context><context>.htaccess</context>
876 </contextlist>
877 <override>All</override>
878 <compatibility>Versions 2.4.0 et sup&eacute;rieures</compatibility>
879     <usage><p>Par d&eacute;faut, si des directives LuaHook* se trouvent dans
880     des sections de configuration Directory ou Location qui se
881     chevauchent, les scripts
882     d&eacute;finis dans les sections les plus sp&eacute;cifiques s'ex&eacute;cutent
883     <em>apr&egrave;s</em> ceux d&eacute;finis dans les sections plus g&eacute;n&eacute;riques
884     (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
885     en sorte que le contexte parent ne s'applique pas du tout.</p>
886
887     <p>Jusqu'aux versions 2.3.x, le comportement par d&eacute;faut consistait &agrave;
888     ignorer les directives LuaHook* situ&eacute;es dans les sections de
889     configuration parentes.</p></usage>
890 </directivesynopsis>
891
892 <directivesynopsis>
893 <name>LuaQuickHandler</name>
894 <description>Fournit un point d'entr&eacute;e pour la gestion rapide du
895 traitement de la requ&ecirc;te</description>
896 <syntax></syntax>
897 <contextlist><context>server config</context><context>virtual host</context>
898 <context>directory</context><context>.htaccess</context>
899 </contextlist>
900 <override>All</override>
901 <usage><p>...</p>
902    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
903    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
904    module="core">Directory</directive> ou <directive type="section"
905    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
906 </usage>
907 </directivesynopsis>
908
909 <directivesynopsis>
910 <name>LuaAuthzProvider</name>
911 <description>Branche une fonction fournisseur d'autorisation dans <module>mod_authz_core</module>
912 </description>
913 <syntax>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</syntax>
914 <contextlist><context>server config</context> </contextlist>
915 <compatibility>Disponible depuis la version 2.5.0 du serveur HTTP Apache</compatibility>
916
917 <usage>
918 <p>Lorsqu'une fonction lua a &eacute;t&eacute; enregistr&eacute;e en tant que fournisseur
919 d'autorisation, elle peut &ecirc;tre appel&eacute;e via la directive <directive
920 module="mod_authz_core">Require</directive> :</p>
921
922 <example>
923 <highlight language="config">
924 LuaRoot /usr/local/apache2/lua
925 LuaAuthzProvider foo authz.lua authz_check_foo
926 &lt;Location /&gt;
927   Require foo bar
928 &lt;/Location&gt;
929 </highlight>
930 </example>
931
932 </usage>
933 </directivesynopsis>
934
935
936 </modulesynopsis>
937