Microsoft KB Archive/924405

= Client computers cannot download attachments when you use ISA Server 2004 or ISA Server 2006 forms-based authentication and run a third-party OWA add-in program to manage attachments =

Article ID: 924405

Article Last Modified on 12/5/2007

-

APPLIES TO


 * Microsoft Internet Security and Acceleration Server 2004 Enterprise Edition
 * Microsoft Internet Security and Acceleration Server 2004 Standard Edition
 * Microsoft Internet Security and Acceleration Server 2006 Enterprise Edition
 * Microsoft Internet Security and Acceleration Server 2006 Standard Edition

-



SYMPTOMS
Consider the following scenario:
 * You use forms-based authentication in Microsoft Internet Security and Acceleration (ISA) Server 2004 or ISA Server 2006 to publish a Microsoft Outlook Web Access (OWA) server.
 * You use a third-party OWA add-in program to manage e-mail attachments.

In this scenario, when client computers use OWA and download e-mail attachments, the computers cannot download attachments. Additionally, you may receive an error message that resembles the following:

Internet Explorer cannot download file from server.

Internet Explorer was not able to open this Internet site. The requested site is

either unavailable or cannot be found. Please try again later.



CAUSE
This problem occurs because the ISA Server 2004 or ISA Server 2006 forms-based authentication filter adds a Cache-Control: no-cache header to all responses for Active Server Pages (ASP) page requests except for known requests that are used by OWA for attachment downloads. The Cache-Control: no-cache header is added to ASP page requests to avoid session problems that occur with some non-Microsoft browsers.

When you use a third-party OWA add-in program that uses ASP pages for attachment downloads, the Cache-Control: no-cache header that is added to the ASP page response prevents Windows Internet Explorer from caching the attached file. Therefore, Internet Explorer cannot download or open the file. For more information about this problem, click the following article number to view the article in the Microsoft Knowledge Base:

316431 Internet Explorer is unable to open Office documents from an SSL Web site



How to obtain the hotfix
This issue is fixed in the ISA Server 2006 Hotfix Package dated September 24, 2007. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

942639 Description of the ISA Server 2006 hotfix package: September 24, 2007

How to obtain the hotfix
This issue is fixed in the ISA Server 2004 Hotfix Package dated August 23, 2006. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

924410 Description of the ISA Server 2004 hotfix package: August 23, 2006

The hotfix enables an exception list to be configured. The exception list prevents the ISA Server 2004 or ISA Server 2006 forms-based authentication filter from adding the Cache-Control: no-cache header to requests that contain the strings that are defined in the exception list.

After you apply the hotfix, you must run the following Visual Basic script on ISA Server 2004 or ISA Server 2006 to configure the exception list that has the necessary strings. To do this, follow these steps.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.  Click Start, point to Programs, point to Accessories, and then click Notepad. Copy and paste the following code into a new Notepad document. Then, save the code to a file name that has a .vbs extension such as .vbs.

 ' ' Copyright (c) Microsoft Corporation. All rights reserved. ' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE ' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE ' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS ' HEREBY PERMITTED. 

 ' This script adds a new VendorParametersSets under the array root. ' This script is used to add new parameters that are needed for hotfixes or service packs. 

Sub AddOwaASPExceptionList

' Create the root obect. Dim root ' The FPCLib.FPC root object Set root = CreateObject(&quot;FPC.Root&quot;)

'Declare the other objects needed. Dim array      ' An FPCArray object Dim VendorSets ' An FPCVendorParametersSets collection Dim VendorSet  ' An FPCVendorParametersSet object

' Get references to the array object ' and the network rules collection. Set array = root.GetContainingArray Set VendorSets = array.VendorParametersSets

On Error Resume Next Set VendorSet = VendorSets.Item( &quot;{143F5698-103B-12D4-FF34-1F34767DEabc}&quot; )

If Err.Number <> 0 Then Err.Clear

' Add the item Set VendorSet = VendorSets.Add( &quot;{143F5698-103B-12D4-FF34-1F34767DEabc}&quot; ) CheckError WScript.Echo &quot;New VendorSet added... &quot; & VendorSet.Name

Else WScript.Echo &quot;Existing VendorSet found... value- &quot; & VendorSet.Value(&quot;OwaASPExceptionList&quot;) End If

' ' The syntax for adding the exception strings is: &quot;String1;String2;..;StringN;&quot; ' Each string is terminated with a semicolon. Even if you need only one exception ' string, terminate it with a semicolon. ' The URl of the request is compared to all strings. If one match,or ' one of the exception strings is included in the URL, ISA will not add the ' &quot;Cache-control&quot; header to the response and will pass the header from ' the Web server. ' '   Err.Clear VendorSet.Value(&quot;OwaASPExceptionList&quot;) = &quot;attachment.asp;&quot;

If Err.Number <> 0 Then CheckError Else VendorSets.Save false, true CheckError

If Err.Number = 0 Then WScript.Echo &quot;Done with OwaASPExceptionList, saved!&quot; End If   End If

End Sub

Sub CheckError

If Err.Number <> 0 Then WScript.Echo &quot;An error occurred: 0x&quot; & Hex(Err.Number) & &quot; &quot; & Err.Description Err.Clear End If

End Sub

AddOwaASPExceptionList

Notes  This script configures an exception for the &quot;attachment.asp&quot; page. The syntax for adding the exception strings is as follows:

&quot;attachment1.asp;attachment2.asp;attachment3.asp;&quot;

 Each string ends with a semicolon. You must end the string with a semicolon even if you add a single string. The exclusion list is case sensitive.</ul> </li> Replace the &quot;attachment.asp&quot; page in the Microsoft Visual Basic script with the strings that you want to add to the exclusion list, and then save the file.</li> Double-click the .vbs file to run the script.</li></ol>

To remove the exception list, you must run the following Visual Basic script. To do this, follow these steps: <ol> Click Start, point to Programs, point to Accessories, and then click Notepad.</li> Copy and paste the following code into a new Notepad document. Then, save the code to a file name that has a .vbs extension such as .vbs.

 ' ' Copyright (c) Microsoft Corporation. All rights reserved. ' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE ' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE ' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS ' HEREBY PERMITTED. 

 ' This script removes a VendorParametersSet under the array root. 

Sub RemoveOwaASPExceptionList

' Create the root obect. Dim root ' The FPCLib.FPC root object Set root = CreateObject(&quot;FPC.Root&quot;)

'Declare the other objects needed. Dim array      ' An FPCArray object Dim VendorSets ' An FPCVendorParametersSets collection Dim VendorSet  ' An FPCVendorParametersSet object

' Get references to the array object ' and the network rules collection. Set array = root.GetContainingArray Set VendorSets = array.VendorParametersSets

On Error Resume Next Set VendorSet = VendorSets.Item( &quot;{143F5698-103B-12D4-FF34-1F34767DEabc}&quot; )

If Err.Number = 0 Then WScript.Echo &quot;Existing VendorSet found... value- &quot; & VendorSet.Value(&quot;OwaASPExceptionList&quot;)

Err.Clear VendorSet.RemoveValue(&quot;OwaASPExceptionList&quot;)

If Err.Number <> 0 Then CheckError Else VendorSets.Save false, true CheckError

If Err.Number = 0 Then WScript.Echo &quot;Done with OwaASPExceptionList, saved!&quot; End If       End If    End If

End Sub

Sub CheckError

If Err.Number <> 0 Then WScript.Echo &quot;An error occurred: 0x&quot; & Hex(Err.Number) & &quot; &quot; & Err.Description Err.Clear End If

End Sub

RemoveOwaASPExceptionList

</li> Double-click the .vbs file to run the script.</li></ol>

<div class="status_section">

STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the &quot;Applies to&quot; section.

Keywords: kberrmsg kbqfe kbprb KB924405

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.