source: home-eraser/trunk/fuentes/home-eraser-client.install/usr/share/n4d/python-plugins/HomeEraserClient.py @ 7614

Last change on this file since 7614 was 7614, checked in by daduve, 17 months ago

Adding test to do not delete if some folder is mounted

File size: 4.2 KB
Line 
1import os
2import pwd
3import shutil
4
5class HomeEraserClient:
6       
7        DEBUG=False
8       
9        def dprint(self,arg):
10               
11                if HomeEraserClient.DEBUG:
12                        print("[HomeEraserClient] %s"%arg)
13               
14        #def dprint
15       
16        def delete_home(self,groups_delete=[]):
17               
18                home_dir="/home"
19                run_dir="/run"
20                home_list={}
21                deleted=[]
22               
23                try:
24                        self.dprint("*********************")
25                        self.dprint("*********** START **********")
26                        self.dprint("")
27                        self.dprint("Groups to deleted: %s"%groups_delete)
28
29                        if ( len(groups_delete) > 0 ):
30
31                                for dirname in os.listdir(home_dir):
32                                         
33                                        dir_path=os.path.join(home_dir,dirname)
34                                        self.dprint("")
35                                        self.dprint("Discover in home: %s"%dir_path)
36                                        self.dprint("-----------------------------")
37                                               
38                                        if ( os.path.islink(dir_path) == False) & ( os.path.isfile(dir_path) == False ):
39                                                run_path=os.path.join(run_dir,dirname)
40                                                run_path_home=os.path.join(run_path,"home")
41                                                run_path_share=os.path.join(run_path,"share")
42
43                                                if ( os.path.ismount(run_path_home) == False ) & ( os.path.ismount(run_path_share) == False ):
44
45                                                        self.dprint("Directory can be deleted: %s"%(dirname))
46                                                        try:
47                                                                ownername= pwd.getpwuid(os.stat(dir_path).st_uid).pw_name
48                                                        except:
49                                                                ownername="unknow"
50                                                                self.dprint("Ownername is unknow for %s"%dir_path)
51                                                       
52                                                        #uid=pwd.getpwuid(os.stat(dir_path).st_uid).pw_uid
53                                                        try:
54                                                                uid=os.stat(dir_path).st_uid
55                                                               
56                                                        except:
57                                                                uid="0"
58                                                                self.dprint("UID is unknow for %s"%dir_path)
59                                                               
60                                                        self.dprint("Testing group for: %s    with uid: %s"%(dir_path,uid))
61                                                        self.dprint("In groups: %s"%groups_delete)
62                                                        if self.insert_to_delete(uid, groups_delete)[0]:
63                                                                self.dprint("RESUME: +++++...ADDED to delete list")
64                                                                home_list[dirname]={}
65                                                                home_list[dirname]["path"]=dir_path
66                                                                home_list[dirname]["owner"]=ownername
67                                                                home_list[dirname]["uid"]=uid
68                                                        else:
69                                                                self.dprint("RESUME: Cannot be deleted because is not in group allowed")
70                                                else:
71                                                        self.dprint("RESUME: Cannot be deleted because this user has folders mounted.")
72                               
73                               
74                                self.dprint("------------------")
75                                self.dprint("Resume paths to delete: %s"%home_list)
76       
77                               
78                                if ( len(home_list) > 0 ):
79                                        deleted=self.delete_home_local(home_list)[1]
80
81                        return [True, deleted]
82               
83                except Exception as e:
84                        print ("[HomeEraserClient] %s"%e)
85                        return [False,str(e)]
86                       
87        #def_delete_home
88               
89               
90               
91               
92        def insert_to_delete (self,uid=0,groups_delete=[]):
93               
94                try:           
95                        for group in groups_delete:
96                                self.dprint(group)
97                                if ( str(group) == "students" ):
98                                        self.dprint("testing group students.....")
99                                        arg1=20000
100                                        arg2=50000
101                                        if self.test_user(uid,arg1,arg2)[0]:
102                                                return[True]
103                                       
104                                elif ( str(group) == "teachers" ):
105                                        self.dprint("testing group teachers.....")
106                                        arg1=5000
107                                        arg2=10000
108                                        if self.test_user(uid,arg1,arg2)[0]:
109                                                return[True]
110                                       
111                                elif ( str(group) == "admins" ):
112                                        self.dprint("testing group admins.....")
113                                        arg1=1042
114                                        arg2=5000
115                                        if self.test_user(uid,arg1,arg2)[0]:
116                                                return[True]
117                                else:
118                                        self.dprint("....this group cannot be deleted")
119                                       
120                        return[False]
121                       
122               
123                except Exception as e:
124                        print ("[HomeEraserClient] %s"%e)
125                        return [False,str(e)]
126                       
127        #def_insert_to_delete
128
129
130       
131       
132        def test_user(self,uid=0,arg1=0,arg2=0):
133               
134                try:
135                        if (  uid >= arg1 ) & ( uid  < arg2  ):
136                                self.dprint("....is include in selected groups to delete")
137                                return [True]
138                        else:
139                                return [False]
140                       
141                except Exception as e:
142                        print ("[HomeEraserClient] %s"%e)
143                        return [False,str(e)]
144                       
145        #def_test_user
146
147
148
149
150        def delete_home_local(self, home_list={}):
151               
152                deleted=[]
153               
154                try:
155                        for delete in home_list:
156                                        #INSTRUCCION PARA EL BORRADO DEL DIRECTORIO
157                                        self.dprint("Path deleted: %s"%home_list[delete]["path"] )
158                                        deleted.append(home_list[delete]["path"])
159                                        try:
160                                                shutil.rmtree(home_list[delete]["path"])
161                                        except Exception as r_ex:
162                                                self.dprint("[HomeEraserClient] %s"%r_ex)
163                                       
164                        self.dprint("Deleted this paths: %s"%deleted)
165                        return [True, deleted]
166               
167                except Exception as e:
168                        print ("[HomeEraserClient] %s"%e)
169                        return [False,str(e)]
170                       
171        #def_delete_home_local
172               
173#class HomeEraserClient
Note: See TracBrowser for help on using the repository browser.