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.
3987 lines
128 KiB
3987 lines
128 KiB
<%
|
|
'
|
|
' Copyright (c) Microsoft Corporation. All rights reserved.
|
|
'
|
|
Const CONST_SUCCESS = 0
|
|
|
|
'const error codes
|
|
Const CONST_USER_NOTFOUND_ERRMSG = &H800708AD
|
|
Const CONST_OBJECT_EXISTS_ERRMSG = &H80071392
|
|
Const CONST_OBJECT_NOTEXISTS_ERRMSG = &H80072030
|
|
Const CONST_QUOTA_USER_NOTFOUND_ERRMSG = &H80070002
|
|
Const CONST_LDAP_SERVER_NOTOP = &H8007203A
|
|
Const CONST_LDAP_SERVER_NOTEXIST = &H8007200A
|
|
Const CONST_DOMAINROLE_ERROR = &H10
|
|
Const wbemErrNotFound = &H80041002
|
|
|
|
Const WBEMFLAG = 131072
|
|
|
|
Const CONST_SITE_STARTED = &H2
|
|
Const CONST_SITE_STOPPED = &H4
|
|
Const CONST_SITE_PAUSED = &H6
|
|
|
|
'file perm constants
|
|
Const CONST_FULLCONROL = &H1F01FF
|
|
Const CONST_MODIFYDELTE = &H1301BF
|
|
Const CONST_READEXEC = &H1200A9
|
|
|
|
' From ntioapi.h
|
|
' #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
|
|
' FILE_READ_DATA |\
|
|
' FILE_READ_ATTRIBUTES |\
|
|
' FILE_READ_EA |\
|
|
' SYNCHRONIZE)
|
|
Const FILE_GENERIC_READ = &H120089
|
|
|
|
'sid string constants
|
|
|
|
' From ntseapi.h
|
|
'// Interactive S-1-5-4
|
|
Const SIDSTRING_INTERACTIVE = "S-1-5-4"
|
|
|
|
|
|
'reg constants
|
|
Const CONST_WEBBLADES_REGKEY = "Software\Microsoft\ServerAppliance"
|
|
Const CONST_WEBSITEROOT_REGVAL = "WebSiteRoot"
|
|
Const CONST_FTPSITEROOT_REGVAL = "FtpRoot"
|
|
Const CONST_FPSEOPTION_REGVAL = "FPSEOption"
|
|
Const CONST_FTPSITEID_REGVAL = "AdminFTPServerName"
|
|
|
|
'website root and ftp site root constants
|
|
Const CONST_DEF_WEBROOT = "Websites"
|
|
Const CONST_DEF_FTPROOT = "Web Site Content FTP root"
|
|
Const CONST_QUOTASTATE = "Unable to create directory"
|
|
Const CONST_FRONTPAGE_PATH = "W3SVC/Filters/fpexedll.dll"
|
|
Const CONST_FRONTPAGE_2002_INSTALLED = "Setup Packages"
|
|
Const CONST_SHAREPOINT_INSTALLED = "SharePoint"
|
|
|
|
'security permission constants
|
|
Const ADS_RIGHT_GENERIC_READ = &H80000000
|
|
Const ADS_RIGHT_GENERIC_ALL = &H10000000
|
|
|
|
Const ADS_RIGHT_DS_CREATE_CHILD = &H1
|
|
Const ADS_RIGHT_DS_DELETE_CHILD = &H2
|
|
|
|
Const ADS_ACETYPE_ACCESS_ALLOWED = 0
|
|
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5
|
|
|
|
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1
|
|
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2
|
|
Const ADS_ACEFLAG_INHERIT_ACE = &H2
|
|
Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8
|
|
|
|
'A list of the various object GUIDs
|
|
Const USERGUID = "{BF967ABA-0DE6-11D0-A285-00AA003049E2}"
|
|
Const GROUPGUID = "{bf967a9c-0de6-11d0-a285-00aa003049e2}"
|
|
Const OUGUID = "{bf967aa5-0de6-11d0-a285-00aa003049e2}"
|
|
|
|
'Error constants for CreateSitePath function
|
|
Const CONST_CREATE_FSOBJ_FAILED = &H100
|
|
Const CONST_INVALID_DRIVE = &H101
|
|
Const CONST_NOTNTFS_DRIVE = &H102
|
|
Const CONST_FAILED_TOCREATE_DIR = &H103
|
|
|
|
' Front Page related constants
|
|
Const CONST_FRONTPAGE_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\4.0"
|
|
Const CONST_FRONTPAGE_2002_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0"
|
|
Const CONST_PORT_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\Ports\"
|
|
Const CONST_NOLIMIT_TEXT = "No limit"
|
|
|
|
'Domain Role
|
|
Const MEMBER_ADDC = 0
|
|
Const MEMBER_NTDC = 1
|
|
Const WORKSTATION = 1
|
|
Const MEMBER_WORKGROUP = 2
|
|
Const MEMBER_DOMAIN = 3
|
|
Const BACKUP_DOMAIN_CONTROLLER = 4
|
|
Const PRIMARY_DOMAIN_CONTROLLER = 5
|
|
Const DOMAIN_CONTROLLER = 6
|
|
|
|
'Add for globalization of Web/FTP log settings
|
|
Const CONST_MSIISLOGFILE_FORMAT = "Microsoft IIS Log File Format"
|
|
Const CONST_NCSALOGFILE_FORMAT = "NCSA Common Log File Format"
|
|
Const CONST_ODBCLOGFILE_FORMAT = "ODBC Logging"
|
|
Const CONST_W3CEXLOGFILE_FORMAT = "W3C Extended Log File Format"
|
|
|
|
'Running state of the service
|
|
Const CONST_SERVICE_RUNNING_STATE = "Running"
|
|
|
|
'Running state of FTP server (serverstate = 2, started)
|
|
Const CONST_FTPSERVER_RUNNING_STATE = 2
|
|
'Stopped state of FTP server (serverstate = 4, stopped)
|
|
Const CONST_FTPSERVER_STOPPED_STATE = 4
|
|
|
|
Dim sReturnURL ' to hold return URL
|
|
sReturnURL = "../tasks.asp"
|
|
Call SA_MungeURL(sReturnURL, "Tab1", "TabsWelcome")
|
|
|
|
' GUID constants for the four IIS logging plug-ins. These GUIDs have been
|
|
' verified with the IIS WMI providers on both Win2K and .Net.
|
|
Const CONST_MSIISLOGFILE_GUID = "{FF160657-DE82-11CF-BC0A-00AA006111E0}"
|
|
Const CONST_NCSALOGFILE_GUID = "{FF16065F-DE82-11CF-BC0A-00AA006111E0}"
|
|
Const CONST_ODBCLOGFILE_GUID = "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
|
|
Const CONST_W3CEXLOGFILE_GUID = "{FF160663-DE82-11CF-BC0A-00AA006111E0}"
|
|
|
|
'
|
|
' Upload method constants for application settings tab.
|
|
Const UPLOADMETHOD_NEITHER = "0"
|
|
Const UPLOADMETHOD_FPSE = "1"
|
|
Const UPLOADMETHOD_FTP = "2"
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IISLogFileGUIDToENName
|
|
'Description: Converts the given IIS Log File Plug-in GUID into
|
|
' the English-US name for that plug-in as
|
|
' long as the GUID is one of the four we recognize.
|
|
'Input Variables: strGUID - The plug-in GUID.
|
|
'Returns: The US English name of the plug-in or an
|
|
' empty string if the GUID is unrecognized.
|
|
'Global Variables: None
|
|
'-------------------------------------------------------------------------
|
|
Function IISLogFileGUIDToENName(strGUID)
|
|
Select Case strGUID
|
|
Case CONST_MSIISLOGFILE_GUID
|
|
IISLogFileGUIDToENName = CONST_MSIISLOGFILE_FORMAT
|
|
Case CONST_NCSALOGFILE_GUID
|
|
IISLogFileGUIDToENName = CONST_NCSALOGFILE_FORMAT
|
|
Case CONST_ODBCLOGFILE_GUID
|
|
IISLogFileGUIDToENName = CONST_ODBCLOGFILE_FORMAT
|
|
Case CONST_W3CEXLOGFILE_GUID
|
|
IISLogFileGUIDToENName = CONST_W3CEXLOGFILE_FORMAT
|
|
Case Else
|
|
IISLogFileGUIDToENName = ""
|
|
End Select
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IISLogFileENNameToGUID
|
|
'Description: Converts the given IIS Log File Plug-in US
|
|
' English name into the GUID for that plug-in as
|
|
' long as the name is one of the four we recognize.
|
|
'Input Variables: strName - The US English plug-in name.
|
|
'Returns: The GUID of the plug-in or an empty string
|
|
' if the name is unrecognized.
|
|
'Global Variables: None
|
|
'-------------------------------------------------------------------------
|
|
Function IISLogFileENNameToGUID(strName)
|
|
Select Case strName
|
|
Case CONST_MSIISLOGFILE_FORMAT
|
|
IISLogFileENNameToGUID = CONST_MSIISLOGFILE_GUID
|
|
Case CONST_NCSALOGFILE_FORMAT
|
|
IISLogFileENNameToGUID = CONST_NCSALOGFILE_GUID
|
|
Case CONST_ODBCLOGFILE_FORMAT
|
|
IISLogFileENNameToGUID = CONST_ODBCLOGFILE_GUID
|
|
Case CONST_W3CEXLOGFILE_FORMAT
|
|
IISLogFileENNameToGUID = CONST_W3CEXLOGFILE_GUID
|
|
Case Else
|
|
IISLogFileENNameToGUID = ""
|
|
End Select
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: CreateOU
|
|
'Description: Creates the ou under specified parent ou
|
|
'Input Variables: strOuName - ou name
|
|
' objParent - parent of ou to be created
|
|
'Output Variables: objOu - created ou
|
|
'Returns: returns Error Message
|
|
'Global Variables: None
|
|
'-------------------------------------------------------------------------
|
|
Function CreateOU(strOuName, strDesc, objRoot, ByRef objOu)
|
|
On Error Resume Next
|
|
Err.clear
|
|
|
|
Set objOu = objRoot.Create("organizationalUnit", "ou=" & strOuName)
|
|
objOu.Put "Description", strDesc
|
|
objOu.SetInfo
|
|
|
|
CreateOU = err.number
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getObjSiteCollection
|
|
'Description: Returns an Instance of IIs_WebServerSetting
|
|
'Input Variables: None
|
|
'Output Variables:
|
|
'Returns: Object -Returns an object
|
|
'Global Variables: None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function getObjSiteCollection(objService)
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
Dim siteCollection 'holds sitecollection
|
|
Dim strQuery 'holds query string
|
|
|
|
'form the query
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting")
|
|
|
|
Set siteCollection = objService.ExecQuery(strQuery)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_ServeFailurepageEx L_INFORMATION_ERRORMESSAGE, sReturnURL
|
|
getObjSiteCollection = false
|
|
exit function
|
|
End If
|
|
|
|
Set getObjSiteCollection = siteCollection
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: CreateManagedSiteRegKey
|
|
'Description: Creates the reg key for this site under SOFTWARE\
|
|
' Microsoft\WebServerAppliance\ManagedWebSites
|
|
'Input Variables: nSiteNo, strSiteID
|
|
'Output Variables:
|
|
'Returns: None
|
|
'Global Variables: None
|
|
'-------------------------------------------------------------------------
|
|
Function MakeManagedSite(objService, strSiteNum,servercomment)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds object path
|
|
Dim objVirDir 'holds virtualdirectory collection
|
|
|
|
MakeManagedSite = false
|
|
|
|
'set ServerID
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteNum & chr(34)
|
|
|
|
set objVirDir = objService.Get( strObjPath )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
'call the method to set serverID property
|
|
objVirDir.serverID = servercomment
|
|
|
|
objVirDir.put_(WBEMFLAG)
|
|
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "Make Managed Site", "Failed to set ServerID" & "(" & Hex(Err.Number) & ")"
|
|
Set objVirDir = nothing
|
|
exit function
|
|
end if
|
|
MakeManagedSite = true
|
|
|
|
Set objVirDir = nothing
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :isValidSiteIdentifier
|
|
'Description :Returns an Instance of IIs_WebServerSetting
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Object -Returns an object
|
|
'Global Variables :None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function isValidSiteIdentifier(strSiteID, _
|
|
strAdminName, _
|
|
strDirRoot, _
|
|
bVerifyUser)
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
isValidSiteIdentifier = FALSE
|
|
|
|
'verify the siteid
|
|
If CStr(GetWebSiteNo(strSiteID)) <> "" Then
|
|
SA_TraceOut "inc_wsa", "Failed: isValidSiteIdentifier"
|
|
Exit Function
|
|
End If
|
|
|
|
'verify the administrator
|
|
If bVerifyUser Then
|
|
If isValidUser(strAdminName, strDirRoot) = FALSE Then
|
|
SA_TraceOut "inc_wsa", "Failed: isValidSiteIdentifier"
|
|
Exit Function
|
|
End If
|
|
End If
|
|
|
|
isValidSiteIdentifier = TRUE
|
|
SA_TraceOut "inc_wsa", "success isValidSiteIdentifier"
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :isValidUser
|
|
'Description :Returns an Instance of IIs_WebServerSetting
|
|
'Input Variables :None
|
|
'Output Variables :
|
|
'Returns :Object -Returns an object
|
|
'Global Variables :None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function isValidUser(strUserName, strDirRoot)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objComputer 'holds Computer object
|
|
Dim objUser
|
|
|
|
isValidUser = False
|
|
Set objComputer = GetObject("WinNT://" & strDirRoot)
|
|
Set objUser = objComputer.GetObject("User",strUserName)
|
|
|
|
If Err.number <> 0 Then
|
|
isValidUser = True
|
|
Set objComputer = nothing
|
|
Exit Function
|
|
End If
|
|
|
|
Set objComputer = nothing
|
|
Set objUser = nothing
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :GetNewSiteNo
|
|
'Description :Returns an Free Site no
|
|
'Input Variables :None
|
|
'Output Variables :
|
|
'Returns :siteno
|
|
'Global Variables :None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function GetNewSiteNo()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objService 'holds WMI Connection
|
|
Dim objInstances 'holds WebServer Instance
|
|
Dim objInstance 'holds instance object
|
|
Dim nSiteNo 'holds sitenumber value
|
|
Dim nPos 'holds position value
|
|
Dim nCount 'holds count value
|
|
Dim index 'holds index value
|
|
Dim nStart 'holds start value
|
|
Dim bFound 'holds boolean value
|
|
Dim arrSiteNo 'holsd arraysite number
|
|
|
|
GetNewSiteNo = -1
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objInstances = objService.InstancesOf(GetIISWMIProviderClassName("IIS_WebServer"))
|
|
|
|
nCount = objInstances.Count
|
|
|
|
'store the existing site no. in the array
|
|
ReDim arrSiteNo(nCount)
|
|
|
|
For Each objInstance In objInstances
|
|
nPos = InStr(objInstance.Name, "/")
|
|
arrSiteNo(nStart) = Right(objInstance.Name, len(objInstance.Name) - nPos)
|
|
nStart = nStart + 1
|
|
Next
|
|
|
|
nCount = Ubound(arrSiteNo) - 1
|
|
nSiteNo = 1
|
|
bFound = FALSE
|
|
Do While bFound <> TRUE
|
|
For index= 0 to nCount
|
|
If Clng(nSiteNo) = Clng(arrSiteNo(index)) Then
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If index > nCount Then
|
|
bFound = TRUE
|
|
Else
|
|
nSiteNo = nSiteNo + 1
|
|
End If
|
|
Loop
|
|
|
|
SA_TraceOut "inc_wsa", "SiteNo=" & nSiteNo
|
|
|
|
GetNewSiteNo = nSiteNo
|
|
Set objService = nothing
|
|
Set objInstances = nothing
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Sub name :GetDomainRole
|
|
'Description :Returns domain and server name of local machine
|
|
'Input Variables :None
|
|
'Output Variables :strDirectoryRoot, strSysName
|
|
'Returns :None
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Sub GetDomainRole(ByRef strDirectoryRoot, ByRef strSysName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strDomainName 'holds Domain name
|
|
Dim Query 'holds query string
|
|
Dim objService 'holds WMI connection
|
|
Dim Parent 'holds result query
|
|
Dim role 'holds role of the sytem
|
|
Dim Domain 'holds domain name
|
|
Dim inst 'holds instance of computer object
|
|
|
|
strDomainName = ""
|
|
strSysName = ""
|
|
|
|
Query = "Select * from Win32_ComputerSystem"
|
|
Set objService = getWMIConnection("root\cimv2")
|
|
|
|
set Parent = objService.ExecQuery(Query)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to get connection to Computer name space"
|
|
Exit Sub
|
|
End if
|
|
|
|
For each inst in Parent
|
|
role = inst.DomainRole
|
|
strDomainName = inst.Domain
|
|
strSysName = inst.Name
|
|
exit for
|
|
next
|
|
|
|
If (role = MEMBER_DOMAIN) Then
|
|
strDirectoryRoot = strDomainName
|
|
ElseIf (role = MEMBER_WORKGROUP) Then
|
|
strDirectoryRoot = strSysName
|
|
End If
|
|
End Sub
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetWebSiteNo
|
|
'Description: gets the web site no
|
|
'Input Variables: strSiteId - site identifier
|
|
' strSysName - system name
|
|
'Returns: strSiteNo
|
|
'--------------------------------------------------------------------------
|
|
Function GetWebSiteNo(strSiteId)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim Parent 'holds result collection
|
|
Dim Query 'holds query string
|
|
Dim inst 'holds instance or result collection
|
|
Dim strSiteNo 'holds site name
|
|
Dim objService 'holds WMI Connection object
|
|
|
|
Query = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID=" & chr(34) & strSiteId & chr(34)
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set Parent = objService.ExecQuery(Query)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
End if
|
|
|
|
For Each inst In Parent
|
|
strSiteNo = inst.Name
|
|
Exit For
|
|
Next
|
|
|
|
GetWebSiteNo = strSiteNo
|
|
|
|
Set Parent = nothing
|
|
Set objService = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetWebSiteName
|
|
'Description: gets the web site no
|
|
'Input Variables: strSiteId - site identifier
|
|
'Returns: strSiteNo
|
|
'--------------------------------------------------------------------------
|
|
Function GetWebSiteName(strSiteId)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim Parent 'holds result query
|
|
Dim Query 'holds query string
|
|
Dim inst 'holds instance of Parent
|
|
Dim strSiteName 'holds sitename
|
|
Dim objService 'holds WMI Connection object
|
|
|
|
Query = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteId & chr(34)
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set Parent = objService.Get( Query )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
End if
|
|
|
|
strSiteName = Parent.ServerComment
|
|
|
|
GetWebSiteName = strSiteName
|
|
|
|
'Release objects
|
|
Set Parent = nothing
|
|
Set objService = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetApplProt
|
|
'Description: Sets Application Protection level
|
|
'Input Variables: objService, strSiteNum, strProtect
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function SetApplProt( objService, strSiteNum, strProtect )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds Query string
|
|
Dim objVirDir 'holds query result
|
|
|
|
SetApplProt = FALSE
|
|
|
|
'set application protection
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDir") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
|
|
set objVirDir = objService.Get( strObjPath )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
'call the method to set the application protection
|
|
objVirDir.AppCreate2( cint(strProtect) )
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to set the application protection " & Hex(Err.number)
|
|
exit Function
|
|
End if
|
|
|
|
SetApplProt = TRUE
|
|
|
|
'Release objects
|
|
set objVirDir = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetApplRead
|
|
'Description: Sets Read permissions on the web site
|
|
'Input Variables: objService, strSiteNum
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function SetApplRead( objService, strSiteNum)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds Query string
|
|
Dim objVirDir 'holds query result
|
|
|
|
SetApplRead = FALSE
|
|
|
|
'set application protection
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
|
|
set objVirDir = objService.Get( strObjPath )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
'call the method to set the application Read property
|
|
objVirDir.AccessRead = true
|
|
objVirDir.AccessNoRemoteRead = false
|
|
objVirDir.AccessSource = false
|
|
objVirDir.Put_( WBEMFLAG )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to set the application read property " & Hex(Err.number)
|
|
exit Function
|
|
End if
|
|
|
|
SetApplRead = TRUE
|
|
|
|
'Release objects
|
|
set objVirDir = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetAnonProp
|
|
'Description: Sets the Anon user
|
|
'Input Variables: objService, strSiteNum, strAllow, strAnonName, strAnonPwd
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function SetAnonProp(objService, strSiteNum, strAllow, strAnonName, strAnonPwd, bIIS)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds Query string
|
|
Dim objVirDirSet 'holds query result
|
|
Dim strPassword
|
|
Dim strUserName
|
|
Dim objSystem
|
|
Dim strDomainName
|
|
|
|
Dim arrDomain
|
|
|
|
SA_Traceout "parameters=", strSiteNum + ":" + strAllow + ":" + strAnonName + ":" + strAnonPwd
|
|
|
|
SetAnonProp = FALSE
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
set objVirDirSet = objService.Get(strObjPath)
|
|
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Get WebVirtualDirSetting object failed with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
End if
|
|
|
|
'Set bIIS to false, that's because a new IIS 6.0 security feature, which does not
|
|
'install sub-authenticator on clean installs. bIIS should always be false.
|
|
'It also affects anon access. Now we don't let IIS manage the pwd, and have to set
|
|
'the pwd explicitly. Since user can disable/enable the anon access back and forth,
|
|
'we need to always store the pwd in AnonymousUserPass. The pwd for anon user created
|
|
'by WebUI is randomly generated from SAHelper, it should not be empty. If it's empty,
|
|
'it means user wants to change the anon access permission.
|
|
bIIS = false
|
|
|
|
If strAnonPwd <> "" Then
|
|
objVirDirSet.AnonymousUserPass = strAnonPwd
|
|
End If
|
|
|
|
if lcase(strAllow) = "true" then
|
|
objVirDirSet.AuthAnonymous = True
|
|
objVirDirSet.AuthBasic = False
|
|
objVirDirSet.AuthNTLM = True
|
|
objVirDirSet.AnonymousUserName = strAnonName
|
|
objVirDirSet.AnonymousPasswordSync = False
|
|
|
|
else
|
|
objVirDirSet.AuthAnonymous = False
|
|
objVirDirSet.AuthBasic = True
|
|
objVirDirSet.AuthNTLM = True
|
|
end if
|
|
|
|
objVirDirSet.Put_( WBEMFLAG )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "failed to set the anon settings with error " & "(" & Hex(Err.Number) & ")"
|
|
end if
|
|
|
|
SetAnonProp = TRUE
|
|
|
|
'Release objects
|
|
set objVirDirSet = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetServerBindings
|
|
'Description: Sets the IP address, tcp port and host header values
|
|
'Input Variables: objService, strSiteNum, arrBindings
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function SetServerBindings( objService, strSiteNum, arrBindings )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query string
|
|
Dim objSite 'holds site
|
|
|
|
SetServerBindings = FALSE
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteNum & chr(34)
|
|
|
|
set objSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
End if
|
|
|
|
SA_TraceOut "inc_wsa", "bindings=" & arrBindings(0)
|
|
|
|
If IsIIS60Installed() Then
|
|
|
|
Dim arrTmp
|
|
Dim arrObjBindings(0)
|
|
|
|
'We need to create a ServerBinding object for IIS6.0 WMI
|
|
arrTmp = split( arrBindings(0),":")
|
|
|
|
set arrObjBindings(0) = objService.Get("ServerBinding").SpawnInstance_
|
|
|
|
arrObjBindings(0).IP = arrTmp(0) 'IP Address
|
|
arrObjBindings(0).Port = arrTmp(1) 'Port
|
|
arrObjBindings(0).Hostname = arrTmp(2) 'Hostname - Header in old WMI
|
|
|
|
objSite.ServerBindings = arrObjBindings
|
|
Else
|
|
objSite.ServerBindings = arrBindings
|
|
End If
|
|
|
|
|
|
objSite.Put_( WBEMFLAG )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to set the serverbindings with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
end if
|
|
|
|
SetServerBindings = TRUE
|
|
|
|
'Release objects
|
|
set objSite = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: StartWebSite
|
|
'Description: Starts web site after creation
|
|
'Input Variables: objService, strSiteNum
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function StartWebSite( objService, strSiteNum )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query string
|
|
Dim objWebSite 'holds result site object
|
|
|
|
StartWebSite = FALSE
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
|
|
|
|
Set objWebSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
|
|
exit Function
|
|
End if
|
|
|
|
if objWebSite.ServerState = CONST_SITE_STOPPED then
|
|
objWebSite.start()
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to start the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
end if
|
|
elseif objWebSite.ServerState = CONST_SITE_PAUSED then
|
|
objWebSite.Continue()
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to start the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
end if
|
|
end if
|
|
|
|
StartWebSite = TRUE
|
|
|
|
'Release objects
|
|
Set objWebSite = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: PauseWebSite
|
|
'Description: Pause web site
|
|
'Input Variables: objService, strSiteNum
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function PauseWebSite( objService, strSiteNum )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query string
|
|
Dim objWebSite 'holds result site object
|
|
|
|
PauseWebSite = FALSE
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
|
|
|
|
Set objWebSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
|
|
exit Function
|
|
End if
|
|
|
|
if objWebSite.ServerState = CONST_SITE_STARTED then
|
|
objWebSite.pause()
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to pause the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
end if
|
|
|
|
end if
|
|
|
|
PauseWebSite = TRUE
|
|
|
|
'Release objects
|
|
Set objWebSite = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: StopWebSite
|
|
'Description: Starts web site after creation
|
|
'Input Variables: objService, strSiteNum
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function StopWebSite( objService, strSiteNum )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query object
|
|
Dim objWebSite 'holds query result
|
|
|
|
StopWebSite = FALSE
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
|
|
|
|
Set objWebSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "site_area.asp", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
|
|
exit Function
|
|
End if
|
|
|
|
if objWebSite.ServerState = CONST_SITE_STARTED or objWebSite.ServerState = CONST_SITE_PAUSED then
|
|
|
|
objWebSite.Stop()
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "site_area.asp", "Failed to stop the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
|
|
exit Function
|
|
end if
|
|
|
|
end if
|
|
|
|
StopWebSite = TRUE
|
|
|
|
'Release objects
|
|
Set objWebSite = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SA_Sleep
|
|
'Description: Sleep for the given period of time (ms)
|
|
'Input Variables: Time to sleep in ms
|
|
'Output Variables:
|
|
'Returns: None
|
|
'Global Variables:
|
|
'-------------------------------------------------------------------------
|
|
Public Function SA_Sleep(lngTimeToSleep)
|
|
On Error Resume Next
|
|
Dim objSystem
|
|
|
|
Set objSystem = CreateObject("comhelper.SystemSetting")
|
|
If Err.Number <> 0 Then
|
|
Call SA_TraceOut(SA_GetScriptFileName(), "SA_Sleep failed to create COMHelper object: " + CStr(Hex(Err.Number)))
|
|
Set objSystem = Nothing
|
|
Exit Function
|
|
End If
|
|
|
|
call objSystem.Sleep(lngTimeToSleep)
|
|
|
|
If Err.Number <> 0 Then
|
|
Call SA_TraceOut(SA_GetScriptFileName(), "SA_Sleep failed: " + CStr(Hex(Err.Number)))
|
|
Set objSystem = Nothing
|
|
Exit Function
|
|
End If
|
|
|
|
Set objSystem = Nothing
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetAdminFtpServerName
|
|
'Description: sets the ftp site name in registry
|
|
'Input Variables: strFTPServerName
|
|
'Returns: true/false
|
|
'Global variables: None
|
|
'--------------------------------------------------------------------------
|
|
|
|
Function SetAdminFtpServerName(strFTPServerName)
|
|
on error resume next
|
|
Err.clear
|
|
|
|
Dim IRC
|
|
Dim objGetHandle
|
|
|
|
SetAdminFtpServerName = FALSE
|
|
|
|
set objGetHandle = RegConnection()
|
|
|
|
IRC = objGetHandle.SetStringValue(G_HKEY_LOCAL_MACHINE,CONST_WEBBLADES_REGKEY,CONST_FTPSITEID_REGVAL,strFTPServerName)
|
|
If Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to Set adminFTPServerName regval"
|
|
exit function
|
|
end if
|
|
|
|
SetAdminFtpServerName = TRUE
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetAdminFtpServerName
|
|
'Description: gets the ftp site id
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: FTP site ID
|
|
'--------------------------------------------------------------------------
|
|
Function GetAdminFtpServerName()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objGetHandle 'holds regconnection value
|
|
|
|
set objGetHandle = RegConnection()
|
|
|
|
GetAdminFtpServerName = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_FTPSITEID_REGVAL,CONST_STRING)
|
|
If Err.number <> 0 then
|
|
GetAdminFtpServerName = ""
|
|
SA_TraceOut "inc_wsa", "Failed to get AdminFtpServerName regval"
|
|
exit function
|
|
end if
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsAdminFTPServerExist
|
|
'Description: check whether AdminFTPServer exists
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function IsAdminFTPServerExist()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim strAdminFTPServerName
|
|
dim objWMIConnection
|
|
dim objAdminFTPServer
|
|
|
|
IsAdminFTPServerExist = false
|
|
|
|
strAdminFTPServerName = GetAdminFtpServerName()
|
|
' If could not read the admin FTP server name from the registry, return false
|
|
if strAdminFTPServerName = "" Then
|
|
Exit Function
|
|
End if
|
|
|
|
' If could not get admin FTP server from WMI, return false
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
|
|
|
|
if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
|
|
SA_TraceOut "inc_wsa", "IsAdminFTPServerExist failed"
|
|
Exit Function
|
|
End If
|
|
|
|
IsAdminFTPServerExist = true
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsAdminFTPServerExistAndRunning
|
|
'Description: check whether AdminFTPServer exists and is running
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function IsAdminFTPServerExistAndRunning()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim strAdminFTPServerName
|
|
dim objWMIConnection
|
|
dim objAdminFTPServer
|
|
|
|
IsAdminFTPServerExistAndRunning = false
|
|
|
|
strAdminFTPServerName = GetAdminFtpServerName()
|
|
' If could not read the admin FTP server name from the registry, return false
|
|
if strAdminFTPServerName = "" Then
|
|
Exit Function
|
|
End if
|
|
|
|
' If could not get admin FTP server from WMI, return false
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
|
|
|
|
if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
|
|
SA_TraceOut "inc_wsa", "IsAdminFTPServerExistAndRunning failed"
|
|
Exit Function
|
|
End If
|
|
|
|
' If admin FTP server is not running, return false
|
|
if objAdminFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
|
|
SA_TraceOut "inc_wsa", "AdminFTPServer is not running"
|
|
exit function
|
|
End if
|
|
|
|
IsAdminFTPServerExistAndRunning = true
|
|
|
|
End Function
|
|
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsAdminFTPServerExist
|
|
'Description: check whether AdminFTPServer exists
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function IsAdminFTPServerExist()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim strAdminFTPServerName
|
|
dim objWMIConnection
|
|
dim objAdminFTPServer
|
|
|
|
IsAdminFTPServerExist = false
|
|
|
|
strAdminFTPServerName = GetAdminFtpServerName()
|
|
' If could not read the admin FTP server name from the registry, return false
|
|
if strAdminFTPServerName = "" Then
|
|
Exit Function
|
|
End if
|
|
|
|
' If could not get admin FTP server from WMI, return false
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
|
|
|
|
if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
|
|
SA_TraceOut "inc_wsa", "IsAdminFTPServerExist fails"
|
|
Exit Function
|
|
End If
|
|
|
|
IsAdminFTPServerExist = true
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: StartAdminFTPServer
|
|
'Description: Start Admin FTP Server
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function StartAdminFTPServer()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim strAdminFTPServerName
|
|
dim objWMIConnection
|
|
dim objAdminFTPServer
|
|
|
|
StartAdminFTPServer = false
|
|
|
|
strAdminFTPServerName = GetAdminFtpServerName()
|
|
' If could not read the admin FTP server name from the registry, return false
|
|
if strAdminFTPServerName = "" Then
|
|
Exit Function
|
|
End if
|
|
|
|
' If could not get admin FTP server from WMI, return false
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
|
|
|
|
if objAdminFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
|
|
objAdminFTPServer.Start
|
|
Else
|
|
SA_TraceOut "inc_wsa", "Admin FTP Server is already started"
|
|
End if
|
|
|
|
if Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "StartAdminFTPServer failed: " & err.Description
|
|
Exit Function
|
|
End If
|
|
|
|
StartAdminFTPServer = true
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: StopAdminFTPServer
|
|
'Description: Stop Admin FTP Server
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function StopAdminFTPServer()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim strAdminFTPServerName
|
|
dim objWMIConnection
|
|
dim objAdminFTPServer
|
|
|
|
StopAdminFTPServer = false
|
|
|
|
strAdminFTPServerName = GetAdminFtpServerName()
|
|
' If could not read the admin FTP server name from the registry, return false
|
|
if strAdminFTPServerName = "" Then
|
|
Exit Function
|
|
End if
|
|
|
|
' If could not get admin FTP server from WMI, return false
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
|
|
|
|
if objAdminFTPServer.ServerState = CONST_FTPSERVER_RUNNING_STATE Then
|
|
objAdminFTPServer.Stop
|
|
Else
|
|
SA_TraceOut "inc_wsa", "Admin FTP Server is already stopped"
|
|
End if
|
|
|
|
if Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "StopAdminFTPServer failed"
|
|
Exit Function
|
|
End If
|
|
|
|
StopAdminFTPServer = true
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: StopDefaultFTPServer
|
|
'Description: Before starting admin FTP server, we need try to stop
|
|
' the default FTP server. If it cannot be stopped, or the
|
|
' the running FTP server is not the default FTP server (nor
|
|
' the admin FTP server), return false. Return true otherwise.
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function StopDefaultFTPServer()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
dim objWMIConnection
|
|
dim objFTPServers
|
|
dim instFTPServer
|
|
Const TIME_TO_SLEEP = 500 ' Sleep 1/2 second
|
|
|
|
StopDefaultFTPServer = false
|
|
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
Set objFTPServers = objWMIConnection.InstancesOf(GetIISWMIProviderClassName("IIsFtpServer"))
|
|
|
|
if Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Fail to stop Default FTP Server:" & err.number
|
|
exit function
|
|
end if
|
|
|
|
if objFTPServers.count = 0 then
|
|
' If there is not FTP site, return true
|
|
StopDefaultFTPServer = true
|
|
exit function
|
|
End If
|
|
|
|
for each instFTPServer in objFTPServers
|
|
|
|
'If running site is not default FTP site, return false since we don't want
|
|
'to stop any FTP site other than the default FTP site
|
|
if instFTPServer.ServerState = CONST_FTPSERVER_RUNNING_STATE And instFTPServer.Name <> "MSFTPSVC/1" Then
|
|
exit function
|
|
End If
|
|
|
|
'If it's default site, stop it if it's running
|
|
if instFTPServer.Name = "MSFTPSVC/1" Then
|
|
if instFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
|
|
StopDefaultFTPServer = true
|
|
Exit Function
|
|
Else
|
|
|
|
instFTPServer.Stop
|
|
|
|
Dim iCounter
|
|
|
|
For iCounter = 0 to 10 'loop for 10 times
|
|
|
|
'Requery the WMI for the state of the default FTP server
|
|
Set instFTPServer = objWMIConnection.Get("IIsFtpServer.Name='MSFTPSVC/1'")
|
|
|
|
If instFTPServer.ServerState = CONST_FTPSERVER_STOPPED_STATE Then
|
|
StopDefaultFTPServer = true
|
|
Exit Function
|
|
Else
|
|
call SA_Sleep(TIME_TO_SLEEP)
|
|
End If
|
|
Next
|
|
|
|
if Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa.asp", "Failed to stop default FTP site"
|
|
Exit Function
|
|
End If
|
|
|
|
StopDefaultFTPServer = true
|
|
Exit Function
|
|
|
|
End If
|
|
End If
|
|
|
|
Next
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: CreateAdminFTPServer
|
|
'Description: Create FTP server for Updating Website Content and save
|
|
' the server name to the registry
|
|
'Input Variables: None
|
|
'Output Variables: none
|
|
'Returns: true/false
|
|
'--------------------------------------------------------------------------
|
|
Function CreateAdminFTPServer()
|
|
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strName
|
|
Dim strRoot
|
|
Dim strPort
|
|
Dim objWMIConnection
|
|
Dim Bindings
|
|
Dim objFTPService
|
|
Dim strSiteObjPath
|
|
Dim strSitePath
|
|
Dim objPath
|
|
Dim objSetting
|
|
Dim objSysDrive
|
|
Dim strSysDrive
|
|
|
|
CreateAdminFTPServer = false
|
|
|
|
'Get FTP site root dir
|
|
Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
|
|
Call GetFTPSiteRootVal(strRoot)
|
|
|
|
'If the root dir does not exist, create it
|
|
If objSysDrive.FolderExists(strRoot)=false Then
|
|
call CreateSitePath(objSysDrive, strRoot)
|
|
End If
|
|
|
|
strName = "Web Site Content"
|
|
strPort = "21"
|
|
|
|
set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
|
|
Bindings = Array(0)
|
|
Set Bindings(0) = objWMIConnection.get("ServerBinding").SpawnInstance_()
|
|
Bindings(0).IP = "" 'all unsigned
|
|
Bindings(0).Port = strPort
|
|
|
|
'Create and start the admin FTP site
|
|
Set objFTPService = objWMIConnection.Get("IIsFtpService='MSFTPSVC'")
|
|
strSiteObjPath = objFTPService.CreateNewSite(strName, Bindings, strRoot)
|
|
|
|
If err.number <> 0 Then
|
|
sa_traceout "inc_wsa", "Failed to create admin FTP site " & err.Description
|
|
Exit Function
|
|
End If
|
|
|
|
' Parse site ID out of WMI object path
|
|
Set objPath = CreateObject("WbemScripting.SWbemObjectPath")
|
|
objPath.Path = strSiteObjPath
|
|
strSitePath = objPath.Keys.Item("")
|
|
|
|
' Set ftp virtual directory properties
|
|
Set objSetting = objWMIConnection.Get("IIsFtpServerSetting.Name='" & strSitePath & "'")
|
|
|
|
objSetting.AllowAnonymous = false
|
|
objSetting.AccessRead = true
|
|
objSetting.AccessWrite = false
|
|
objSetting.UserIsolationMode = 0 'not using the user isolation mode
|
|
objSetting.Put_()
|
|
|
|
'Save the admin FTP server name to registry
|
|
call SetAdminFTPServerName(strSitePath)
|
|
|
|
If err.number <> 0 Then
|
|
sa_traceout "inc_wsa", "Failed to create admin FTP site " & err.Description
|
|
Exit Function
|
|
End If
|
|
|
|
CreateAdminFTPServer = true
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetWebSiteRootVal
|
|
'Description: gets the web site root dir
|
|
'Input Variables: None
|
|
'Output Variables: strWebRootDir
|
|
'Returns: error num
|
|
'--------------------------------------------------------------------------
|
|
Function GetWebSiteRootVal(ByRef strWebRootDir)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim IRC 'holds return value
|
|
Dim objGetHandle 'holds regconnection value
|
|
|
|
set objGetHandle = RegConnection()
|
|
|
|
IRC = ""
|
|
IRC = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_WEBSITEROOT_REGVAL,CONST_STRING)
|
|
If Err.number <> 0 then
|
|
GetWebSiteRootVal = Err.number
|
|
SA_TraceOut "inc_wsa", "Failed to get the web root dir val from reg"
|
|
exit function
|
|
end if
|
|
|
|
set objGetHandle = nothing
|
|
|
|
if IRC = "" then
|
|
Dim objSysDrive,strSysDrive
|
|
Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
|
|
strSysDrive = objSysDrive.GetSpecialFolder(1).Drive ' 1 for systemfolder,0 for windows folder
|
|
strWebRootDir = strSysDrive & "\" & CONST_DEF_WEBROOT
|
|
else
|
|
strWebRootDir = IRC
|
|
end if
|
|
|
|
set objSysDrive = nothing
|
|
|
|
GetWebSiteRootVal = CONST_SUCCESS
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetFTPSiteRootVal
|
|
'Description: gets the FTP site roor dir
|
|
'Input Variables: None
|
|
'Output Variables: strWebRootDir
|
|
'Returns: error num
|
|
'--------------------------------------------------------------------------
|
|
Function GetFTPSiteRootVal(ByRef strWebRootDir)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim IRC 'holds return value
|
|
Dim objGetHandle 'holds registry connection
|
|
|
|
set objGetHandle = RegConnection()
|
|
|
|
IRC = ""
|
|
|
|
IRC = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_FTPSITEROOT_REGVAL,CONST_STRING)
|
|
If Err.number <> 0 then
|
|
' Ignore registry error and use default value.
|
|
IRC = ""
|
|
end if
|
|
|
|
set objGetHandle = nothing
|
|
|
|
if IRC = "" then
|
|
Dim objSysDrive,strSysDrive
|
|
|
|
Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
|
|
strSysDrive = objSysDrive.GetSpecialFolder(1).Drive ' 1 for systemfolder,0 for windows folder
|
|
strWebRootDir = strSysDrive & "\" & CONST_DEF_FTPROOT
|
|
|
|
set objSysDrive = nothing
|
|
else
|
|
strWebRootDir = IRC
|
|
end if
|
|
|
|
GetFTPSiteRootVal = CONST_SUCCESS
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :CreateSitePath
|
|
'Description :Create Directory path if not exists
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'----------------------------------------------------------------------------
|
|
Function CreateSitePath(objFso, strRootDir)
|
|
on error resume next
|
|
Err.Clear
|
|
|
|
Dim strIndx 'holds index value
|
|
Dim strDriveName 'holds drive name
|
|
Dim strDirStruct 'holds directory path
|
|
Dim strDirList
|
|
Dim strMain
|
|
Dim count
|
|
Dim strEachDir
|
|
Dim strCreateDir
|
|
Dim objDirList
|
|
Dim objDir
|
|
Dim objDriveType
|
|
|
|
strIndx = instr(1,strRootDir,":\")
|
|
strDriveName = left(strRootDir,strIndx)
|
|
strDirStruct = mid(strRootDir,strIndx+1)
|
|
strDirList = split(strDirStruct,"\")
|
|
|
|
if NOT objFso.DriveExists(ucase(strDriveName)) then
|
|
CreateSitePath = CONST_INVALID_DRIVE
|
|
exit function
|
|
end if
|
|
|
|
set objDriveType = objFso.GetDrive(strDriveName)
|
|
if objDriveType.FileSystem <> "NTFS" then
|
|
CreateSitePath = CONST_NOTNTFS_DRIVE
|
|
exit function
|
|
end if
|
|
|
|
for count = 0 to UBound(strDirList)
|
|
if count>=UBound(strDirList) then exit for
|
|
if count=0 then
|
|
strMain = strDriveName & "\" & strDirList(count+1)
|
|
if objFso.FolderExists(strMain)=false then
|
|
objFso.CreateFolder(strMain)
|
|
if err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "CreateSitePath:Failed to create dir " & "(" & Hex(Err.Number) & ")" & Err.Description
|
|
CreateSitePath = CONST_FAILED_TOCREATE_DIR
|
|
Exit Function
|
|
end if
|
|
end if
|
|
else
|
|
strEachDir = strEachDir & "\" & strDirList(count+1)
|
|
strCreateDir = strMain & strEachDir
|
|
if objFso.FolderExists(strCreateDir)=false then
|
|
objFso.CreateFolder(strCreateDir)
|
|
if err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "CreateSitePath: Failed to create directory " & "(" & Hex(Err.Number) & ")" & Err.Description
|
|
CreateSitePath = CONST_FAILED_TOCREATE_DIR
|
|
Exit Function
|
|
end if
|
|
end if
|
|
end if
|
|
next
|
|
|
|
CreateSitePath = CONST_SUCCESS
|
|
end function
|
|
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :DelegateOuToSiteAdmin
|
|
'Description :Delegate Permissions to Site-Identifier_Admins group
|
|
'Input Variables :strOu, strTrustee
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'----------------------------------------------------------------------------
|
|
Function DelegateOuToSiteAdmin(strOu, strTrustee)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strDn 'holds query value
|
|
Dim oRootDSE 'holds root value
|
|
Dim oDelegationOU
|
|
Dim oSecDescriptor
|
|
Dim oAcl
|
|
|
|
DelegateOuToSiteAdmin = FALSE
|
|
|
|
Set oRootDSE = GetObject("LDAP://RootDSE")
|
|
|
|
strDn = "ou=" & strOu & ",ou=WebSites," & oRootDSE.Get("DefaultNamingContext")
|
|
|
|
SA_TraceOut "inc_wsa", "strDn=" & strDn
|
|
|
|
' Get the security descriptor from the object
|
|
Set oDelegationOU = GetObject("LDAP://" & strDN)
|
|
|
|
Set oSecDescriptor = oDelegationOU.Get("ntSecurityDescriptor")
|
|
Set oAcl = oSecDescriptor.DiscretionaryAcl
|
|
|
|
'Give ability to read this object
|
|
' Grant a Read permission
|
|
' Allow Ace
|
|
' Apply to this object only
|
|
' ObjectType is not present
|
|
' No specific class
|
|
' No children will inherit
|
|
|
|
if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_READ, ADS_ACETYPE_ACCESS_ALLOWED, 0, 0, "", "" ) then
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
end if
|
|
|
|
'Give ability to create and delete users
|
|
' Allow create and delete right
|
|
' Allow object ace, This applies to this object and children
|
|
' ObjectType is present
|
|
' Applies to User object
|
|
' No children will inherit
|
|
if NOT AddAceToAcl (oAcl, strTrustee, ADS_RIGHT_DS_CREATE_CHILD OR ADS_RIGHT_DS_DELETE_CHILD, _
|
|
ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, ADS_ACEFLAG_INHERIT_ACE, _
|
|
ADS_FLAG_OBJECT_TYPE_PRESENT, USERGUID, "" ) then
|
|
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
|
|
end if
|
|
|
|
'Give full control over user objects
|
|
' Grant full control
|
|
' Allow Ace for an object
|
|
' This should be applied only to children, not to this object
|
|
' ObjectType is present
|
|
' Applies to User class
|
|
' No children will inherit
|
|
|
|
if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_ALL, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, _
|
|
ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE, _
|
|
ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, "", USERGUID ) then
|
|
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
|
|
end if
|
|
|
|
'Give ablity to read this OU
|
|
' Grant a Read
|
|
' Allow Ace
|
|
' Apply to this object only
|
|
' ObjectType is present
|
|
' This applies to the OU class
|
|
' No children will inherit
|
|
if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_READ, ADS_ACETYPE_ACCESS_ALLOWED, _
|
|
0, ADS_FLAG_OBJECT_TYPE_PRESENT, OUGUID, "" ) then
|
|
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
|
|
end if
|
|
|
|
'Give ability to create and delete group objects
|
|
' Allow create and delete right
|
|
' Allow object ace
|
|
' This applies to this object only
|
|
' ObjectType is present
|
|
' Applies to group object
|
|
' No children will inherit an objectAce
|
|
|
|
if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_DS_CREATE_CHILD OR ADS_RIGHT_DS_DELETE_CHILD, _
|
|
ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, ADS_ACEFLAG_INHERIT_ACE, _
|
|
ADS_FLAG_OBJECT_TYPE_PRESENT, GROUPGUID, "" ) then
|
|
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
|
|
end if
|
|
|
|
'Give full control to group objects
|
|
' Grant full control
|
|
' Allow Ace for an object
|
|
' This should be applied only to children, not to this object
|
|
' ObjectType is present
|
|
' Applies to group object
|
|
' No children will inherit an objectAce
|
|
|
|
if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_ALL, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, _
|
|
ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE, _
|
|
ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, "", GROUPGUID ) then
|
|
|
|
SA_TraceOut "inc_wsa", "AddAceToAcl failed "
|
|
exit function
|
|
|
|
end if
|
|
|
|
|
|
'Commit all of the changes to the Active Directory
|
|
|
|
oSecDescriptor.DiscretionaryAcl = oAcl
|
|
oDelegationOU.Put "ntSecurityDescriptor", oSecDescriptor
|
|
oDelegationOU.SetInfo
|
|
if Err.Number <> 0 then
|
|
Exit Function
|
|
end if
|
|
|
|
DelegateOuToSiteAdmin = TRUE
|
|
|
|
End Function
|
|
|
|
|
|
|
|
'=========================================================================================================================
|
|
' The AddAceToAcl function will create a new Access control entry. It will set the trustee to the global trustee variable
|
|
' passed into the script. The other attibutes of the ACE are determined by the parameters. The ACE is added to the
|
|
' global oACL variable.
|
|
'=========================================================================================================================
|
|
Function AddAceToAcl(oAcl, strTrustee, iAccessMask, iAceType, iAceFlags, iFlags, strObjectGUID, strInheritGUID)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim oAce 'As IADsAccessControlEntry
|
|
|
|
AddAceToAcl = FALSE
|
|
|
|
set oAce = CreateObject("AccessControlEntry")
|
|
|
|
if Err.Number <> 0 then
|
|
SA_TraceOut "inc_wsa", "CreateObject AccessControlEntry failed " & "(" & Hex(Err.Number) & ")"
|
|
Exit Function
|
|
end if
|
|
|
|
oAce.Trustee = strTrustee
|
|
oAce.AccessMask = iAccessMask
|
|
oAce.AceType = iAceType
|
|
oAce.Flags = iFlags
|
|
oAce.AceFlags = iAceFlags
|
|
If Len(strObjectGUID) > 0 then
|
|
oAce.ObjectType = strObjectGUID
|
|
End If
|
|
If Len(strInheritGUID) > 0 then
|
|
oAce.InheritedObjectType = strInheritGUID
|
|
End If
|
|
|
|
oACL.AddAce oAce
|
|
if Err.Number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Add ace to acl failed " & "(" & Hex(Err.Number) & ")"
|
|
Exit Function
|
|
end if
|
|
|
|
AddAceToAcl = TRUE
|
|
Set oAce = nothing
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :GetNonInheritedSites
|
|
'Description :Gets all sites that are not Inheriting settings from the master
|
|
'Input Variables :objService,strClassName,strMasterClassName,arrProp
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function GetNonInheritedSites(objService,strClassName,strMasterClassName,arrProp)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strQuery 'holds query string
|
|
Dim objInstances 'holds instance values
|
|
Dim objInst
|
|
Dim count
|
|
Dim strPropCollection 'holds prop collection
|
|
Dim arrMasterPropVal
|
|
Dim strTemp
|
|
Dim arrWebSites 'holds array of web sites
|
|
Dim strManagedSites 'holds managed websites value
|
|
Dim managedCount 'holds managed count value
|
|
|
|
redim arrMasterPropVal(ubound(arrProp))
|
|
|
|
if strClassName = GetIISWMIProviderClassName("IIS_FTPServerSetting") then
|
|
arrWebSites = getManagedFTPSites
|
|
else
|
|
arrWebSites = getManagedWebSites
|
|
end if
|
|
|
|
if arrWebSites = 0 then
|
|
GetNonInheritedSites = 0
|
|
exit function
|
|
end if
|
|
|
|
for count =0 to UBound(arrProp)
|
|
strPropCollection = strPropCollection & arrProp(count) & ","
|
|
next
|
|
|
|
strPropCollection = left(strPropCollection,len(strPropCollection)-1)
|
|
|
|
strQuery = "select " & strPropCollection & " from " & strMasterClassName
|
|
|
|
set objInstances = objService.ExecQuery(strQuery)
|
|
|
|
for each objInst in objInstances
|
|
|
|
for count = 0 to UBound(arrProp)
|
|
if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
|
|
'if the property type is boolean, we cannot convert it to a string directly
|
|
'string conversion of vbscript is browser preference dependent
|
|
'we need to convert boolean to english strings(true/false), otherwise wmi query fails
|
|
if objInst.Properties_.Item(arrProp(count)) then
|
|
arrMasterPropVal(count) = "'" & "True" & "'"
|
|
else
|
|
arrMasterPropVal(count) = "'" & "False" & "'"
|
|
end if
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
|
|
arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
|
|
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
|
|
arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
|
|
|
|
end if
|
|
|
|
next
|
|
|
|
next
|
|
|
|
'Release objects
|
|
set objInstances = nothing
|
|
|
|
for count = 0 to UBound(arrProp)
|
|
strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
|
|
next
|
|
|
|
strTemp = left(strTemp,len(strTemp)-3)
|
|
|
|
strTemp = " ( " & strTemp & " ) "
|
|
|
|
for managedCount = 0 to UBound(arrWebSites)
|
|
if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
|
|
else
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
|
|
end if
|
|
next
|
|
strManagedSites = left(strManagedSites,len(strManagedSites)-3)
|
|
strQuery = "select * from " & strClassName & " where " & strManagedSites
|
|
|
|
set objInstances = objService.ExecQuery(strQuery)
|
|
set GetNonInheritedSites = objInstances
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getManagedWebSites
|
|
'Description: Returns an array of Managed web sites from reg loc
|
|
' WebServerAppliance\ManagedWebSites
|
|
'Input Variables: None
|
|
'Output Variables:
|
|
'Returns: returns an array
|
|
'Global Variables: None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function getManagedWebSites()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim Child 'hold child object
|
|
Dim count
|
|
Dim arrWebSites() 'hold array of websites
|
|
Dim objService 'hold WMI Connection object
|
|
Dim siteCollection 'hold site collection
|
|
Dim strQuery 'hold query string
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
|
|
'form the query
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID = ServerComment"
|
|
|
|
Set siteCollection = objService.ExecQuery(strQuery)',"WQL",48)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_ServeFailurepage L_INFORMATION_ERRORMESSAGE
|
|
getObjSiteCollection = false
|
|
exit function
|
|
End If
|
|
|
|
if siteCollection.count = 0 then
|
|
getManagedWebSites = 0
|
|
exit function
|
|
end if
|
|
|
|
count =0
|
|
For Each Child In siteCollection
|
|
redim preserve arrWebSites(count)
|
|
arrWebSites(count) = Child.Name
|
|
count = count + 1
|
|
Next
|
|
|
|
'use the script managed_site.vbs here
|
|
getManagedWebSites = arrWebSites
|
|
|
|
'Release the object
|
|
set siteCollection = nothing
|
|
set objService = nothing
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getManagedFTPSites
|
|
'Description: Returns an array of Managed FTP sites from reg loc
|
|
' WebServerAppliance\ManagedWebSites
|
|
'Input Variables: None
|
|
'Output Variables:
|
|
'Returns: returns an array
|
|
'Global Variables: None
|
|
'If object fails dislays the error message
|
|
'-------------------------------------------------------------------------
|
|
Function getManagedFTPSites()
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim Child
|
|
Dim count
|
|
Dim arrFTPSites() 'holds array of FTP sites
|
|
Dim objService
|
|
Dim siteCollection
|
|
Dim strQuery
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
|
|
'form the query
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_FTPServerSetting")
|
|
Set siteCollection = objService.ExecQuery(strQuery)
|
|
If Err.number <> 0 Then
|
|
SA_ServeFailurepage L_INFORMATION_ERRORMESSAGE
|
|
getObjSiteCollection = false
|
|
exit function
|
|
End If
|
|
|
|
if siteCollection.count = 0 then
|
|
getManagedFTPSites = 0
|
|
exit function
|
|
end if
|
|
|
|
count =0
|
|
For Each Child In siteCollection
|
|
redim preserve arrFTPSites(count)
|
|
arrFTPSites(count) = Child.Name
|
|
count = count + 1
|
|
Next
|
|
|
|
getManagedFTPSites = arrFTPSites
|
|
|
|
'Release objects
|
|
set objService = nothing
|
|
set siteCollection = nothing
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :SetDaclForFtpDir
|
|
'Description :Sets DACL entries for FTP directory
|
|
'Input Variables :bAllowFTP, strDir, AdminName, AnonName, FTPName, strDirRoot
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function SetDaclForFtpDir(bAllowFTP, strDir, strAdminName, strAnonName, strFTPName, strDirRoot)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
SetDaclForFtpDir = FALSE
|
|
|
|
Dim objService 'holds WMI Connection
|
|
Dim strTemp
|
|
Dim objSecSetting
|
|
Dim objSecDescriptor 'holds Security descriptor value
|
|
Dim strPath 'holds path
|
|
Dim objDACL
|
|
Dim objSiteAdminAce 'holds site admin ace
|
|
Dim objAdminAce 'holds admin ace
|
|
Dim objAnonAce 'holds anon ace
|
|
Dim objAuthAce 'holds auth ace
|
|
Dim objFTPAce 'hold FTP ace
|
|
Dim retval 'holds return value
|
|
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
objService.security_.impersonationlevel = 3
|
|
|
|
'get the sec seting for file
|
|
strPath = "Win32_LogicalFileSecuritySetting.Path='" & strDir & "'"
|
|
set objSecSetting = objService.Get(strPath)
|
|
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get Sec object for dir " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
'get the ace's for all req users
|
|
|
|
if NOT GetUserAce(objService, strAdminName , strDirRoot, CONST_FULLCONROL, objSiteAdminAce ) then
|
|
SA_TraceOut "inc_wsa", "Failed to get ACE object for Site Admin user " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
if NOT GetUserAce(objService, SA_GetAccount_Administrator() , strDirRoot, CONST_FULLCONROL, objAdminAce ) then
|
|
SA_TraceOut "inc_wsa", "Failed to get ACE object for Admin user " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
if NOT GetUserAce(objService, strAnonName, strDirRoot, CONST_MODIFYDELTE, objAnonAce ) then
|
|
SA_TraceOut "inc_wsa", "Failed to get ACE object for Anon user " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
if bAllowFTP = "true" then
|
|
if NOT GetUserAce(objService, strFTPName, strDirRoot, CONST_MODIFYDELTE, objFTPAce ) then
|
|
SA_TraceOut "inc_wsa", "Failed to get ACE object for Anon user " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
end if
|
|
|
|
Set objSecDescriptor = objService.Get("Win32_SecurityDescriptor").SpawnInstance_()
|
|
if Err.Number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get create the Win32_SecurityDescriptor object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objSecDescriptor.Properties_.Item("DACL") = Array()
|
|
Set objDACL = objSecDescriptor.Properties_.Item("DACL")
|
|
|
|
objDACL.Value(0) = objSiteAdminAce
|
|
objDACL.Value(1) = objAdminAce
|
|
objDACL.Value(2) = objAnonAce
|
|
|
|
if bAllowFTP = "true" then
|
|
objDACL.Value(3) = objFTPAce
|
|
end if
|
|
|
|
objSecDescriptor.Properties_.Item("ControlFlags") = 32772
|
|
Set objSecDescriptor.Properties_.Item("Owner") = objSiteAdminAce.Trustee
|
|
|
|
Err.Clear
|
|
|
|
retval = objSecSetting.SetSecurityDescriptor( objSecDescriptor )
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "site_new", "Failed to set the Security Descriptor for Root dir " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
SA_TraceOut "site_new", "In SetDaclForFtpDir success"
|
|
|
|
SetDaclForFtpDir = TRUE
|
|
|
|
'Release the objects
|
|
set objService = nothing
|
|
set objAdminAce = nothing
|
|
set objAnonAce = nothing
|
|
set objAuthAce = nothing
|
|
set objSecSetting = nothing
|
|
set objSecDescriptor = nothing
|
|
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :RemoveDaclEntry
|
|
'Description :Removes the DACL entry
|
|
'Input Variables :strDir, strDirRoot
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function RemoveDaclEntry(strDir, strDirRoot)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
RemoveDaclEntry = FALSE
|
|
|
|
Dim objService
|
|
Dim objSecSetting 'hold sec setting value
|
|
Dim objSecDescriptor 'hold security descriptor value
|
|
Dim strPath
|
|
Dim objDACL
|
|
Dim objSiteAdminAce 'hold admin ace
|
|
Dim retval 'holds return value
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
objService.security_.impersonationlevel = 3
|
|
|
|
'get the sec setting for file
|
|
strPath = "Win32_LogicalFileSecuritySetting.Path='" & strDir & "'"
|
|
set objSecSetting = objService.Get(strPath)
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get Sec object for dir " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
'get the ace's for all req users
|
|
|
|
if NOT GetUserAce(objService, SA_GetAccount_Administrators() , strDirRoot, CONST_FULLCONROL, objSiteAdminAce ) then
|
|
SA_TraceOut "inc_wsa", "Failed to get ACE object for Administrators " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
|
|
Set objSecDescriptor = objService.Get("Win32_SecurityDescriptor").SpawnInstance_()
|
|
if Err.Number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get create the Win32_SecurityDescriptor object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objSecDescriptor.Properties_.Item("DACL") = Array()
|
|
Set objDACL = objSecDescriptor.Properties_.Item("DACL")
|
|
|
|
objDACL.Value(0) = objSiteAdminAce
|
|
|
|
objSecDescriptor.Properties_.Item("ControlFlags") = 32772
|
|
Set objSecDescriptor.Properties_.Item("Owner") = objSiteAdminAce.Trustee
|
|
|
|
Err.Clear
|
|
|
|
retval = objSecSetting.SetSecurityDescriptor( objSecDescriptor )
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "site_Delete", "Failed to set the Security Descriptor for Root dir " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
SA_TraceOut "site_Delete", "In RemoveDaclEntry success"
|
|
|
|
RemoveDaclEntry = TRUE
|
|
|
|
'Release the objects
|
|
set objService = nothing
|
|
set objSecSetting = nothing
|
|
set objSecDescriptor = nothing
|
|
set objSiteAdminAce = nothing
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetExecPerms
|
|
'Description: Sets Execute permissions for the web site
|
|
'Input Variables: objService, strSiteNum
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function SetExecPerms(ActiveFormat, objService, strSiteNum)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds objpath value
|
|
Dim objVirDir 'hold virtualdirectory path
|
|
|
|
SetExecPerms = FALSE
|
|
|
|
'set application protection
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
|
|
set objVirDir = objService.Get( strObjPath )
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
'call the method to set the application Read property
|
|
if ActiveFormat = 2 then
|
|
objVirDir.AccessExecute = TRUE
|
|
objVirDir.AccessScript = TRUE
|
|
elseif ActiveFormat = 1 then
|
|
objVirDir.AccessExecute = FALSE
|
|
objVirDir.AccessScript = TRUE
|
|
elseif ActiveFormat = 0 then
|
|
objVirDir.AccessExecute = FALSE
|
|
objVirDir.AccessScript = FALSE
|
|
end if
|
|
|
|
objVirDir.put_(WBEMFLAG)
|
|
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "Web_ExecutePerms", "Failed to set exec perms" & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
|
|
SetExecPerms = TRUE
|
|
|
|
'Release the object
|
|
set objVirDir = nothing
|
|
End Function
|
|
|
|
'------------------------------------------------------------------------------------
|
|
'Function name :GetNonInheritedIISSites
|
|
'Description :Gets all sites that are not Inheriting settings from the master
|
|
'Input Variables :objService,strClassName,strMasterClassName,arrProp
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------------------
|
|
Function GetNonInheritedIISSites(objService,strClassName,strMasterClassName,arrProp)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strQuery 'holds query value
|
|
Dim objInstances
|
|
Dim objInst
|
|
Dim count
|
|
Dim strPropCollection
|
|
Dim arrMasterPropVal
|
|
Dim strTemp
|
|
Dim arrWebSites()
|
|
Dim strManagedSites
|
|
Dim managedCount
|
|
Dim siteCollection
|
|
Dim Child
|
|
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID = ServerComment"
|
|
|
|
Set siteCollection = objService.ExecQuery(strQuery)
|
|
|
|
If Err.number <> 0 or siteCollection.count=0 Then
|
|
GetNonInheritedIISSites = 0
|
|
exit function
|
|
End If
|
|
|
|
count =0
|
|
For Each Child In siteCollection
|
|
redim preserve arrWebSites(count)
|
|
arrWebSites(count) = Child.Name
|
|
count = count + 1
|
|
Next
|
|
|
|
redim arrMasterPropVal(ubound(arrProp))
|
|
|
|
for count =0 to UBound(arrProp)
|
|
strPropCollection = strPropCollection & arrProp(count) & ","
|
|
next
|
|
|
|
strPropCollection = left(strPropCollection,len(strPropCollection)-1)
|
|
|
|
strQuery = "select " & strPropCollection & " from " & strMasterClassName
|
|
|
|
set objInstances = objService.ExecQuery(strQuery)
|
|
|
|
for each objInst in objInstances
|
|
|
|
for count = 0 to UBound(arrProp)
|
|
if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
|
|
'if the property type is boolean, we cannot convert it to a string directly
|
|
'string conversion of vbscript is browser preference dependent
|
|
'we need to convert boolean to english strings(true/false), otherwise wmi query fails
|
|
if objInst.Properties_.Item(arrProp(count)) then
|
|
arrMasterPropVal(count) = "'" & "True" & "'"
|
|
else
|
|
arrMasterPropVal(count) = "'" & "False" & "'"
|
|
end if
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
|
|
arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
|
|
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
|
|
arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
|
|
|
|
end if
|
|
|
|
next
|
|
|
|
next
|
|
|
|
'Release objects
|
|
set objInstances = nothing
|
|
|
|
for count = 0 to UBound(arrProp)
|
|
strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
|
|
next
|
|
|
|
strTemp = left(strTemp,len(strTemp)-3)
|
|
strTemp = " ( " & strTemp & " ) "
|
|
|
|
for managedCount = 0 to UBound(arrWebSites)
|
|
if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
|
|
else
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
|
|
end if
|
|
next
|
|
|
|
strManagedSites = left(strManagedSites,len(strManagedSites)-3)
|
|
strQuery = "select * from " & strClassName & " where " & strManagedSites
|
|
set objInstances = objService.ExecQuery(strQuery)
|
|
set GetNonInheritedIISSites = objInstances
|
|
End Function
|
|
|
|
'------------------------------------------------------------------------------------
|
|
'Function name :GetNonInheritedFTPSites
|
|
'Description :Gets all sites that are not Inheriting settings from the master
|
|
'Input Variables :objService,strClassName,strMasterClassName,arrProp
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------------------
|
|
Function GetNonInheritedFTPSites(objService,strClassName,strMasterClassName,arrProp)
|
|
On error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strQuery
|
|
Dim objInstances
|
|
Dim objInst
|
|
Dim count
|
|
Dim strPropCollection 'holds prop collection
|
|
Dim arrMasterPropVal
|
|
Dim strTemp
|
|
Dim arrWebSites() 'holds array websites collection
|
|
Dim strManagedSites 'holds managed webites collection
|
|
Dim managedCount
|
|
Dim siteCollection
|
|
Dim Child
|
|
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_FTPServerSetting")
|
|
|
|
Set siteCollection = objService.ExecQuery(strQuery)
|
|
|
|
If Err.number <> 0 or siteCollection.count=0 Then
|
|
GetNonInheritedFTPSites = 0
|
|
exit function
|
|
End If
|
|
|
|
count =0
|
|
For Each Child In siteCollection
|
|
redim preserve arrWebSites(count)
|
|
arrWebSites(count) = Child.Name
|
|
count = count + 1
|
|
Next
|
|
|
|
redim arrMasterPropVal(ubound(arrProp))
|
|
|
|
for count =0 to UBound(arrProp)
|
|
strPropCollection = strPropCollection & arrProp(count) & ","
|
|
next
|
|
|
|
strPropCollection = left(strPropCollection,len(strPropCollection)-1)
|
|
strQuery = "select " & strPropCollection & " from " & strMasterClassName
|
|
set objInstances = objService.ExecQuery(strQuery)
|
|
|
|
for each objInst in objInstances
|
|
for count = 0 to UBound(arrProp)
|
|
if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
|
|
'if the property type is boolean, we cannot convert it to a string directly
|
|
'string conversion of vbscript is browser preference dependent
|
|
'we need to convert boolean to english strings(true/false), otherwise wmi query fails
|
|
if objInst.Properties_.Item(arrProp(count)) then
|
|
arrMasterPropVal(count) = "'" & "True" & "'"
|
|
else
|
|
arrMasterPropVal(count) = "'" & "False" & "'"
|
|
end if
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
|
|
arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
|
|
elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
|
|
arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
|
|
end if
|
|
next
|
|
next
|
|
|
|
'Release objects
|
|
set objInstances = nothing
|
|
|
|
for count = 0 to UBound(arrProp)
|
|
' Must handle null values in the WMI master service object to prevent invalid
|
|
' queries from causing errors even when non-inherited sites existed.
|
|
if (not IsNull(arrMasterPropVal(count))) then
|
|
strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
|
|
else
|
|
strTemp = strTemp & arrProp(count) & " IS NOT NULL or "
|
|
end if
|
|
next
|
|
strTemp = left(strTemp,len(strTemp)-3)
|
|
strTemp = " ( " & strTemp & " ) "
|
|
for managedCount = 0 to UBound(arrWebSites)
|
|
if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
|
|
else
|
|
strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
|
|
end if
|
|
next
|
|
|
|
strManagedSites = left(strManagedSites,len(strManagedSites)-3)
|
|
strQuery = "select * from " & strClassName & " where " & strManagedSites
|
|
|
|
' "WQL" and 0 parameters used to get error information immediately rather than
|
|
' when first accessing the results.
|
|
set objInstances = objService.ExecQuery(strQuery, "WQL", 0)
|
|
set GetNonInheritedFTPSites = objInstances
|
|
End Function
|
|
|
|
'------------------------------------------------------------------------------------
|
|
'Function name :GetDomainName
|
|
'Description :Function to get the domain name
|
|
'Input Variables :none
|
|
'Output Variables :None
|
|
'Returns :String -domain name
|
|
'-------------------------------------------------------------------------------------
|
|
Function GetDomainName
|
|
Err.clear
|
|
On Error Resume Next
|
|
|
|
Dim objSystem
|
|
|
|
Set objSystem = CreateObject("WinntSystemInfo")
|
|
GetDomainName = objSystem.domainname
|
|
|
|
'Checking for the error condition
|
|
If Err.number <> 0 then
|
|
GetDomainName = ""
|
|
end IF
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :SetWebDefaultPage
|
|
'Description :set the default page of web
|
|
'Input Variables :strDefaultPage
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Function SetWebDefaultPage(objService,strDefaultPage,strSiteNum)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath
|
|
Dim objWebSite
|
|
|
|
SetWebDefaultPage = False
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
Set objWebSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "site_new", "Failed to get the IIs_WebServer Object with error " & strObjPath
|
|
Exit Function
|
|
End if
|
|
|
|
objWebSite.DefaultDoc = strDefaultPage
|
|
objWebSite.put_(WBEMFLAG)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to set default Page"
|
|
Set objWebSite = Nothing
|
|
Exit Function
|
|
End If
|
|
|
|
SetWebDefaultPage = True
|
|
Set objWebSite = Nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :GetWebDefaultPage
|
|
'Description :get the default page of web
|
|
'Input Variables :strDefaultPage
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Function GetWebDefaultPage(objService,strDefaultPage,strSiteNum)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath
|
|
Dim objWebSite
|
|
|
|
GetWebDefaultPage = ""
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
|
|
Set objWebSite = objService.Get(strObjPath)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "site_new", "Failed to get the IIs_WebServer Object with error " & strObjPath
|
|
Exit Function
|
|
End if
|
|
|
|
GetWebDefaultPage = objWebSite.DefaultDoc
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Failed to get default Page"
|
|
Set objWebSite = Nothing
|
|
Exit Function
|
|
End If
|
|
|
|
Set objWebSite = Nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :UpdateFrontPage
|
|
'Description :updates the frontpage extensions
|
|
'Input Variables :strSiteName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Function UpdateFrontPage(bUpdateFront, strSiteName, strUserName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
'
|
|
' Default return value is success (TRUE)
|
|
UpdateFrontPage = TRUE
|
|
|
|
if (bUpdateFront = TRUE OR Trim(UCase(bUpdateFront)) = "TRUE") then
|
|
|
|
UpdateFrontPage = InstallFrontPageWeb(strSiteName, strUserName)
|
|
|
|
elseif (bUpdateFront = FALSE OR Trim(UCase(bUpdateFront)) = "FALSE") then
|
|
|
|
UpdateFrontPage = UnInstallFrontPageWeb(strSiteName)
|
|
|
|
else
|
|
Call SA_TraceOut("INC_WSA", "Function UpdateFrontPage: Invalid argument bUpdateFront=(" & bUpdateFront & ")")
|
|
end if
|
|
|
|
End function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :GetBindings
|
|
'Description :Serves in Getting the data in the form of "ipaddress:tcpport:hostheader"
|
|
'Input Variables :TCP/IP,PORT,HOST HEADER
|
|
'Output Variables :None
|
|
'Returns :Bindings
|
|
'Global Variables :None
|
|
'----------------------------------------------------------------------------
|
|
function GetBindings (tempip, temptcp, temphost )
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
Dim retval ' To hold the return value
|
|
' if tcpport not specified set default to 80
|
|
if trim(temptcp)= "" then
|
|
temptcp = "80"
|
|
end if
|
|
|
|
' return in the form "ipaddress:tcpport:hostheader"
|
|
if isempty(tempip) = false then
|
|
retval = tempip & ":" & temptcp & ":"
|
|
else
|
|
retval = ":" & temptcp & ":"
|
|
end if
|
|
if isempty(temphost) = false then
|
|
retval = retval & temphost
|
|
end if
|
|
GetBindings = retval
|
|
end function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :GetWebAdministrtorRole
|
|
'Description :used to get the web adminitrator role
|
|
'Input Variables :TCP/IP,PORT,HOST HEADER
|
|
'Output Variables :None
|
|
'Returns :"Domain user" or "localuser"
|
|
'Global Variables :None
|
|
'----------------------------------------------------------------------------
|
|
|
|
Function GetWebAdministrtorRole(objService, strSiteNum, ByRef strAdminName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strQuery
|
|
Dim objAdminColection
|
|
Dim inst
|
|
Dim strAdminRole
|
|
Dim arrField
|
|
Dim strSysName
|
|
Dim strDirectoryRoot
|
|
|
|
GetWebAdministrtorRole = ""
|
|
strAdminName = ""
|
|
|
|
strQuery = "select * from " & GetIISWMIProviderClassName("IIs_ACE") & " where name = "& _
|
|
chr(34)&strSiteNum&chr(34)
|
|
|
|
Set objAdminColection = objService.ExecQuery(strQuery)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "Failed to get web Administrator"
|
|
exit Function
|
|
End if
|
|
|
|
For each inst in objAdminColection
|
|
If inst.AccessMask = 11 Then
|
|
strAdminName = inst.Trustee
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If strAdminName = "" Then
|
|
Exit Function
|
|
End If
|
|
|
|
arrField = split(strAdminName,"\")
|
|
|
|
If ubound(arrField) <> 1 Then
|
|
Exit Function
|
|
End If
|
|
|
|
strAdminRole = ucase(arrField(0))
|
|
|
|
Call GetDomainRole(strDirectoryRoot, strSysName)
|
|
|
|
If strAdminRole = ucase(strSysName) Then
|
|
GetWebAdministrtorRole = "Local User"
|
|
Else
|
|
GetWebAdministrtorRole = "Domain User"
|
|
End If
|
|
|
|
Set objAdminColection = nothing
|
|
Set inst = nothing
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :CreateVirFTPSite
|
|
'Description :Serves in create virtual ftp site
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean (True if new site is created else returns False)
|
|
'Global Variables :None
|
|
'Functions Used :
|
|
'----------------------------------------------------------------------------
|
|
Function CreateVirFTPSite(objService, user, path, bRead, bWrite, bLog)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objVirFTP
|
|
Dim strUser
|
|
|
|
CreateVirFTPSite = False
|
|
Set objVirFTP = objService.Get(GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting")).SpawnInstance_
|
|
If Err.number <> 0 Then
|
|
Call SA_TraceOut("inc_wsa", "Failed to get new Instance of "& _
|
|
"IIs_FtpVirtualDirSetting " & "(" & Hex(Err.Number) & ")")
|
|
Exit Function
|
|
End If
|
|
|
|
'
|
|
' objVirFTP.put_(WBEMFLAG) will silently fail (Err variable will not be set correctly)
|
|
' if we use a user name that has the form <DomainName>\<UserName>.
|
|
' So we remove the <DomainName>, if it is part of the user name
|
|
'
|
|
If ( InStr(F_strAdminName, "\") <> 0 ) Then
|
|
Dim arrId
|
|
|
|
arrId = split(F_strAdminName,"\")
|
|
strUser = arrId(1)
|
|
Else
|
|
strUser = F_strAdminName
|
|
End If
|
|
|
|
|
|
objVirFTP.Name = GetAdminFTPServerName() & "/ROOT/"& strUser
|
|
objVirFTP.Path = path
|
|
objVirFTP.AccessRead = bRead
|
|
objVirFTP.AccessWrite = bWrite
|
|
objVirFTP.DontLog = NOT bLog
|
|
|
|
objVirFTP.put_(WBEMFLAG)
|
|
|
|
If Err.number <> 0 Then
|
|
Call SA_TraceOut("inc_wsa", "Failed to Create FTP site "& _
|
|
"(" & Hex(Err.Number) & ")")
|
|
Exit Function
|
|
End If
|
|
|
|
Set objVirFTP = Nothing
|
|
CreateVirFTPSite = True
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :DeleteVirFTPSite
|
|
'Description :Serves in delete virtual ftp site
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean (True if new site is created else returns False)
|
|
'Global Variables :None
|
|
'Functions Used :
|
|
'----------------------------------------------------------------------------
|
|
Function DeleteVirFTPSite(objService, user)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds site collection
|
|
Dim objVirFTPSite 'holds instance of the site
|
|
|
|
DeleteVirFTPSite = False
|
|
|
|
strObjPath = GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & ".Name=" & chr(34) & GetAdminFTPServerName() & "/ROOT/"&user & chr(34)
|
|
Set objVirFTPSite = objService.Get(strObjPath)
|
|
If Err.Number <> 0 Then
|
|
Call SA_TraceOut("inc_wsa","Unable to get the virtual ftp site object ")
|
|
Exit Function
|
|
End If
|
|
|
|
'delete the object
|
|
objVirFTPSite.Delete_
|
|
if Err.Number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Unable to delete the virtual ftp site "
|
|
Exit Function
|
|
End If
|
|
|
|
DeleteVirFTPSite = True
|
|
|
|
'Release the object
|
|
set objVirFTPSite = nothing
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :IsUserVirFTPInstalled
|
|
'Description :Serves in determin that user vir FTP Installed
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean (True if new site is created else returns False)
|
|
'Global Variables :None
|
|
'Functions Used :
|
|
'----------------------------------------------------------------------------
|
|
Function IsUserVirFTPInstalled(objService, user)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strQuery 'holds query string
|
|
Dim objVirFTPSiteCollect 'holds site collection
|
|
|
|
IsUserVirFTPInstalled = False
|
|
|
|
|
|
'strQuery = "Select * from " & GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & " where Name="&chr(34)&"MSFTPSVC/1/ROOT/"&user&chr(34)
|
|
strQuery = "Select * from " & GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & " where Name="&chr(34)& GetAdminFTPServerName() & "/ROOT/"&user&chr(34)
|
|
Set objVirFTPSiteCollect = objService.ExecQuery(strQuery)
|
|
|
|
If Err.Number <> 0 or objVirFTPSiteCollect.count=0 Then
|
|
set objVirFTPSiteCollect = nothing
|
|
Exit Function
|
|
End If
|
|
|
|
IsUserVirFTPInstalled = True
|
|
|
|
'Release the object
|
|
set objVirFTPSiteCollect = nothing
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :IsFTPServiceInstalled
|
|
'Description :Serves in wheather the FTP service be installed
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean (True if new site is created else returns False)
|
|
'Global Variables :None
|
|
'Functions Used :
|
|
'----------------------------------------------------------------------------
|
|
Function IsFTPServiceInstalled(objService)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim ObjCollection
|
|
Dim objInst
|
|
|
|
IsFTPServiceInstalled = False
|
|
|
|
Set ObjCollection = objService.Instancesof(GetIISWMIProviderClassName("IIs_FtpServiceSetting"))
|
|
If Err.number <>0 then
|
|
Call SA_TRACEOUT("IsFTPServiceInstalled","Failed to get service")
|
|
Exit Function
|
|
end if
|
|
|
|
For Each objInst In ObjCollection
|
|
If ucase(objService.name) = "objInst" Then
|
|
IsFTPServiceInstalled = True
|
|
Exit Function
|
|
End If
|
|
Next
|
|
|
|
Set ObjCollection = Nothing
|
|
Set objInst = Nothing
|
|
End Function
|
|
|
|
'----------------------------------------------------------------------------
|
|
'Function name :IsValidWebPort(strSiteID,strPort)
|
|
'Description :Used to determin wheather the web port is valid
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean (True for valid web port)
|
|
'Global Variables :None
|
|
'Functions Used :
|
|
'----------------------------------------------------------------------------
|
|
Function IsValidWebPort(strSiteID, strPort)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objService
|
|
Dim objCollection
|
|
Dim objSite
|
|
Dim arrBindings
|
|
Dim strTmp
|
|
|
|
|
|
IsValidWebPort = True
|
|
If strPort = "" Then
|
|
strPort = "80"
|
|
End If
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
If Err.Number <> 0 Then
|
|
Call SA_TRACEOUT("inc_wsa","Faild to connect WMI object")
|
|
End If
|
|
Set ObjCollection = objService.Instancesof(GetIISWMIProviderClassName("IIs_WebServerSetting"))
|
|
For Each objSite In ObjCollection
|
|
|
|
'Check to see if iis6.0 wmi provider is intalled
|
|
If IsIIS60Installed Then
|
|
strTmp = objSite.ServerBindings(0).Port
|
|
Else
|
|
|
|
arrBindings = Split(objSite.ServerBindings(0),":")
|
|
strTmp = arrBindings(1)
|
|
End If
|
|
|
|
If strPort = strTmp Then
|
|
|
|
|
|
Call SA_TRACEOUT("IsValidWebPort", "strSiteID="&strSiteID)
|
|
Call SA_TRACEOUT("IsValidWebPort", "objSite.ServerID="&objSite.ServerID)
|
|
If CStr(objSite.ServerID) <> strSiteID Then
|
|
IsValidWebPort = False
|
|
Exit Function
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
Set objSite = Nothing
|
|
Set ObjCollection = Nothing
|
|
Set objService = Nothing
|
|
|
|
End Function
|
|
|
|
'
|
|
' The following two function is very useful to set the permissiton to
|
|
' directory, when set the web root permission, we call these function
|
|
'
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetUserAce
|
|
'Description: Get the ACLs of the user
|
|
'Input Variables: objService, strUserName, strDomain, nAccessMask, ByRef objACE
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function GetUserAce(objService, strUserName, strDomain, nAccessMask, ByRef objACE)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query string
|
|
Dim objAcct 'holds query result
|
|
Dim objSID 'holds security identifier
|
|
Dim objTrustee 'holds trustee value
|
|
|
|
GetUserAce = FALSE
|
|
|
|
strObjPath = "Win32_UserAccount.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strUserName & chr(34)
|
|
|
|
set objAcct = objService.Get(strObjPath)
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get Win32_UserAccount Object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
set objSID = objService.Get("Win32_SID.SID='" & objAcct.SID & "'")
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get Win32_SID Object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
set objTrustee = objService.Get("Win32_Trustee").SpawnInstance_
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get new Instance of Win32_Trustee " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objTrustee.Name = strUserName
|
|
objTrustee.Domain = strDomain
|
|
objTrustee.SID = objSID.BinaryRepresentation
|
|
objTrustee.SIDString = objSID.SID
|
|
objTrustee.SidLength = objSID.SidLength
|
|
set objACE = objService.Get("Win32_ACE").SpawnInstance_
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to Create Win32_Ace Object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objACE.AccessMask = nAccessMask
|
|
objACE.Aceflags = 3
|
|
objACE.AceType = 0
|
|
objACE.Trustee = objTrustee
|
|
SA_TraceOut "inc_wsa", "In GetUserAce function success"
|
|
GetUserAce = TRUE
|
|
|
|
'Release objects
|
|
set objAcct = nothing
|
|
set objSID = nothing
|
|
set objTrustee = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetGroupAce
|
|
'Description: Get the ACLs of the group
|
|
'Input Variables: objService, strGroupName, strDomain, nAccessMask, ByRef objACE
|
|
'Returns: boolean
|
|
'--------------------------------------------------------------------------
|
|
Function GetGroupAce(objService, strGroupName, strDomain, nAccessMask, ByRef objACE)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim strObjPath 'holds query string
|
|
Dim objAcct 'holds query result
|
|
Dim objSID 'holds security identifier
|
|
Dim objTrustee 'holds trustee value
|
|
|
|
GetGroupAce = FALSE
|
|
|
|
strObjPath = "Win32_Group.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strGroupName & chr(34)
|
|
|
|
set objAcct = objService.Get(strObjPath)
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut("inc_wsa", "Get Win32_Group failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
|
|
Call SA_TraceOut("inc_wsa", "-->Object path: " + CStr(strObjPath) )
|
|
exit function
|
|
end if
|
|
|
|
set objSID = objService.Get("Win32_SID.SID='" & objAcct.SID & "'")
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get Win32_SID Object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
set objTrustee = objService.Get("Win32_Trustee").SpawnInstance_
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to get new Instance of Win32_Trustee " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objTrustee.Name = strGroupName
|
|
objTrustee.Domain = strDomain
|
|
objTrustee.SID = objSID.BinaryRepresentation
|
|
objTrustee.SIDString = objSID.SID
|
|
objTrustee.SidLength = objSID.SidLength
|
|
set objACE = objService.Get("Win32_ACE").SpawnInstance_
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa", "Failed to Create Win32_Ace Object " & "(" & Hex(Err.Number) & ")"
|
|
exit function
|
|
end if
|
|
|
|
objACE.AccessMask = nAccessMask
|
|
objACE.Aceflags = 3
|
|
objACE.AceType = 0
|
|
objACE.Trustee = objTrustee
|
|
SA_TraceOut "inc_wsa", "In GetGroupAce function success"
|
|
GetGroupAce = TRUE
|
|
|
|
'Release objects
|
|
set objAcct = nothing
|
|
set objSID = nothing
|
|
set objTrustee = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :ModifyUserInOu
|
|
'Description :Modify User settings in OU
|
|
' group
|
|
'Input Variables :strUserName,strOuName, strGrpName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Function ModifyUserInOu(strSiteID,strDomain,strUserName, strPassword, strGrpName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim oUser 'holds user object
|
|
Dim objComputer 'holds computer object
|
|
|
|
ModifyUserInOu = false
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu"
|
|
|
|
Set objComputer = GetObject("WinNT://" & strDomain)
|
|
Set oUser = objComputer.GetObject("user" , trim(strUserName))
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu, get user pswd failed "
|
|
SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
|
|
Array("user " & trim(strUserName)))
|
|
Exit Function
|
|
End if
|
|
|
|
oUser.setPassword(trim(strPassword))
|
|
oUser.SetInfo()
|
|
if Err.number <> 0 then
|
|
mintTabSelected = 0
|
|
If Err.number = &H800708C5 Then
|
|
SetErrMsg L_ERR_PASSWORD_POLICY
|
|
Else
|
|
SetErrMsg L_SETPW_ERRORMESSAGE
|
|
End If
|
|
exit Function
|
|
end if
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu successfull"
|
|
|
|
'release objects
|
|
set oUser = nothing
|
|
set objComputer = nothing
|
|
|
|
ModifyUserInOu = true
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :GetRandomPassword
|
|
'Description :Generates a random password
|
|
'Input Variables :None
|
|
'Output Variables :strPassword
|
|
'Returns :string
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
|
|
Function GetRandomPassword
|
|
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
|
|
GetRandomPassword = ""
|
|
|
|
Dim objSAHelper
|
|
Dim strPassword
|
|
|
|
Set objSAHelper = server.CreateObject("ServerAppliance.SAHelper")
|
|
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut ("inc_wsa", "createobject for sahelper failed")
|
|
exit function
|
|
else
|
|
strPassword = objSAHelper.GenerateRandomPassword(14)
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut ("inc_wsa", "generate random password failed")
|
|
Set objSAHelper = Nothing
|
|
exit function
|
|
end if
|
|
end if
|
|
|
|
GetRandomPassword = strPassword
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :SetPasswdInAD
|
|
'Description :Create Users in OU and adds the user to specified
|
|
' group
|
|
'Input Variables :strUserName,strOuName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Function SetPasswdInAD(strSiteID,strUserName, strPassword)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim oUser 'holds user object
|
|
Dim oRoot 'holds root object
|
|
Dim oOUWebSites 'holds OU website
|
|
Dim oOUSiteID 'holds OU siteid
|
|
|
|
|
|
SetPasswdInAD = False
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD"
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD strSiteID: " + strSiteID
|
|
SA_traceOut "G_strDirRoot: " , G_strDirRoot
|
|
|
|
Set oRoot = GetObject("LDAP://" & G_strDirRoot)
|
|
If Err.number <> 0 Then
|
|
SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
|
|
Array("LDAP://" & G_strDirRoot))
|
|
SA_TraceOut "inc_wsa.asp", "Connect to LDAP failed"
|
|
Exit Function
|
|
End if
|
|
|
|
Set oOUWebSites = oRoot.GetObject("organizationalUnit", "ou=WebSites")
|
|
If err.number <> 0 Then
|
|
SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
|
|
Array("WebSites organizational unit"))
|
|
SA_TraceOut "inc_wsa.asp", _
|
|
"In SetPasswdInAD, get ou web sites failed"
|
|
Exit Function
|
|
End If
|
|
|
|
Set oOUSiteID = oOUWebSites.GetObject("organizationalUnit", "ou=" & strSiteID)
|
|
If err.number<>0 Then
|
|
SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
|
|
Array(strSiteID & " organizational unit"))
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, get ou siteid failed"
|
|
Exit Function
|
|
End If
|
|
|
|
SA_traceout "strUserName: ", strUserName
|
|
|
|
Set oUser = oOUSiteID.GetObject("User", "cn=" + strUserName )
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, GetObject user failed "
|
|
SetErrMsg L_CREATEUSER_ERRORMESSAGE
|
|
Exit Function
|
|
End If
|
|
|
|
|
|
oUser.setPassword(strPassword)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, SetPassword ** failed ** "
|
|
SetErrMsg L_CREATEUSER_ERRORMESSAGE
|
|
Exit Function
|
|
End If
|
|
|
|
oUser.SetInfo()
|
|
if Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, SetInfo failed "
|
|
SetErrMsg L_CREATEUSER_ERRORMESSAGE
|
|
Exit Function
|
|
end if
|
|
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD successfull"
|
|
|
|
'release objects
|
|
Set oUser = nothing
|
|
Set oOUWebSites = nothing
|
|
Set oOUSiteID = nothing
|
|
Set oRoot = nothing
|
|
|
|
|
|
SetPasswdInAD = true
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :SetPasswdInNT
|
|
'Description :Set password in NT
|
|
'Input Variables :strUserName -- username to set the password for
|
|
'Input Variables :strPassword -- password to be used
|
|
'Returns :True or False
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
|
|
Function SetPasswdInNT( strDomainName, strUserName, strPassword )
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objComputer
|
|
Dim objUser
|
|
|
|
SetPasswdInNT = False
|
|
|
|
SA_TraceOut "inc_wsa.asp", "In SetPasswdInNT"
|
|
|
|
SA_TraceOut "strDomainName:", strDomainName
|
|
'SA_TraceOut "G_strSysName:", G_strSysName
|
|
Set objComputer = GetObject("WinNT://" & strDomainName)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "failed to GetObject in SetPasswdinNT : G_strSysName: " + G_strSysName
|
|
SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
|
|
Array("WinNT://" & strDomain))
|
|
Exit Function
|
|
End if
|
|
|
|
Set objUser = objComputer.GetObject("User" , strUserName)
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "failed to GetObject in SetPasswdinNT : strUserName: " + strUserName
|
|
SetErrmsg L_ERR_GET_USER_OBJECT
|
|
Exit Function
|
|
End If
|
|
|
|
objUser.setPassword(trim(strPassword))
|
|
objUser.SetInfo()
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "failed to SetInfo in SetPasswdinNT : strPassword: " + strPassword
|
|
If Err.number = &H800708C5 Then
|
|
SetErrMsg L_ERR_PASSWORD_POLICY
|
|
Else
|
|
SetErrMsg L_UNABLETOSET_PASSWORD_ERRORMESSAGE
|
|
End If
|
|
Exit Function
|
|
End If
|
|
|
|
'Release the object
|
|
set objUser = nothing
|
|
set objComputer = nothing
|
|
|
|
|
|
SetPasswdInNT = TRUE
|
|
Call SA_TRACEOUT("SetPasswdInNT","return success")
|
|
|
|
End Function
|
|
|
|
|
|
'---------------------------------------------------------------------
|
|
' Function name: isFileExisting
|
|
' Description: To verify the existence of the file
|
|
' Input Variables: strFileToVerify-file name along with its path
|
|
' Output Variables: None
|
|
' Return Values: TRUE - if file exists , else FALSE
|
|
' Global Variables: None
|
|
'---------------------------------------------------------------------
|
|
Function isFileExisting(strFile)
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
Dim objFSO
|
|
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
|
|
|
' If the file is existing, return true, else false
|
|
If objFSO.FileExists(strFile) Then
|
|
isFileExisting = True
|
|
Else
|
|
isFileExisting = False
|
|
End If
|
|
|
|
Set objFSO = Nothing
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :LaunchProcess
|
|
'Description :Launches a new process
|
|
'Input Variables :strCommand, strCurDir
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function LaunchProcess(strCommand, strCurDir)
|
|
On error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objService 'holds WMI Connection
|
|
Dim objClass 'holds query result
|
|
Dim objProc 'holds query result of Win32_process
|
|
Dim objProcStartup 'holds class spawninstance value
|
|
Dim nretval 'holds return value
|
|
Dim nPID
|
|
Dim objTemp 'holds temporary value
|
|
|
|
nretval = 0
|
|
|
|
Set objService=getWMIConnection("root\cimv2")
|
|
Set objClass = objService.Get("Win32_ProcessStartup")
|
|
Set objProcStartup = objClass.SpawnInstance_()
|
|
objProcStartup.ShowWindow = 2
|
|
Set objProc = objService.Get("Win32_Process")
|
|
nretval = objProc.Create(strCommand, strCurDir, objProcStartup,nPID)
|
|
|
|
If Err.number <> 0 Then
|
|
Call SA_TraceOut(SA_GetScriptFileName(), "Function LaunchProcess failed, error: " & Hex(Err.Number) & " " & Err.Description)
|
|
LaunchProcess = FALSE
|
|
Exit function
|
|
End If
|
|
|
|
SA_TraceOut "inc_wsa", "Launch Process " & strCommand & " from path " & strCurDir & " successful "
|
|
|
|
LaunchProcess = TRUE
|
|
|
|
'Release objects
|
|
Set objService= nothing
|
|
Set objClass = nothing
|
|
Set objProcStartup = nothing
|
|
Set objProc = nothing
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
'
|
|
' Functions to handle FrontPageServerExtension.
|
|
'
|
|
' 1) FPSE (2000, 2002) may be installed on the server (host).
|
|
' 2) For IIS 6.0, FPSE may be enabled or diabled.
|
|
' 3) For each website, FPSE may be installed.
|
|
'
|
|
' The interfaces are:
|
|
'
|
|
' 1) IsFrontPageInstalled (return true if any version installed)
|
|
' 2) IsFrontPageInstalledOnWebSite (return true if any version installed on the website)
|
|
' 3) InstallFrontPageWeb (install FPSE 2002 if found, otherwise install 2000)
|
|
' 4) UnInstallFrontPageWeb (uninstall the correct version of FPSE on the website)
|
|
'
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :isFrontPageInstalled
|
|
'Description :Returns whether fron page extensions are installed on
|
|
' server or not
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Public Function isFrontPageInstalled(objService)
|
|
|
|
'
|
|
' Check if FP 2000 is installed
|
|
isFrontPageInstalled = isFrontPage2000Installed(objService)
|
|
|
|
'
|
|
' If NOT then check if FP 2002 is installed
|
|
If ( false = isFrontPageInstalled ) Then
|
|
isFrontPageInstalled = isFrontPage2002Installed(objService)
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :isFrontPage2000Installed
|
|
'Description :Returns whether FPSE2000 are installed or not
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Private Function isFrontPage2000Installed(ByRef objService)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objFrontPage 'holds frontpage query result
|
|
|
|
isFrontPage2000Installed = false
|
|
|
|
set objFrontPage = objService.Get("IIs_filter.Name=" & chr(34) & CONST_FRONTPAGE_PATH & chr(34))
|
|
|
|
If Err.number <> 0 then
|
|
SA_TraceOut "inc_wsa.asp", "Frontpage extensions not set. Error = " & Err.number
|
|
exit function
|
|
else
|
|
if NOT IsObject(objFrontPage) then
|
|
exit function
|
|
end if
|
|
isFrontPage2000Installed = true
|
|
end if
|
|
|
|
'release the object
|
|
set objFrontPage = nothing
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :isFrontPage2002Installed
|
|
'Description :Returns whether FPSE2002 are installed or not
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'Global Variables :None
|
|
'-------------------------------------------------------------------------
|
|
Private Function isFrontPage2002Installed(ByRef objService)
|
|
on error resume next
|
|
|
|
isFrontPage2002Installed = FALSE
|
|
|
|
Dim aValues
|
|
Dim x
|
|
Dim objRegistry
|
|
|
|
Set objRegistry = RegConnection()
|
|
If (NOT IsObject(objRegistry)) Then
|
|
Call SA_TraceOut(SA_GetScriptFileName(), "RegConnection() failed in function isFrontPage2002Installed, error: " & Hex(Err.Number) & " " & Err.Description )
|
|
Exit Function
|
|
End If
|
|
|
|
|
|
'
|
|
' Search for FP Server Extensions 2002 installed reg key
|
|
aValues = RegEnumKey( objRegistry, "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
|
|
If ( IsNull(aValues) ) Then
|
|
Exit Function
|
|
End If
|
|
'Call SA_TraceOut(SA_GetScriptFileName(), "RegEnumKey: " & "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
|
|
for x = LBound(aValues) to UBound(aValues)
|
|
If ( IsNull(aValues(x)) ) Then
|
|
Exit Function
|
|
End If
|
|
'Call SA_TraceOut(SA_GetScriptFileName(), "RegKeyValue: " & aValues(x))
|
|
If ( Trim(aValues(x)) = Trim(CONST_FRONTPAGE_2002_INSTALLED) ) Then
|
|
isFrontPage2002Installed = true
|
|
exit for
|
|
End If
|
|
Next
|
|
|
|
'
|
|
' Search for SharePoint installed reg key
|
|
aValues = RegEnumKeyValues( objRegistry, "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
|
|
If ( IsNull(aValues) ) Then
|
|
Exit Function
|
|
End If
|
|
'Call SA_TraceOut(SA_GetScriptFileName(), "RegEnumKeyValues for: " & "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
|
|
for x = LBound(aValues) to UBound(aValues)
|
|
If ( IsNull(aValues(x)) ) Then
|
|
Exit Function
|
|
End If
|
|
'Call SA_TraceOut(SA_GetScriptFileName(), "RegKeyValue: " & aValues(x))
|
|
If ( Trim(aValues(x)) = Trim(CONST_SHAREPOINT_INSTALLED) ) Then
|
|
isFrontPage2002Installed = true
|
|
exit for
|
|
End If
|
|
Next
|
|
|
|
Set objRegistry = nothing
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :InstallFrontPageWeb
|
|
'Description :Installs Front Page Extensions on the machine
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function InstallFrontPageWeb(strSiteName, strUserName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objRegConn 'holds regeconnection
|
|
Dim strLocationFPSE2000 'holds location of string in registry
|
|
Dim strLocationFPSE2002 'holds location of the FPSE 2002 location
|
|
Dim strCommand 'holds string
|
|
Dim retval 'holds return value
|
|
|
|
InstallFrontPageWeb = FALSE
|
|
|
|
Set objRegConn = RegConnection()
|
|
|
|
if isFrontPage2002Installed Then
|
|
|
|
strLocationFPSE2002 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_2002_REGLOC,"Location",CONST_STRING)
|
|
|
|
strLocationFPSE2002 = strLocationFPSE2002 & "\" & "bin"
|
|
|
|
'SA_TraceOut "inc_wsa", "strLocationFPSE2002: " & strLocationFPSE2002
|
|
|
|
strCommand = "cmd.exe /c " & chr(34) & "owsadm.exe -o install -p /LM/" & strSiteName & " -type msiis -u " & strUserName & chr(34)
|
|
|
|
'SA_TraceOut "inc_wsa", "strCommandFPSE2002: " & strCommand
|
|
|
|
InstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2002)
|
|
|
|
ElseIf isFrontPage2000Installed Then
|
|
|
|
strLocationFPSE2000 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_REGLOC,"Location",CONST_STRING)
|
|
|
|
strLocationFPSE2000 = strLocationFPSE2000 & "\" & "bin"
|
|
|
|
'SA_TraceOut "inc_wsa", "strLocationFPSE2000: " & strLocationFPSE2000
|
|
|
|
strCommand = "cmd.exe /c " & chr(34) & "fpsrvadm.exe -o install -p /LM/" & strSiteName & " -type msiis -u " & strUserName & chr(34)
|
|
|
|
'SA_TraceOut "inc_wsa", "strCommandFPSE2000: " & strCommand
|
|
|
|
InstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2000)
|
|
|
|
Else
|
|
|
|
call SA_TraceOut("inc_wsa", "Function InstallFrontPageWeb: Frontpage Extension not Installed on the server")
|
|
|
|
End If
|
|
|
|
'Release objects
|
|
Set objRegConn = nothing
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :UnInstallFrontPageWeb
|
|
'Description :UnInstalls Front Page Extensions on the machine
|
|
'Input Variables :None
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function UnInstallFrontPageWeb(strSiteName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objRegConn 'holds regeconnection
|
|
Dim strLocationFPSE2000 'holds location of string in registry
|
|
Dim strLocationFPSE2002 'holds location of the FPSE 2002 location
|
|
Dim strCommand 'holds string
|
|
Dim retval 'holds return value
|
|
|
|
UnInstallFrontPageWeb = FALSE
|
|
|
|
Set objRegConn = RegConnection()
|
|
|
|
if IsFrontPage2002InstalledOnWebSite(strSiteName) Then
|
|
|
|
strLocationFPSE2002 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_2002_REGLOC,"Location",CONST_STRING)
|
|
|
|
strLocationFPSE2002 = strLocationFPSE2002 & "\" & "bin"
|
|
|
|
'SA_TraceOut "inc_wsa", "strLocationFPSE2002: " & strLocationFPSE2002
|
|
|
|
strCommand = "cmd.exe /c " & chr(34) & "owsadm.exe -o uninstall -p /LM/" & strSiteName & chr(34)
|
|
|
|
'Call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: FPSE 2002 command: " & strCommand)
|
|
|
|
UnInstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2002)
|
|
|
|
ElseIf IsFrontPage2000InstalledOnWebSite(strSiteName) Then
|
|
|
|
strLocationFPSE2000 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_REGLOC,"Location",CONST_STRING)
|
|
|
|
strLocationFPSE2000 = strLocationFPSE2000 & "\" & "bin"
|
|
|
|
'SA_TraceOut "inc_wsa", "strLocationFPSE2000: " & strLocationFPSE2000
|
|
|
|
strCommand = "cmd.exe /c " & chr(34) & "fpsrvadm.exe -o uninstall -p /LM/" & strSiteName & chr(34)
|
|
|
|
'Call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: FPSE 2000 command: " & strCommand)
|
|
|
|
UnInstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2000)
|
|
|
|
Else
|
|
|
|
call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: Frontpage Extension not installed on the server")
|
|
|
|
End If
|
|
|
|
'Release objects
|
|
Set objRegConn = nothing
|
|
|
|
End Function
|
|
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :IsFrontPageInstalledOnWebSite
|
|
'Description :Determines whether front page extensions are installed
|
|
' on that web site
|
|
'Input Variables :strSysName, strSiteName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function IsFrontPageInstalledOnWebSite(strSysName, strSiteName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
'Dim objSite 'holds IIS root object
|
|
|
|
IsFrontPageInstalledOnWebSite = false
|
|
|
|
If IsFrontPage2000InstalledOnWebSite( strSiteName) or IsFrontPage2002InstalledOnWebSite( strSiteName) Then
|
|
|
|
IsFrontPageInstalledOnWebSite = true
|
|
|
|
End If
|
|
|
|
'Set objSite = GetObject("IIS:")
|
|
'Set objSite = objSite.OpenDSObject("IIS://" & strSysName & "/" & strSiteName, "", "", 1)
|
|
'if Err.number <> 0 then
|
|
' Err.Clear
|
|
' SA_TraceOut "inc_wsa", "Failed to determine whether front page extensions are installed for site: " & strSiteName
|
|
' Exit function
|
|
'end if
|
|
'IsFrontPageInstalledOnWebSite = objSite.FrontPageWeb
|
|
|
|
'Release the objects
|
|
'set objSite = nothing
|
|
End Function
|
|
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :IsFrontPage2000InstalledOnWebSite
|
|
'Description :Determines whether front page extensions are installed
|
|
' on that web site
|
|
'Input Variables :strSysName, strSiteName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function IsFrontPage2000InstalledOnWebSite( strSiteName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objRegConn 'registry connection
|
|
Dim strSitePortLoc 'registry key location of the website
|
|
Dim strFrontPageRoot
|
|
Dim strAuthoring
|
|
|
|
IsFrontPage2000InstalledOnWebSite = false
|
|
|
|
' The registry key is the same for all OS versions
|
|
strSitePortLoc = CONST_PORT_REGLOC & "Port /LM/" & strSiteName & ":"
|
|
|
|
Set objRegConn = RegConnection()
|
|
|
|
strAuthoring = GetRegKeyValue(objRegConn,strSitePortLoc,"authoring",CONST_STRING)
|
|
|
|
strFrontPageRoot = GetRegKeyValue(objRegConn,strSitePortLoc,"frontpageroot",CONST_STRING)
|
|
|
|
if Ucase(strAuthoring) = "ENABLED" and instr(strFrontPageRoot, "\40") Then
|
|
|
|
IsFrontPage2000InstalledOnWebSite = true
|
|
|
|
End If
|
|
|
|
set objRegConn = nothing
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name :IsFrontPage2002InstalledOnWebSite
|
|
'Description :Determines whether front page extensions are installed
|
|
' on that web site
|
|
'Input Variables :strSysName, strSiteName
|
|
'Output Variables :None
|
|
'Returns :Boolean
|
|
'-------------------------------------------------------------------------
|
|
Function IsFrontPage2002InstalledOnWebSite( strSiteName)
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
Dim objRegConn 'registry connection
|
|
Dim strSitePortLoc 'registry key location of the website
|
|
Dim strFrontPageRoot
|
|
Dim strAuthoring
|
|
|
|
IsFrontPage2002InstalledOnWebSite = false
|
|
|
|
' The registry key is the same for all OS versions
|
|
strSitePortLoc = CONST_PORT_REGLOC & "Port /LM/" & strSiteName & ":"
|
|
|
|
Set objRegConn = RegConnection()
|
|
|
|
strAuthoring = GetRegKeyValue(objRegConn,strSitePortLoc,"authoring",CONST_STRING)
|
|
|
|
strFrontPageRoot = GetRegKeyValue(objRegConn,strSitePortLoc,"frontpageroot",CONST_STRING)
|
|
|
|
if Ucase(strAuthoring) = "ENABLED" and instr(strFrontPageRoot, "\50") Then
|
|
|
|
IsFrontPage2002InstalledOnWebSite = true
|
|
|
|
End If
|
|
|
|
set objRegConn = nothing
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
'
|
|
' Functions to handle FTP
|
|
'
|
|
'
|
|
'
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsFTPEnabled
|
|
'Description: Initialization of global variables is done
|
|
'Input Variables: None
|
|
'Returns: true/false
|
|
'Global Variables: G_objService
|
|
' G_objSites
|
|
'--------------------------------------------------------------------------
|
|
|
|
Function IsFTPEnabled()
|
|
Err.Clear
|
|
on error resume next
|
|
|
|
Dim objFTP
|
|
Dim objFTPList
|
|
Dim objService
|
|
|
|
IsFTPEnabled = false
|
|
|
|
' Get instances of IIS_FTPServiceSetting that are visible throughout
|
|
Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
set objFTPList = objService.InstancesOf(GetIISWMIProviderClassName("IIS_FTPService"))
|
|
|
|
For each objFTP in objFTPList
|
|
if objFTP.State = CONST_SERVICE_RUNNING_STATE Then
|
|
IsFTPEnabled = true
|
|
End If
|
|
Next
|
|
|
|
if Err.number <> 0 then
|
|
IsFTPEnabled = false
|
|
Err.Clear
|
|
end if
|
|
|
|
set objtFTPList = nothing
|
|
set objFTP = nothing
|
|
set objService = nothing
|
|
|
|
end function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: EnableFTP
|
|
'Description: Enable FTP service and set it's state to automatic
|
|
'Input Variables: None
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function EnableFTP()
|
|
Err.Clear
|
|
on error resume next
|
|
|
|
Dim objFTP
|
|
Dim objService
|
|
|
|
EnableFTP = false
|
|
|
|
' Get instances of IIS_FTPServiceSetting that are visible throughout
|
|
Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
set objFTP = objService.get("Win32_Service.Name='MSFTPSVC'")
|
|
|
|
Call objFTP.ChangeStartMode("Automatic")
|
|
Call objFTP.StartService()
|
|
EnableFTP = true
|
|
|
|
if Err.number <> 0 then
|
|
EnableFTP = false
|
|
Err.Clear
|
|
end if
|
|
|
|
set objFTP = nothing
|
|
set objService = nothing
|
|
|
|
end function
|
|
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: DisableFTP
|
|
'Description: Diable FTP service and set it's state to manual
|
|
'Input Variables: None
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function DisableFTP()
|
|
Err.Clear
|
|
on error resume next
|
|
|
|
Dim objFTP
|
|
Dim objService
|
|
|
|
DisableFTP = false
|
|
|
|
' Get instances of IIS_FTPServiceSetting that are visible throughout
|
|
Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
set objFTP = objService.get("Win32_Service.Name='MSFTPSVC'")
|
|
|
|
Call objFTP.ChangeStartMode("Manual")
|
|
Call objFTP.StopService()
|
|
DisableFTP = true
|
|
|
|
if Err.number <> 0 then
|
|
DisableFTP = false
|
|
Err.Clear
|
|
end if
|
|
|
|
set objFTP = nothing
|
|
set objService = nothing
|
|
|
|
end function
|
|
'-------------------------------------------------------------------------
|
|
'Function name: SetFPSEOption
|
|
'Description: Set FPSE Option in the registry
|
|
'Input Variables:
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function SetFPSEOption(bEnableFPSE)
|
|
|
|
dim objRegConn
|
|
dim iFPSEOption
|
|
Set objRegConn = RegConnection()
|
|
|
|
'Init the value to be set to the regval
|
|
if bEnableFPSE Then
|
|
iFPSEOption = 1
|
|
Else
|
|
iFPSEOption = 0
|
|
End If
|
|
|
|
call updateRegkeyvalue(objRegConn,CONST_WEBBLADES_REGKEY,CONST_FPSEOPTION_REGVAL,iFPSEOption,CONST_DWORD)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Set regvalue for FPSEOption failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: GetFPSEOption
|
|
'Description: Get FPSE Option in the registry. If the regval is 1, it means
|
|
' PFSE is enabled by default for all Website created thru WebUI,
|
|
' and GetFPSEOption return true. Otherwise return false.
|
|
'Input Variables:
|
|
'Returns: True if PFSE is enabled by default for all Website created thru WebUI
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function GetFPSEOption()
|
|
|
|
dim objRegConn
|
|
dim iFPSEOption
|
|
|
|
GetFPSEOption = false
|
|
|
|
Set objRegConn = RegConnection()
|
|
|
|
iFPSEOption = GetRegKeyValue(objRegConn,CONST_WEBBLADES_REGKEY,CONST_FPSEOPTION_REGVAL,CONST_DWORD)
|
|
|
|
If Err.number <> 0 Then
|
|
SA_TraceOut "inc_wsa", "Get regvalue for FPSEOption failed " & Hex(Err.Number)
|
|
exit Function
|
|
End if
|
|
|
|
if iFPSEOption = 1 then
|
|
GetFPSEOption = true
|
|
End If
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
'
|
|
' Functions to handle ASP enable/disable
|
|
'
|
|
'
|
|
'
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsASPEnabled
|
|
'Description: Check if ASP is enable at the webroot (for all website)
|
|
'Input Variables: None
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function IsASPEnabled()
|
|
Err.Clear
|
|
on error resume next
|
|
IsASPEnabled = false
|
|
|
|
end function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: EnableASP
|
|
'Description: Enable ASP for all the website (at the webroot)
|
|
'Input Variables: None
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function EnableASP()
|
|
Err.Clear
|
|
on error resume next
|
|
end function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: DisableASP
|
|
'Description: Diable ASP at the webroot (except Administration site)
|
|
'Input Variables: None
|
|
'Returns: None
|
|
'Global Variables:
|
|
'--------------------------------------------------------------------------
|
|
Function DisableASP()
|
|
Err.Clear
|
|
on error resume next
|
|
end function
|
|
|
|
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
'
|
|
' Helper functions for common UI between site.new and site.modify
|
|
'
|
|
'
|
|
'
|
|
'-------------------------------------------------------------------------
|
|
'-------------------------------------------------------------------------
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: IsFTPAllowedOnSite
|
|
'Description: Determines whether we should allow an FTP virtual
|
|
' directory to be created for this site based on
|
|
' the ACLs on the root directory for the site. If
|
|
' interactive users are allowed access, we
|
|
' deem the site unsafe for FTP access and disable
|
|
' the option.
|
|
'Input Variables: strPath Local path of root directory
|
|
' for this site.
|
|
'Returns: True if FTP access should be allowed and False
|
|
' otherwise.
|
|
'Global Variables: None
|
|
'--------------------------------------------------------------------------
|
|
Function IsFTPAllowedOnSite(strPath)
|
|
On Error Resume Next
|
|
IsFTPAllowedOnSite = True
|
|
|
|
'
|
|
' Get the WMI path to the security settings for the web root.
|
|
'
|
|
Dim strFolderSecurityPath
|
|
strFolderSecurityPath = "Win32_LogicalFileSecuritySetting.Path=""" & strPath & """"
|
|
|
|
' Replace single backslashes with double backslashes.
|
|
Dim oRegExp
|
|
Set oRegExp = New RegExp
|
|
oRegExp.Pattern = "\\"
|
|
oRegExp.Global = true
|
|
strFolderSecurityPath = oRegExp.Replace(strFolderSecurityPath, "\\")
|
|
|
|
|
|
'
|
|
' Open the object for the web root directory. If the directory doesn't
|
|
' exist, assume this is a new site.
|
|
'
|
|
Dim oService
|
|
Set oService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
|
|
Dim oFolderSecurity
|
|
Set oFolderSecurity = oService.Get(strFolderSecurityPath)
|
|
|
|
If (wbemErrNotFound = Err.number) Then
|
|
' The directory doesn't exist, so allow FTP
|
|
IsFTPAllowedOnSite = True
|
|
Exit Function
|
|
End If
|
|
|
|
Dim oSecurityDescriptor
|
|
If (0 = oFolderSecurity.GetSecurityDescriptor(oSecurityDescriptor)) Then
|
|
Dim oACE
|
|
For Each oACE In oSecurityDescriptor.DACL
|
|
Dim oTrustee
|
|
Set oTrustee = oACE.Trustee
|
|
If ((SIDSTRING_INTERACTIVE = oTrustee.SIDString) And _
|
|
(0 <> oACE.AccessMask)) Then
|
|
'
|
|
' Interactive users have access, which suggests that
|
|
' FPSE have been installed on this site before. Even if
|
|
' FPSE haven't been installed, this site is not secure
|
|
' enough to allow FTP access.
|
|
IsFTPAllowedOnSite = False
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
If (Err.number <> 0) Then
|
|
' This should never happen, but fail securely if it does.
|
|
IsFTPAllowedOnSite = False
|
|
End If
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Sub name: ServeAppSettings
|
|
'Description: Serves common UI between site new and site modify
|
|
' pages on application settings tabs. Currently
|
|
' displays only settings below default page values.
|
|
' Should be expanded in the future to include all UI
|
|
' for this tab.
|
|
'Input Variables: strPath Local path of root directory
|
|
' for this site.
|
|
' strUploadMethod The method currently used to
|
|
' upload content to this site.
|
|
' See constants defined above
|
|
' for valid values (e.g.,
|
|
' UPLOADMETHOD_NEITHER)
|
|
' strAnonymousChecked The value passed in the form
|
|
' submission for the anonymous
|
|
' checkbox (e.g., "true").
|
|
'Returns: None
|
|
'Global Variables: Localized strings from resources.asp
|
|
'--------------------------------------------------------------------------
|
|
Sub ServeAppSettings(strPath, strUploadMethod, strAnonymousChecked, bNewSite)
|
|
On Error Resume Next
|
|
|
|
'
|
|
' Calculate the attributes of the radio buttons and checkbox based on
|
|
' the current settings on the site.
|
|
'
|
|
Dim oIISService
|
|
Set oIISService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
|
|
|
|
Dim strNeitherAttributes
|
|
strNeitherAttributes = "CHECKED"
|
|
|
|
Dim strFPSEAttributes
|
|
Dim strFTPAttributes
|
|
|
|
' Check FrontPage extensions
|
|
If (isFrontPageInstalled(oIISService)) Then
|
|
If (strUploadMethod = UPLOADMETHOD_FPSE) Then
|
|
strFPSEAttributes = "CHECKED"
|
|
strNeitherAttributes = ""
|
|
Else
|
|
strFPSEAttributes = ""
|
|
End If
|
|
Else
|
|
strFPSEAttributes = "DISABLED"
|
|
End If
|
|
|
|
' Check FTP
|
|
If ((Not IsFTPEnabled()) Or (Not IsAdminFTPServerExistAndRunning())) Then
|
|
strFTPAttributes = "DISABLED"
|
|
ElseIf (Not IsFTPAllowedOnSite(strPath)) Then
|
|
If (strUploadMethod = UPLOADMETHOD_FTP) Then
|
|
strFTPAttributes = "CHECKED DISABLED"
|
|
strNeitherAttributes = ""
|
|
Else
|
|
strFTPAttributes = "DISABLED"
|
|
End If
|
|
Else
|
|
If (strUploadMethod = UPLOADMETHOD_FTP) Then
|
|
strFTPAttributes = "CHECKED"
|
|
strNeitherAttributes = ""
|
|
Else
|
|
strFTPAttributes = ""
|
|
End If
|
|
End If
|
|
|
|
' Check anonymous access
|
|
Dim strAnonymousAttributes
|
|
If ("true" = strAnonymousChecked) Then
|
|
strAnonymousAttributes = "CHECKED"
|
|
Else
|
|
strAnonymousAttributes = ""
|
|
End If
|
|
|
|
'
|
|
' Output the UI based on the settings processed above.
|
|
'
|
|
|
|
'
|
|
' Note: FrontPage messages not HTML encoded to allow ® to be
|
|
' displayed correctly.
|
|
'
|
|
%>
|
|
<TABLE WIDTH="400" ALIGN="left" BORDER="0" CELLSPACING="0" CELLPADDING="0"
|
|
CLASS="TasksBody">
|
|
<TR>
|
|
<TD CLASS="TasksBody" COLSPAN="3" NOWRAP>
|
|
<%=Server.HTMLEncode(L_CONTENT_UPLOADMETHOD_TITLE)%>
|
|
</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD CLASS="TasksBody" WIDTH="15px"> </TD>
|
|
<TD CLASS="TasksBody">
|
|
<INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
|
|
VALUE="<%=UPLOADMETHOD_FPSE%>" <%=strFPSEAttributes%>>
|
|
</TD>
|
|
<TD CLASS="TasksBody" NOWRAP>
|
|
<%=L_APPL_FRONT_PAGE_EXTN_TEXT%>
|
|
</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD CLASS="TasksBody" COLSPAN="2"> </TD>
|
|
<TD CLASS="TasksBody">
|
|
<%=Server.HTMLEncode(L_FRONTPAGEFTP_WARNING_TEXT)%>
|
|
</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD CLASS="TasksBody" WIDTH="15px"> </TD>
|
|
<TD CLASS="TasksBody">
|
|
<INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
|
|
VALUE="<%=UPLOADMETHOD_FTP%>" <%=strFTPAttributes%>>
|
|
<TD CLASS="TasksBody" NOWRAP>
|
|
<%=Server.HTMLEncode(L_CREATE_FTP_SITE)%>
|
|
</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD CLASS="TasksBody" WIDTH="15px"> </TD>
|
|
<TD CLASS="TasksBody">
|
|
<INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
|
|
VALUE="<%=UPLOADMETHOD_NEITHER%>" <%=strNeitherAttributes%> ID="Radio1">
|
|
</TD>
|
|
<TD CLASS="TasksBody" NOWRAP>
|
|
<%=Server.HTMLEncode(L_CONTENT_UPLOADMETHOD_NEITHER)%>
|
|
</TD>
|
|
</TR>
|
|
<TR><TD CLASS="TasksBody" COLSPAN="3"> </TD></TR>
|
|
<TR>
|
|
<TD CLASS="TasksBody" COLSPAN="3" NOWRAP>
|
|
<INPUT TYPE="checkbox" CLASS="formField" NAME="chkAllow" VALUE="ON"
|
|
<%=strAnonymousAttributes%>>
|
|
<%=Server.HTMLEncode(L_ALLOW_ANONYMOUS_ACCESS)%>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<%
|
|
End Sub
|
|
%>
|