File: D:/bin/iirf/ReleaseNotes.txt
Wed, 17 Aug 2011 09:42
v2.1.2.0
1. workitem 31280 - empty server variables should eval to empty string
2. workitem 12809 - need x64 build.
Actually this was delivered a couple releases ago.
3. workitem 30598 - Modifier [PH] isn't working properly
4. workitem 30566 - IIRF does not recognize deleted IIRF.ini
5. workitem 31034 - installer for x64 failed
This was originally fixed in v2.1.1.27.
6. workitem 30847 - redirectrule with anchor clashes with case-fold
Sun, 17 Apr 2011 15:25
v2.1.1.26
workitems implemented:
1. workitem 30215 - allow URL encoding in the replacement string.
2. workitem 30216 - don't spam the event log when IIRF.ini is missing;
new directive EventsForIniOpen for use in IirfGlobal.ini . Also,
different handling of event logs - use a state cache.
3. Changeset 85335 - the makefile now builds the Setup project.
4. workitem 30105 - bug in proxying requests to Oracle SSO server.
5. workitem 30306 - correctly handle proxying when a
message body is present.
6. workitem 30382 - minor glitch in msi log output on SelectWebSiteDlg.
7. workitem 30373 - Setup: IIRF won't install on IIS7 without IIS6 Role
Services. Fixing this requires an upgrade to Wix v3.5.
8. workitem 30384 - Setup: fix GetWebSites() for IIS7
9. workitem 30385 - Setup: fix SetWebsitePropsForUninstall_CA() for IIS7
10. workitem 30563 - Setup: fix {Start,Shutdown}IisSites_CA for IIS7
11. workitem 30565 - Setup: fix {Add,Remove}Extension_CA for IIS7
12. workitem 30399 - implement TIME_XXX server variables.
------------------------------------------------------------------
Thu, 06 Jan 2011 23:10
v2.1.1.25
1. workitem 28629 - IIRF v2.1.1.23 crash when proxying large POST
message
2. workitem 29172 - using multiple RewriteHeader directives in a single
ini file did not work properly
3. workitem 28722 - IIRF added data to URL
4. workitem 27626 - bad error message
5. workitem 28074 - header corruption when Proxying a request
6. workitem 29164 - poorly formatted headers when Proxying to a resource
that issues a 302 redirect
7. workitem 27659 - memory corruption in ReplaceServerVariables can lead
to IIS crash
8. workitem 27900 - expanded ini line length limit from 1024 to 4096
chars
9. many documentation updates and fixes
10. proper x64 build environment.
------------------------------------------------------------------
Sun, 30 May 2010 10:37
v2.1.1.22
1. workitem 27224 - bad pointer doing default values for RewriteMap
substitutions.
2. eliminated test ini files from Release zips
------------------------------------------------------------------
Fri, 07 May 2010 07:14
v2.1.1.20
1. workitem 26976 - update the fix for updating a URL
with interim values.
------------------------------------------------------------------
Wed, 05 May 2010 20:36
v2.1.1.18
1. fix a bug in handling of RewriteCond, that was introduced
with v2.1.1.17.
------------------------------------------------------------------
Wed, 05 May 2010 17:03
v2.1.1.17
1. workitem 26935 - [P] modifier. Mostly a doc issue.
2. workitem 14017 - OPTIONS verb.
3. workitem 26942 - fix RewriteBase handling.
4. workitem 26969 - correct handling of RewriteHeader for
method and url headers.
5. workitem 26976 - update URL with interim values
6. workitem 26974 - ProxyPass fails when ProxyPassReverse is missing.
------------------------------------------------------------------
Thu, 29 Apr 2010 02:17
v2.1.1.14
1. more install and uninstall problems fixed.
------------------------------------------------------------------
Wed, 28 Apr 2010 12:52
v2.1.1.13
1. workitem 26472 - uninstall fails with error.
2. workitem 26919 - uninstall doesn't.
------------------------------------------------------------------
Wed, 28 Apr 2010 11:50
v2.1.1.12
1. workitem 26902 - .iirf URLs return bad headers.
2. workitem 26910 - REQUEST_URI
------------------------------------------------------------------
Tue, 27 Apr 2010 15:46
v2.1.1.11
1. workitem 23532 - ProxyPassReverse directive
2. workitem 26761 - handling long URLs (beyond 2048 chars)
3. stricter parsing of ini files. use _stricmp rather than _strnicmp.
The problem was, ProxyPassReverse was being interpreted as
ProxyPass.
4. workitem 26899 - don't proxy .iirf URLs
------------------------------------------------------------------
Mon, 19 Apr 2010 22:02
v2.1.1.9
1. workitem 26801 - incorrect logic in IsDuplicateRule.
2. workitem 26811 - incorrect logic handling RedirectRule with no
[R] modifier.
3. workitem 26822 - eliminate double-slash with RewriteBase ON
for redirectrule in vdir root.
------------------------------------------------------------------
Sat, 17 Apr 2010 12:32
v2.1.1.8
1. Correct the fix for workitem 25703 - Proxy
with Transfer-Encoding: chunked.
------------------------------------------------------------------
Tue, 06 Apr 2010 09:29
v2.1.1.7
1. Update PCRE to v8.02
2. workitem 26708 - Support [P] option on RewriteRule.
3. workitem 26720 - Eliminate warning when using [U].
Also, correct documentation regarding [U].
------------------------------------------------------------------
Mon, 05 Apr 2010 15:52
v2.1.1.6
1. workitem 26705 - Lexicograhpic comparisons in RewriteCond
------------------------------------------------------------------
Mon, 05 Apr 2010 15:07
v2.1.1.5
1. workitem 26701 - allow RewriteRule to do Redirects, once again
2. workitem 26704 - document the differences between mod_rewrite and
IIRF.
------------------------------------------------------------------
Sun, 04 Apr 2010 23:50
v2.1.1.4
1. allow explicit paths in the RewriteBase directive.
------------------------------------------------------------------
Sun, 04 Apr 2010 20:50
v2.1.1.3
1. workitem 26699 - crash on init in IIRF v2.1.1.2, related to the
new RewriteBase directive.
------------------------------------------------------------------
Sat, 03 Apr 2010 23:07
v2.1.1.2
1. workitem 25426 - RewriteBase directive (initial)
2. workitem 26693 - apply QSA to RewriteHeader
3. myriad doc updates
------------------------------------------------------------------
Thu, 25 Mar 2010 10:17
v2.1.0.16
1. workitem 25703 - correctly handle chunked encoding through
ProxyPass.
------------------------------------------------------------------
Wed, 24 Mar 2010 11:42
v2.1.0.15
1. http://iirf.codeplex.com/Thread/View.aspx?ThreadId=85408 - long
paths.
2. workitem 26381 - include example for CakePHP in the docs.
Also, myriad other doc updates.
3. workitem 25950 - handle proxied POST content larger than 48k.
4. workitem 26146 - properly pass request headers across ProxyPass
------------------------------------------------------------------
Mon, 15 Feb 2010 14:58
v2.1.0.13
1. workitem 25951 - ProxyTimeouts directive, to set timeouts
used in ProxyPass
2. workitem 26212 - NoIterate modifier on rules
------------------------------------------------------------------
Sun, 31 Jan 2010 02:41
v2.1.0.10
1. Replace StatusUrl directive with StatusInquiry directive.
See workitem 25982.
2. more doc updates, to cover this change.
------------------------------------------------------------------
Sat, 30 Jan 2010 17:10
v2.1.0.9
1. allow more flexibility in the StatusUrl directive,
and make the url-path argument optional.
2. Update to documentation, small tweaks and improvements.
------------------------------------------------------------------
Fri, 18 Dec 2009 11:14
v2.1.0.7
1. ain't it always the case? fix logic for detecting multiple
occurrences of directives in the logfiles.
2. fix logging so that the log "header" is always emitted regardless of
the ordering of RewriteLogLevel and RewriteLog in the ini file .
3. replace in the source code, all "Site" with "Vdir". No externally
visible change due to this. It was just confusing to read the
source code.
------------------------------------------------------------------
Sat, 12 Dec 2009 17:32
v2.1.0.6
1. detect and warn on multiple occurrences of various one-time-only
directives in the ini files. Ex: RewriteLogLevel, RewriteEngine,
CondSubstringBackrefFlag.
2. Remove the StrictParsing directive. This was a hack, designed to
allow people to write bad rules. It shouldn't be there. Now, broken
rules will generate warnings as they should. Also removed the
documentation for this hack.
------------------------------------------------------------------
Sat, 05 Dec 2009 07:00
v2.1.0.2
1. RewriteMap directive (code and doc)
2. fix -s special pattern
------------------------------------------------------------------
Thu, 03 Dec 2009 16:15
v2.0.1.15
1. IncludeIni directive
2. bug fix for -f flag
3. IIRF.dll gets windows file metadata (built with IIRF.rc file)
4. stacktraces in the logfile in the event of crashes.
5. MSI installer
------------------------------------------------------------------
Sat, 22 Aug 2009 13:57
v2.0k preview
1. gFilterConfig->EngineOff = FALSE in Rewriter.c
------------------------------------------------------------------
Tue, 18 Aug 2009 18:48
v2.0j preview
1. default StatusUrl /iirfstatus when no ini file is found.
------------------------------------------------------------------
Thu, 16 Jul 2009 20:35
v2.0f preview
1. Multi-site capability. workitem 8669
2. ProxyPass directive.
3. StatusUrl directive, specifies HTTP URL for status inquiries.
workitem 23459.
4. URL Decoding (optional)
5. RewriteEngine directive - workitem 23458.
6. [QSA] modifier. workitem 19486.
7. [G] = Gone modifier
8. [NC] as synonym for [I] (case insensitivity)
9. various bug fixes
------------------------------------------------------------------
v1.2.14
1. Fixed a bug where the case-folding flag was a backslash,
resulting in bad case folding for %{REQUEST_FILENAME} in a
RewriteCond, for example. The new case-folding flag
character is #.
2. Fixed a bug where a string like %100 (with a subscript out of
range) in a replacement string caused the filter to crash.
3. Made reading of the config files much more robust. Broken INI
files no longer crash the filter. (great feature!)
4. Corrected logging of filter priority changes in the ini file.
5. using escaped URLs in the replacement pattern works now.
6. Requesting a very long path no longer causes IIRF to crash with a
"Buffer too small" error.
------------------------------------------------------------------
v1.2.13
1. fixed a minor bug in log message formatting where the code was using
sizeof(message[0])/sizeof(message) instead of
sizeof(message)/sizeof(message[0]).
This was not a buffer overflow problem, because the code uses
safe string routines. But it meant that log messages were not
properly formatted.
2. Added Case Conversion in substitution string. Cool!
3. Compiled with PCRE v7.6, which fixes several security issues
with PCRE.
4. Corrected linker options to prevent conflicting libraries
(CMT).
------------------------------------------------------------------
v1.2.12a
1. added handling to allow escaping of % character in the
replacement string. This would allow a replacement string
to include %26, for example, to pass an ampersand. %%
escapes a %, and $$ escapes a $. This was work item 9910.
v1.2.12b
2. workitem 9858. Fixed a memory leak which occurred when a chain of
RewriteCond's evaluated to false.
http://www.codeplex.com/IIRF/WorkItem/View.aspx?WorkItemId=9858
v1.2.12c
3. changed LogMsg() values for various messages to allow LogLevel
setting of 1 to be used on high-volume websites.
4. memory leak in ReplaceServerVariables. Previously had never
free'd myCopy. This is now fixed. See work item 9204.
http://www.codeplex.com/IIRF/WorkItem/View.aspx?WorkItemId=9024
and also 10528:
http://www.codeplex.com/IIRF/WorkItem/View.aspx?WorkItemId=10528
5. Default compile is now /O2, for faster execution and smaller
memory consumption.
v1.2.12d
6. changed diagnostics in GetServerVariable_AutoFree() to handle
case where the server var is not set yet. This is to comply
with URL normalization recommendations for IIS6 and 5. First
we try the IIS6 way, which will give us no joy on IIS5. The
diagnostic (log) message now reflects this.
------------------------------------------------------------------
v1.2.11
1. fixed a bug with handling of the pattern when dealing with
$10 or above in the replacement string. (skipping the second
digit of the number).
2. Fixed a bug where old values of OriginalUrl and RequestMethod
were hanging around in context. This fix involved re-working
logic in onUrlMap (thanks to rdlejo).
3. included support for a new directive: RewriteFilterPriority ,
which sets the filter priority. Check the readme for
details. This is helpful for sites that have PHP or other
ISAPIs that require IIRF to be set to HIGH priority.
4. added support for including server variables in the
replacement pattern for a RewriteRule. eg %{QUERY_STRING} in
the replacement pattern embeds the query string into the
output (rewritten) URL.
v1.2.11c:
5. added lmiller's fix to support https in redirections. Now we
redirect using the same protocol as the original request,
rather than redirecting only to http://
IIRF now logs the priority level as a string in addition to the
numerical constant.
v1.2.11d:
6. Corrected the makefile to remove unnecessary dependency on
$(PSDK)\lib\AdvAPI32.Lib . Previously this library was used
for RegOpenKeyEx(), but since v1.1, IIRF has used an ini
file, not the registry, for settings.
7. The RewriteLog directive now supports logfile (stub) names
that include spaces. Leading and trailing spaces are
stripped. This was issue 8433 on Codeplex.com/IIRF.
------------------------------------------------------------------
v1.2.10
1. It is now possible to chain multiple RewriteCond statements
together using logical OR or logical AND operations.
2. RewriteCond now supports the special patterns: -d, -f, -s and
their negations (prepend with !). These test if a directory
exists, a file exists, and if a file is of non-zero size,
respectively.
3. IsDuplicateRule() incorrectly flagged as duplicates, two
RewriteRules that had different RewriteCond's. This is now
corrected, and handles chained RewriteCond's.
4. Combining modifier flags on a RewriteRule wasn't really
working, due to errors in parsing logic. This is now
corrected.
5. The minimum value for IterationLimit is now 1 (changed from
8).
6. Fixed some log statements (for loglevel >=4) which were
overflowing because of insufficient buffer sizes.
------------------------------------------------------------------
v1.2.9
1. Ha ha ha ! Contrary to the release notes, I didn't actually
implement the [U] flag in v1.2.8. However, it is now
implemented in 1.2.9. The use of the [U] flag not only sets
the HTTP_X_REWRITE_URL Server Variable, but also tells IIS to
log the original, pre-rewrite URL in the IIS log file. This
is known as "unmangling" the URL. Essentally the
search-engine friendly URLs (pre-rewrite) get logged in the
IIS logs. Please check the README for details on the [U]
flag.
------------------------------------------------------------------
v1.2.8
1. Implemented additional modifier flags: [NF] [F] [L] [U] [I],
and also an expansion of the existing [R] flag (added in
1.2.4) to include [R=code], to support 404 (Not Found), 403
(Forbidden), and additional redirect codes beyond 302. Also
added some tests to exercise and demonstrate these modifier
flags.
2. reverted to fopen() rather than fopen_s() for the ini
file in the filter, because fopen_s() implies exclusive
access to the ini file, and this was failing when the ini
file was held open in a text editor. I had moved to
fopen_s() because fopen() is deprecated in vc8, for security
reasons. But shared access (fopen()) is particularly useful
when iteratively configuring the ini file: set the ini file,
then watch it reload, test the urls, etc. So back to fopen()
it is. This is only for the ini file, not for the logfile.
Because I use the old (deprecated) library routine, there is
a compiler warning when you build IIRF.
3. Corrected a log buffer formatting error. When detecting a
change in a file, the name of the file was sometimes not
correct - due to lack of proper null-termination.
4. Inserted validation checks and better logging for
MaxMatchCount and IterationLimit directives.
5. Inserted a check of the log file directory specified by the
RewriteLog directive. If the log file directory is the same
as the ini file directory, IIRF logs a WARNING message which
advises you to not do this. See the readme for more details
on why you don't want to do this.
6. Corrected a bug where there is no RewriteLog directive in
the ini file. The code was testing for a null log file name =="",
rather than =='\0'. This meant the app was trying to open a
file with no name, for logging. IIRF no longer does this.
------------------------------------------------------------------
v1.2.6
1. removed the newline from log messages - which was introduced when
converting to the ctime_s() routine with the change to ms vc8.
2. swapped from fopen_s() to _fsopen() for the log files. This
allows others to read the logfile while it is being written.
fopen() also does this, but the behavior of fopen_s() is different.
3. AwaitIniChangeAndReinit(): raised the log level to 4, for
logging messages when detecting a change in a file. Changes
can occur frequently and generally we don't want to hear
about them in the logfile, unless we are troubleshooting the
file watcher mechanism itself. For changes in the actual ini
file, that log level is still "1", because it is generally an
event of interest.
------------------------------------------------------------------
v1.2.5
1. Compiled on MS VC8, the C++ compiler that ships with Visual
Studio 2005. Changed makefiles to do this. Also compiled
with Visual-C++ 2005 Express, the free version of Visual C++.
2. Replaced all instances of deprecated CRT routines with the
_s (secure) versions. These include _itoa_s, strncpy_s,
sprintf_s, fopen_s, strtok_s, and numerous others.
3. Packaged up PCRE-5.0 differently in the zip archive, to make
building easier.
------------------------------------------------------------------
v1.2.4
1. Implemented the [R] modifier for redirection (HTTP 302).
Added a test directory to demonstrate redirection.
2. Fixed a really bad design in the TestDriver that prevented
it from ever exiting. What was I thinking here?
3. Modified the output messages generated by TestDriver.exe.
There is now additional text that indicates REWRITE or
REDIRECT as appropriate.
4. Also modified the LogMsg() routine so that log messages are not
duplicated duplicated when run from the TestDriver.exe.
------------------------------------------------------------------
v1.2.3
1. Corrected a race condition on exit, having to do with the
inifile Watcher thread. This involved a change to the
CreateFile() call which opens the directory for
ReadDirectoryChangesW. The CreateFile() now passes
FILE_FLAG_OVERLAPPED to allow async operations. When the
ISAPI is terminating (DLL_PROCESS_DETACH), the main thread
closes the dir handle, which causes ReadDirectoryChangesW
to wake up in the inifile Watcher thread. The thread then
exits properly.
2. Corrected a couple of string pointer manipulation problems in
ReplaceServerVariables(). These bugs were causing garbage to
sometimes appear in the output of RewriteCond test
strings. This sometimes caused RewriteCond to evaluate
incorrectly.
------------------------------------------------------------------
v1.2.2
1. Added more flexibility to the TestDriver, so that you can
organize tests into multiple independent directories.
2. Added some tests to demonstrate techniques. See the tests subdirectory.
3. changed the makefile to compile with /Zi, which includes
debug information in the executable image.
------------------------------------------------------------------
v1.2.1
1. The RewriteCond was obliterating matches for the associated
RewriteRule. This is fixed now.
2. Updated the readme with additional examples. Fixed a few
errors in the readme as well (stale info about reading
logging settings from Registry, etc).
------------------------------------------------------------------
v1.2
1. The filter watches for changes in the ini file, and
re-initializes when the ini file changes.
------------------------------------------------------------------
v1.1
1. The Readme doc stated that the directives in the ini file
were case-sensitive. They are not. So
ReWriteRule
is the same as
RewriteRule
is the same as
REWRITERULE
2. A new directive, RewriteCond, is now supported. See the
Readme doc for how to use it.
3. Logging settings moved from the registry to the ini file.
RewriteLog and RewriteLogLevel are the directives. (not case
sensitive)
4. The Logfilename specified in the ini file is used as the
rootname, this filter appends the pid and ".log" to the
provided name to get the final filename. This is necessary
for multiple worker processes in IIS6. Example:
RewriteLog c:\temp\iirf
gives a net logfilename of
c:\temp\iirf.1672.log
if the process ID of the w3wp.exe is 1672.
You will get multiple logfiles if you have multiple worker
processes.
5. The logging system no longer opens and closes the file for
each action. instead the log is fflushed for every log
statement. This is still a not insignificant performance hit.