httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "J.Lance Wilkinson" <jl...@psu.edu>
Subject Re: [users@httpd] SetEnvIf failure or success?
Date Thu, 22 Mar 2012 15:52:45 GMT
Eric Covener wrote:
> On Thu, Mar 22, 2012 at 10:18 AM, J.Lance Wilkinson <jlw12@psu.edu> wrote:
>> I'm trying to extract part of a URI into an environment variable to use in
>> an authorization scheme (let's skip talking about how I'll USED that
>> variable for the moment).
>>
>> I have the following directives in my configuration:
>>
>> LogFormat "%h %l %u %t \"%r\" %>s %b UMG=%{UMG}e" umgs
>> CustomLog logs/umg.log umgs
>>        ...
>>    <Location ~ "^/(.*)/umg/.(.*)(.html|/(.*)?)$">
>>        ...
>>    SetEnvIf REQUEST_URI "^/(.*)/umg/.(.*)(.html|/(.*)?)$" UMG=$2
>>        ...
>>    </Location>
 >>
>> When I watch that log file, and hit resources that match that location, I'm
>> seeing entries in the log which suggest a value for the UMG variable is not
>> being extracted:
>>
>> xxx.xxx.xxx.xxx - jlw12 [22/Mar/2012:09:31:13 -0400] "GET
>>        /umgs/umg.up.dlt.sslcerts.mgttool HTTP/1.1" 301 455 UMG=-
>> xxx.xxx.xxx.xxx - jlw12 [22/Mar/2012:09:31:25 -0400] "GET
>>        /umgs/umg.up.dlt.ul.gml.managers HTTP/1.1" 301 454 UMG=-
>>
>> I'd expected to see UMG=up.dlt.sslcerts.mgttool and
>> UMG=up.dlt.ul.gml.managers on these two log lines.
>>
>> Several thoughts come to mind:
>> 1) Logging is taking place before the SetEnvIf takes place.
> 
> definitely not
	That's good to be certain of...
> 
>> 2) Miscoding of Location's regular expression is causing SetEnvIf to be
>>        bypassed.
> 
> easy to test, locationmatch not needed if you're already comparing
> against the URI in the setenvif.

	I moved the SetEnvIf outside the <Location/> stanza.  No change.
> 
>> 3) Miscoding of SetEnvIf's regular expression is causing SetEnvIf to fail.
> 
> likely, the "pcretest" program says it doesn't match.

	I changed my regular expression to read
		
		@^/(.*)/umg-(.*)(.html|/(.*)?)$@

	(I can get away with this now, during development.)

	Thus I would want to match URIs like:

		/umgs/umg-up.dlt.sslcerts.mgttool/umgs.php

	By changing the period to a hyphen it eliminates the whole
	escaping thing I was doing with /. that I should have been
	doing with \. or just . that Mysterious Mose <webmaster@drdemento.com>
	caught earlier.


> This string would need either a .html or another / to match, right?
> 
> @^/(.*)/umg/.(.*)(.html|/(.*)?)$@
>      /umgs
>            /umg.up.dlt.sslcerts.mgttool  (never found .html or /)
> 
> Maybe you meant the ? to apply to the entire alternation and not the .*?
	
	I do.  It should never receive anything without either
	a .html or a trailing / (and probably other content) but I guess
	that's a separate excercise since I see without one of them the
	matching fails.

 >> 4) Miscoding of SetEnvIf's value specification is causing failure.
 >
 > easy to test w/ a literal value, not likely the case though.
 >
	$ pcretest
PCRE version 7.8 2008-09-05
   re>  @^/(.*)/umg-(.*)(.html|/(.*)?)$@
data> /umgs/umg-up.dlt.sslcerts.mgttool/umgs.php
  0: /umgs/umg-up.dlt.sslcerts.mgttool/umgs.php
  1: umgs
  2: up.dlt.sslcerts.mgttool
  3: /umgs.php
  4: umgs.ph
data> /long/arbitrary/prefix/umg-ul.dlt.ul.gml.managers/
  0: /long/arbitrary/prefix/umg-ul.dlt.ul.gml.managers/
  1: long/arbitrary/prefix
  2: ul.dlt.ul.gml.managers
  3: /
  4:
data> /long/arbitrary/prefix/umg-up.dlt.spamfratch.society/membership.report
  0: /long/arbitrary/prefix/umg-up.dlt.spamfratch.society/membership.report
  1: long/arbitrary/prefix
  2: up.dlt.spamfratch.society
  3: /membership.report
  4: membership.report
data>

	So, I want the UMG variable to match the #2 result.

	Transcribing these values into my config

	
	...
LogFormat "%h %l %u %t \"%r\" %>s %b UMG=%{UMG}e" umgs
CustomLog logs/umg.log umgs
	...
SetEnvIf REQUEST_URI "^/(.*)/umg-(.*)(.html|/(.*)?)$" UMG=$2

	I still see no value for the UMG variable, suggesting that it's still a
	regular expression issue OR miscoding of the value specification (or
	UMG)

xxx.xxx.xxx.xxx - - [22/Mar/2012:11:36:06 -0400] "GET 	
	/umgs/umg-up.dlt.sslcerts.mgttool/umgs.php HTTP/1.1" 401 1837 UMG=-

	So I change my SetEnvIf directive to specify an explict value for UMG
	to be equal to, I still see UMG=- in the log:

SetEnvIf REQUEST_URI "^/(.*)/umg-(.*)(.html|/(.*)?)$" UMG=arbitrary

	And I still see the same empty results (UMG=- logged).

	I try enclosing the assigned value as a text string:

SetEnvIf REQUEST_URI "^/(.*)/umg-(.*)(.html|/(.*)?)$" UMG="arbitrary"

	And I still see the same empty results (UMG=- logged).

This suggests the SetEnvIf pattern match is failing, because otherwise I SHOULD 
be getting a value of "arbitrary" assigned, right?

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


-- 
J.Lance Wilkinson ("Lance")		InterNet: Lance.Wilkinson@psu.edu
Systems Design Specialist - Lead	Phone: (814) 865-4870
Digital Library Technologies		FAX:   (814) 863-3560
E3 Paterno Library
Penn State University
University Park, PA 16802

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


Mime
View raw message