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.
589 lines
19 KiB
589 lines
19 KiB
<%
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
' inc_accountsgroups.asp: Some common functions for accounts and groups
|
|
'
|
|
' Copyright (c) Microsoft Corporation. All rights reserved.
|
|
'
|
|
' Date Description
|
|
' 04/08/2000 Creation date
|
|
'-------------------------------------------------------------------------
|
|
|
|
'Error Messages
|
|
Dim L_DOMAINFAILED_ERRORMESSAGE
|
|
Dim L_FAILEDTOGETUSERACCOUNTS_ERRORMESSAGE
|
|
Dim L_FAILEDTOGETGROUPACCOUNTS_ERRORMESSAGE
|
|
Dim L_FAILEDTOGETSYSTEMACCOUNTS_ERRORMESSAGE
|
|
Dim L_FAILEDTORETRIEVEMEMBERS_ERRORMESSAGE
|
|
|
|
|
|
L_DOMAINFAILED_ERRORMESSAGE = objLocMgr.GetString("sacoremsg.dll","&HC020004D", varReplacementStrings)
|
|
L_FAILEDTOGETUSERACCOUNTS_ERRORMESSAGE = objLocMgr.GetString("sacoremsg.dll","&HC020004E", varReplacementStrings)
|
|
L_FAILEDTOGETGROUPACCOUNTS_ERRORMESSAGE = objLocMgr.GetString("sacoremsg.dll","&HC020004F", varReplacementStrings)
|
|
L_FAILEDTOGETSYSTEMACCOUNTS_ERRORMESSAGE = objLocMgr.GetString("sacoremsg.dll","&HC0200050", varReplacementStrings)
|
|
L_FAILEDTORETRIEVEMEMBERS_ERRORMESSAGE= objLocMgr.GetString("sacoremsg.dll","&HC0200051", varReplacementStrings)
|
|
|
|
'CONSTANTS
|
|
|
|
'CONST G_strGroupsNotReq = ":CREATOR GROUP SERVER:CREATOR OWNER SERVER:LOCAL:PROXY:"
|
|
'CONST G_strDomainNameNotReq = ":EVERYONE:CREATOR GROUP:CREATOR OWNER:"
|
|
'CONST G_strGroupsReq = "Authenticated Users:TERMINAL SERVER USER"
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getGroupsNotReq
|
|
'Description: gets the groups not required
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: ":" separaterd string of the groups not required
|
|
'-------------------------------------------------------------------------
|
|
function getGroupsNotReq(objService)
|
|
|
|
' The groups (in English) and corresponding Well known SIDs are
|
|
' CREATOR GROUP SERVER S-1-3-3
|
|
' CREATOR OWNER SERVER S-1-3-2
|
|
' LOCAL S-1-2-0
|
|
' PROXY S-1-5-8
|
|
' BUILTIN S-1-5-32 (BUILTIN as an win32_SystemAccount object
|
|
' is only on XP, not on W2K server)
|
|
|
|
Dim arrSid(4)
|
|
|
|
arrSid(0) = "S-1-3-3"
|
|
arrSid(1) = "S-1-3-2"
|
|
arrSid(2) = "S-1-2-0"
|
|
arrSid(3) = "S-1-5-8"
|
|
arrSid(4) = "S-1-5-32"
|
|
|
|
getGroupsNotReq = constructNameList(arrSid, objService)
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getDomainNameNotReq
|
|
'Description: gets the domain names not required
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: ":" separaterd string of the Domain names not required
|
|
'-------------------------------------------------------------------------
|
|
function getDomainNameNotReq(objService)
|
|
|
|
' The Domain names (in English) and corresponding Well known SIDs are
|
|
|
|
' EVERYONE S-1-1-0
|
|
' CREATOR GROUP S-1-3-1
|
|
' CREATOR OWNER S-1-3-0
|
|
|
|
Dim arrSid(2)
|
|
|
|
arrSid(0) = "S-1-1-0"
|
|
arrSid(1) = "S-1-3-1"
|
|
arrSid(2) = "S-1-3-0"
|
|
|
|
getDomainNameNotReq = constructNameList(arrSid, objService)
|
|
|
|
End function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getGroupsReq
|
|
'Description: gets the groups required
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: ":" separaterd string of the groups required
|
|
'-------------------------------------------------------------------------
|
|
function getGroupsReq(objService)
|
|
|
|
' The groups (in English) and corresponding Well known SIDs are
|
|
' Authenticated Users S-1-5-11
|
|
' TERMINAL SERVER USER S-1-5-13
|
|
|
|
Dim arrSid(1)
|
|
Dim sid
|
|
|
|
arrSid(0) = "S-1-5-11"
|
|
arrSid(1) = "S-1-5-13"
|
|
|
|
getGroupsReq = constructNameList(arrSid, objService)
|
|
|
|
' Get rid of the begin and end ":"
|
|
getGroupsReq = Mid(getGroupsReq, 2, len(getGroupsReq)-2)
|
|
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getNTAuthorityDomainName
|
|
'Description: gets the NT Authority Domain Name for Localization
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: string of NT Authority Domain Name
|
|
'-------------------------------------------------------------------------
|
|
function getNTAuthorityDomainName(objService)
|
|
|
|
Dim strWelKnownSid
|
|
Dim objSid
|
|
|
|
' Get the NT Authority Domain name from a well known SID
|
|
strWelKnownSid = "S-1-5-11"
|
|
|
|
set objSid = objService.Get("Win32_SID.SID=""" & strWelKnownSid & """")
|
|
|
|
getNTAuthorityDomainName = objSid.ReferencedDomainName
|
|
|
|
set objSid = nothing
|
|
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getBuiltinDomainName
|
|
'Description: gets the BUILTIN Domain Name for Localization
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: string of BUILTIN Domain Name
|
|
'-------------------------------------------------------------------------
|
|
function getBuiltinDomainName(objService)
|
|
|
|
Dim strWelKnownSid
|
|
Dim objSid
|
|
|
|
' Get the NT Authority Domain name from a well known SID
|
|
strWelKnownSid = "S-1-5-32"
|
|
|
|
set objSid = objService.Get("Win32_SID.SID=""" & strWelKnownSid & """")
|
|
|
|
getBuiltinDomainName = objSid.ReferencedDomainName
|
|
|
|
set objSid = nothing
|
|
|
|
End function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: constructNameList
|
|
'Description: construct a list of Name based on the SIDs
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: ":" separaterd string of the names
|
|
'-------------------------------------------------------------------------
|
|
Function constructNameList(arrSid, objService)
|
|
|
|
Dim sid
|
|
Dim objSid
|
|
|
|
constructNameList = ":"
|
|
|
|
' Get the name for each SID and concatenate it into the list
|
|
For Each sid in arrSid
|
|
|
|
set objSid = objService.Get("Win32_SID.SID=""" & sid & """")
|
|
|
|
constructNameList = constructNameList & objSid.AccountName & ":"
|
|
|
|
Next
|
|
|
|
set objSid = nothing
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getSystemAccounts
|
|
'Description: gets the system accounts of localmachine
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: Chr(1) separated string groups in the domain.
|
|
'-------------------------------------------------------------------------
|
|
function getSystemAccounts(objService)
|
|
Err.Clear
|
|
|
|
|
|
Dim objCollectionofSystemAccounts
|
|
Dim objSysAcccount
|
|
Dim strQuery
|
|
Dim strSysAcccounts
|
|
Dim strCompName
|
|
Dim arrTemp,i
|
|
Dim strDomainName
|
|
Dim strGroupsNotReq
|
|
Dim strDomainNameNotReq
|
|
Dim strGroupsReq
|
|
|
|
strGroupsNotReq = getGroupsNotReq(objService)
|
|
strDomainNameNotReq = getDomainNameNotReq(objService)
|
|
strGroupsReq = getGroupsReq(objService)
|
|
|
|
strCompName = GetComputerName()
|
|
strSysAcccounts =""
|
|
'strDomainName ="NT Authority"
|
|
strDomainName =getNTAuthorityDomainName(objService)
|
|
|
|
strQuery = "SELECT Name From Win32_SystemAccount"
|
|
|
|
Set objCollectionofSystemAccounts = objService.ExecQuery(strQuery)
|
|
If objCollectionofSystemAccounts.Count = 0 then
|
|
getSystemAccounts = strSysAcccounts
|
|
Exit function
|
|
End if
|
|
|
|
For each objSysAcccount in objCollectionofSystemAccounts
|
|
if instr(ucase(strGroupsNotReq),":"& ucase(objSysAcccount.Name) &":") = 0 then
|
|
if instr(ucase(strDomainNameNotReq),":"& ucase(objSysAcccount.Name) &":") = 0 then
|
|
strSysAcccounts = strSysAcccounts & chr(1)& strDomainName &"\"&objSysAcccount.Name &chr(2)&strCompName&"\"&objSysAcccount.Name
|
|
else
|
|
strSysAcccounts = strSysAcccounts & chr(1)& ""&objSysAcccount.Name &chr(2)&strCompName&"\"&objSysAcccount.Name
|
|
End if
|
|
End if
|
|
Next
|
|
|
|
arrTemp = split(strGroupsReq,":")
|
|
|
|
for i= 0 to ubound(arrTemp)
|
|
|
|
If instr(ucase(strSysAcccounts), ucase(arrTemp(i))) = 0 Then
|
|
strSysAcccounts = strSysAcccounts & chr(1)& strDomainName &"\"&arrTemp(i) &chr(2)&strCompName&"\"&arrTemp(i)
|
|
End If
|
|
|
|
next
|
|
|
|
Set objCollectionofSystemAccounts=Nothing
|
|
set objSysAcccount = Nothing
|
|
|
|
If Err.number <> 0 Then
|
|
SetErrMsg L_FAILEDTOGETSYSTEMACCOUNTS_ERRORMESSAGE & "(" & Hex(Err.Number) & ")"
|
|
getSystemAccounts = ""
|
|
Exit Function
|
|
End If
|
|
|
|
getSystemAccounts = strSysAcccounts
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getConnectedDomain
|
|
'Description: gets the domain in which the machine is present.
|
|
'Input Variables: Connection to the WMI
|
|
'Output Variables: None
|
|
'Returns: Domain Name
|
|
'-------------------------------------------------------------------------
|
|
Function getConnectedDomain(objService)
|
|
Err.Clear
|
|
|
|
Dim objColletionofSystem
|
|
Dim objSystem
|
|
Dim strDomainName
|
|
|
|
strDomainName =""
|
|
|
|
Set objColletionofSystem = objService.InstancesOf ("Win32_ComputerSystem")
|
|
|
|
For each objSystem in objColletionofSystem
|
|
If objSystem.DomainRole <> 2 Then
|
|
strDomainName = getShortDomainName(objSystem.Domain)
|
|
End IF
|
|
Next
|
|
|
|
If Err.number <> 0 then
|
|
SetErrMsg L_DOMAINFAILED_ERRORMESSAGE & "(" & Hex(Err.Number) & ")"
|
|
getConnectedDomain = strDomainName
|
|
Exit Function
|
|
End If
|
|
|
|
getConnectedDomain = strDomainName
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getShortDomainName
|
|
'Description: gets the short domain name (vs. DNS name)
|
|
'Input Variables: domain name that may be a domain DNS name
|
|
'Output Variables: None
|
|
'Returns: Short Domain Name
|
|
'-------------------------------------------------------------------------
|
|
Function getShortDomainName(strDomainName)
|
|
Err.Clear
|
|
Dim arrDomainName
|
|
|
|
'
|
|
' If domain name contains char ".", it's a DNS domain name
|
|
' e.g. redmond.corp.microsoft.com. We need to get the shortname
|
|
' which is "redmond". That is because ADSI GetObject only accepts
|
|
' short domain name.
|
|
'
|
|
If InStr(strDomainName, ".") Then
|
|
arrDomainName = Split(strDomainName, ".")
|
|
getShortDomainName = arrDomainName(0)
|
|
Else
|
|
getShortDomainName = strDomainName
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getUserAccounts
|
|
'Description: gets the users of the given domain.
|
|
'Input Variables: Connection to the WMI
|
|
' Domain name
|
|
'Output Variables: None
|
|
'Returns: Chr(1) separated string users in the domain.
|
|
'-------------------------------------------------------------------------
|
|
Function getUserAccounts(objService,strDomain)
|
|
Err.Clear
|
|
|
|
|
|
Dim objCollectionofUsers
|
|
Dim objUser
|
|
Dim strQuery
|
|
Dim strUsers
|
|
|
|
strUsers =""
|
|
|
|
if Trim(strDomain) = "" then
|
|
getUserAccounts = strUsers
|
|
Exit function
|
|
end if
|
|
|
|
strQuery = "SELECT Name From Win32_UserAccount WHERE Domain=" & "'" & strDomain & "'"
|
|
|
|
Set objCollectionofUsers = objService.ExecQuery(strQuery,"WQL",48,null)
|
|
|
|
For each objUser in objCollectionofUsers
|
|
strUsers = strUsers & chr(1)& objUser.Name &chr(2) &objUser.Name
|
|
Next
|
|
|
|
Set objCollectionofUsers=Nothing
|
|
set objUser = Nothing
|
|
|
|
If Err.number <> 0 Then
|
|
SetErrMsg L_FAILEDTOGETUSERACCOUNTS_ERRORMESSAGE & "(" & Hex(Err.Number) & ")"
|
|
getUserAccounts = strUsers
|
|
Exit Function
|
|
End If
|
|
getUserAccounts = strUsers
|
|
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: getGroups
|
|
'Description: gets the groups of the given domain.
|
|
'Input Variables: Connection to the WMI
|
|
' Domain name
|
|
'Output Variables: None
|
|
'Returns: Chr(1) separated string groups in the domain.
|
|
'-------------------------------------------------------------------------
|
|
Function getGroups(objService,strDomain)
|
|
Err.Clear
|
|
|
|
|
|
Dim objCollectionofGroups
|
|
Dim objGroup
|
|
Dim strQuery
|
|
Dim strGroups
|
|
|
|
strGroups =""
|
|
|
|
if Trim(strDomain) = "" then
|
|
getGroups = strGroups
|
|
Exit function
|
|
end if
|
|
|
|
strQuery = "SELECT Name From Win32_Group WHERE Domain=" & "'" & strDomain & "'"
|
|
|
|
Set objCollectionofGroups = objService.ExecQuery(strQuery,"WQL",48,null)
|
|
|
|
if not isnull(objCollectionofGroups) then
|
|
For each objGroup in objCollectionofGroups
|
|
strGroups = strGroups & chr(1)& strDomain & "\" & objGroup.Name & chr(2)& objGroup.Name
|
|
Next
|
|
End if
|
|
|
|
if Err.number <> 0 then
|
|
SetErrMsg L_FAILEDTOGETGROUPACCOUNTS_ERRORMESSAGE & "(" & Hex(Err.Number) & ")"
|
|
getGroups = ""
|
|
Exit Function
|
|
End If
|
|
|
|
getGroups = strGroups
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: ServetoListBox
|
|
'Description: gets the groups of the given domain.
|
|
'Input Variables: Chr(1) separated string groups in the domain.
|
|
'Output Variables: None
|
|
'Returns: Output to the listbox
|
|
'-------------------------------------------------------------------------
|
|
Function ServetoListBox(strInput)
|
|
Err.Clear
|
|
|
|
|
|
Dim arrInput
|
|
Dim nIndex
|
|
Dim arrTemp
|
|
arrInput = split(strInput,chr(1))
|
|
|
|
for nIndex = 1 to ubound(arrInput)
|
|
|
|
if instr(arrInput(nIndex),chr(2)) = 0 then
|
|
Response.write "<OPTION VALUE=" & Chr(34) & arrInput(nIndex) & Chr(34) & "> " _
|
|
& arrInput(nIndex) &"</OPTION>"
|
|
else
|
|
arrTemp = split(arrInput(nIndex),chr(2))
|
|
Response.write "<OPTION VALUE=" & Chr(34) & arrTemp(0) & Chr(34) & "> " _
|
|
& arrTemp(1) &"</OPTION>"
|
|
end if
|
|
next
|
|
End Function
|
|
|
|
'-------------------------------------------------------------------------
|
|
'Function name: isValidInstance
|
|
'Description: Checks the instance for valid ness.
|
|
'Input Variables: objService - object to WMI
|
|
' strClassName - WMI class name
|
|
' strPropertyName - Property name of the class
|
|
'
|
|
'Output Variables: None
|
|
'Returns: Returns true on Valid Instance ,
|
|
' False on invalid and also on Error
|
|
' Checks whether the given instance is valid in WMI.Returns true on valid
|
|
' false on invalid or Error.
|
|
'-------------------------------------------------------------------------
|
|
Function isValidInstance(objService,strClassName,strPropertyName)
|
|
Err.Clear
|
|
|
|
|
|
Dim strInstancePath
|
|
Dim objInstance
|
|
|
|
On Error Resume Next
|
|
|
|
strInstancePath = strClassName & "." & strPropertyName
|
|
|
|
Set objInstance = objservice.Get(strInstancePath)
|
|
|
|
if NOT isObject(objInstance) or Err.number <> 0 Then
|
|
isValidInstance = FALSE
|
|
Err.Clear
|
|
Else
|
|
isValidInstance = TRUE
|
|
End If
|
|
End Function
|
|
|
|
'---------------------------------------------------------------------
|
|
' Function name: getLocalUsersList
|
|
' Description: Gets the members of the logon domain
|
|
' Input Variables: WMI Connection
|
|
' Output Variables: None
|
|
' Returns: chr(1) seperated members of the connected domain
|
|
' Global Variables: In: L_(*)
|
|
'---------------------------------------------------------------------
|
|
Function getLocalUsersList(objService)
|
|
Err.Clear
|
|
|
|
|
|
Dim strGroupsNUsers
|
|
'Dim strDomain
|
|
Dim strCompName
|
|
Dim strTemp
|
|
|
|
'Intialization of the variables to get the domain & computer name
|
|
strTemp= ""
|
|
strGroupsNUsers = ""
|
|
'strDomain = getConnectedDomain(objService)
|
|
strCompName= GetComputerName()
|
|
|
|
'Get the members of the local system
|
|
strTemp = getUserAccounts(objService,strCompName)
|
|
strTemp =replace(strTemp,chr(1),(chr(1)&strCompName &"\"))
|
|
strGroupsNUsers = getSystemAccounts(objService) & strTemp
|
|
strGroupsNUsers = replace(strGroupsNUsers, chr(2)& UCASE(strCompName) &"\",chr(2))
|
|
|
|
if Err.number <> 0 then
|
|
ServeFailurePage L_FAILEDTORETRIEVEMEMBERS_ERRORMESSAGE & "(" & Hex(Err.number) & ")"
|
|
End if
|
|
|
|
getLocalUsersList = strGroupsNUsers
|
|
End Function
|
|
|
|
'---------------------------------------------------------------------
|
|
' Function name: getLocalUsersListEx
|
|
' Description: Gets the members of the logon domain
|
|
' Input Variables: WMI Connection
|
|
' intType
|
|
' Type - 0 for all users
|
|
' Type - 1 for system/builtin users
|
|
' Type - 2 for normal users
|
|
' Output Variables: None
|
|
' Returns: chr(1) seperated members of the connected domain
|
|
' Global Variables: In: L_(*)
|
|
'---------------------------------------------------------------------
|
|
Function getLocalUsersListEx(objService,intType)
|
|
Err.Clear
|
|
|
|
Dim strGroupsNUsers
|
|
'Dim strDomain
|
|
Dim strCompName
|
|
Dim strTemp
|
|
|
|
'Intialization of the variables to get the domain & computer name
|
|
strTemp= ""
|
|
strGroupsNUsers = ""
|
|
'strDomain = getConnectedDomain(objService)
|
|
strCompName= GetComputerName()
|
|
|
|
'Get the members of the local system
|
|
if (intType=1 or intType=0) Then
|
|
strTemp = getSystemAccounts(objService)
|
|
strGroupsNUsers = strGroupsNUsers & strTemp
|
|
end if
|
|
if (intType=2 or intType=0) Then
|
|
strTemp = getUserAccounts(objService,strCompName)
|
|
strTemp =replace(strTemp,chr(1),(chr(1)&strCompName &"\"))
|
|
strGroupsNUsers = strGroupsNUsers & strTemp
|
|
end if
|
|
strGroupsNUsers = replace(strGroupsNUsers, chr(2)& UCASE(strCompName) &"\",chr(2))
|
|
|
|
if Err.number <> 0 then
|
|
ServeFailurePage L_FAILEDTORETRIEVEMEMBERS_ERRORMESSAGE & "(" & Hex(Err.number) & ")"
|
|
End if
|
|
|
|
getLocalUsersListEx = strGroupsNUsers
|
|
End Function
|
|
|
|
'-----------------------------------------------------------------------------------
|
|
'Function name : Getbuiltingroups
|
|
'Description : Serves in getting BUILTIN groups and writes into
|
|
' a select box.
|
|
'Input Variables Object G_objService
|
|
'Output Variables
|
|
' Boolean -Returns True/False on Success/Failure
|
|
'Global Variables
|
|
' L_* (in) -Localized strings
|
|
'-----------------------------------------------------------------------------------
|
|
Function Getbuiltingroups(objService)
|
|
|
|
Err.Clear
|
|
|
|
Dim objCollection
|
|
Dim objInstance
|
|
Dim strQuery
|
|
Dim strBuiltinGroups
|
|
Dim Domainname
|
|
|
|
Domainname = getBuiltinDomainName(objService)
|
|
strBuiltinGroups =""
|
|
strQuery = "SELECT * From Win32_Group WHERE Domain=" & "'" & Domainname & "'"
|
|
Set objCollection = objService.ExecQuery(strQuery)
|
|
If objCollection.Count = 0 then
|
|
Exit function
|
|
End if
|
|
For each objInstance in objCollection
|
|
strBuiltinGroups = strBuiltinGroups & chr(1)& Domainname & "\" & objInstance.Name & chr(2)& objInstance.Name
|
|
Next
|
|
Set objCollection = Nothing
|
|
Getbuiltingroups = strBuiltinGroups
|
|
End Function
|
|
|
|
|
|
%>
|