Documente Academic
Documente Profesional
Documente Cultură
ATRID
Cours Apache : INSTALLATION ET ADMINISTRATION par ATRID Copyright 1999-2000 par ATRID Systmes
Ce document peut tre librement lu, stock, reproduit, diffus, traduit et cit par tous moyens et sur tous supports aux conditions suivantes:
Tout lecteur ou utilisateur de ce document reconnat avoir pris connaissance de ce quaucune garantie nest donne quant son contenu, tous points de vue, notamment vracit, prcision et adquation pour toute utilisation ; il nest procd aucune modication autre que cosmtique, changement de format de reprsentation, traduction, correction dune erreur de syntaxe vidente, ou en accord avec les clauses ci-dessous ; le nom, le logo et les coordonnes de lauteur devront tre prservs sur toutes les versions drives du document tous les endroits o ils apparaissent dans loriginal, les noms et logos dautres contributeurs ne pourront pas apparatre dans une taille suprieure celle des auteurs prcdents, des commentaires ou additions peuvent tres insrs condition dapparatre clairement comme tels ; les traductions ou fragments doivent faire clairement rfrence une copie originale complte, si possible une copie facilement accessible ; les traductions et les commentaires ou ajouts insrs doivent tre dats et leur(s) auteur(s) doi(ven)t tre identiable(s) (ventuellement au travers dun alias) ; cette licence est prserve et sapplique lensemble du document et des modications et ajouts ventuels (sauf en cas de citation courte), quelquen soit le format de reprsentation ; quel que soit le mode de stockage, reproduction ou diffusion, toute version imprime doit contenir une rfrence une version numrique librement accessible au moment de la premire diffusion de la version imprime, toute personne ayant accs une version numrise de ce document doit pouvoir en faire une copie numrise dans un format directement utilisable et si possible ditable, suivant les standards publics, et publiquement documents en usage ;
La transmission de ce document un tiers se fait avec transmission de cette licence, sans modication, et en particulier sans addition de clause ou contrainte nouvelle, explicite ou implicite, lie ou non cette transmission. En particulier, en cas dinclusion dans une base de donnes ou une collection, le propritaire ou lexploitant de la base ou de la collection sinterdit tout droit de regard li ce stockage et concernant lutilisation qui pourrait tre faite du document aprs extraction de la base ou de la collection, seul ou en relation avec dautres documents. Toute incompatibilit des clauses ci-dessus avec des dispositions ou contraintes lgales, contractuelles ou judiciaires implique une limitation correspondante : droit de lecture, utilisation ou redistribution verbatim ou modie du document. Adapt de la licence Licence LLDD v1, octobre 1997, Libre reproduction Copyright Bernard Lang [F1450324322014] URL : http://pauillac.inria.fr/~lang/licence/lldd.html
Historique des version Version 1.0 du 3/09/1998 Version initiale Version 1.1 du 28/01/2000 Ajout API Modules
13.2.4. example_create_server_cong ............................................................................................... 32 13.2.5. example_merge_server_cong ............................................................................................... 32 13.2.6. example_cmds ........................................................................................................................ 32 13.2.7. example_handlers ................................................................................................................... 34 13.2.8. example_translate_handler ..................................................................................................... 34 13.2.9. example_check_user_id ......................................................................................................... 34 13.2.10. example_auth_checker ......................................................................................................... 35 13.2.11. example_access_checker ...................................................................................................... 35 13.2.12. example_type_checker ......................................................................................................... 35 13.2.13. example_xer_upper ............................................................................................................ 35 13.2.14. example_logger .................................................................................................................... 35 13.2.15. example_header_parser ........................................................................................................ 36 13.2.16. example_child_init ............................................................................................................... 36 13.2.17. example_child_exit............................................................................................................... 36 13.2.18. example_post_read_request ................................................................................................. 36
Chapitre 1. Prsentation
Le serveur HTTP Apache est le fruit du travail dun groupe de volontaires, The Apache Group, qui a voulu raliser un serveur Web du mme niveau que les produits commerciaux sous forme de logiciel libre cest dire que son code source est disponible. Lquipe dorigine a t rejointe par des centaines dutilisateurs qui, par leurs ides, leurs tests et leurs lignes de code, ont contribus faire dApache le plus utilis des serveurs Web du monde. Lanctre dApache est le serveur libre dvelopp par le National Center for Supercomputing Applications de luniversit de lIllinois. Lvolution de ce serveur sest arrte lorsque le responsable a quitt le NCSA en 1994. Les utilisateurs ont continu corriger les bugs et crer des extensions quils distribuaient sous forme de "patches" dou le nom "a patchee server". La version 1.0 de Apache a t disponible le 1 dcembre 1995. Lquipe de dveloppement se coordonne par lintermdiaire dune liste de diffusion dans laquelle sont proposes les modications et discutes les volutions apporter au logiciel. Les changements sont soumis un vote avant dtre intgrs au projet. Tout le monde peut rejoindre lquipe de dveloppement, il suft de contribuer activement au projet pour pouvoir tre nomm membre du Apache Group.
Le serveur rpond :
HTTP/1.1 200 OK Date: Wed, 09 Dec 1998 17:44:56 GMT Server: Apache/1.3.3 (Unix) Last-Modified: Wed, 09 Dec 1998 09:45:16 GMT ETag: "f712-d7-366e46ac" Accept-Ranges: bytes Content-Length: 215 Connection: close Content-Type: text/html <HTML> <BODY> <H1>Bienvenue chez LigerWine</H1> <UL> <LI><A href="anjou.html">Anjou</A> <LI><A href="bourgueil.html">Bourgueil</A> </UL> <BR> <BR> LigerWine SA 3, rue RABELAIS 37512 Trouperdu </BR> </BODY> </HTML>
2.1. Dnitions
URL : Unied Resource Locator ex : http://www.apache.org/download/apache_1_3_3_tar.gz URI : Unied Resource Indicator ex : /download/apache_1_3_3_tar.gz
La lecture du chier archive cre le rpertoire apache_1.3.3 et extrait les chiers dans ce rpertoire. Il est conseill de lire les chiers README, README.configure et INSTALL avant de procder la compilation et linstallation du logiciel.
3.1. Conguration
La conguration du logiciel consiste excuter le script congure avec les arguments personnalisant linstallation. Les principales options de conguration sont : Option layout help verbose quiet prex=rpertoire enablemodule=nom disablemodule=nom Signication afche les rpertoires dinstallation et de fonctionnement. afche la signication des options afche plus de messages lors de la conguration nafche aucun message lors de la conguration chemin dinstallation du logiciel (ex : /opt/apache) valide le module dont le nom est donn
ajoute le chier dans le rpertoire des modules, et dans le chier de conguration et valide add-module=chier le module enable-suexec valide lutilisation de suexec
3.2. Compilation
La compilation est excute simplement en tapant la commande make. Il est possible de garder une trace de la compilation en excutant :
bash$ make > make.log 2>&1 & bash$ tail -f make.log
3.3. Installation
La phase dinstallation est aussi facile que la compilation. Elle seffectue en tapant la commande make install. De la mme faon, il possible de garder une trace de linstallation en tapant :
bash$ make install > install.log 2>&1 & bash$ tail -f install.log
Aprs cette phase, le serveur Apache est prt fonctionner moyennant une petite conguration. Dans la suite de ce document, nous allons prsenter des directives de conguration du serveur Apache. Le chier daide contient une description dtaille de toutes ces directives sous forme dun manuel de rfrence. La syntaxe utilise dans les descriptions suit le format suivant :
Syntaxe : dcrit le format de la directive Dfaut : si la directive une valeur par dfaut, celle-ci est note Contexte : spcie dans quel contexte la directive peut etre utilise (conguration du serveur, hote virtuel, directory et .htaccess) Origine : informe de lendroit ou est implment la directive (coeur, base, extension, exprimental) module : le nom du module implmentant la directive.
Le paramtre du script de lancement est le chemin daccs au chier de conguration du serveur httpd. La documentation dApache propose dutiliser trois chiers de conguration en fonction des directives utilises :
le chier httpd.conf contient les directives de contrle du dmon le chier srm.conf contient les directives de spcication des documents fournis par le serveur le chier access.conf contient les directives de contrle daccs aux documents.
Nous allons utiliser un seul chier httpd.conf pour la prsentation de nos exemples. Nous signions au serveur de ne pas chercher les autres chiers en spciant les directives :
AccessConfig /dev/null ResourceConfig /dev/null
Les chiers de ce premier exemple se trouvent dans le rpertoire /opt/formation/site1 . Le chier de conguration minimal conf/httpd.conf contient :
User http Group http AccessConfig /dev/null ResourceConfig /dev/null
10
Le tableau ci-dessous prsente la signication des directives utilises. Directive User Group ServerName DocumentRoot Signication Identicateur de lutilisateur pour lexcution du serveur Identicateur de groupe pour lexcution du serveur Nom du serveur pour la redirection des URL Rpertoire racine des chiers publis
Le chemin spci dans la directive DocumentRoot est ajout aux noms des chiers demands dans un URL. Par exemple, la demande http://www.ligerwine.com/prix.html va chercher le chier /opt/formations/site1/html/prix.html . Lorsque lon se connecte sur le site, le serveur envoie la liste des chiers contenus dans le rpertoire donn par la directive DocumentRoot. Le chier var/log/error_log contient les enregistrements derreurs dtectes par le serveur. Apache permet denvoyer les enregistrements derreurs dautres endroits en utilisant la directive ErrorLog. La directive LogLevel permet de spcier le niveau denregistrement : Niveau debug info notice warn error crit alert emerg Signication les messages de mise au point informations de fonctionnement conditions normales mais signicatives petits problmes non graves conditions derreur niveau critique perturbant le fonctionnement il faut ragir immdiatement systme inutilisable
Lorsquun niveau donn est demand, tous les messages des niveaux infrieurs sont afchs.
11
Directive StartServers MinSpareServers MaxSpareServers MaxRequestsPerChild MaxClients ServerAdmin ServerSignature TimeOut HostNameLookup
Signication Permet de dnir le nombre de serveurs lancs au dmarrage. Nombre minimum de serveurs en attente Nombre maximum de serveurs en attente Nombre maximum de requtes traites par un processus (0 => inni)
Nombre maximum de serveurs crs Permet de spcier une adresse mail pour les messages derreur. Permet dajouter une ligne de signature aux messages gnrs automatiquement (On ou EMail) Temps maximum dattente pour quune requte soit complte. Permet denregistrer le nom dun client plutt que son adresse dans les chiers denregistrement
Ces directives sont utilises dans le site exemple /opt/formations/site3 . Le serveur Apache gre, par dfaut, la notion de connexion persistante qui permet de grer plusieurs requtes HTTP travers la mme connexion TCP. Cette fonction entrane un gain de performance notable dans le chargement de pages possdant de nombreuses images. Cependant, cette fonction nest active que pour les chiers dont la taille est connue lavance. Cela ne fonctionne donc pas avec des scripts CGI. Les directives de contrle de cette fonction sont : Directive KeepAlive Signication Spcie le nombre de requtes gres par la mme connexion (0 dvalide la fonction)
12
avec :
host : adresse IP ou nom complet du client identit : si la directive IdentityCheck est valide et que le client rpond autorisation : lidenticateur de lutilisateur si le document est protg date : la date et lheure de la requte requte : la ligne de requte du client code : le code trois chiffres envoy au client taille : la taille en octets du document envoy sans prendre en compte les enttes
Si un champ na pas de valeur, il est remplac par un tiret (-). Un exemple est donn dans le site /opt/formations/site4 .
SymLinksIfOwner- le serveur suivra les liens symboliques rencontrs dans le rpertoire si le chier point Match appartient luid dexcution
13
Le paramtre adresseIP peut tre donne sous forme dadresse ou de nom complet. Il existe deux mthodes de dclaration de serveurs virtuels :
le systme doit fournir une adresse IP diffrente pour chaque serveur virtuel. La directive Listen permet de spcier que le serveur attend des connexions sur une adresse IP et un port particulier. le systme ne fournit quune adresse IP et la discrimination seffectue par le nom. La directive NameVirtualHost dnit ladresse IP sur laquelle seront accrochs les serveurs virtuels. Ce mode pose un problme avec les navigateurs gnrant des requtes HTTP/1.0, car le nom nest pas mis dans la requte. La directive ServerPath permet, en partie, de palier le problme.
Une utilisation importante des serveurs virtuels avec de nombreux chiers denregistrement peut gnrer des problmes de disponibilit didenticateurs de chiers. Un exemple est donn dans /opt/formations/site6 .
Largument dir peut tre une expression rgulire permettant de spcier un ensemble de rpertoires. Ce bloc peut contenir des directives de contrle daccs : Directive allow from deny from order Signication donne la liste des clients ayant accs ce bloc donne la liste des clients dont laccs est refus spcie lordre dans lequel sont values les directives allow et deny
"deny, allow" : la directive deny est value avant la directive allow. Si aucune ne convient, laccs est autoris (valeur par dfaut) "allow, deny" : la directive allow est value avant la directive deny. Si aucune ne convient, laccs est interdit
14
"mutual-failure" : seules les machines donnes dans la directives allow et non donnes dans la directive deny sont autorises.
La directive DirectoryMatch fonctionne de faon similaire avec une expression rgulire comme argument.
La directive LocationMatch fonctionne de faon similaire avec une expression rgulire comme argument.
La directive FilesMatch fonctionne de faon similaire avec une expression rgulire comme argument.
15
permet dutiliser les directives contrlant les autorisation daccs permet dutiliser les directives contrlant les types de document permet dutiliser les directives de contrle de lafchage des rpertoires permet de spcier le contrle des accs client (allow, deny, order) permet dutiliser les directives de contrles des actions permises dans les rpertoires
<Directory> (sauf avec des expressions rgulires) et le chier .htaccess sont valus simultanment (.htaccess la prscance sur <Directory>) <DirectoryMatch> et <Directory> avec des expressions rgulires <Files> et <FilesMatch> <Location> et <LocationMatch>
Les directives donnes dans les sections VirtualHost sont values aprs celles de la conguration gnrale.
16
La directive ScriptLog permet de spcier un chier denregistrement des traces dexcution des scripts CGI. La directive ScriptLogLength permet de limiter la taille de ce chier. ScriptLogBuffer spcie la taille maximum enregistre pour une requte POST ou PUT. La directive ScriptLog ne doit tre utilise que pour la mise au point des scripts. En plus des variables standard de linterface CGI, les variables suivantes peuvent tre positionnes :
REMOTE_HOST : si la directive HostnameLookups est valide et que la recherche DNS du client a russi. REMOTE_IDENT : si la directive IDENTITY_CHECK est valide et que le client a rpondu la demande REMOTE_USER : si le script CGI est sujet authentication
Le module mod_env permet de passer des variables denvironnement aux scripts CGI. Ces variables peuvent tre dnies par la directive SetEnv ou hrites de lenvironnement du serveur grace la directive PassEnv. La directive UnsetEnv permet denlever des variables. le module mod_setenvif permet de positionner des variables denvironnement en fonction de conditions sur la requte du client. La directive BrowserMatch permet de dnir des variables en fonction du contenu du champ User-Agent de lentte HTTP. La directive BrowserMatchNoCase fonctionne de la mme faon sans tenir compte de la casse des caractres. Les directives SetEnvIf et SetEnvIfNoCase permettent de positionner des variables en fonction de la valeur des attributs de la requte :
soit des champs de lentte (Host, User-Agent, Referer) soit dautres informations lies la requte (Remote_Host, Remote_addr, Remote_User, Request_Method, Request_URI)
17
Un gestionnaire est une procdure interne Apache permettant deffectuer des actions lorsque un chier est demand. Lassociation entre un chier et un gestionnaire est effectue soit en fonction de sa position dans le systme de chier, soit en fonction de lextension du chier. Les gestionnaires standards intgrs Apache sont :
send-as-is: envoie le chier tel quel cgi-script: gre le chier comme un script CGI imap-le: gre le chier comme un chier image-map server-info: rcupre les informations sur le serveur server-parsed: interprte pour la gestion SSI server-status: Rcupre ltat du serveur type-map: interprte pour la ngociation de contenu
La directive AddHandler permet dassocier une extension de chier un gestionnaire existant. La directive SetHandler est utilise dans un bloc Directory ou Location pour associer tous les chiers de ce bloc au gestionnaire spci.
congurer le chier suexec.h pour ladapter lenvironnement dexcution compiler suexec avec la commande make suexec ajouter le support de suexec dans Apache installer lexcutable suexec dans le rpertoire donn avec les droits setuid du super utilisateur (root)
Ce programme peut tre utilis en spciant des directives User et Group, avec un utilisateur et un groupe diffrents de ceux du serveur, dans un bloc VirtualHost. Dans ce cas, les scripts CGI sont excuts avec les identicateurs donns. Il peut aussi tre utilis directement dans les scripts CGI.
18
Chapitre 6. Authentication
La gestion de lauthentication permet de limiter laccs tout ou partie du site des utilisateurs autoriss. Pour ce faire, il faut crer un base de donnes des utilisateurs avec un mot de passe pour chacun deux. Cette base de donnes est stocke dans un chier dont le format est semblable celui du chier /etc/passwd dUnix. Ce chier est gr avec le programme htpasswd livr avec Apache dans le sous-rpertoire support. Il faut crer le chier des utilisateurs en dehors du rpertoire point par DocumentRoot. La cration seffectue par :
bash$ htpasswd c nom_du_fichier utilisateur New password: Re-type new password:
Le chier est lisible et modiable avec un diteur de texte mais les mots de passe sont crypts. La conguration du serveur consiste dnir un espace dans lequel lauthentication est ncessaire. Ceci est effectu dans un bloc Directory en spciant les directives suivantes :
AuthName nom AuthType Basic AuthUserFile /opt/apache/etc/passwd require valid-user
La directive AuthName donne le nom de lespace protg. Lautorisation est associe ce nom et permet de crer plusieurs zones protges par la mme identication. Cette identication est renvoye automatiquement par le navigateur la demande du serveur. La directive AuthType spcie le type de contrle effectu. Seul le mot Basic peut tre utilis aujourdhui. Loption Digest est en cours de standardisation et permettra plus de scurit dans la procdure dauthentication. La directive AuthUserFile donne le nom du chier contenant la liste des utilisateurs autoriss. Il est possible de spcier une directive AuthGroupFile donnant le nom dun chier de groupes dutilisateurs. Ce chier a une syntaxe proche de celle du chier /etc/group dUnix. la directive require permet de spcier les utilisateurs ayant accs la ressource protge. Elle prend en paramtre une liste dutilisateurs, de groupes ou le mot valid-user. Le bloc Limit permet de spcier des directives particulires en fonction de la mthode HTTP utilise. Ce mcanisme nest pas trs efcace pour un grand nombre dutilisateurs. Le module mod_auth_dbm permet dutiliser les chier dbm pour stocker les informations dauthentication utilisateur. Ce systme utilise des paires cl et valeur avec un index sur les cls. En connaissant la cl, on retrouve trs vite la valeur associe. Le module nest pas inclut dans la construction standard dApache. La gestion de la base de donnes est effectue par le programme dbmmanage qui utilise les commandes suivantes : Commande adduser Signication pemet dajouter un utilisateur
19
Chapitre 6. Authentication
dtruit un utilisateur vrie le mot de passe associ un utilisateur afche le contenu de la base de donnes
Le principe de fonctionnement est identique en remplaant la directive AuthUserFile par AuthDBMUserFile . Pour la gestion des groupes, on utilise la directive AuthDBMGroupFile . Il existe dautres modules de connexion des bases de donnes telles que mSQL, PostgreSQL, etc... La directive IdentityCheck permet deffectuer une requte vers le dmon identd de la machine cliente (RFC 1413). Cependant cette information est rarement disponible et, lorsquelle est disponible, son intgrit est sujette caution. Cette directive peut gnrer des temps de rponse trs longs. Le module mod_anon permet, lorsquune politique daccs est dnie, dautoriser un utilisateur anonyme se connecter sur le site. Les directives associes sont : Directive Anonymous Anonymous_NoUserID Anonymous_LogEmail Anonymous_VerifyEmail Anonymous_MustGiveEmail Anonymous_Authoritative Signication permet de spcier lidenticateur dutilisateur utiliser permet de laisser les champs didentication vides les accs sont enregistrs dans un chier le mot de passe doit contenir @ et . il faut donner un mot de passe sous forme dune adresse email les autres possibilits dauthentication ne sont pas testes
autorisent les utilisateurs senregistrer avec les noms invite et anonyme en fournissant, comme mot de passe, leur adresse email. Tous les accs sont enregistrs dans le chier httpd_log. Les utilisateurs rfrencs utilisent leur identicateur habituel.
20
La directive IndexOptions permet de contrler lafchage : Option IconHeight=pixels IconWidth=pixels IconsAreLinks NameWidth ScanHTMLTitle Signication donne la hauteur des icnes en pixels donne la largeur des icnes en pixels permet dutiliser les icnes comme des liens permet de forcer la largeur de la colonne nom Afche le titre des documents HTML
21
nafche pas lentte de tri nafche pas la description nafche pas la date de modication nafche pas la taille
22
par la directive Option Multiviews qui doit tre positionne pour les rpertoires dans lesquels la ngociation est possible. un chier type-map qui contient la liste exacte des variantes.
Dans les pages HTML gnres, il ne faut pas donner les extensions des chiers images. Lorsque le navigateur demandera une image, Apache renverra le format disponible le plus adapt la demande.
8.1.2. Le langage
La directive AddLanguage permet de spcier une langue dans laquelle peuvent tre transmis les documents. La directive associe une extension sur les noms des chiers une demande de langage sous forme de type MIME. Les documents doivent tre raliss dans les langues supportes. La directive LanguagePriority permet au serveur de xer la priorit des langages dans le cas o le client nmet pas de prfrences.
23
URI: sandra.jpeg Content-type: image/jpeg; qs=0.8 URI: sandra.gif Content-type: image/gif; qs=0.5 URI: sandra.txt Content-type: text/plain; qs=0.01
URI : donne le chier contenant la variante, la localisation est relative au chier de description Content-type: type du chier en prenant en compte le jeu de caractres et le niveau de qualit (type MIME) Content-language: le code du langage Content-encoding: le codage du document (x-compress ou x-gzip) Content-length: la taille du chier
24
Apache permet de grer un cache lorsquil fonctionne en mode mandataire. Les directives associes sont : Directive CacheRoot CacheSize CacheGcInterval CacheMaxExpire CacheLastModiedFactor CacheDirsLevels CacheDirLength CacheDefaultExpire NoCache Signication donne le rpertoire dans lequel seront stocks les chiers. spcie la taille du cache en kilo-octets donne lintervalle de temps entre deux tests du cache pour vrier la taille dure de validit dun document facteur de correction pour le calcul de la date de validit (fonction de la dernire modication) nombre maximum de niveaux de rpertoires dans le cache longueur dun chemin dans le cache donne une dure de validit par dfaut pour les protocoles nen fournissant pas permet de spcier des critres pour les documents ne devant pas tre dans le cache
25
errmsg : donne le message en cas derreur dinterprtation sizefmt : donne le format dafchage de la taille (bytes ou abbrev) timefmt : donne le format dafchage des temps (voir strftime())
echo : permet dafcher une variable exec : permet dexcuter un script en fonction de lattribut :
cgi : pour les scripts CGI cmd : pour un script shell fsize : afche la taille du chier en fonction de lattribut
le : relatif au rpertoire du script virtual : URL relatif sil ne commence pas par "/"
astmod afche la date de modication du chier (idem fsize) include : insre le texte dun autre document dans le chier courant ; loption IncludeNOEXEC empche lexcution des scripts (les attributs sont les mmes que pour fsize) printenv : afche les variables denvironnement set : initialise une variable :
<!-#set var="nom" value="sandra" ->
26
<!-#endif ->
27
la date courante la date du dernier dmarrage la dure de fonctionnement le nombre total daccs et le trac gnr ltat du processeur de machine hte le nombre de requtes par secondes le nombre doctets par secondes le nombre doctets par requte le nombre de requte en cours le nombre de serveurs en attente ltat des serveurs
La directive ExtendedStatus permet dobtenir en plus le dtail de ltat pour chaque requte. Il est possible dobtenir un afchage rafrachi une priodicit donne en spciant ?refresh=T, ou T est la priode en secondes, la suite de lURI. Le module mod_info permet dafcher la conguration courante du serveur.
28
Le module mod_rewrite permet de transformer les URL reus laide de rgles bases sur des expressions rgulires. Il ny a pas de limites sur le nombre de rgles pouvant tre appliques ; les dnitions pouvant tre effectues au niveau du serveur, du serveur virtuel, du bloc Directory ou du rpertoire.
29
crer un rpertoire pour contenir les sources du module dans src/modules copier les chiers du module example modier les chiers ajouter la ligne suivante dans le chier src/Configuration.tmpl
Module nom_module modules/nom/mod_nom.o
Le reste de ce chapitre prsente le module example fournit en exemple avec les sources dApache. Ce module afche une trace des appels de ces fonctions. Les fonctions de lAPI Apache sont dclares dans les chiers du rpertoire include. Elles sont toutes prxes par la macro API_EXPORT.
30
example_auth_checker, /* [6] check user_id is valid *here* */ example_access_checker, /* [4] check access by host address */ example_type_checker, /* [7] MIME type checker/setter */ example_fixer_upper, /* [8] fixups */ example_logger, /* [10] logger */ #if MODULE_MAGIC_NUMBER >= 19970103 example_header_parser, /* [3] header parser */ #endif #if MODULE_MAGIC_NUMBER >= 19970719 example_child_init, /* process initializer */ #endif #if MODULE_MAGIC_NUMBER >= 19970728 example_child_exit, /* process exit/cleanup */ #endif #if MODULE_MAGIC_NUMBER >= 19970902 example_post_read_request /* [1] post read_request handling */ #endif {;
MODULE_MAGIC_NUMER est dni dans le chier include/ap_mmn.h et sert tracer les modication de lAPI dApache. STANDARD_MODUL_STUFF permet dinitialiser lentte de la structure avec les valeurs par dfaut. La plupart des champs seront initialiss lexcution. Les gestionnaires du module qui retournent un entier peuvent gnrer les valeurs suivantes :
OK : le gestionnaire a trait la requte DECLINED : le gestionnaire ne fait rien HTTP_xxxx : un des codes du protocole HTTP (voir httpd.h)
13.2.1. example_init
Cette fonction est appele linitialisation du serveur avant quil accepte les requtes. Elle est excute de nouveau chaque conguration du serveur. La syntaxe est :
static void example_init(server_rec *s, pool *p)
13.2.2. example_create_dir_cong
Cette fonction est appele une fois avec le paramtre dirspec gal NULL linitialisation du serveur principal et pour chaque bloc Location, Directory, File ou chier .htaccess dans lequel apparat une directive du module. La syntaxe est :
31
13.2.3. example_merge_dir_cong
Cette fonction est appele pour fusionner deux structures lies un rpertoire dans le cas dun hritage. La syntaxe est :
static void *example_merge_dir_config(pool *p, void *parent_conf, void *newloc_conf)
13.2.4. example_create_server_cong
Cette fonction cre la structure lie au serveur pour le module. Elle est appele une fois pour le serveur principal et ensuite pour chaque serveur virtuel. La syntaxe est :
static void *example_create_server_config(pool *p, server_rec *s)
13.2.5. example_merge_server_cong
Cette fonction est appele pour chaque serveur virtuel avec la structure alloue pour le serveur principal. Cela donne la possibilit de grer des hritages ventuels. La syntaxe est :
static void *example_merge_server_config(pool *p, void *server1_conf, void *server2_conf)
13.2.6. example_cmds
Cest un tableau de structures du type command_rec de description des directives.
static const command_rec example_cmds[] = { { "Example", /* directive name */ cmd_example, /* config action routine */ NULL, /* argument to include in call */ OR_OPTIONS, /* where available */
32
cmd_func parses command line itself */ one argument only */ two arguments only */ one argument, occuring multiple times */ two arguments, 2nd occurs multiple times * (e.g., AddIcon) */ One of On or Off */ No args at all, e.g. </Directory> */ one or two arguments */ three arguments only */ two or three arguments */ one, two or three arguments */ one or three arguments */
33
* configuration, but wipe * before the first * request is served */ server_rec *server; /* Server_rec being configured for */ char *path; /* If configuring for a directory, * pathname of that directory. * NOPE! Thats what it mean * previous to the * existance of <Files>, <Location> * and regex * matching. Now the only usefulness * that can * be derived from this field is * whether a command * is being called in a server * context (path == NULL) * or being called in a dir context * (path != NULL).*/ const command_rec *cmd; /* configuration command */ const char *end_token; /* end token required to end a * nested section */ { cmd_parms;
13.2.7. example_handlers
Il sagit dun tableau de structures effectuant lassociation entre le nom servant au rfrencement et le gestionnaire.
static const handler_rec example_handlers[] = { {"example-handler", example_handler{, {NULL{ {;
La fonction du gestionnaire est appele pour tous les documents quelle est sense grer. La syntaxe est :
static int example_handler(request_rec *r)
13.2.8. example_translate_handler
Cette fonction permet au module de traduire lURL en un nom de chier. Le premier module qui ne retourne pas DECLINED est suppos avoir effectu le travail. La syntaxe est :
static int example_translate_handler(request_rec *r)
34
13.2.9. example_check_user_id
Cette fonction permet au module de vrier les informations dauthentication. Le premier module qui ne retourne pas DECLINED est suppos avoir effectu le travail. La syntaxe est :
static int example_check_user_id(request_rec *r
13.2.10. example_auth_checker
Cette fonction permet au module de vrier si la ressource demande requiert une autorisation. Le premier module qui ne retourne pas DECLINED est suppos avoir effectu le travail. La syntaxe est :
static int example_auth_check(request_rec *r)
13.2.11. example_access_checker
Cette fonction permet au module de vrier les conditions daccs la ressource. Le premier module qui ne retourne pas DECLINED est suppos avoir effectu le travail. La syntaxe est :
static int example_access_checker(request_rec *r)
13.2.12. example_type_checker
Cette fonction permet au module de xer le type du document. Sil retourne OK, aucun autre module nest appel. La syntaxe est :
static int example_type_checker(request_rec *r)
13.2.13. example_xer_upper
Cette fonction est appele pour effectuer les dernires modications sur les enttes. La syntaxe est :
static int example_fixer_upper(request_rec *r)
13.2.14. example_logger
35
Cette fonction permet au module deffectuer les enregistrements de traces quil souhaite. La syntaxe est :
static int example_logger(request_rec *r)
13.2.15. example_header_parser
Cette fonction permet au module davoir accs lentte de la requte au dbut du processus. La syntaxe est :
static int example_header_parser(request_rec *r)
13.2.16. example_child_init
Cette fonction est appele linitialisation du processus serveur avant quil accepte les requtes. Cela permet dexcuter des actions qui ne doivent tre excutes quune fois par processus. La syntaxe est :
static void example_child_init(server_rec *s, pool *p)
13.2.17. example_child_exit
Cette fonction est appele larrt du processus serveur. La syntaxe est :
static void example_child_exit(server_rec *s, pool *p)
13.2.18. example_post_read_request
Cette fonction est appele aprs la lecture de la requte mais avant les autres phases. Cela permet, par exemple, de positionner des variables denvironnement. La syntaxe est :
static int example_post_read_request(request_rec *r)
36