From: Lucien Gentis
Date: Sat, 12 Jan 2013 17:41:33 +0000 (+0000)
Subject: Updates.
X-Git-Tag: 2.5.0-alpha~5887
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9e0d89e3f88d067a8f2ab57f6590f73a13b77c25;p=apache
Updates.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1432479 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/docs/manual/howto/auth.xml.fr b/docs/manual/howto/auth.xml.fr
index dc7f686626..5edf756fd2 100644
--- a/docs/manual/howto/auth.xml.fr
+++ b/docs/manual/howto/auth.xml.fr
@@ -1,7 +1,7 @@
-
+
@@ -599,13 +599,14 @@ autorisation
</RequireAll>
- Dans l'exemple ci-dessus, on utilise la directive du
- conteneur RequireNone afin de s'assurer
- qu'aucune des directives Require qu'il contient ne
- fasse correspondre ses paramètres avant d'accorder
- l'autorisation.
+ L'utilisation de la directive RequireAll
+ avec de multiples directives Require, toutes avec la négation
+ not
, n'accordera l'accès que si toutes les
+ conditions négatives sont vérifiées. En d'autres termes, l'accès
+ sera refusé si au moins une des conditions négatives n'est pas
+ vérifiée.
diff --git a/docs/manual/mod/mod_lua.xml.fr b/docs/manual/mod/mod_lua.xml.fr
index 701498fce5..df327df833 100644
--- a/docs/manual/mod/mod_lua.xml.fr
+++ b/docs/manual/mod/mod_lua.xml.fr
@@ -1,7 +1,7 @@
-
+
@@ -707,182 +707,189 @@ end
- r:base64_encode(string) -- Encode une chaîne à l'aide du
+ r:base64_encode(string) -- Encode une chaîne à l'aide du
standard de codage Base64.
- r:base64_decode(string) -- Décode une chaîne codée en Base64.
+ r:base64_decode(string) -- Décode une chaîne codée en Base64.
- r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne
+ r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne
en mode binaire (binary safe).
- r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne
+ r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne
en mode binaire (binary safe).
- r:escape(string) -- Echappe une chaîne de type URL.
+ r:escape(string) -- Echappe une chaîne de type URL.
- r:unescape(string) -- Déséchappe une chaîne de type URL.
+ r:unescape(string) -- Déséchappe une chaîne de type URL.
- r:banner() -- Renvoie la bannière du serveur courant.
+ r:banner() -- Renvoie la bannière du serveur courant.
- r:port() -- Renvoie le port du serveur courant utilisé pour la
- requête.
+ r:port() -- Renvoie le port du serveur courant utilisé pour la
+ requête.
- r:mpm_query(number) -- Interroge le serveur à propos de son
- module MPM via la requête ap_mpm_query.
+ r:mpm_query(number) -- Interroge le serveur à propos de son
+ module MPM via la requête ap_mpm_query.
- r:expr(string) -- Evalue une chaîne de type expr.
- r:scoreboard_process(a) -- Interroge le serveur à propos du
- processus à la position a
.
+ r:scoreboard_process(a) -- Interroge le serveur à propos du
+ processus à la position a
.
- r:scoreboard_worker(a, b) -- Interroge le serveur à propos du
+ r:scoreboard_worker(a, b) -- Interroge le serveur à propos du
thread b
, dans le processus a
.
- r:started() -- Renvoie l'heure du dernier (re)démarrage du
+ r:started() -- Renvoie l'heure du dernier (re)démarrage du
serveur.
- r:clock() -- Renvoie l'heure courante avec une précision d'une
+ r:clock() -- Renvoie l'heure courante avec une précision d'une
microseconde.
-r:requestbody(filename) -- Lit et renvoie le corps d'une requête. Si
-'filename' est spécifié, le corps de requête n'est pas renvoyé, mais
-sauvegardé dans le fichier correspondant.
+r:requestbody(filename) -- Lit et renvoie le corps d'une requête. Si
+'filename' est spécifié, le corps de requête n'est pas renvoyé, mais
+sauvegardé dans le fichier correspondant.
- r:add_input_filter(filter_name) -- Ajoute le filtre en entrée
+ r:add_input_filter(filter_name) -- Ajoute le filtre en entrée
'filter_name'.
- r:module_info(module_name) -- Interroge le serveur à propos d'un
+ r:module_info(module_name) -- Interroge le serveur à propos d'un
module.
- r:loaded_modules() -- Renvoie une liste des modules chargés par
+ r:loaded_modules() -- Renvoie une liste des modules chargés par
httpd.
-r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time
-(par exemple la mémoire partagée "file") relativement au répertoire de
+r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time
+(par exemple la mémoire partagée "file") relativement au répertoire de
run-time.
r:server_info() -- Renvoie une table contenant des informations
- à propos du serveur, comme le nom de l'exécutable httpd, le
- module mpm utilisé, etc...
+ à propos du serveur, comme le nom de l'exécutable httpd, le
+ module mpm utilisé, etc...
- r:set_document_root(file_path) -- Définit la racine des
- documents pour la requête à file_path.
+ r:set_document_root(file_path) -- Définit la racine des
+ documents pour la requête à file_path.
- r:add_version_component(component_string) -- Ajoute un élément Ã
- la bannière du serveur.
+ r:add_version_component(component_string) -- Ajoute un élément à
+ la bannière du serveur.
- r:set_context_info(prefix, docroot) -- Définit le préfixe et la
- racine des documents du contexte pour une requête.
+ r:set_context_info(prefix, docroot) -- Définit le préfixe et la
+ racine des documents du contexte pour une requête.
- r:os_escape_path(file_path) -- Convertit un chemin du système de
- fichiers en URL indépendamment du système d'exploitation.
+ r:os_escape_path(file_path) -- Convertit un chemin du système de
+ fichiers en URL indépendamment du système d'exploitation.
- r:escape_logitem(string) -- Echappe une chaîne pour
+ r:escape_logitem(string) -- Echappe une chaîne pour
journalisation.
-r:strcmp_match(string, pattern) -- Vérifie si 'string' correspond Ã
+r:strcmp_match(string, pattern) -- Vérifie si 'string' correspond à
'pattern' via la fonction strcmp_match (GLOBs). Par exemple, est-ce que
-'www.example.com' correspond à '*.example.com' ?
+'www.example.com' correspond à '*.example.com' ?
- r:set_keepalive() -- Définit l'état de persistance d'une
- requête. Renvoie true dans la mesure du possible, false dans le
+ r:set_keepalive() -- Définit l'état de persistance d'une
+ requête. Renvoie true dans la mesure du possible, false dans le
cas contraire.
- r:make_etag() -- Génère et renvoie le etag pour la requête
+ r:make_etag() -- Génère et renvoie le etag pour la requête
courante.
-r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au
-client. Si 'clear' est vrai, les en-têtes disponibles seront envoyés et
-effacés.
+r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au
+client. Si 'clear' est vrai, les en-têtes disponibles seront envoyés et
+effacés.
-r:custom_response(status_code, string) -- Génère et définit une réponse
-personnalisée pour un code d'état particulier. Le fonctionnement est
-très proche de celui de la directive ErrorDocument.
+r:custom_response(status_code, string) -- Génère et définit une réponse
+personnalisée pour un code d'état particulier. Le fonctionnement est
+très proche de celui de la directive ErrorDocument.
- r:exists_config_define(string) -- Vérifie si une définition de
+ r:exists_config_define(string) -- Vérifie si une définition de
configuration existe.
- r:state_query(string) -- Interroge le serveur à propos de son
- état.
+ r:state_query(string) -- Interroge le serveur à propos de son
+ état.
- r:stat(filename) -- Exécute stat() sur un fichier, et renvoie
- une table contenant des informations à propos de ce fichier.
+ r:stat(filename) -- Exécute stat() sur un fichier, et renvoie
+ une table contenant des informations à propos de ce fichier.
- r:regex(string, pattern) -- Exécute une recherche à base
- d'expression rationnelle sur une chaîne, et renvoie les
- éventuelles correspondances trouvées.
+ r:regex(string, pattern) -- Exécute une recherche à base
+ d'expression rationnelle sur une chaîne, et renvoie les
+ éventuelles correspondances trouvées.
- r:sleep(secondes) -- Interrompt l'exécution du script pendant le
- nombre de secondes spécifié.
+ r:sleep(secondes) -- Interrompt l'exécution du script pendant le
+ nombre de secondes spécifié.
+
+
+
+ r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une
+base de données et renvoie une classe database. Voir 'Connectivité aux bases de données' pour plus de
+détails.
@@ -936,48 +943,227 @@ contenu suivant :
Modification de contenu avec les filtres lua
- Les fonctions de filtrage implémentées via les directives LuaInputFilter ou LuaOutputFilter sont conçues comme des
- fonctions de 3ème phase non blocantes utilisant des sous-routines
- pour suspendre et reprendre l'exécution d'une fonction lorsque des
- paquets de données sont envoyés à la chaîne de filtrage. La
+ module="mod_lua">LuaOutputFilter sont conçues comme des
+ fonctions de 3ème phase non blocantes utilisant des sous-routines
+ pour suspendre et reprendre l'exécution d'une fonction lorsque des
+ paquets de données sont envoyés à la chaîne de filtrage. La
structure de base d'une telle fonction est :
function filter(r)
- -- Nous indiquons tout d'abord que nous sommes prêts à recevoir des
- -- blocs de données.
- -- Avant ceci, nous pouvons définir notre environnement, tester
- -- certaines conditions, et, si nous le jugeons nécessaire, refuser le
- -- filtrage d'une requête :
+ -- Nous indiquons tout d'abord que nous sommes prêts à recevoir des
+ -- blocs de données.
+ -- Avant ceci, nous pouvons définir notre environnement, tester
+ -- certaines conditions, et, si nous le jugeons nécessaire, refuser le
+ -- filtrage d'une requête :
if something_bad then
- return -- Le filtrage est sauté
+ return -- Le filtrage est sauté
end
- -- Sans se préoccuper des données que nous devons éventuellement ajouter, un arrêt est réalisé ici.
- -- Noter que les filtres de sortie sont les seuls capables d'ajouter des éléments au début des données.
- -- Les filtres en entrée peuvent ajouter des éléments à la fin des données au stade final.
+ -- Sans se préoccuper des données que nous devons éventuellement ajouter, un arrêt est réalisé ici.
+ -- Noter que les filtres de sortie sont les seuls capables d'ajouter des éléments au début des données.
+ -- Les filtres en entrée peuvent ajouter des éléments à la fin des données au stade final.
coroutine.yield([optional header to be prepended to the content])
- -- Après cet arrêt, nous allons recevoir d'autres blocs de données, un par un ;
- -- nous pouvons les traiter comme il nous plaît et procéder à la réponse.
- -- Ces blocs sont conservés dans la variable globale 'bucket', nous réalisons donc
- -- une boucle pour vérifier que 'bucket' n'est pas vide :
+ -- Après cet arrêt, nous allons recevoir d'autres blocs de données, un par un ;
+ -- nous pouvons les traiter comme il nous plaît et procéder à la réponse.
+ -- Ces blocs sont conservés dans la variable globale 'bucket', nous réalisons donc
+ -- une boucle pour vérifier que 'bucket' n'est pas vide :
while bucket ~= nil do
local output = mangle(bucket) -- Do some stuff to the content
coroutine.yield(output) -- Return our new content to the filter chain
end
- -- Une fois les blocs de données épuisés, 'bucket' est positionné à une valeur vide ('nil'),
- -- ce qui va nous faire sortir de cette boucle et nous amener à l'étape suivante.
- -- On peut ajouter ce qu'on veut à la fin des données à cette étape, qui constitue le dernier
- -- arrêt. Les filtres d'entrée comme de sortie peuvent servir à ajouter des éléments à la fin
- -- des données à cette étape.
+ -- Une fois les blocs de données épuisés, 'bucket' est positionné à une valeur vide ('nil'),
+ -- ce qui va nous faire sortir de cette boucle et nous amener à l'étape suivante.
+ -- On peut ajouter ce qu'on veut à la fin des données à cette étape, qui constitue le dernier
+ -- arrêt. Les filtres d'entrée comme de sortie peuvent servir à ajouter des éléments à la fin
+ -- des données à cette étape.
coroutine.yield([optional footer to be appended to the content])
end
+
+ Connectivité aux bases de données
+ Mod_lua implémente une fonctionnalité basique de connexion aux
+bases de données permettant d'envoyer des requêtes ou d'exécuter des
+commandes auprès des moteurs de base de données les plus courants
+(mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle), ainsi que mod_dbd.
+
+ L'exemple suivant montre comment se connecter à une base de
+données et extraire des informations d'une table :
+
+function handler(r)
+ -- connexion à la base de données
+ local database, err = r:dbacquire("mysql", "server=localhost&user=root&database=mydb")
+ if not err then
+ -- Sélection de certaines informations
+ local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
+ if not err then
+ local rows = results(0) -- extrait tous les enregistrements en mode synchrone
+ for k, row in pairs(rows) do
+ r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
+ end
+ else
+ r:puts("Database query error: " .. err)
+ end
+ database:close()
+ else
+ r:puts("Connexion à la base de données impossible : " .. err)
+ end
+end
+
+
+ Pour utiliser mod_dbd, spécifiez
+mod_dbd
comme type de base de données, ou laissez le champ
+vide :
+
+
+ local database = r:dbacquire("mod_dbd")
+
+
+ L'objet database et ses méthodes
+ L'objet database renvoyé par dbacquire
possède
+les méthodes suivantes :
+ Sélection normale et requête vers une base de données
+:
+
+-- Exécution d'une requête et renvoie du nombre d'enregistrements
+affectés :
+local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
+
+-- Exécution d'une requête et renvoie du résultat qui peut être utilisé
+en mode synchrone ou asynchrone :
+local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")
+
+ Utilisation de requêtes préparées (recommandé) :
+
+-- Création et exécution d'une requête préparée :
+local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u")
+if not errmsg then
+ local result, errmsg = statement:query(20) -- exécute la requête pour age > 20
+end
+
+-- Extrait une requête préparée depuis une directive DBDPrepareSQL :
+local statement, errmsg = database:prepared(r, "someTag")
+if not errmsg then
+ local result, errmsg = statement:select("John Doe", 123) -- injecte les valeurs "John Doe" et 123 dans la requête
+end
+
+
+ Echappement de valeurs, fermeture de la base données,
+etc...
+
+-- Echappe une valeur pour pouvoir l'utiliser dans une requête :
+local escaped = database:escape(r, [["'|blabla]])
+
+-- Ferme une base de données et libère les liens vers cette dernière :
+database:close()
+
+-- Vérifie si une connexion à une base de données est en service et
+opérationnelle :
+local connected = database:active()
+
+
+
+ Travail avec les jeux d'enregistrements renvoyés par les requêtes
+ Les jeux d'enregistrements renvoyés par db:select
ou par des
+requêtes préparées créées par db:prepare
permettent de
+sélectionner des enregistrements en mode synchrone ou
+asynchrone, selon le nombre d'enregistrements spécifié :
+ result(0)
sélectionne tous les enregistrements en mode
+synchrone en renvoyant une table d'enregistrements.
+ result(-1)
sélectionne le prochain enregistrement disponible en
+mode asynchrone.
+ result(N)
sélectionne l'enregistrement numéro
+N
en mode asynchrone.
+
+
+-- extrait un jeu d'enregistrements via une requête régulière :
+local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
+
+local rows = result(0) -- sélectionne tous les enregistrements en mode synchrone
+local row = result(-1) -- sélectionne le prochain enregistrement disponible en mode asynchrone
+local row = result(1234) -- sélectionne l'enregistrement 1234 en mode asynchrone
+
+ Il est possible de construire une fonction qui renvoie une
+fonction itérative permettant de traiter tous les enregistrement en mode
+synchrone ou asynchrone selon la valeur de l'argument async :
+
+
+function rows(resultset, async)
+ local a = 0
+ local function getnext()
+ a = a + 1
+ local row = resultset(-1)
+ return row and a or nil, row
+ end
+ if not async then
+ return pairs(resultset(0))
+ else
+ return getnext, self
+ end
+end
+
+local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
+if not err then
+ -- sélectionne des enregistrements en mode asynchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, true) do
+ ....
+ end
+ end
+
+ -- sélectionne des enregistrements en mode synchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, false) do
+ ....
+ end
+ end
+end
+
+
+
+ Fermeture d'une connexion à une base de données
+
+ Lorsqu'elles ne sont plus utilisées, les connexions aux bases de
+données doivent être fermées avec database:close()
. Si vous
+ne les fermez pas manuellement, mod_lua les fermera peut-être en tant
+que résidus collectés, mais si ce n'est pas le cas, vous pouvez finir
+pas avoir trop de connexions vers la base de données inutilisées. Les
+deux mesures suivantes sont pratiquement identiques :
+
+
+-- Méthode 1 : fermeture manuelle de la connexion
+local database = r:dbacquire("mod_dbd")
+database:close() -- c'est tout
+
+-- Méthode 2 : on laisse le collecteur de résidus la fermer
+local database = r:dbacquire("mod_dbd")
+database = nil -- on coupe le lien
+collectgarbage() -- fermeture de la connexion par le collecteur de résidus
+
+
+
+ Précautions à prendre lorsque l'on travaille avec les bases
+de données
+ Bien que les fonctions query
et run
+soient toujours disponibles, il est recommandé d'utiliser des requêtes
+préparées chaque fois que possible, afin d'une part d'optimiser les
+performances (si votre connexion reste longtemps en vie), et d'autre part
+minimiser le risque d'attaques par injection SQL. Les fonctions
+run
et query
ne doivent être utilisées que
+lorsque la requête ne contient pas de variables (requête statique). Dans
+le cas des requêtes dynamiques, utilisez db:prepare
ou
+db:prepared
.
+
+
+
+
LuaRoot
diff --git a/docs/manual/mod/mod_proxy.xml.fr b/docs/manual/mod/mod_proxy.xml.fr
index 71d2e571b9..933ca159d1 100644
--- a/docs/manual/mod/mod_proxy.xml.fr
+++ b/docs/manual/mod/mod_proxy.xml.fr
@@ -1,7 +1,7 @@
-
+
@@ -750,8 +750,8 @@ serveur HTTP Apache
BalancerInherit
Héritage des membres de groupes de répartition de
charge définis via la directive ProxyPass au niveau du serveur principal
- ProxyPassInherit On|Off
- ProxyPassInherit On
+ BalancerInherit On|Off
+ BalancerInherit On
server configvirtual host
Disponible à partir de la version 2.5.0 du serveur
HTTP Apache.