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.