You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Taketo Kabe <ka...@sra-tohoku.co.jp> on 2001/11/18 21:26:35 UTC
general/8798: [PATCH] was silently ignored
>Number: 8798
>Category: general
>Synopsis: [PATCH] <Directory ~ PATH> was silently ignored
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: apache
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: apache
>Arrival-Date: Sun Nov 18 12:30:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: kabe@sra-tohoku.co.jp
>Release: 2.0.28
>Organization:
apache
>Environment:
SunOS 5.8 Generic_108528-05 sun4u sparc SUNW,Ultra-60
gcc version 2.95.2 19991024 (release)
>Description:
*) <Directory ~ PATH> was silently ignored.
*) <Directory ~> should cause syntax error, but it didn't.
*) <Directory > should cause syntax error, but it didn't.
<DirectoryMatch PATH> still works.
I don't quite make out the reason, but <Directory ~> was nullified
in server/core.c 1.47->1.48 bigpatch.
server/core.c:dirsection() checks for existence after "~" as
cmd->path = ap_getword_conf(cmd->pool, &arg);
if (!cmd->path)
return "<Directory ~ > block must specify a path"
but ap_getword_conf() NEVER returns NULL, so the predicate is always true,
failing to detect missing PATH.
If there was a PATH, it should compile it by
r = ap_pregcomp(cmd->pool, cmd->path ....)
but mysteriously this line got missing after version 1.48.
We may have to check every locations comparing ap_getword_conf() return
to NULL to get rid of similar bugs lying around.
>How-To-Repeat:
1) Syntax check (by "httpd -t") with configuration
<Directory >
2) Syntax check (by "httpd -t") with configuration
<Directory ~>
3) Swap any <DirectoryMatch ...> with <Directory ~ ...>
and see if it's still in use.
>Fix:
#************************************* server/core.c <Directory> error patch
##dist10
# Fix:
# <Directory > didn't cause error.
# <Directory ~> didn't cause error.
# <Directory ~ PATH> was silently ignored. (<DirectoryMatch> was valid)
#
##find httpd-2_0_28 -name '*.dist10' -exec ./0diff {} \;
/usr/local/gnu/bin/patch -p1 --backup --suffix=.dist1 << 'EOP'
=============================== {
diff -u httpd-2_0_28/server/core.c.dist10 httpd-2_0_28/server/core.c
--- httpd-2_0_28/server/core.c.dist10 Thu Nov 8 14:29:36 2001
+++ httpd-2_0_28/server/core.c Sun Nov 18 20:03:58 2001
@@ -1261,7 +1261,7 @@
arg=apr_pstrndup(cmd->pool, arg, endp-arg);
- if (!arg) {
+ if (!arg || !arg[0]) { /*kabe: make "<Directory >" error*/
if (thiscmd->cmd_data)
return "<DirectoryMatch > block must specify a path";
else
@@ -1273,8 +1273,9 @@
if (!strcmp(cmd->path, "~")) {
cmd->path = ap_getword_conf(cmd->pool, &arg);
- if (!cmd->path)
+ if (!cmd->path || !cmd->path[0]) /*kabe: make "<Directory ~>" error*/
return "<Directory ~ > block must specify a path";
+ r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE); /*kabe: (re-)enable "<Directory ~ path>"*/
}
else if (thiscmd->cmd_data) { /* <DirectoryMatch> */
r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
=============================== }}}}
>Release-Note:
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, you need]
[to include <ap...@Apache.Org> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or ]
["Re: general/1098:"). If the subject doesn't match this ]
[pattern, your message will be misfiled and ignored. The ]
["apbugs" address is not added to the Cc line of messages from ]
[the database automatically because of the potential for mail ]
[loops. If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request from a ]
[developer. Reply only with text; DO NOT SEND ATTACHMENTS! ]