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.
365 lines
12 KiB
365 lines
12 KiB
<%
|
|
|
|
|
|
'-------------------------------------------------------------------------
|
|
' inc_usersngroups.asp: Some common functions in groups & users pages
|
|
'
|
|
' Copyright (c) Microsoft Corporation. All rights reserved.
|
|
'
|
|
' Date Description
|
|
' 04/08/2000 Creation date
|
|
'-------------------------------------------------------------------------
|
|
Const CONST_FULLCONROL = &H1F01FF
|
|
|
|
' Default home directory
|
|
Dim CONST_DEFAULTHOMEDIR
|
|
|
|
' Key name for Users and Groups
|
|
Const CONST_USERGROUP_KEYNAME = "SoftWare\Microsoft\ServerAppliance\UserGroup"
|
|
|
|
' Default home directory optional defined by OEM
|
|
Const CONST_USERDIR_VALUENAME = "UserDir"
|
|
|
|
' Return value of CreateHomeDirectory
|
|
Const CONST_CREATDIRECTORY_ERROR = 0
|
|
Const CONST_CREATDIRECTORY_EXIST = 1
|
|
Const CONST_CREATDIRECTORY_SUCCESS = 2
|
|
|
|
CONST_DEFAULTHOMEDIR = GetSystemDrive() & "\Users\"
|
|
|
|
'---------------------------------------------------------------------
|
|
' Function name: isValidMember
|
|
' Description: checks the validity of the user in WiNT name space
|
|
' Input Variables: User name
|
|
' Output Variables: None
|
|
' Returns: True if User path exists in Winnt space else false
|
|
'---------------------------------------------------------------------
|
|
Function isValidMember(strMember, ByVal sAdminID, ByVal sAdminPSW, ByRef errorCode)
|
|
on error resume next
|
|
Err.Clear
|
|
|
|
Dim objTemp
|
|
Dim objPath
|
|
|
|
objPath = "WinNT://" + strMember + ",user"
|
|
set objTemp = GetObject(objPath)
|
|
errorCode = Err.Number
|
|
|
|
'If it's not a valid user, check whether it's a valid group
|
|
if errorCode <> 0 then
|
|
Err.Clear
|
|
objPath = "WinNT://" + strMember
|
|
set objTemp = GetObject(objPath)
|
|
errorCode = Err.Number
|
|
|
|
If errorCode <> 0 Then
|
|
|
|
' If it's neither a valid user nor a group, check if it's a valid domain member
|
|
If IsValidDomainMember( strMember, sAdminID, sAdminPSW, errorCode) Then
|
|
isValidMember = true
|
|
Exit Function
|
|
End If
|
|
isValidMember = false
|
|
SA_TraceOut "Inc_UsersNGroups", "IsValidMember(" + objPath + ") failed: " + CStr(Hex(errorCode))
|
|
Else
|
|
isValidMember = true
|
|
End If
|
|
else
|
|
isValidMember = true
|
|
end if
|
|
End FUnction
|
|
|
|
|
|
Function IsValidDomainMember(ByVal sDomainUser, ByVal sAdminID, ByVal sAdminPSW, ByRef errorCode)
|
|
|
|
Dim objComputer
|
|
Dim objUser
|
|
Dim sDomainUserPath
|
|
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
'SA_TraceOut "IsValidDomainMember", "Domain User: " + sDomainUser + " AdminID: " + sAdminID
|
|
|
|
Set objComputer = GetObject("WinNT:")
|
|
|
|
sDomainUserPath = "WinNT://" + sDomainUser + ",user"
|
|
Set objUser = objComputer.OpenDSObject(sDomainUserPath, sAdminID, sAdminPSW, 1 )
|
|
|
|
'If it's not a valid domain user, check whether it's a valid domain group
|
|
If ( Err.Number <> 0 ) Then
|
|
|
|
errorCode = Err.Number
|
|
Err.Clear
|
|
sDomainUserPath = "WinNT://" + sDomainUser
|
|
Set objUser = objComputer.OpenDSObject(sDomainUserPath, sAdminID, sAdminPSW, 1 )
|
|
|
|
' If it's neither a valid domain user nor a domain group, it's invalid input
|
|
If ( Err.Number <> 0 ) Then
|
|
errorCode = Err.Number
|
|
SA_TraceOut "IsValidDomainMember", "objComputer.OpenDSObject failed: " + CStr(Hex(errorCode)) + " : " + Err.Description
|
|
IsValidDomainMember = FALSE
|
|
Else
|
|
errorCode = 0
|
|
IsValidDomainMember = TRUE
|
|
End If
|
|
Else
|
|
errorCode = 0
|
|
IsValidDomainMember = TRUE
|
|
End If
|
|
|
|
Set objUser = nothing
|
|
Set objComputer = nothing
|
|
End Function
|
|
|
|
|
|
Function AddUserToGroup(ByVal sGroup, ByVal sUser, ByVal sAdminID, ByVal sAdminPSW)
|
|
|
|
Dim objComputer
|
|
Dim objGroup
|
|
Dim objUser
|
|
|
|
On Error Resume Next
|
|
Err.Clear
|
|
|
|
'SA_TraceOut "AddUserToGroup", "Group: " + sGroup + " User: " + sUser + " AdminID: " + sAdminID
|
|
|
|
Set objComputer = GetObject("WinNT:")
|
|
|
|
Set objGroup = objComputer.OpenDSObject("WinNT://" + GetComputerName() + "/" + sGroup,_
|
|
sAdminID, sAdminPSW, 1 )
|
|
If ( Err.Number <> 0 ) Then
|
|
SA_TraceOut "AddUserToGroup", "objComputer.OpenDSObject failed: " + CStr(Hex(Err.Number)) + " : " + Err.Description
|
|
SA_TraceOut "AddUserToGrop", "Attempted to open: " +"WinNT://" + GetComputerName() + "/" + sGroup
|
|
AddUserToGroup = FALSE
|
|
Exit Function
|
|
End If
|
|
|
|
objGroup.Add( "WinNT://" + sUser )
|
|
If ( Err.Number <> 0 ) Then
|
|
SA_TraceOut "AddUserToGroup", "objGroup.Add failed: " + CStr(Hex(Err.Number)) + " : " + Err.Description
|
|
AddUserToGroup = FALSE
|
|
Set objComputer = nothing
|
|
Set objGroup = nothing
|
|
Exit Function
|
|
End If
|
|
|
|
objGroup.SetInfo
|
|
If ( Err.Number <> 0 ) Then
|
|
SA_TraceOut "AddUserToGroup", "objGroup.SetInfo failed: " + CStr(Hex(Err.Number)) + " : " + Err.Description
|
|
AddUserToGroup = FALSE
|
|
Set objComputer = nothing
|
|
Set objGroup = nothing
|
|
Exit Function
|
|
End If
|
|
|
|
Set objComputer = nothing
|
|
Set objGroup = nothing
|
|
AddUserToGroup = TRUE
|
|
|
|
End Function
|
|
|
|
Function CreateHomeDirectory( ByVal strHomeDirectory, ByRef ObjFolder)
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
CreateHomeDirectory= CONST_CREATDIRECTORY_ERROR
|
|
|
|
If ( ObjFolder.FolderExists( strHomeDirectory ) ) Then
|
|
Call SA_TraceOut("inc_userngroups", "Folder exist")
|
|
CreateHomeDirectory = CONST_CREATDIRECTORY_EXIST
|
|
Exit Function
|
|
End If
|
|
|
|
Dim strParentDirectory
|
|
Dim endPosition
|
|
|
|
endPosition = InStrRev( strHomeDirectory, "\" )
|
|
If( endPosition = 0 )Then
|
|
Call SA_TraceOut("inc_userngroups", "Error home directory" )
|
|
Exit Function
|
|
End If
|
|
|
|
strParentDirectory = Left( strHomeDirectory, ( endPosition - 1 ) )
|
|
|
|
If( CreateHomeDirectory( strParentDirectory, ObjFolder) = CONST_CREATDIRECTORY_ERROR ) Then
|
|
Call SA_TraceOut("inc_userngroups", "create parent folder error" )
|
|
Exit Function
|
|
End If
|
|
|
|
ObjFolder.CreateFolder( strHomeDirectory )
|
|
If Err.Number <> 0 Then
|
|
Call SA_TraceOut("inc_userngroups", "Failed to create folder" & "(" & Hex(Err.Number) & ")" )
|
|
Exit Function
|
|
End If
|
|
|
|
CreateHomeDirectory = CONST_CREATDIRECTORY_SUCCESS
|
|
End Function
|
|
|
|
Function SetHomeDirectoryPermission( ByVal strComputerName, ByVal strUserName, ByVal strHomeDirectory )
|
|
Err.Clear
|
|
On Error Resume Next
|
|
|
|
SetHomeDirectoryPermission = FALSE
|
|
|
|
Dim objService 'to hold WMI connection object
|
|
Dim strTemp 'to hold temp value
|
|
Dim objSecSetting 'to hold security setting value
|
|
Dim objSecDescriptor 'to hold security descriptor value
|
|
Dim strPath 'to hold Path
|
|
Dim objDACL 'to hold DACL value
|
|
Dim objUserAce
|
|
Dim objAdminAce
|
|
Dim objSystemAce
|
|
Dim retval 'holds return value
|
|
|
|
Call SA_TraceOut(SA_GetScriptFileName(), "SetHomeDirectoryPermission( " + strComputerName + ", " + strUserName + ", " + strHomeDirectory )
|
|
|
|
Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
|
|
objService.security_.impersonationlevel = 3
|
|
|
|
'get the sec seting for file
|
|
strPath = "Win32_LogicalFileSecuritySetting.Path='" & strHomeDirectory & "'"
|
|
|
|
set objSecSetting = objService.Get(strPath)
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut ("inc_userngroups", "Failed to get Sec object for dir " & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
'get the ace's for users
|
|
if NOT GetUserAce(objService, strUserName , strComputerName, CONST_FULLCONROL, objUserAce ) then
|
|
Call SA_TraceOut ("inc_userngroups", "Failed to get ACE object for user, error:" & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
'get the ace's for System account
|
|
if NOT GetSystemAce(objService, SA_GetAccount_System() , strComputerName, CONST_FULLCONROL, objSystemAce ) then
|
|
Call SA_TraceOut ("inc_userngroups", "Failed to get ACE object for SYSTEM, error:" & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
'get the ace's for Administrators
|
|
if NOT GetGroupAce(objService, SA_GetAccount_Administrators() , strComputerName, CONST_FULLCONROL, objAdminAce ) then
|
|
Call SA_TraceOut ("inc_userngroups", "Failed to get ACE object for Administrators, error:" & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
Set objSecDescriptor = objService.Get("Win32_SecurityDescriptor").SpawnInstance_()
|
|
if Err.Number <> 0 then
|
|
Call SA_TraceOut ("inc_userngroups", "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) = objUserAce
|
|
objDACL.Value(1) = objAdminAce
|
|
objDACL.Value(2) = objSystemAce
|
|
|
|
objSecDescriptor.Properties_.Item("ControlFlags") = 32772
|
|
Set objSecDescriptor.Properties_.Item("Owner") = objUserAce.Trustee
|
|
|
|
Err.Clear
|
|
|
|
retval = objSecSetting.SetSecurityDescriptor( objSecDescriptor )
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut ( "site_new", "Failed to set the Security Descriptor for Root dir " & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
SetHomeDirectoryPermission = TRUE
|
|
|
|
'Release the objects
|
|
set objService = nothing
|
|
set objSecSetting = nothing
|
|
set objSecDescriptor = nothing
|
|
End Function
|
|
|
|
|
|
Function GetUserAce(objService, strName, strDomain, nAccessMask, ByRef objACE)
|
|
Dim strObjPath 'holds query string
|
|
|
|
strObjPath = "Win32_UserAccount.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strName & chr(34)
|
|
Call SA_TraceOut( "inc_userngroups", "GetUserAce : " +strObjPath )
|
|
|
|
GetUserAce = GetAce(strObjPath, objService, strName, strDomain, nAccessMask, objACE)
|
|
|
|
End Function
|
|
|
|
|
|
Function GetSystemAce(objService, strName, strDomain, nAccessMask, ByRef objACE)
|
|
Dim strObjPath 'holds query string
|
|
|
|
strObjPath = "Win32_SystemAccount.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strName & chr(34)
|
|
Call SA_TraceOut( "inc_userngroups", "GetSystemAce : " +strObjPath )
|
|
|
|
GetSystemAce = GetAce(strObjPath, objService, strName, strDomain, nAccessMask, objACE)
|
|
|
|
End Function
|
|
|
|
|
|
Function GetGroupAce(objService, strName, strDomain, nAccessMask, ByRef objACE)
|
|
Dim strObjPath 'holds query string
|
|
|
|
strObjPath = "Win32_Group.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strName & chr(34)
|
|
Call SA_TraceOut( "inc_userngroups", "GetGroupAce : " + strObjPath )
|
|
|
|
GetGroupAce = GetAce(strObjPath, objService, strName, strDomain, nAccessMask, objACE)
|
|
End Function
|
|
|
|
|
|
Function GetAce(strObjPath, objService, strName, strDomain, nAccessMask, ByRef objACE)
|
|
|
|
Dim objAcct 'holds query result
|
|
Dim objSID 'holds security identifier
|
|
Dim objTrustee 'holds trustee value
|
|
|
|
GetAce = FALSE
|
|
|
|
set objAcct = objService.Get(strObjPath)
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut( "inc_userngroups", "Failed to get object " & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
|
|
set objSID = objService.Get("Win32_SID.SID='" & objAcct.SID & "'")
|
|
if Err.number <> 0 then
|
|
Call SA_TraceOut( "inc_userngroups", "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
|
|
Call SA_TraceOut( "inc_userngroups", "Failed to get new Instance of Win32_Trustee " & "(" & Hex(Err.Number) & ")" )
|
|
exit function
|
|
end if
|
|
|
|
objTrustee.Name = strName
|
|
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
|
|
Call SA_TraceOut( "inc_userngroups", "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
|
|
GetAce = TRUE
|
|
|
|
|
|
'Release objects
|
|
set objAcct = nothing
|
|
set objSID = nothing
|
|
set objTrustee = nothing
|
|
|
|
End Function
|
|
|
|
%>
|