mirror of
https://github.com/samba-team/samba.git
synced 2025-11-07 12:23:51 +03:00
r5335: Add a Close() method to SamrHandle object.
Add methods for {Query,Set}Security, Shutdown, CreateUser,
Open{User,Group,Alias} and RidToSid.
Time for a torture test I think!
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
a28ca320dc
commit
94a3ff2380
@@ -98,11 +98,34 @@ class SamrHandle:
|
|||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
|
||||||
|
if self.handle is not None:
|
||||||
|
self.Close()
|
||||||
|
|
||||||
|
def Close(self):
|
||||||
|
|
||||||
r = dcerpc.samr_Close()
|
r = dcerpc.samr_Close()
|
||||||
r.data_in.handle = self.handle
|
r.data_in.handle = self.handle
|
||||||
|
|
||||||
dcerpc.dcerpc_samr_Close(self.pipe, r)
|
dcerpc.dcerpc_samr_Close(self.pipe, r)
|
||||||
|
|
||||||
|
self.handle = None
|
||||||
|
|
||||||
|
def QuerySecurity(self, sec_info = 7):
|
||||||
|
|
||||||
|
r = dcerpc.samr_QuerySecurity()
|
||||||
|
r.data_in.handle = self.handle
|
||||||
|
r.data_in.sec_info = sec_info
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_QuerySecurity(self.pipe, r)
|
||||||
|
|
||||||
|
return r.data_out.sdbuf.sd
|
||||||
|
|
||||||
|
def SetSecurity(self, sec_info = 7):
|
||||||
|
|
||||||
|
r = dcerpc.samr_SetSecurity()
|
||||||
|
r.data_in.handle = self.handle
|
||||||
|
r.data_in.sec_info = sec_info
|
||||||
|
|
||||||
|
|
||||||
class ConnectHandle(SamrHandle):
|
class ConnectHandle(SamrHandle):
|
||||||
|
|
||||||
@@ -151,6 +174,13 @@ class ConnectHandle(SamrHandle):
|
|||||||
|
|
||||||
return DomainHandle(self.pipe, r.data_out.domain_handle)
|
return DomainHandle(self.pipe, r.data_out.domain_handle)
|
||||||
|
|
||||||
|
def Shutdown(self):
|
||||||
|
|
||||||
|
r = dcerpc.samr_Shutdown()
|
||||||
|
r.data_in.connect_handle = self.handle
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_Shutdown(self.pipe, r)
|
||||||
|
|
||||||
|
|
||||||
class DomainHandle(SamrHandle):
|
class DomainHandle(SamrHandle):
|
||||||
|
|
||||||
@@ -231,8 +261,75 @@ class DomainHandle(SamrHandle):
|
|||||||
|
|
||||||
return users
|
return users
|
||||||
|
|
||||||
|
def CreateUser(self, account_name, access_mask = 0x02000000):
|
||||||
|
|
||||||
def Connect(pipe, system_name = '', access_mask = 0x02000000):
|
r = dcerpc.samr_CreateUser()
|
||||||
|
r.data_in.domain_handle = self.handle
|
||||||
|
r.data_in.account_name = dcerpc.samr_String()
|
||||||
|
r.data_in.account_name.string = account_name
|
||||||
|
r.data_in.access_mask = access_mask
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_CreateUser(self.pipe, r)
|
||||||
|
|
||||||
|
return (r.data_out.user_handle,
|
||||||
|
dcerpc.uint32_array_getitem(r.data_out.rid, 0))
|
||||||
|
|
||||||
|
def OpenUser(self, rid, access_mask = 0x02000000):
|
||||||
|
|
||||||
|
r = dcerpc.samr_OpenUser()
|
||||||
|
r.data_in.domain_handle = self.handle
|
||||||
|
r.data_in.access_mask = access_mask
|
||||||
|
r.data_in.rid = rid
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_OpenUser(self.pipe, r)
|
||||||
|
|
||||||
|
return UserHandle(pipe, r.data_out.user_handle)
|
||||||
|
|
||||||
|
def OpenGroup(self, rid, access_mask = 0x02000000):
|
||||||
|
|
||||||
|
r = dcerpc.samr_OpenGroup()
|
||||||
|
r.data_in.domain_handle = self.handle
|
||||||
|
r.data_in.access_mask = access_mask
|
||||||
|
r.data_in.rid = rid
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_OpenGroup(self.pipe, r)
|
||||||
|
|
||||||
|
return GroupHandle(pipe, r.data_out.group_handle)
|
||||||
|
|
||||||
|
def OpenAlias(self, rid, access_mask = 0x02000000):
|
||||||
|
|
||||||
|
r = dcerpc.samr_OpenAlias()
|
||||||
|
r.data_in.domain_handle = self.handle
|
||||||
|
r.data_in.access_mask = access_mask
|
||||||
|
r.data_in.rid = rid
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_OpenAlias(self.pipe, r)
|
||||||
|
|
||||||
|
return AliasHandle(pipe, r.data_out.group_handle)
|
||||||
|
|
||||||
|
def RidToSid(self, rid):
|
||||||
|
|
||||||
|
r = dcerpc.samr_RidToSid()
|
||||||
|
r.data_in.domain_handle = self.handle
|
||||||
|
|
||||||
|
result = dcerpc.dcerpc_samr_RidToSid(self.pipe, r)
|
||||||
|
|
||||||
|
return sid_to_string(r.data_out.sid)
|
||||||
|
|
||||||
|
|
||||||
|
class UserHandle(SamrHandle):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class GroupHandle(SamrHandle):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class AliasHandle(SamrHandle):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def Connect2(pipe, system_name = '', access_mask = 0x02000000):
|
||||||
"""Connect to the SAMR pipe."""
|
"""Connect to the SAMR pipe."""
|
||||||
|
|
||||||
r = dcerpc.samr_Connect2()
|
r = dcerpc.samr_Connect2()
|
||||||
@@ -242,3 +339,53 @@ def Connect(pipe, system_name = '', access_mask = 0x02000000):
|
|||||||
result = dcerpc.dcerpc_samr_Connect2(pipe, r)
|
result = dcerpc.dcerpc_samr_Connect2(pipe, r)
|
||||||
|
|
||||||
return ConnectHandle(pipe, r.data_out.connect_handle)
|
return ConnectHandle(pipe, r.data_out.connect_handle)
|
||||||
|
|
||||||
|
# CreateDomainGroup
|
||||||
|
# CreateDomAlias
|
||||||
|
# GetAliasMembership
|
||||||
|
# LookupNames
|
||||||
|
# QueryGroupInfo
|
||||||
|
# SetGroupInfo
|
||||||
|
# AddGroupMember
|
||||||
|
# DeleteDomainGroup
|
||||||
|
# DeleteGroupMember
|
||||||
|
# QueryGroupMember
|
||||||
|
# SetMemberAttributesofGroup
|
||||||
|
# QueryAliasInfo
|
||||||
|
# SetAliasInfo
|
||||||
|
# DeleteDomAlias
|
||||||
|
# AddAliasMember
|
||||||
|
# DeleteAliasMember
|
||||||
|
# GetMembersinAlias
|
||||||
|
# DeleteUser
|
||||||
|
# QueryUserInfo
|
||||||
|
# SetUserInfo
|
||||||
|
# ChangePasswordUser
|
||||||
|
# GetGroupsForUser
|
||||||
|
# QueryDisplayInfo
|
||||||
|
# GetDisplayEnumerationIndex
|
||||||
|
# TestPrivateFunctionsDomain
|
||||||
|
# TestPrivateFunctionsUser
|
||||||
|
# GetUserPwInfo
|
||||||
|
# RemoveMemberFromForeignDomain
|
||||||
|
# QueryDomainInfo2
|
||||||
|
# QueryUserInfo2
|
||||||
|
# QueryDisplayInfo2
|
||||||
|
# GetDisplayEnumerationIndex2
|
||||||
|
# CreateUser2
|
||||||
|
# QueryDisplayInfo3
|
||||||
|
# AddMultipleMembersToAlias
|
||||||
|
# RemoveMultipleMembersFromAlias
|
||||||
|
# OemChangePasswordUser2
|
||||||
|
# ChangePasswordUser2
|
||||||
|
# GetDomPwInfo
|
||||||
|
# Connect
|
||||||
|
# SetUserInfo2
|
||||||
|
# SetBootKeyInformation
|
||||||
|
# GetBootKeyInformation
|
||||||
|
# Connect3
|
||||||
|
# Connect4
|
||||||
|
# ChangePasswordUser3
|
||||||
|
# Connect5
|
||||||
|
# SetDsrmPassword
|
||||||
|
# ValidatePassword
|
||||||
|
|||||||
Reference in New Issue
Block a user