svn commit: lorikeet r392 - in trunk/sangria/src/LatestDesign/classes: . GroupManager

amit at samba.org amit at samba.org
Thu Aug 4 04:22:52 GMT 2005


Author: amit
Date: 2005-08-04 04:22:51 +0000 (Thu, 04 Aug 2005)
New Revision: 392

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=392

Log:
new class added to manage the group. creation , deletion ang group mapping if possible 
Added:
   trunk/sangria/src/LatestDesign/classes/GroupManager/
   trunk/sangria/src/LatestDesign/classes/GroupManager/GroupManagerClass.py


Changeset:
Added: trunk/sangria/src/LatestDesign/classes/GroupManager/GroupManagerClass.py
===================================================================
--- trunk/sangria/src/LatestDesign/classes/GroupManager/GroupManagerClass.py	2005-08-02 19:34:41 UTC (rev 391)
+++ trunk/sangria/src/LatestDesign/classes/GroupManager/GroupManagerClass.py	2005-08-04 04:22:51 UTC (rev 392)
@@ -0,0 +1,207 @@
+
+import sys,os,commands
+import string
+
+
+class GroupManager:
+
+    def __init__(self, GroupFile):
+        self.GroupFile = GroupFile
+
+    ### method for UNIX group Handling ...
+
+    def AddUnixGroup(self, GroupName):
+        ''' add a user group '''
+        
+        cmd = "groupadd %s" %(GroupName)
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        return 1  
+
+    def ListUnixGroups(self):
+
+        list = []
+        groupFile = file(self.GroupFile , 'r+')
+        line = groupFile.readline()
+        while line:
+            split = string.split(line , ':')
+            list.append(split[0])
+            line = groupFile.readline()
+        groupFile.close()
+        return list
+        
+
+    def CheckIfUnixGroupExist(self, GroupName):
+        for name in self.ListUnixGroups():
+            if name == GroupName:
+                return 1
+        return 0
+
+
+    def RemoveUnixGroup(self, GroupName):
+
+        cmd = "groupdel %s" %(GroupName)
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        return 1   
+
+    
+    def AddUserToUnixGroup(self, UserName , GroupName):
+        cmd = "usermod -G %s %s"%( GroupName , UserName)
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+        return 1   
+
+    def RemoveUserFromUnixGroup(self, UserName , GroupName):
+        ''' delete the userName from the line corresponding to the GroupName in /etc/group
+                                            or
+            know all users in that group and then delete the group and add the group for all other users ... 
+        '''
+
+        ret = self.CheckIfUnixGroupExist(GroupName)
+        if not ret:
+            return 0
+        
+        users_in_group = self.ListUsersInUnixGroup(GroupName)
+        if not users_in_group:
+            return 0
+        ret = self.RemoveUnixGroup(GroupName)
+        if ret:
+            ret = self.AddUnixGroup(GroupName)
+            
+        for user in users_in_group:
+            if not user == UserName:
+                self.AddUserToUnixGroup(user, GroupName)
+        
+    def ListUsersInUnixGroup(self , GroupName):
+        ''' the slash n at the end is giving problems '''
+        ret = self.CheckIfUnixGroupExist(GroupName)
+        if not ret:
+            return 0 
+        list = []
+        groupFile = file(self.GroupFile , 'r+')
+        line = groupFile.readline()
+        while line:
+            split = string.split(line , ':')
+            if split[0] == GroupName:
+                resplit = string.split(split[3] , ',')
+                for i in range(0 , len(resplit)):
+                    list.append(string.strip(resplit[i]))
+                return list
+            line = groupFile.readline()
+        groupFile.close()
+        return 0
+
+
+
+    ### methods for SAMBA group Handling ...
+
+    def GetMaxRID(self):
+        ''' returns the maximum RID value '''
+        
+        cmd = "net maxrid"
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        split = string.split(cmd_output , ":")
+        rid = string.atoi(split[1])
+        return rid   
+
+    
+    def AddSambaGroup(self, sambagroupnameORntgroup , unixgroup , type = None ):
+        '''{rid=int|sid=string} unixgroup=string [type={domain|local}] [ntgroup=string] [comment=string]'''
+
+        rid = self.GetMaxRID() + 1
+        cmd = "net groupmap add ntgroup=\"%s\" unixgroup=\"%s\" rid=%d"%(sambagroupnameORntgroup,unixgroup , rid)
+        if type:
+            cmd = cmd+" type=%s"%type
+                
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        return 1   
+        
+
+    def ModifySambaGroup(self, sambagroupnameORntgroup , unixgroup=None , type=None):
+        ''' possible things you can do with this ... 
+            for a samba group name .. change the Unix group ... and the type ... 
+            {ntgroup=string|sid=SID} [unixgroup=string] [comment=string] [type={domain|local}] '''
+
+        cmd = "net groupmap modify ntgroup=%s"%(sambagroupnameORntgroup)
+        if type:
+            cmd = cmd+" type=%s"%type
+        if unixgroup:
+            cmd = cmd+" unixgroup=%s"%unixgroup
+                
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        return 1   
+
+    def RemoveSambaGroup(self, sambagroupnameORntgroup ):
+        ''' {ntgroup=string|sid=SID}'''
+        
+        cmd = "net groupmap delete ntgroup=\"%s\""%sambagroupnameORntgroup
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+
+        return 1   
+
+    def ListSambaGroups(self, ntgroup = None , SID = None):
+        '''[verbose] [ntgroup=string] [sid=SID]'''
+
+        cmd = "net groupmap list"
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+        
+        print cmd_output
+        return 1   
+
+    def ModifyUserSID(self, UserName , SID):
+        
+        cmd = "pdbedit -U %s -u %s"%( SID , UserName)
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+        return 1   
+        
+
+    def ModifyGroupSID(self, UserName , SID):
+        cmd = "pdbedit -G %s -u %s"%( SID , UserName)
+        ( status, cmd_output ) = commands.getstatusoutput( cmd )
+        if status:
+                print cmd_output
+                return 0
+        return 1
+
+    def AddGroupMap_WINgroupToUnixGroup(self, WinGroup , UnixGroup , Type = None):
+        return self.AddSambaGroup(WinGroup , UnixGroup , Type)
+
+    def ModifyGroupMap_WINgroupToUnixGroup(self, WinGroup , UnixGroup , Type = None):
+        self.ModifySambaGroup(WinGroup , UnixGroup , Type)
+
+    def RemoveGroupMap_WINgroupToUnixGroup(self, WinGroup):
+        self.RemoveSambaGroup(WinGroup)
+        
+    
+    
+        



More information about the samba-cvs mailing list