summaryrefslogtreecommitdiff
path: root/source4/scripting/swig
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2005-02-11 11:18:19 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:44 -0500
commit4180eedd6d8a926d7a2f25b14b7a2cad084b44a9 (patch)
treeeb6720c50cca563f7ee38c6ead8a80012d6f9c70 /source4/scripting/swig
parent6f01a68faa5cf17b41f15f55e97620acfee59025 (diff)
downloadsamba-4180eedd6d8a926d7a2f25b14b7a2cad084b44a9.tar.gz
samba-4180eedd6d8a926d7a2f25b14b7a2cad084b44a9.tar.bz2
samba-4180eedd6d8a926d7a2f25b14b7a2cad084b44a9.zip
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 used to be commit 94a3ff2380071efccf19ca51488753d3513ab63c)
Diffstat (limited to 'source4/scripting/swig')
-rw-r--r--source4/scripting/swig/samr.py149
1 files changed, 148 insertions, 1 deletions
diff --git a/source4/scripting/swig/samr.py b/source4/scripting/swig/samr.py
index 3c36c9980b..ae3f9c77f1 100644
--- a/source4/scripting/swig/samr.py
+++ b/source4/scripting/swig/samr.py
@@ -98,11 +98,34 @@ class SamrHandle:
def __del__(self):
+ if self.handle is not None:
+ self.Close()
+
+ def Close(self):
+
r = dcerpc.samr_Close()
r.data_in.handle = self.handle
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):
@@ -151,6 +174,13 @@ class ConnectHandle(SamrHandle):
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):
@@ -231,8 +261,75 @@ class DomainHandle(SamrHandle):
return users
+ def CreateUser(self, account_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):
-def Connect(pipe, system_name = '', 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."""
r = dcerpc.samr_Connect2()
@@ -242,3 +339,53 @@ def Connect(pipe, system_name = '', access_mask = 0x02000000):
result = dcerpc.dcerpc_samr_Connect2(pipe, r)
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