coar        98/10/23 12:28:54

  Modified:    .        STATUS
               src      CHANGES
               src/modules/standard mod_mime.c
  Log:
        Allow selective dissociation of handlers from file extensions.
  
  PR:           1799
  Submitted by: Ryan Bloom <[EMAIL PROTECTED]>
  Reviewed by:  Ken Coar
  
  Revision  Changes    Path
  1.520     +0 -12     apache-1.3/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/STATUS,v
  retrieving revision 1.519
  retrieving revision 1.520
  diff -u -r1.519 -r1.520
  --- STATUS    1998/10/21 16:00:42     1.519
  +++ STATUS    1998/10/23 19:28:50     1.520
  @@ -168,18 +168,6 @@
        In particular this affects the correctness of the proxy and the
        vhost mechanism.
   
  -    * PR#1799: we need to add a "default" or "none" handler to deal with
  -     filenames such as foo.map.gif which aren't image maps, and shouldn't
  -     be considered such.  See discussion in
  -     <[EMAIL PROTECTED]>
  -     <[EMAIL PROTECTED]>
  -     <[EMAIL PROTECTED]>
  -     <[EMAIL PROTECTED]>
  -     (feb98 archives)
  -     Jim: I thought that we decided "default", although Ken
  -          thought it ugly
  -     Ken: I just don't like using "Add" when reverting something; not a -1
  -
       * proxy_*_canon routines use r->proxyreq incorrectly.  See
        <[EMAIL PROTECTED]>
   
  
  
  
  1.1122    +4 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1121
  retrieving revision 1.1122
  diff -u -r1.1121 -r1.1122
  --- CHANGES   1998/10/23 19:06:24     1.1121
  +++ CHANGES   1998/10/23 19:28:51     1.1122
  @@ -1,5 +1,9 @@
   Changes with Apache 1.3.4
   
  +  *) Add a 'RemoveHandler' directive which will selectively remove
  +     all handler associations for the specified file extensions.
  +     [Ryan Bloom <[EMAIL PROTECTED]>] PR#1799.
  +
     *) Properly handle & allow "nul" and ".*/null" in AccessConfig and
        ResourceConfig directives on Win32.  Also add a note to the effect
        of 'useless User directive ignored on Win32' to the errorlog if
  
  
  
  1.45      +34 -1     apache-1.3/src/modules/standard/mod_mime.c
  
  Index: mod_mime.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_mime.c,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- mod_mime.c        1998/07/08 17:47:17     1.44
  +++ mod_mime.c        1998/10/23 19:28:53     1.45
  @@ -68,11 +68,16 @@
   #include "http_config.h"
   #include "http_log.h"
   
  +typedef struct handlers_info {
  +    char *name;
  +} handlers_info;
  +
   typedef struct {
       table *forced_types;        /* Additional AddTyped stuff */
       table *encoding_types;      /* Added with AddEncoding... */
       table *language_types;      /* Added with AddLanguage... */
       table *handlers;            /* Added with AddHandler...  */
  +    array_header *handlers_remove;     /* List of handlers to remove */
   
       char *type;                 /* Type forced with ForceType  */
       char *handler;              /* Handler forced with SetHandler */
  @@ -89,6 +94,7 @@
       new->encoding_types = ap_make_table(p, 4);
       new->language_types = ap_make_table(p, 4);
       new->handlers = ap_make_table(p, 4);
  +    new->handlers_remove = ap_make_array(p, 4, sizeof(handlers_info));
   
       new->type = NULL;
       new->handler = NULL;
  @@ -101,7 +107,14 @@
       mime_dir_config *base = (mime_dir_config *) basev;
       mime_dir_config *add = (mime_dir_config *) addv;
       mime_dir_config *new =
  -    (mime_dir_config *) ap_palloc(p, sizeof(mime_dir_config));
  +     (mime_dir_config *) ap_palloc(p, sizeof(mime_dir_config));
  +    int i;
  +    handlers_info *hand;
  +
  +    hand = (handlers_info *) add->handlers_remove->elts;
  +    for (i = 0; i < add->handlers_remove->nelts; i++) {
  +     ap_table_unset(base->handlers, hand[i].name);
  +    }
   
       new->forced_types = ap_overlay_tables(p, add->forced_types,
                                          base->forced_types);
  @@ -158,6 +171,24 @@
       return NULL;
   }
   
  +/*
  + * Note handler names that should be un-added for this location.  This
  + * will keep the association from being inherited, as well, but not
  + * from being re-added at a subordinate level.
  + */
  +static const char *remove_handler(cmd_parms *cmd, void *m, char *ext)
  +{
  +    mime_dir_config *mcfg = (mime_dir_config *) m;
  +    handlers_info *hand;
  +
  +    if (*ext == '.') {
  +     ++ext;
  +    }
  +    hand = (handlers_info *) ap_push_array(mcfg->handlers_remove);
  +    hand->name = ap_pstrdup(cmd->pool, ext);
  +    return NULL;
  +}
  +
   /* The sole bit of server configuration that the MIME module has is
    * the name of its config file, so...
    */
  @@ -181,6 +212,8 @@
       {"ForceType", ap_set_string_slot_lower, 
        (void *)XtOffsetOf(mime_dir_config, type), OR_FILEINFO, TAKE1, 
        "a media type"},
  +    {"RemoveHandler", remove_handler, NULL, OR_FILEINFO, ITERATE,
  +     "one or more file extensions"},
       {"SetHandler", ap_set_string_slot_lower, 
        (void *)XtOffsetOf(mime_dir_config, handler), OR_FILEINFO, TAKE1, 
        "a handler name"},
  
  
  

Reply via email to