]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_lua.xml.fr
xforms
[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: 1352048:1355929 (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>
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>
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 <highlight language="lua">
211 <strong>translate_name.lua</strong>
212 -- exemple d'accroche qui r&eacute;&eacute;crit un URI en chemin du syst&egrave;me de
213 fichiers.
214
215 require 'apache2'
216
217 function translate_name(r)
218     if r.uri == "/translate-name" then
219         r.filename = r.document_root .. "/find_me.txt"
220         return apache2.OK
221     end
222     -- on ne g&egrave;re pas cette URL et on donne sa chance &agrave; un autre module
223     return apache2.DECLINED
224 end
225 </highlight>
226
227 <highlight language="lua">
228 <strong>translate_name2.lua</strong>
229 --[[ exemple d'accroche qui r&eacute;&eacute;crit un URI vers un autre URI. Il renvoie
230         un apache2.DECLINED pour permettre &agrave; un autre interpr&eacute;teur d'URL de
231         travailler sur la substitution, y compris l'accroche translate_name
232         de base dont les tables de correspondances se basent sur DocumentRoot.
233
234      Note: actuellement, il est impossible de pr&eacute;voir si cette action
235      s'ex&eacute;cute avant ou apr&egrave;s mod_alias.
236 --]]
237
238 require 'apache2'
239
240 function translate_name(r)
241     if r.uri == "/translate-name" then
242         r.uri = "/find_me.txt"
243         return apache2.DECLINED
244     end
245     return apache2.DECLINED
246 end
247 </highlight>
248 </section>
249
250 <section id="datastructures"><title>Structures de donn&eacute;es</title>
251
252 <dl>
253 <dt>request_rec</dt>
254         <dd>
255         <p>request_rec est consid&eacute;r&eacute;e en tant que donn&eacute;e utilisateur.
256         Elle poss&egrave;de une m&eacute;tatable qui vous permet d'accomplir des
257         choses int&eacute;ressantes. Pour la plus grande partie, elle poss&egrave;de
258         les m&ecirc;mes champs que la structure request_rec (voir httpd.h en
259         attendant que cette documentation soit plus compl&egrave;te), la
260         plupart d'entre eux &eacute;tant accessibles en lecture et &eacute;criture (le
261         contenu des champs de la table peut &ecirc;tre modifi&eacute;, mais les
262         champs eux-m&ecirc;mes ne peuvent pas &ecirc;tre &eacute;tablis en tant que tables
263         distinctes).</p>
264
265         <table border="1">
266
267         <tr>
268           <th><strong>Nom</strong></th>
269           <th><strong>Type Lua</strong></th>
270           <th><strong>Modifiable</strong></th>
271         </tr>
272         <tr>
273           <td><code>ap_auth_type</code></td>
274           <td>string</td>
275           <td>non</td>
276         </tr>
277         <tr>
278           <td><code>args</code></td>
279           <td>string</td>
280           <td>oui</td>
281         </tr>
282         <tr>
283           <td><code>assbackwards</code></td>
284           <td>boolean</td>
285           <td>non</td>
286         </tr>
287
288         <tr>
289           <td><code>canonical_filename</code></td>
290           <td>string</td>
291           <td>non</td>
292         </tr>
293         <tr>
294           <td><code>content_encoding</code></td>
295           <td>string</td>
296           <td>non</td>
297         </tr>
298         <tr>
299           <td><code>content_type</code></td>
300           <td>string</td>
301           <td>oui</td>
302         </tr>
303
304         <tr>
305           <td><code>context_prefix</code></td>
306           <td>string</td>
307           <td>non</td>
308         </tr>
309         <tr>
310           <td><code>context_document_root</code></td>
311           <td>string</td>
312           <td>non</td>
313         </tr>
314
315         <tr>
316           <td><code>document_root</code></td>
317           <td>string</td>
318           <td>non</td>
319         </tr>
320         <tr>
321           <td><code>err_headers_out</code></td>
322           <td>table</td>
323           <td>non</td>
324         </tr>
325         <tr>
326           <td><code>filename</code></td>
327           <td>string</td>
328           <td>oui</td>
329         </tr>
330         <tr>
331           <td><code>handler</code></td>
332           <td>string</td>
333           <td>oui</td>
334         </tr>
335         <tr>
336           <td><code>headers_in</code></td>
337           <td>table</td>
338           <td>oui</td>
339         </tr>
340         <tr>
341           <td><code>headers_out</code></td>
342           <td>table</td>
343           <td>oui</td>
344         </tr>
345         <tr>
346           <td><code>hostname</code></td>
347           <td>string</td>
348           <td>non</td>
349         </tr>
350         <tr>
351         <td><code>log_id</code></td>
352           <td>string</td>
353           <td>non</td>
354         </tr>
355         <tr>
356           <td><code>method</code></td>
357           <td>string</td>
358           <td>non</td>
359         </tr>
360         <tr>
361           <td><code>notes</code></td>
362           <td>table</td>
363           <td>oui</td>
364         </tr>
365         <tr>
366           <td><code>path_info</code></td>
367           <td>string</td>
368           <td>non</td>
369         </tr>
370         <tr>
371           <td><code>protocol</code></td>
372           <td>string</td>
373           <td>non</td>
374         </tr>
375         <tr>
376           <td><code>proxyreq</code></td>
377           <td>string</td>
378           <td>oui</td>
379         </tr>
380         <tr>
381           <td><code>range</code></td>
382           <td>string</td>
383           <td>non</td>
384         </tr>
385         <tr>
386           <td><code>subprocess_env</code></td>
387           <td>table</td>
388           <td>oui</td>
389         </tr>
390         <tr>
391           <td><code>status</code></td>
392           <td>number</td>
393           <td>oui</td>
394         </tr>
395         <tr>
396           <td><code>the_request</code></td>
397           <td>string</td>
398           <td>non</td>
399         </tr>
400         <tr>
401           <td><code>unparsed_uri</code></td>
402           <td>string</td>
403           <td>non</td>
404         </tr>
405         <tr>
406           <td><code>uri</code></td>
407           <td>string</td>
408           <td>oui</td>
409         </tr>
410         <tr>
411           <td><code>user</code></td>
412           <td>string</td>
413           <td>oui</td>
414         </tr>
415         <tr>
416           <td><code>useragent_ip</code></td>
417           <td>string</td>
418           <td>non</td>
419         </tr>
420         </table>
421
422         <p>La structure request_rec poss&egrave;de (au minimum) les m&eacute;thodes
423         suivantes :</p>
424
425         <highlight language="lua">
426         r:addoutputfilter(name|function) -- ajoute un filtre en sortie
427         </highlight>
428
429         <highlight language="lua">
430         r:parseargs() -- renvoie une table lua contenant la cha&icirc;ne
431         d'arguments de la requ&ecirc;te
432         </highlight>
433 <!--
434 /* Not supported yet */
435         <highlight language="lua">
436         r:parsebody() &dash;- parse the request body as a POST and return  a lua table
437         </highlight>
438 -->
439         <highlight language="lua">
440         r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la r&eacute;ponse
441         </highlight>
442
443         <highlight language="lua">
444         r:write("une simple cha&icirc;ne") -- affichage dans le
445         corps de la r&eacute;ponse
446         </highlight>
447         </dd>
448     </dl>
449
450 </section>
451
452 <section id="logging"><title>Fonctions de journalisation</title>
453
454 <highlight language="lua">
455         -- exemples de messages de journalisation
456         r:trace1("Ceci est un message de journalisation de niveau
457         trace") -- les niveaux valides vont de trace1 &agrave; trace8 <br />
458         r:debug("Ceci est un message de journalisation de niveau debug")<br />
459         r:info("Ceci est un message de journalisation de niveau info")<br />
460         r:notice("Ceci est un message de journalisation de niveau notice")<br />
461         r:warn("Ceci est un message de journalisation de niveau warn")<br />
462         r:err("Ceci est un message de journalisation de niveau err")<br />
463         r:alert("Ceci est un message de journalisation de niveau alert")<br />
464         r:crit("Ceci est un message de journalisation de niveau crit")<br />
465         r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
466 </highlight>
467
468 </section>
469
470 <section id="apache2"><title>Paquet apache2</title>
471 <p>Le paquet nomm&eacute; <code>apache2</code> est fourni avec (au minimum) le
472 contenu suivant :</p>
473 <dl>
474   <dt>apache2.OK</dt>
475   <dd>Constante interne OK. Les gestionnaires renverront cette valeur
476   s'ils ont trait&eacute; la requ&ecirc;te.</dd>
477   <dt>apache2.DECLINED</dt>
478   <dd>Constante interne DECLINED. Les gestionnaires renverront cette
479   valeur s'ils n'ont pas l'intention de traiter la requ&ecirc;te.</dd>
480   <dt>apache2.DONE</dt>
481   <dd>Constante interne DONE.</dd>
482   <dt>apache2.version</dt>
483   <dd>Cha&icirc;ne contenant la version du serveur HTTP Apache</dd>
484   <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
485   <dd>Code d'&eacute;tat HTTP</dd>
486   <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
487   <dd>Constantes internes utilis&eacute;es par <module>mod_proxy</module></dd>
488 </dl>
489 <p>Les autres codes d'&eacute;tat HTTP ne sont pas encore impl&eacute;ment&eacute;s.</p>
490 </section>
491
492
493
494 <directivesynopsis>
495 <name>LuaRoot</name>
496 <description>Sp&eacute;cifie le chemin de base pour la r&eacute;solution des chemins
497 relatifs dans les directives de mod_lua</description>
498 <syntax>LuaRoot /chemin/vers/un/r&eacute;pertoire</syntax>
499 <contextlist><context>server config</context><context>virtual host</context>
500 <context>directory</context><context>.htaccess</context>
501 </contextlist>
502 <override>All</override>
503
504 <usage>
505     <p>Cette directive permet de sp&eacute;cifier le chemin de base qui sera
506     utilis&eacute; pour &eacute;valuer tous les chemins relatifs dans mod_lua. En
507     l'absence de cette directive, les chemins relatifs sont r&eacute;solus par
508     rapport au r&eacute;pertoire de travail courant, ce qui ne sera pas
509     toujours appropri&eacute; pour un serveur.</p>
510 </usage>
511 </directivesynopsis>
512
513 <directivesynopsis>
514 <name>LuaScope</name>
515 <description>Une valeur parmi once, request, conn, server -- la valeur
516 par d&eacute;faut est once</description>
517 <syntax>LuaScope once|request|conn|server [max|min max]</syntax>
518 <default>LuaScope once</default>
519 <contextlist><context>server config</context><context>virtual host</context>
520 <context>directory</context><context>.htaccess</context>
521 </contextlist>
522 <override>All</override>
523
524 <usage>
525     <p>Cette directive permet de sp&eacute;cifier la dur&eacute;e de vie de
526     l'interpr&eacute;teur Lua qui sera utilis&eacute; dans ce "r&eacute;pertoire". La valeur
527     par d&eacute;faut est "once".</p>
528
529    <dl>
530     <dt>once:</dt> <dd>utilise l'interpr&eacute;teur une fois.</dd>
531
532     <dt>request:</dt> <dd>utilise l'interpr&eacute;teur pour traiter tout ce
533     qui est bas&eacute; sur le m&ecirc;me fichier dans la requ&ecirc;te, et qui se trouve
534     aussi dans la port&eacute;e de la requ&ecirc;te.</dd>
535
536     <dt>conn:</dt> <dd>idem request, mais attach&eacute; &agrave; connection_rec</dd>
537
538     <dt>server:</dt>  <dd>Le comportement est ici diff&eacute;rent, car la
539     port&eacute;e du serveur pr&eacute;sente une dur&eacute;e de vie assez longue, et
540     plusieurs threads vont partager le m&ecirc;me server_rec. Pour g&eacute;rer tout
541     ceci, les interpr&eacute;teurs sont stock&eacute;s dans une liste de ressources
542     apr. Les arguments min et max ont &eacute;t&eacute; pr&eacute;vus pour sp&eacute;cifier une
543     taille de jeu, mais sont inutilis&eacute;s pour le moment.</dd>
544    </dl>
545 </usage>
546 </directivesynopsis>
547
548 <directivesynopsis>
549 <name>LuaMapHandler</name>
550 <description>Met en correspondance un chemin avec un gestionnaire lua</description>
551 <syntax>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
552 [nom-fonction]</syntax>
553 <contextlist><context>server config</context><context>virtual host</context>
554 <context>directory</context><context>.htaccess</context>
555 </contextlist>
556 <override>All</override>
557 <usage>
558     <p>Cette directive permet de faire correspondre un mod&egrave;le d'uri avec
559     une fonction de gestionnaire situ&eacute;e dans un fichier sp&eacute;cifique. Elle
560     utilise les expressions rationnelles PCRE pour mettre en
561     correspondance l'uri, et supporte les groupes de correspondance
562     d'interpolation dans le chemin du fichier et le nom de la fonction.
563     Prenez garde aux probl&egrave;mes de s&eacute;curit&eacute; en &eacute;crivant vos expressions
564     rationnelles.</p>
565    <example><title>Exemples :</title>
566     <highlight language="config">
567     LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2
568     </highlight>
569    </example>
570         <p>Cette directive va faire correspondre des uri comme
571         /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
572         fonction de gestionnaire handle_show au niveau de la vm lua
573         apr&egrave;s chargement de ce fichier.</p>
574
575 <highlight language="config">
576     LuaMapHandler /bingo /scripts/wombat.lua
577 </highlight>
578         <p>Cette directive invoquera la fonction "handle" qui est la
579         valeur par d&eacute;faut si aucun nom de fonction sp&eacute;cifique n'est
580         sp&eacute;cifi&eacute;.</p>
581 </usage>
582 </directivesynopsis>
583
584 <directivesynopsis>
585 <name>LuaPackagePath</name>
586 <description>Ajoute un r&eacute;pertoire au package.path de lua</description>
587 <syntax>LuaPackagePath /chemin/vers/include/?.lua</syntax>
588 <contextlist><context>server config</context><context>virtual host</context>
589 <context>directory</context><context>.htaccess</context>
590 </contextlist>
591 <override>All</override>
592     <usage><p>Cette directive permet d'ajouter un chemin &agrave; la liste des
593     chemins de recherche du module lua. Elle suit les m&ecirc;mes conventions
594     que lua. Ceci modifie le package.path dans les vms lua.</p>
595
596     <example><title>Exemples :</title>
597         <highlight language="config">
598 LuaPackagePath /scripts/lib/?.lua
599 LuaPackagePath /scripts/lib/?/init.lua
600     </highlight>
601     </example>
602 </usage>
603 </directivesynopsis>
604
605 <directivesynopsis>
606 <name>LuaPackageCPath</name>
607 <description>Ajoute un r&eacute;pertoire au package.cpath de lua</description>
608 <syntax>LuaPackageCPath /chemin/vers/include/?.soa</syntax>
609 <contextlist><context>server config</context><context>virtual host</context>
610 <context>directory</context><context>.htaccess</context>
611 </contextlist>
612 <override>All</override>
613
614 <usage>
615     <p>Cette directive permet d'ajouter un chemin &agrave; la liste des chemins
616     de recherche des biblioth&egrave;ques partag&eacute;es de lua. Ceci modifie le
617     package.cpath dans les vms lua.</p>
618
619 </usage>
620 </directivesynopsis>
621
622 <directivesynopsis>
623 <name>LuaCodeCache</name>
624 <description>Configure le cache de code compil&eacute;.</description>
625 <syntax>LuaCodeCache stat|forever|never</syntax>
626 <default>LuaCodeCache stat</default>
627 <contextlist><context>server config</context><context>virtual host</context>
628 <context>directory</context><context>.htaccess</context>
629 </contextlist>
630 <override>All</override>
631
632 <usage><p>
633     Cette directive permet de d&eacute;finir le comportement du cache de code
634     en m&eacute;moire. La valeur par d&eacute;faut est stat ; dans ce cas, le script
635     du niveau le plus haut (et pas les scripts inclus) est v&eacute;rifi&eacute; &agrave;
636     chaque fois que ce fichier est n&eacute;cessaire, et est recharg&eacute; si la
637     date de modification est plus r&eacute;cente que celle du script d&eacute;j&agrave;
638     charg&eacute;. Les autres valeurs permettent respectivement de garder le
639     fichier en cache perp&eacute;tuellement (forever - jamais v&eacute;rifi&eacute; ni
640     remplac&eacute;), ou de ne jamais le mettre en cache (never).</p>
641
642     <p>En g&eacute;n&eacute;ral, les valeurs stat et forever sont utilis&eacute;es pour un
643     serveur en production, et les valeurs stat ou never pour un serveur
644     en d&eacute;veloppement.</p>
645
646     <example><title>Exemples :</title>
647         <highlight language="config">
648 LuaCodeCache stat
649 LuaCodeCache forever
650 LuaCodeCache never
651     </highlight>
652     </example>
653
654 </usage>
655 </directivesynopsis>
656
657 <directivesynopsis>
658 <name>LuaHookTranslateName</name>
659 <description>Fournit un point d'entr&eacute;e &agrave; la phase du nom de
660 traduction du traitement de la requ&ecirc;te</description>
661 <syntax>LuaHookTranslateName  /chemin/vers/lua/script.lua  nom_fonction_hook [early|late]</syntax>
662 <contextlist><context>server config</context><context>virtual host</context>
663 <context>directory</context>
664 </contextlist>
665 <override>All</override>
666 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
667 version 2.3.15 du serveur HTTP Apache.</compatibility>
668
669 <usage><p>
670     Cette directive permet d'ajouter un point d'entr&eacute;e (&agrave;
671     APR_HOOK_MIDDLE) &agrave; la phase du nom de traduction du traitement de la
672     requ&ecirc;te. La fonction hook accepte un seul argument, le request_rec,
673     et doit renvoyer un code d'&eacute;tat qui est soit un code d'erreur HTTP,
674     ou une constante d&eacute;finie dans le module apache2 :  apache2.OK,
675     apache2.DECLINED, ou apache2.DONE.</p>
676
677     <p>Pour ceux qui ne sont pas familiers avec les points d'entr&eacute;e
678     (hook), en gros, chaque hook sera invoqu&eacute; jusqu'&agrave; ce que l'un
679     d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
680     traduction, il doit juste renvoyer apache2.DECLINED. Si le
681     traitement de la requ&ecirc;te doit &ecirc;tre interrompu, la valeur renvoy&eacute;e
682     doit &ecirc;tre apache2.DONE.</p>
683
684     <p>Exemple :</p>
685
686 <highlight language="config">
687 # httpd.conf
688 LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper
689 </highlight>
690
691 <highlight language="lua">
692 -- /scripts/conf/hooks.lua --
693 require "apache2"
694 function silly_mapper(r)
695     if r.uri == "/" then
696         r.filename = "/var/www/home.lua"
697         return apache2.OK
698     else
699         return apache2.DECLINED
700     end
701 end
702 </highlight>
703
704    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
705    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
706    module="core">Directory</directive> ou <directive type="section"
707    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
708
709    <note><title>Ordonnancement</title><p>Les arguments optionnels
710    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
711    s'ex&eacute;cute par rapport aux autres modules.</p></note>
712 </usage>
713 </directivesynopsis>
714
715 <directivesynopsis>
716 <name>LuaHookFixups</name>
717 <description>Fournit un point d'entr&eacute;e pour la phase de correction du
718 traitement de la requ&ecirc;te</description>
719 <syntax>LuaHookFixups  /chemin/vers/lua/script.lua hook_function_name</syntax>
720 <contextlist><context>server config</context><context>virtual host</context>
721 <context>directory</context><context>.htaccess</context>
722 </contextlist>
723 <override>All</override>
724 <usage>
725 <p>
726     Idem LuaHookTranslateName, mais s'ex&eacute;cute durant la phase de
727     correction.
728 </p>
729 </usage>
730 </directivesynopsis>
731
732 <directivesynopsis>
733 <name>LuaHookMapToStorage</name>
734 <description>Fournit un point d'entr&eacute;e pour la phase map_to_storage du
735 traitement de la requ&ecirc;te</description>
736 <syntax>LuaHookMapToStorage  /chemin/vers/lua/script.lua hook_function_name</syntax>
737 <contextlist><context>server config</context><context>virtual host</context>
738 <context>directory</context><context>.htaccess</context>
739 </contextlist>
740 <override>All</override>
741     <usage><p>...</p></usage>
742 </directivesynopsis>
743
744 <directivesynopsis>
745 <name>LuaHookCheckUserID</name>
746 <description>Fournit un point d'entr&eacute;e pour la phase check_user_id du
747 traitement de la requ&ecirc;te</description>
748 <syntax>LuaHookCheckUserID  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
749 <contextlist><context>server config</context><context>virtual host</context>
750 <context>directory</context><context>.htaccess</context>
751 </contextlist>
752 <override>All</override>
753 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
754 version 2.3.15 du serveur HTTP Apache.</compatibility>
755 <usage><p>...</p>
756    <note><title>Ordonnancement</title><p>Les arguments optionnels
757    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
758    s'ex&eacute;cute par rapport aux autres modules.</p></note>
759 </usage>
760 </directivesynopsis>
761
762 <directivesynopsis>
763 <name>LuaHookTypeChecker</name>
764 <description>Fournit un point d'entr&eacute;e pour la phase type_checker du
765 traitement de la requ&ecirc;te</description>
766 <syntax>LuaHookTypeChecker  /chemin/vers/lua/script.lua hook_function_name</syntax>
767 <contextlist><context>server config</context><context>virtual host</context>
768 <context>directory</context><context>.htaccess</context>
769 </contextlist>
770 <override>All</override>
771     <usage><p>...</p></usage>
772 </directivesynopsis>
773
774 <directivesynopsis>
775 <name>LuaHookAuthChecker</name>
776 <description>Fournit un point d'entr&eacute;e pour la phase auth_checker du
777 traitement de la requ&ecirc;te</description>
778 <syntax>LuaHookAuthChecker  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
779 <contextlist><context>server config</context><context>virtual host</context>
780 <context>directory</context><context>.htaccess</context>
781 </contextlist>
782 <override>All</override>
783 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
784 version 2.3.15 du serveur HTTP Apache.</compatibility>
785     <usage>
786 <p>Invoque une fonction lua au cours de la phase auth_checker du
787 traitement de la requ&ecirc;te. Cette directive peut s'utiliser pour
788 impl&eacute;menter une v&eacute;rification arbitraire de l'authentification et de
789 l'autorisation. Voici un exemple tr&egrave;s simple :
790 </p>
791 <highlight language="lua">
792 require 'apache2'
793
794 -- fonction d'accroche authcheck fictive
795 -- Si la requ&ecirc;te ne contient aucune donn&eacute;e d'authentification, l'en-t&ecirc;te
796 -- de la r&eacute;ponse est d&eacute;fini et un code 401 est renvoy&eacute; afin de demander au
797 -- navigateur d'effectuer une authentification basique. Si la requ&ecirc;te
798 -- comporte des donn&eacute;es d'authentification, elles ne sont pas vraiment
799 -- consult&eacute;es, mais on admet la prise en compte de l'utilisateur 'foo' et
800 -- on la valide. On v&eacute;rifie ensuite si l'utilisateur est bien 'foo' et on
801 -- accepte la requ&ecirc;te.
802 function authcheck_hook(r)
803
804    -- recherche des informations d'authentification
805    auth = r.headers_in['Authorization']
806    if auth ~= nil then
807      -- d&eacute;finition d'un utilisateur par d&eacute;faut
808      r.user = 'foo'
809    end
810
811    if r.user == nil then
812       r:debug("authcheck: user is nil, returning 401")
813       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
814       return 401
815    elseif r.user == "foo" then
816       r:debug('user foo: OK')
817    else
818       r:debug("authcheck: user='" .. r.user .. "'")
819       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
820       return 401
821    end
822    return apache2.OK
823 end
824 </highlight>
825 <note><title>Ordonnancement</title><p>Les arguments optionnels
826    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
827    s'ex&eacute;cute par rapport aux autres modules.</p></note>
828 </usage>
829 </directivesynopsis>
830
831 <directivesynopsis>
832 <name>LuaHookAccessChecker</name>
833 <description>Fournit un point d'entr&eacute;e pour la phase access_checker du
834 traitement de la requ&ecirc;te</description>
835 <syntax>LuaHookAccessChecker  /chemin/vers/lua/script.lua  hook_function_name [early|late]</syntax>
836 <contextlist><context>server config</context><context>virtual host</context>
837 <context>directory</context><context>.htaccess</context>
838 </contextlist>
839 <override>All</override>
840 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
841 version 2.3.15 du serveur HTTP Apache.</compatibility>
842
843 <usage>
844 <p>Ajoute votre fonction d'accroche &agrave; la phase access_checker. Une
845 fonction d'accroche access checker renvoie en g&eacute;n&eacute;ral OK, DECLINED, ou
846 HTTP_FORBIDDEN.</p>
847 <note><title>Ordonnancement</title><p>Les arguments optionnels
848    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
849    s'ex&eacute;cute par rapport aux autres modules.</p></note>
850 </usage>
851 </directivesynopsis>
852 <directivesynopsis>
853 <name>LuaHookInsertFilter</name>
854 <description>Fournit un point d'entr&eacute;e pour la phase insert_filter du
855 traitement de la requ&ecirc;te</description>
856 <syntax>LuaHookInsertFilter  /chemin/vers/lua/script.lua hook_function_name</syntax>
857 <contextlist><context>server config</context><context>virtual host</context>
858 <context>directory</context><context>.htaccess</context>
859 </contextlist>
860 <override>All</override>
861     <usage><p>Non encore impl&eacute;ment&eacute;</p></usage>
862 </directivesynopsis>
863
864 <directivesynopsis>
865 <name>LuaInherit</name>
866 <description>Contr&ocirc;le la mani&egrave;re dont les sections de configuration
867 parentes sont fusionn&eacute;es dans les enfants</description>
868 <syntax>LuaInherit none|parent-first|parent-last</syntax>
869 <default>LuaInherit parent-first</default>
870 <contextlist><context>server config</context><context>virtual host</context>
871 <context>directory</context><context>.htaccess</context>
872 </contextlist>
873 <override>All</override>
874 <compatibility>Versions 2.4.0 et sup&eacute;rieures</compatibility>
875     <usage><p>Par d&eacute;faut, si des directives LuaHook* se trouvent dans
876     des sections de configuration Directory ou Location qui se
877     chevauchent, les scripts
878     d&eacute;finis dans les sections les plus sp&eacute;cifiques s'ex&eacute;cutent
879     <em>apr&egrave;s</em> ceux d&eacute;finis dans les sections plus g&eacute;n&eacute;riques
880     (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
881     en sorte que le contexte parent ne s'applique pas du tout.</p>
882
883     <p>Jusqu'aux versions 2.3.x, le comportement par d&eacute;faut consistait &agrave;
884     ignorer les directives LuaHook* situ&eacute;es dans les sections de
885     configuration parentes.</p></usage>
886 </directivesynopsis>
887
888 <directivesynopsis>
889 <name>LuaQuickHandler</name>
890 <description>Fournit un point d'entr&eacute;e pour la gestion rapide du
891 traitement de la requ&ecirc;te</description>
892 <syntax></syntax>
893 <contextlist><context>server config</context><context>virtual host</context>
894 <context>directory</context><context>.htaccess</context>
895 </contextlist>
896 <override>All</override>
897 <usage><p>...</p>
898    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
899    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
900    module="core">Directory</directive> ou <directive type="section"
901    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
902 </usage>
903 </directivesynopsis>
904
905 <directivesynopsis>
906 <name>LuaAuthzProvider</name>
907 <description>Branche une fonction fournisseur d'autorisation dans <module>mod_authz_core</module>
908 </description>
909 <syntax>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</syntax>
910 <contextlist><context>server config</context> </contextlist>
911 <compatibility>Disponible depuis la version 2.5.0 du serveur HTTP Apache</compatibility>
912
913 <usage>
914 <p>Lorsqu'une fonction lua a &eacute;t&eacute; enregistr&eacute;e en tant que fournisseur
915 d'autorisation, elle peut &ecirc;tre appel&eacute;e via la directive <directive
916 module="mod_authz_core">Require</directive> :</p>
917
918 <example>
919 <highlight language="config">
920 LuaRoot /usr/local/apache2/lua
921 LuaAuthzProvider foo authz.lua authz_check_foo
922 &lt;Location /&gt;
923   Require foo bar
924 &lt;/Location&gt;
925 </highlight>
926 </example>
927
928 </usage>
929 </directivesynopsis>
930
931
932 </modulesynopsis>
933