source: home-eraser/trunk/fuentes/home-eraser-server.install/usr/share/n4d/python-plugins/HomeEraserServer.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: 6.0 KB
Line 
1import os
2import pwd
3import logging
4import shutil
5
6class HomeEraserServer:
7       
8        logging.basicConfig(format = '%(asctime)s %(message)s',datefmt = '%m/%d/%Y %I:%M:%S %p',filename = '/var/log/home-eraser.log',level=logging.DEBUG)
9       
10        DEBUG=False
11       
12        def lprint(self,arg):
13               
14                logging.debug(arg)
15               
16        #def_lprint
17       
18        def dprint(self,arg):
19               
20                self.lprint("[HomeEraserServer] %s"%arg)
21                if HomeEraserServer.DEBUG:
22                        print("[HomeEraserServer] %s"%arg)
23               
24        #def dprint
25       
26        def delete_home(self,groups_delete=[]):
27               
28                home_dir="/home"
29                run_dir="/run"
30                home_list={}
31                deleted=[]
32               
33                try:
34                        self.dprint("****************************")
35                        self.dprint("*********** APPLY **********")
36                        self.dprint("")
37                        self.dprint("Groups to deleted: %s"%groups_delete)
38
39                        if ( len(groups_delete) > 0 ):
40
41                                for dirname in os.listdir(home_dir):
42                                         
43                                        dir_path=os.path.join(home_dir,dirname)
44                                        self.dprint("")
45                                        self.dprint("Discover in home: %s"%dir_path)
46                                        self.dprint("-----------------------------")
47                                               
48                                        if ( os.path.islink(dir_path) == False) & ( os.path.isfile(dir_path) == False ):
49                                                run_path=os.path.join(run_dir,dirname)
50                                                run_path_home=os.path.join(run_path,"home")
51                                                run_path_share=os.path.join(run_path,"share")
52
53                                                if ( os.path.ismount(run_path_home) == False ) & ( os.path.ismount(run_path_share) == False ):
54
55                                                        self.dprint("Directory can be deleted: %s"%(dirname))
56                                                        try:
57                                                                ownername= pwd.getpwuid(os.stat(dir_path).st_uid).pw_name
58                                                        except:
59                                                                ownername="unknow"
60                                                                self.dprint("Ownername is unknow for %s"%dir_path)
61                                                       
62                                                        #uid=pwd.getpwuid(os.stat(dir_path).st_uid).pw_uid
63                                                        try:
64                                                                uid=os.stat(dir_path).st_uid
65                                                               
66                                                        except:
67                                                                uid="0"
68                                                                self.dprint("UID is unknow for %s"%dir_path)
69                                                               
70                                                        self.dprint("Testing group for: %s    with uid: %s"%(dir_path,uid))
71                                                        self.dprint("In groups: %s"%groups_delete)
72                                                        if self.insert_to_delete(uid, groups_delete)[0]:
73                                                                self.dprint("RESUME: +++++...ADDED to delete list")
74                                                                home_list[dirname]={}
75                                                                home_list[dirname]["path"]=dir_path
76                                                                home_list[dirname]["owner"]=ownername
77                                                                home_list[dirname]["uid"]=uid
78                                                        else:
79                                                        self.dprint("RESUME: Cannot be deleted because is not in group allowed")
80                                                else:
81                                                        self.dprint("RESUME: Cannot be deleted because this user has folders mounted.")
82                               
83                                self.dprint("------------------")
84                                self.dprint("Resume paths to delete: %s"%home_list)
85       
86                               
87                                if ( len(home_list) > 0 ):
88                                        deleted=self.delete_home_local(home_list)[1]
89
90                        return [True, deleted]
91               
92                except Exception as e:
93                        print ("[HomeEraserServer] %s"%e)
94                        self.dprint ("[HomeEraserServer] %s"%e)
95                        return [False,str(e)]
96                       
97        #def_delete_home
98               
99               
100               
101               
102        def insert_to_delete (self,uid=0,groups_delete=[]):
103               
104                try:           
105                        for group in groups_delete:
106                                self.dprint(group)
107                                if ( str(group) == "students" ):
108                                        self.dprint("testing group students.....")
109                                        arg1=20000
110                                        arg2=50000
111                                        if self.test_user(uid,arg1,arg2)[0]:
112                                                return[True]
113                                       
114                                elif ( str(group) == "teachers" ):
115                                        self.dprint("testing group teachers.....")
116                                        arg1=5000
117                                        arg2=10000
118                                        if self.test_user(uid,arg1,arg2)[0]:
119                                                return[True]
120                                       
121                                elif ( str(group) == "admins" ):
122                                        self.dprint("testing group admins.....")
123                                        arg1=1042
124                                        arg2=5000
125                                        if self.test_user(uid,arg1,arg2)[0]:
126                                                return[True]
127                                else:
128                                        self.dprint("....this group cannot be deleted")
129                                       
130                        return[False]
131                       
132               
133                except Exception as e:
134                        print ("[HomeEraserServer] %s"%e)
135                        self.dprint ("[HomeEraserServer] %s"%e)
136                        return [False,str(e)]
137                       
138        #def_insert_to_delete
139
140
141       
142       
143        def test_user(self,uid=0,arg1=0,arg2=0):
144               
145                try:
146                        if (  uid >= arg1 ) & ( uid  < arg2  ):
147                                self.dprint("....is include in selected groups to delete")
148                                return [True]
149                        else:
150                                return [False]
151                       
152                except Exception as e:
153                        print ("[HomeEraserServer] %s"%e)
154                        self.dprint ("[HomeEraserServer] %s"%e)
155                        return [False,str(e)]
156                       
157        #def_test_user
158
159
160
161
162        def delete_home_local(self, home_list={}):
163               
164                deleted=[]
165               
166                try:
167                        for delete in home_list:
168                                        #INSTRUCCION PARA EL BORRADO DEL DIRECTORIO
169                                        self.dprint("Path deleted: %s"%home_list[delete]["path"] )
170                                        deleted.append(home_list[delete]["path"])
171                                        try:
172                                                shutil.rmtree(home_list[delete]["path"])
173                                        except Exception as r_ex:
174                                                self.dprint("[HomeEraserServer] %s"%r_ex)
175                                       
176                                       
177                        self.dprint("Deleted this paths: %s"%deleted)
178                        return [True, deleted]
179               
180                except Exception as e:
181                        print ("[HomeEraserServer] %s"%e)
182                        self.dprint("[HomeEraserServer] %s"%e)
183                        return [False,str(e)]
184                       
185        #def_delete_home_local
186       
187       
188       
189       
190       
191       
192        def delete_net_home(self,groups_delete=[]):
193               
194                net_dir="/net/server-sync/home/"
195                net_list={}
196                deleted=[]
197               
198                try:
199                        self.dprint("*********************")
200                        self.dprint("*********** DELETING /NET DIRECTORIES **********")
201                        self.dprint("")
202                        self.dprint("Groups to deleted: %s"%groups_delete)
203
204                        if ( len(groups_delete) > 0 ):
205                               
206                                for group in groups_delete:
207                                       
208                                        self.dprint("-----------------------------")
209                                        dir_delete_path=os.path.join(net_dir,group)
210                                        self.dprint("Deleting users from: %s"%(dir_delete_path))
211                                       
212                                        for dirname in os.listdir(dir_delete_path):
213                                               
214                                                dir_path=os.path.join(dir_delete_path,dirname)
215                                                self.dprint("")
216                                                self.dprint("Discover in net: %s"%dir_path)
217                                                if ( os.path.islink(dir_path) == False) & ( os.path.isfile(dir_path) == False ):
218                                                        self.dprint("Adding to to delete.....")
219                                                        net_list[dirname]={}
220                                                        net_list[dirname]["path"]=dir_path
221                                #self.dprint("------------RESUME-------------")                 
222                                #self.dprint("Deleting this paths: %s"%net_list)       
223                                ret=self.delete_home_local(net_list)
224                               
225                                if ret[0]:
226                                        deleted=deleted+ret[1]
227
228                        if len(deleted)>0:
229                                objects["Golem"].regenerate_net_files()
230               
231                        return [True, deleted]
232               
233                except Exception as e:
234                        print ("[HomeEraserServer] %s"%e)
235                        self.dprint ("[HomeEraserServer] %s"%e)
236                        return [False,str(e)]
237        #def_delete_net_home
238               
239#class HomeEraserServer
Note: See TracBrowser for help on using the repository browser.