IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Création de directives pour un module Apache


Sujet :

Apache

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Création de directives pour un module Apache
    Bonjour,

    J'ai créé un module sous apache 2.2.6 qui, entre autres, interroge un serveur externe hébergeant un annuaire ldap. A l'heure actuelle l'adresse ip du serveur et le numéro de port sont codés en dur sur le module.

    J'aimerai pouvoir créé des directives dans le fichier de configuration d'apache (httpd.conf) indiquant l'adresse ip et le numéro de port du serveur; ça sera sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <ifmodule mod_monModule>
    url @serveur
    port Numéro_de_port
    <endifmodule>
    Avez-vous une idée des fonctions à utiliser??

    Merci beaucoup pour votre aide.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Etudier les sources d'autres modules : vous fournissez une table correspondants à vos différentes directives dans la structure représentant votre module. Exemple :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module AP_MODULE_DECLARE_DATA ldap_module = {
       STANDARD20_MODULE_STUFF,
       NULL,                        /* create dir config */
       NULL,                        /* merge dir config */
       util_ldap_create_config,     /* create server config */
       util_ldap_merge_config,      /* merge server config */
       util_ldap_cmds,              /* command table */
       util_ldap_register_hooks,    /* set up request processing hooks */
    };
    Et cette table des directives se présente ainsi :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    static const command_rec util_ldap_cmds[] = {
        AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes,
                      NULL, RSRC_CONF,
                      "Set the size of the shared memory cache (in bytes). Use "
                      "0 to disable the shared memory cache. (default: 100000)"),
    
        /* ... */
    
        AP_INIT_TAKE1("LDAPConnectionTimeout", util_ldap_set_connection_timeout,
                      NULL, RSRC_CONF,
                      "Specify the LDAP socket connection timeout in seconds "
                      "(default: 10)"),
    
        {NULL}
    };
    (Notez la valeur NULL à la fin)

    Les paramètres de AP_INIT_TAKE1 (macro définissant une directive n'attendant qu'un seul et unique argument) sont :
    • Le nom de la directive
    • La fonction de callback à appeler lorsque la directive est rencontrée. Pour une directive attendant exactement un paramètre son prototype doit correspondre à :
      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      const char *(*take1) (cmd_parms *parms, void *mconfig, const char *w);
    • Je crois qu'il s'agit d'un pointeur générique privé pour que vous puissiez fournir la configuration du module (la valeur NULL vous permettra d'omettre ce paramètre)
    • Un masque décrivant où la directive peut être définie :
      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      /**
       * @defgroup ConfigDirectives Allowed locations for configuration directives.
       *
       * The allowed locations for a configuration directive are the union of
       * those indicated by each set bit in the req_override mask.
       *
       * @{
       */
      #define OR_NONE 0             /**< *.conf is not available anywhere in this override */
      #define OR_LIMIT 1	     /**< *.conf inside <Directory> or <Location>
      				and .htaccess when AllowOverride Limit */
      #define OR_OPTIONS 2         /**< *.conf anywhere
                                      and .htaccess when AllowOverride Options */
      #define OR_FILEINFO 4        /**< *.conf anywhere
      				and .htaccess when AllowOverride FileInfo */
      #define OR_AUTHCFG 8         /**< *.conf inside <Directory> or <Location>
      				and .htaccess when AllowOverride AuthConfig */
      #define OR_INDEXES 16        /**< *.conf anywhere
      				and .htaccess when AllowOverride Indexes */
      #define OR_UNSET 32          /**< unset a directive (in Allow) */
      #define ACCESS_CONF 64       /**< *.conf inside <Directory> or <Location> */
      #define RSRC_CONF 128	     /**< *.conf outside <Directory> or <Location> */
      #define EXEC_ON_READ 256     /**< force directive to execute a command 
                      which would modify the configuration (like including another
                      file, or IFModule */
      /** this directive can be placed anywhere */
      #define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)
    • Une description de la directive (à valeur de documentation)


    Tout ceci est issu des sources d'une version 2.2

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup pour cette réponse détaillée... j'avais commencé à lire le source d'un module mais j'avais rien compris..

    je vais essayer de le faire , je vous tiendrai au courant!

    Merci beaucoup encore une fois

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je suis arrivé à mettre en place une lecture de directives par contre je lis des caractères bizzares..."\xc0\x03\xdf\xb7\xc0\x03\xdf\xb7Pw\x18\bPw\x18\b" par exemple... une idée??

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Faut voir le code qui va avec et un exemple d'utilisation de ladite directive

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Oui c'est vrai que ce n'est pas évident de deviner comme ça, ça risque d'être un peu long...

    voilà mon module va ,entre autres, effectuer une connexion vers un annuaire Ldap (openLdap) installé sur un serveur distant, c'est pour celà qe j'ai besoin de directives (@url, num_port...)

    voilà ce que j'ai fait:

    1- Déclaration de la structure incluants les différentes directrives dont j'aurai besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct mod_connexion_conf{
     apr_pool_t	*mpool;
    /*URL de l'annuaire LDAP*/
     const char *url_LDAP;
    /*Numéro de port de l'annuaire LDAP*/
     int num_port;
     
    }mod_connexion_conf;
    2- Je crée le tableau de directives:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static const command_rec connexion_cmds[] = {
     
            AP_INIT_TAKE1("SERVEUR_LDAP", ap_set_string_slot,
                      (void*)APR_OFFSETOF(mod_connexion_conf, url_LDAP), OR_ALL,
                      "l'adresse url de l'annuaire LDAP"),
     
    	AP_INIT_TAKE1("NUM_PORT_LDAP", ap_set_int_slot,
                      (void*)APR_OFFSETOF(mod_connexion_conf, num_port),  
                     OR_ALL, "l'adresse url de l'annuaire LDAP, par défault 389"),
     
        {NULL}
    };
    3- J'initialise la configuration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    /*initialisation de la configuration */
    static void *connexion_conf(apr_pool_t *pool, char *x)
    {
    	mod_connexion_conf *mod_connexion_conf_ptr;
    	if (mod_auth_conf_ptr=apr_pcalloc(pool, sizeof(mod_connexion_conf))){
    	mod_connexion_conf_ptr->mpool=pool;
     
    	mod_connexion_conf_ptr->url_LDAP=NULL;
    	mod_connexion_conf_ptr->num_port=1;
    	return mod_connexion_conf_ptr;
    	}
    		else
    	return NULL;
    }
    4- Dans une fonction interne au module je fais appel aux champs voulus de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    mod_connexion_conf* mod_connexion_conf_ptr ;
    /*....*/
    ldap_init(mod_connexion_conf_ptr->url_LDAP, mod_connexion_conf_ptr->num_port )
    (je ne sais pas si c'est de cette façon qu'on appelle les différents champs...)

    5- je déclare le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    module AP_MODULE_DECLARE_DATA connexion_module = {
        STANDARD20_MODULE_STUFF,
        connexion_conf,
        NULL,
        NULL,
        NULL,
        connexion_cmds,/*table de directives apache*/
        connexion_hooks
    };
    6- Au niveau de httpd.conf je déclare mes directives de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Location /connexion>
      SetHandler connexion
        SERVEUR_LDAP  10.112.25.8
      NUM_PORT_LDAP 389
     
    </Location>
    Voilà! Merci d'avoi été patient de me lire jusqu'ici!!

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Après une minutieuse rechrche j'ai trouvé la méthode..il me manquait des fonctions faisant le lien entre les directives et le module ; plus d'infos sur le lien:
    http://threebit.net/tutorials/apache...tutorial2.html

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Module apache pour log HDFS
    Par anas4120 dans le forum Apache
    Réponses: 0
    Dernier message: 02/04/2015, 16h01
  2. Réponses: 2
    Dernier message: 27/04/2011, 16h59
  3. création du jar pour execution directe
    Par ilyan dans le forum NetBeans
    Réponses: 4
    Dernier message: 17/12/2010, 13h57
  4. Ajouter les modules Apache pour nous débutants
    Par bruce-willis dans le forum Apache
    Réponses: 2
    Dernier message: 18/02/2009, 08h01
  5. Exclure la création d'unreport pour un sous module
    Par romaintaz dans le forum Maven
    Réponses: 5
    Dernier message: 27/08/2007, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo