brian       96/06/30 15:13:49

  Modified:    src       mod_cern_meta.c
  Log:
  Submitted by: Andrew Wilson
  
  Andrew wrote:
  > This is the cern module rewritten for per-directory configuration
  > and now with the MetaFiles directive.
  
  Revision  Changes    Path
  1.3       +76 -31    apache/src/mod_cern_meta.c
  
  Index: mod_cern_meta.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_cern_meta.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -C3 -r1.2 -r1.3
  *** mod_cern_meta.c   1996/03/11 09:14:41     1.2
  --- mod_cern_meta.c   1996/06/30 22:13:46     1.3
  ***************
  *** 52,62 ****
    
    /*
     * mod_cern_meta.c
  !  * version 0.0.5
     * status beta
     * 
     * Andrew Wilson <[EMAIL PROTECTED]> 25.Jan.96
     *
     * Emulate the CERN HTTPD Meta file semantics.  Meta files are HTTP
     * headers that can be output in addition to the normal range of
     * headers for each file accessed.  They appear rather like the Apache
  --- 52,69 ----
    
    /*
     * mod_cern_meta.c
  !  * version 0.1.0
     * status beta
     * 
     * Andrew Wilson <[EMAIL PROTECTED]> 25.Jan.96
     *
  +  * *** IMPORTANT ***
  +  * This version of mod_cern_meta.c controls Meta File behaviour on a
  +  * per-directory basis.  Previous versions of the module defined behaviour
  +  * on a per-server basis.  The upshot is that you'll need to revisit your 
  +  * configuration files in order to make use of the new module.
  +  * ***
  +  *
     * Emulate the CERN HTTPD Meta file semantics.  Meta files are HTTP
     * headers that can be output in addition to the normal range of
     * headers for each file accessed.  They appear rather like the Apache
  ***************
  *** 67,74 ****
     * who can exploit this module.  It should be noted that there are probably
     * more sensitive ways of managing the Expires: header specifically.
     *
  !  * The module obeys the following directives, which can only appear 
  !  * in the server's .conf files and not in any .htaccess file.
     *
     *  MetaDir <directory name>
     *      
  --- 74,89 ----
     * who can exploit this module.  It should be noted that there are probably
     * more sensitive ways of managing the Expires: header specifically.
     *
  !  * The module obeys the following directives, which can appear 
  !  * in the server's .conf files and in .htaccess files.
  !  *
  !  *  MetaFiles <on|off> 
  !  *
  !  *    turns on|off meta file processing for any directory.  
  !  *    Default value is off
  !  *
  !  *        # turn on MetaFiles in this directory
  !  *        MetaFiles on
     *
     *  MetaDir <directory name>
     *      
  ***************
  *** 122,128 ****
     *           need to report missing ones as spurious errors. 
     * 31.Jan.96 log_error reports about a malformed .meta file, rather
     *           than a script error.
  !  *
     */
    
    #include "httpd.h"
  --- 137,146 ----
     *           need to report missing ones as spurious errors. 
     * 31.Jan.96 log_error reports about a malformed .meta file, rather
     *           than a script error.
  !  * 20.Jun.96 MetaFiles <on|off> default off, added, so that module
  !  *           can be configured per-directory.  Prior to this the module
  !  *           was running for each request anywhere on the server, naughty..
  !  * 29.Jun.96 All directives made per-directory.
     */
    
    #include "httpd.h"
  ***************
  *** 132,182 ****
    #include "util_script.h"
    #include "http_log.h"
    
    #define DEFAULT_METADIR             ".web"
    #define DEFAULT_METASUFFIX  ".meta"
    
    module cern_meta_module;
    
    typedef struct {
        char *metadir;
        char *metasuffix;
  ! } cern_meta_config;
    
  ! void *create_cern_meta_config (pool *p, server_rec *dummy)
    {
  !     cern_meta_config *new =
  !       (cern_meta_config *) palloc (p, sizeof(cern_meta_config)); 
  !  
  !     new->metadir = DEFAULT_METADIR;
  !     new->metasuffix = DEFAULT_METASUFFIX;
        
        return new;
    }   
    
  - char *set_metadir (cmd_parms *parms, void *dummy, char *arg)
  - {       
  -     cern_meta_config *cmc ;
    
  !     cmc = get_module_config (parms->server->module_config,
  !                            &cern_meta_module); 
  !     cmc->metadir = arg;
        return NULL;
    }
    
  ! char *set_metasuffix (cmd_parms *parms, void *dummy, char *arg)
    {       
  !     cern_meta_config *cmc ;
    
  !     cmc = get_module_config (parms->server->module_config,
  !                            &cern_meta_module); 
  !     cmc->metasuffix = arg;
        return NULL;
    }
    
    command_rec cern_meta_cmds[] = {
  ! { "MetaDir", set_metadir, NULL, RSRC_CONF, TAKE1,
        "the name of the directory containing meta files"},
  ! { "MetaSuffix", set_metasuffix, NULL, RSRC_CONF, TAKE1,
        "the filename suffix for meta files"},
    { NULL }
    };  
  --- 150,220 ----
    #include "util_script.h"
    #include "http_log.h"
    
  + #define DIR_CMD_PERMS OR_INDEXES
  + 
    #define DEFAULT_METADIR             ".web"
    #define DEFAULT_METASUFFIX  ".meta"
  + #define DEFAULT_METAFILES   0
    
    module cern_meta_module;
    
    typedef struct {
        char *metadir;
        char *metasuffix;
  !     char *metafiles;
  ! } cern_meta_dir_config;
    
  ! void *create_cern_meta_dir_config (pool *p, char *dummy)
    {
  !     cern_meta_dir_config *new =
  !       (cern_meta_dir_config *) palloc (p, sizeof(cern_meta_dir_config));
  ! 
  !     new->metadir = NULL;
  !     new->metasuffix = NULL;
  !     new->metafiles = DEFAULT_METAFILES;
  ! 
  !     return new;
  ! }
  ! 
  ! void *merge_cern_meta_dir_configs (pool *p, void *basev, void *addv) 
  ! {
  !     cern_meta_dir_config *base = (cern_meta_dir_config *)basev;
  !     cern_meta_dir_config *add = (cern_meta_dir_config *)addv; 
  !     cern_meta_dir_config *new =
  !       (cern_meta_dir_config *)palloc (p, sizeof(cern_meta_dir_config));
  !     
  !     new->metadir = add->metadir ? add->metadir : base->metadir;
  !     new->metasuffix = add->metasuffix ? add->metasuffix : base->metasuffix;
  !     new->metafiles = add->metafiles;
        
        return new;
    }   
    
    
  ! char *set_metadir (cmd_parms *parms, cern_meta_dir_config *dconf, char *arg)
  ! {       
  !     dconf->metadir = arg;
        return NULL;
    }
    
  ! char *set_metasuffix (cmd_parms *parms, cern_meta_dir_config *dconf, char 
*arg)
    {       
  !     dconf->metasuffix = arg;
  !     return NULL;
  ! }
    
  ! char *set_metafiles (cmd_parms *parms, cern_meta_dir_config *dconf, char 
*arg) 
  ! {
  !     dconf->metafiles = arg;
        return NULL;
    }
    
  + 
    command_rec cern_meta_cmds[] = {
  ! { "MetaFiles", set_metafiles, NULL, DIR_CMD_PERMS, FLAG, NULL},
  ! { "MetaDir", set_metadir, NULL, DIR_CMD_PERMS, TAKE1,
        "the name of the directory containing meta files"},
  ! { "MetaSuffix", set_metasuffix, NULL, DIR_CMD_PERMS, TAKE1,
        "the filename suffix for meta files"},
    { NULL }
    };  
  ***************
  *** 240,250 ****
        char *scrap_book;
        struct stat meta_stat;
        FILE *f;   
  !     cern_meta_config *cmc ;
        int rv;
    
  !     cmc = get_module_config (r->server->module_config,
  !                            &cern_meta_module); 
    
        /* if ./.web/$1.meta exists then output 'asis' */
    
  --- 278,291 ----
        char *scrap_book;
        struct stat meta_stat;
        FILE *f;   
  !     cern_meta_dir_config *dconf ;
        int rv;
    
  !     dconf = get_module_config (r->per_dir_config, &cern_meta_module); 
  ! 
  !     if (!dconf->metafiles) {
  !         return DECLINED;
  !     };
    
        /* if ./.web/$1.meta exists then output 'asis' */
    
  ***************
  *** 274,280 ****
        return DECLINED;
        };
    
  !     metafilename = pstrcat(r->pool, "/", scrap_book, "/", cmc->metadir, 
"/", real_file, cmc->metasuffix, NULL);
    
        /*
         * stat can legitimately fail for a bewildering number of reasons,
  --- 315,325 ----
        return DECLINED;
        };
    
  !     metafilename = pstrcat(r->pool, "/", scrap_book, "/", 
  !         dconf->metadir ? dconf->metadir : DEFAULT_METADIR, 
  !         "/", real_file, 
  !         dconf->metasuffix ? dconf->metasuffix : DEFAULT_METASUFFIX, 
  !         NULL);
    
        /*
         * stat can legitimately fail for a bewildering number of reasons,
  ***************
  *** 314,322 ****
    module cern_meta_module = {
       STANDARD_MODULE_STUFF,
       NULL,                    /* initializer */
  !    NULL,                    /* dir config creater */
  !    NULL,                    /* dir merger --- default is to override */
  !    create_cern_meta_config, /* server config */
       NULL,                    /* merge server configs */
       cern_meta_cmds,          /* command table */
       NULL,                    /* handlers */
  --- 359,367 ----
    module cern_meta_module = {
       STANDARD_MODULE_STUFF,
       NULL,                    /* initializer */
  !    create_cern_meta_dir_config,     /* dir config creater */
  !    merge_cern_meta_dir_configs,     /* dir merger --- default is to 
override */
  !    NULL,                    /* server config */
       NULL,                    /* merge server configs */
       cern_meta_cmds,          /* command table */
       NULL,                    /* handlers */
  
  
  

Reply via email to