Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

186 lines
4.7 KiB

<%' CODEPAGE=65001 'UTF-8%>
<%' certsrck.inc - (CERT)srv web - (S)cript: (R)equest-(C)ooc(K)ie management
' Copyright (C) Microsoft Corporation, 1998 - 1999 %>
<%
' Format of our cookie:
' '[' <ReqID> ',' <TargetStoreFlags> ',' <SaveCert> ',' <FriendlyType> ']'...
Const FIELD_REQID=0
Const FIELD_TARGETSTOREFLAGS=1
Const FIELD_SAVECERT=2
Const FIELD_FRIENDLYTYPE=3
Const NUM_FIELDS=4
Const REQUEST_COOKIE_NAME="Requests"
Dim nReqId
' Look up the requests in the cookie, and return an array of 'request' arrays
Function GetRequests()
' Get the cookie
Dim sRequests
sRequests=Request.Cookies(REQUEST_COOKIE_NAME)
' If the cookie was never set, return an empty array
If ""=sRequests Then
GetRequests=Null
Exit Function
End If
Dim nRequests
Dim rgRequests()
nRequests=0
' Loop through all the requests in the string
Dim nSplitIndex
Do
' Find the next request
nSplitIndex=InStr(sRequests,"]")
If 0=nSplitIndex Then
Exit Do
End If
' Split this Request off the string
Dim sElem
sElem=Mid(sRequests, 2, nSplitIndex-2)
sRequests=Mid(sRequests, nSplitIndex+1)
' Spit this request apart
Dim rgElem
rgElem=Split(sElem, ",")
' Safety check
If NUM_FIELDS-1<>UBound(rgElem) Then
' Cookie is corrupt
nRequests=0
Exit Do
End If
' Add this array to our array of requests
ReDim Preserve rgRequests(nRequests)
rgRequests(nRequests)=rgElem
nRequests=nRequests+1
' safety check for testing
'If nRequests>25 Then
' Err.Raise 6
'End If
Loop ' End string-parsing loop
' if there was an error parsing the cookie, just assume it was empty.
If 0=nRequests Then
GetRequests=Null
Else
GetRequests=rgRequests
End If
End Function
' Combine a requests-array into a single string and set it as a cookie
Sub PutRequests(rgRequests)
Dim sCookie, sRequests, nIndex
sRequests=""
' check for the empty list
If IsNull(rgRequests) Then
' the list is empty
' do nothing
sRequests="-" ' Lynx won't set an empty cookie, so set an invalid one
Else
' the list is not empty
' build a string for each request and concatenate to make cookie
For nIndex=0 To UBound(rgRequests)
sRequests=sRequests & "[" & _
rgRequests(nIndex)(FIELD_REQID) & "," & _
rgRequests(nIndex)(FIELD_TARGETSTOREFLAGS) & "," & _
rgRequests(nIndex)(FIELD_SAVECERT) & "," & _
rgRequests(nIndex)(FIELD_FRIENDLYTYPE) & "]"
Next
End If
' Set the cookie
Response.Cookies(REQUEST_COOKIE_NAME)=sRequests
' Set the expiration date
Response.Cookies(REQUEST_COOKIE_NAME).Expires=Now+nPendingTimeoutDays
' Set the path
Response.Cookies(REQUEST_COOKIE_NAME).Path="/certsrv"
End Sub
' Remove a given request from the requests cookie
Sub RemoveReq(nReqID)
' get the array of requests
Dim rgRequests
rgRequests=GetRequests()
' if the cookie is empty, just ignore
If IsNull(rgRequests) Then
Exit Sub
End If
' find the request
Dim nIndex
Dim nFoundIndex
nFoundIndex=-1
For nIndex=0 To UBound(rgRequests)
If nReqID=rgRequests(nIndex)(FIELD_REQID) Then
nFoundIndex=nIndex
Exit For
End If
Next
If -1=nFoundIndex Then
' request not found, probably a reload and it was deleted already
' do nothing
Else
' remove the request:
If 0=UBound(rgRequests) Then
' this is the last request
' removing it leaves an empty list
rgRequests=Null
Else
' Not the last request, so shuffle down
' (this is not the most efficient, but it keeps the requests in order)
For nIndex=nFoundIndex To UBound(rgRequests)-1
rgRequests(nIndex)=rgRequests(nIndex+1)
Next
' shrink the array
ReDim Preserve rgRequests(UBound(rgRequests)-1)
End If
' set the cookie
PutRequests rgRequests
End If
End Sub
' Add the current request to the request cookie
Sub AddRequest
' build a request object for this request
Dim rgNewReq(3) 'NUM_FIELDS-1
nReqId=ICertRequest.GetRequestId()
rgNewReq(FIELD_REQID)=nReqId
rgNewReq(FIELD_TARGETSTOREFLAGS)=Request.Form("TargetStoreFlags")
rgNewReq(FIELD_SAVECERT)=Request.Form("SaveCert")
rgNewReq(FIELD_FRIENDLYTYPE)=Request.Form("FriendlyType")
' prevent special split characters from being placed in the string
' by converting them to spaces
rgNewReq(FIELD_FRIENDLYTYPE)=Replace(rgNewReq(FIELD_FRIENDLYTYPE), ",", " ")
rgNewReq(FIELD_FRIENDLYTYPE)=Replace(rgNewReq(FIELD_FRIENDLYTYPE), "]", " ")
' add it to the list
Dim rgRequests
rgRequests=GetRequests()
If IsNull(rgRequests) Then
' cookie has never been set
ReDim rgRequests(0)
Else
' save old requests in cookie
ReDim Preserve rgRequests(UBound(rgRequests)+1)
End If
rgRequests(UBound(rgRequests))=rgNewReq
PutRequests rgRequests
End Sub
%>