You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cli-users@httpd.apache.org by "William A. Rowe, Jr." <wr...@rowe-clan.net> on 2005/11/14 21:12:48 UTC

[cli-users] [snapshot] Please Test [Was: svn commit: r280884 - /httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp]


William A. Rowe, Jr. wrote:
> Ping(!)  Would appreciate if anyone would try testing this release and
> replying on-list if virtual, files in fact really are working.  If not
> I'll pull down the snapshot, if so I'll move forward on 'AspNet error'
> to bypass Apache ErrorDocument handling.
> 
> William A. Rowe, Jr. wrote:
> 
>> Well, this is finally the patch to allow virtual resources, e.g.
>> remoting and http handlers, to serve content.
>>
>> Who would like to experiment?  I only got as far as writing the patch
>> before I was blindsided by work/life stuff to address.
>>
>> See http://httpd.apache.org/dev/dist/ for the .2003 build version in
>> about 2 hours from now (have to wait for the server to sync up.)
>>
>> Looking at the bug reports, the only other feature to introduce is to
>> allow ASP.NET to push out the error bodies, instead of leaving that
>> up to Apache, as desired.  Probably we should add AspNet errors as the
>> flag to control that.
>>
>> Bill
>>
>> wrowe@apache.org wrote:
>>
>>> Author: wrowe
>>> Date: Wed Sep 14 09:50:41 2005
>>> New Revision: 280884
>>>
>>> URL: http://svn.apache.org/viewcvs?rev=280884&view=rev
>>> Log:
>>>
>>>   Introduce the AspNet directive, to replace the test of Options 
>>> ExecCGI.
>>>
>>>   Now, to actually permit ASP.NET content, we need to test the 
>>> following;
>>>
>>>     To serve a real file       AspNet files
>>>     To serve a directory       AspNet directories  (or simply dirs)
>>>     To serve not-a-file        AspNet virtual
>>>
>>>     To serve any URL           AspNet all          (or simply on)
>>>
>>>   These can be combined, e.g. 'AspNet files virtual' would be valid, and
>>>   Apache would continue to serve directories.
>>>
>>> Modified:
>>>     httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp
>>>
>>> Modified: httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp
>>> URL: 
>>> http://svn.apache.org/viewcvs/httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp?rev=280884&r1=280883&r2=280884&view=diff 
>>>
>>> ============================================================================== 
>>>
>>> --- httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp (original)
>>> +++ httpd/mod_aspdotnet/trunk/mod/mod_aspdotnet.cpp Wed Sep 14 
>>> 09:50:41 2005
>>> @@ -184,8 +184,75 @@
>>>      return NULL;
>>>  }
>>>  
>>> +
>>> +typedef enum {
>>> +    ASPNET_OFF     =   0,
>>> +    ASPNET_UNSET   = 2^0, // Must be a value, better to avoid legal 
>>> bits
>>> +    ASPNET_FILES   = 2^1,
>>> +    ASPNET_DIRS    = 2^2,
>>> +    ASPNET_VIRTUAL = 2^3
>>> +} asp_net_enable_t;
>>> +
>>> +typedef struct asp_net_dirconf_t {
>>> +    int enable;  // Bit flags of asp_net_enable_t values
>>> +} asp_net_dirconf_t;
>>> +
>>> +static void *create_asp_net_dirconf(apr_pool_t *p, char *dummy)
>>> +{
>>> +    asp_net_dirconf_t *dirconf;
>>> +    dirconf = (asp_net_dirconf_t*)apr_palloc(p, 
>>> sizeof(asp_net_dirconf_t));
>>> +    dirconf->enable = ASPNET_UNSET;
>>> +    return dirconf;
>>> +}
>>> +
>>> +static void *merge_asp_net_dirconf(apr_pool_t *p, void *basev, void 
>>> *addv)
>>> +{
>>> +    asp_net_dirconf_t *base = (asp_net_dirconf_t*)basev;
>>> +    asp_net_dirconf_t *add = (asp_net_dirconf_t*)addv;
>>> +    asp_net_dirconf_t *res = +        
>>> (asp_net_dirconf_t*)apr_palloc(p, sizeof(asp_net_dirconf_t));
>>> +    res->enable = (add->enable == ASPNET_UNSET) ? base->enable
>>> +                                                : add->enable;
>>> +    return add;
>>> +}
>>> +
>>> +static const char *set_aspnet_enable(cmd_parms *cmd, void *dirconf_, 
>>> +                                     const char *enables)
>>> +{
>>> +    asp_net_dirconf_t *dirconf = (asp_net_dirconf_t *)dirconf_;
>>> +
>>> +    // Unset the AspNet flags before we toggle specific choices
>>> +    dirconf->enable = ASPNET_OFF;
>>> +
>>> +    while (*enables) {
>>> +        const char *enable = ap_getword_conf(cmd->pool, &enables);
>>> +
>>> +        if      (!strcasecmp(enable, "on")
>>> +              || !strcasecmp(enable, "all"))
>>> +            dirconf->enable = ASPNET_FILES | ASPNET_DIRS | 
>>> ASPNET_VIRTUAL;
>>> +        else if (!strcasecmp(enable, "off") +              || 
>>> !strcasecmp(enable, "none"))
>>> +            dirconf->enable = ASPNET_OFF;
>>> +        else if (!strcasecmp(enable, "files")) +            
>>> dirconf->enable |= ASPNET_FILES;
>>> +        else if (!strcasecmp(enable, "dirs")
>>> +              || !strcasecmp(enable, "directories")) +            
>>> dirconf->enable |= ASPNET_DIRS;
>>> +        else if (!strcasecmp(enable, "virtual")) +            
>>> dirconf->enable |= ASPNET_VIRTUAL;
>>> +        else {
>>> +            return apr_pstrcat(cmd->pool, "Unrecognized AspNet 
>>> option ", +                                          enable, NULL);
>>> +        }
>>> +    }
>>> +    return NULL;
>>> +}
>>> +
>>> +
>>>  static const command_rec asp_net_cmds[] =
>>>  {
>>> +    AP_INIT_RAW_ARGS("AspNet", (cmd_func)set_aspnet_enable, NULL, 
>>> OR_OPTIONS,
>>> +        "Allow ASP.NET to serve 'Files', 'Dirs', 'Virtual', 'All', 
>>> or 'None'"),
>>>      AP_INIT_TAKE1("AspNetVersion", (cmd_func)version_cmd, NULL, 
>>> RSRC_CONF,
>>>          "Select a specific ASP.NET version in the format v#.#.####"),
>>>      AP_INIT_TAKE2("AspNetMount", (cmd_func)mount_cmd, NULL, RSRC_CONF,
>>> @@ -433,13 +500,6 @@
>>>          return DECLINED;
>>>      }
>>>  
>>> -    if (r->finfo.filetype != APR_REG) {
>>> -        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>> -                "mod_aspdotnet: File not found or unable to stat: %s",
>>> -                r->filename);
>>> -        return HTTP_NOT_FOUND;
>>> -    }
>>> -
>>>      if (!r->uri || (r->uri[0] != '/')) {
>>>          ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>>                  "mod_aspdotnet: Forbidden, request URI was not 
>>> absolute: %s",
>>> @@ -447,12 +507,48 @@
>>>          return HTTP_FORBIDDEN;
>>>      }
>>>  
>>> -    if (!(ap_allow_options(r) & OPT_EXECCGI)) -    {
>>> +    asp_net_dirconf_t *dirconf = +            (asp_net_dirconf_t 
>>> *)ap_get_module_config(r->per_dir_config,
>>> +                                                      
>>> &aspdotnet_module);
>>> +
>>> +    if (r->finfo.filetype == APR_REG) {
>>> +        if (!(dirconf->enable & ASPNET_FILES)) +        {
>>> +            ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>> +                    "mod_aspdotnet: Forbidden, 'AspNet Files' is not 
>>> enabled for: %s"
>>> +                    " (file %s)", r->uri, r->filename);
>>> +            return HTTP_FORBIDDEN;
>>> +        }
>>> +    }
>>> +    else if (r->finfo.filetype == APR_DIR) {
>>> +        if (!(dirconf->enable & ASPNET_DIRS)) +        {
>>> +            ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>> +                    "mod_aspdotnet: Forbidden, 'AspNet Dirs' is not 
>>> enabled for: %s"
>>> +                    " (directory %s)", r->uri, r->filename);
>>> +            return HTTP_FORBIDDEN;
>>> +        }
>>> +    }
>>> +    else if (!r->finfo.filetype) {
>>> +        if (!(dirconf->enable & ASPNET_VIRTUAL)) +        {
>>> +            ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>> +                    "mod_aspdotnet: Forbidden, 'AspNet Virtual'"
>>> +                    "is not enabled for: %s", r->uri);
>>> +            if (dirconf->enable & (ASPNET_FILES | ASPNET_DIRS)) 
>>> +            {
>>> +                ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 
>>> 0, r, +                        "mod_aspdotnet: File not found or 
>>> unable to stat: %s",
>>> +                        r->filename);
>>> +            }
>>> +            return HTTP_NOT_FOUND;
>>> +        }
>>> +    }
>>> +    else {
>>>          ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
>>> -                "mod_aspdotnet: Forbidden, Options ExecCGI is not 
>>> set for: %s",
>>> -                r->filename);
>>> -        return HTTP_FORBIDDEN;
>>> +                "mod_aspdotnet: Invalid file type for: %s (it is not "
>>> +                "a recognized file or directory)", r->filename);
>>> +        return HTTP_NOT_FOUND;
>>>      }
>>>  
>>>      if ((r->used_path_info == AP_REQ_REJECT_PATH_INFO) &&
>>> @@ -705,10 +801,10 @@
>>>  module AP_MODULE_DECLARE_DATA ::aspdotnet_module =
>>>  {
>>>      STANDARD20_MODULE_STUFF,
>>> -    NULL,                       /* dir config */
>>> -    NULL,                       /* merge dir config */
>>> -    create_asp_net_srvconf,       /* server config */
>>> -    merge_asp_net_srvconf,       /* merge server config */
>>> +    create_asp_net_dirconf,     /* dir config */
>>> +    merge_asp_net_dirconf,      /* merge dir config */
>>> +    create_asp_net_srvconf,     /* server config */
>>> +    merge_asp_net_srvconf,      /* merge server config */
>>>      asp_net_cmds,               /* command apr_table_t */
>>>      register_hooks              /* register hooks */
>>>  };
>>>
>>>
>>>
>>>
>>
>>
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: cli-users-unsubscribe@httpd.apache.org
For additional commands, e-mail: cli-users-help@httpd.apache.org