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