rse         99/01/01 12:27:48

  Modified:    src      CHANGES
               src/include ap_mmn.h http_config.h
               src/modules/standard mod_so.c
  Log:
  Added MODULE_MAGIC_COOKIE as the first field in a module structure to
  allow us to distinguish between a garbled DSO (or even a file which isn't
  an Apache module DSO at all) and a DSO which doesn't match the current
  Apache API.
  
  Submitted by: Ralf S. Engelschall
  PR: 3152
  
  Revision  Changes    Path
  1.1188    +5 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1187
  retrieving revision 1.1188
  diff -u -r1.1187 -r1.1188
  --- CHANGES   1999/01/01 19:50:20     1.1187
  +++ CHANGES   1999/01/01 20:27:45     1.1188
  @@ -1,4 +1,9 @@
   Changes with Apache 1.3.4
  +
  +  *) Added MODULE_MAGIC_COOKIE as the first field in a module structure to
  +     allow us to distinguish between a garbled DSO (or even a file which 
isn't
  +     an Apache module DSO at all) and a DSO which doesn't match the current
  +     Apache API. [Ralf S. Engelschall] PR#3152
    
     *) Two minor enhancements to mod_rewrite: First RewriteRule now also
        supports the ``nocase|NC'' flag (as RewriteCond already does for ages) 
to
  
  
  
  1.17      +3 -0      apache-1.3/src/include/ap_mmn.h
  
  Index: ap_mmn.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ap_mmn.h  1999/01/01 19:04:39     1.16
  +++ ap_mmn.h  1999/01/01 20:27:47     1.17
  @@ -193,7 +193,10 @@
    * 19981229             - mod_negotiation overhaul -- added ap_make_etag()
    *                        and added vlist_validator to request_rec.
    * 19990101             - renamed macro escape_uri() to ap_escape_uri()
  + *                      - Added MODULE_MAGIC_COOKIE to identify module 
structures
    */
  +
  +#define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */
   
   #ifndef MODULE_MAGIC_NUMBER_MAJOR
   #define MODULE_MAGIC_NUMBER_MAJOR 19990101
  
  
  
  1.99      +6 -1      apache-1.3/src/include/http_config.h
  
  Index: http_config.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/http_config.h,v
  retrieving revision 1.98
  retrieving revision 1.99
  diff -u -r1.98 -r1.99
  --- http_config.h     1999/01/01 19:04:40     1.98
  +++ http_config.h     1999/01/01 20:27:47     1.99
  @@ -186,6 +186,10 @@
    */
   
   typedef struct module_struct {
  +    unsigned long magic;        /* Magic Cookie to identify a module 
structure;
  +                                 * It's mainly important for the DSO facility
  +                                 * (see also mod_so).
  +                                 */
       int version;             /* API version, *not* module version;
                                 * check that module is compatible with this
                                 * version of the server.
  @@ -281,7 +285,8 @@
    * signal an error). See src/include/ap_mmn.h for MMN version history.
    */
   
  -#define STANDARD_MODULE_STUFF        MODULE_MAGIC_NUMBER_MAJOR, \
  +#define STANDARD_MODULE_STUFF        MODULE_MAGIC_COOKIE, \
  +                             MODULE_MAGIC_NUMBER_MAJOR, \
                                MODULE_MAGIC_NUMBER_MINOR, \
                                -1, \
                                __FILE__, \
  
  
  
  1.29      +12 -2     apache-1.3/src/modules/standard/mod_so.c
  
  Index: mod_so.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_so.c,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- mod_so.c  1999/01/01 19:05:13     1.28
  +++ mod_so.c  1999/01/01 20:27:48     1.29
  @@ -247,11 +247,21 @@
        * symbol name.
        */
       if (!(modp = (module *)(ap_os_dso_sym(modhandle, modname)))) {
  -     return ap_pstrcat(cmd->pool, "Can't find module ", modname,
  -                    " in file ", filename, ":", ap_os_dso_error(), NULL);
  +     return ap_pstrcat(cmd->pool, "Can't locate API module structure `", 
modname,
  +                    "' in file ", szModuleFile, ": ", ap_os_dso_error(), 
NULL);
       }
       modi->modp = modp;
       modp->dynamic_load_handle = modhandle;
  +
  +    /* 
  +     * Make sure the found module structure is really a module structure
  +     * 
  +     */
  +    if (modp->magic != MODULE_MAGIC_COOKIE) {
  +        return ap_pstrcat(cmd->pool, "API module structure `", modname,
  +                          "' in file ", szModuleFile, " is garbled -"
  +                          " perhaps this is not an Apache module DSO?", 
NULL);
  +    }
   
       /* 
        * Add this module to the Apache core structures
  
  
  

Reply via email to