source: n4d-server-plugins/trunk/fuentes/server-install-files/usr/share/n4d/python-plugins/NetFilesManager.py @ 6723

Last change on this file since 6723 was 6723, checked in by hectorgh, 20 months ago

escaping bash special chars when calling bash commands

File size: 3.8 KB
Line 
1import subprocess
2import os
3import shutil
4import os.path
5import grp
6import pwd
7import pipes
8
9class NetFilesManager:
10       
11        CONF_FOLDER="/var/lib/lliurex-folders/"
12       
13       
14        def __init__(self,llxvar=None):
15
16                self.llxvar = llxvar
17                self.net_path = "/net/server-sync/"
18                self.nethome_path = os.path.join(self.net_path ,"home")
19               
20                self.groups_path=self.net_path+"/groups_share/"         
21               
22                self.acls=[]
23                self.acls.append("-m g:teachers:rwx")
24                self.acls.append("-m g:admins:rwx")
25               
26                self.home_acls=[]
27                self.home_acls.append("-m u:%s:rwx")
28               
29                self.check_main_folder()
30
31        def startup(self,options):
32               
33                pass
34               
35               
36        #def startup
37
38               
39               
40        def create_home(self,user_info):
41                group = user_info["profile"]
42                uid = user_info["uid"]
43                nethome = os.path.join(self.nethome_path,group,uid)
44               
45                if not os.path.exists(nethome):
46                        userid = int(user_info["uidNumber"])
47                        nobody_id = int(pwd.getpwnam("nobody").pw_uid)
48                        usergid = int(grp.getgrnam("nogroup").gr_gid) 
49                        #fix umask for fix correct permission
50                        prevmask = os.umask(0)
51                        os.mkdir(nethome,02770)
52                        #shutils.copytree("/etc/skel/UserFiles",nethome,symlinks=True)
53                        p1=subprocess.Popen(["rsync","-rltgD","/etc/skel-net/",pipes.quote(nethome)])
54                        out = p1.communicate()
55                       
56                        '''
57                                #chown -R user:guser
58                                #chmod 770 for all directories
59                                #chmod 660 for all files
60                        '''
61                        os.lchown(nethome, nobody_id,usergid)
62                        for base ,directories, files in os.walk(nethome):
63                                for directori in directories:
64                                        auxpath = os.path.join(base ,directori)
65                                        os.lchown(auxpath,userid,usergid)
66                                        os.chmod(auxpath,02770)
67                       
68                                for auxfile in files:
69                                        auxpath = os.path.join(base,auxfile)
70                                        os.chown(auxpath,userid,usergid)
71                                        os.chmod(auxpath,0660) 
72                        # for
73
74                        # restore old umask
75                        os.chmod(nethome,02770)
76                        os.umask(prevmask)
77                        for acl in self.home_acls:
78                                command="setfacl %s '%s'"%(acl%str(userid),pipes.quote(nethome))
79                                os.system(command)
80                return nethome
81               
82               
83        #def createHome
84       
85        def delete_home(self,user_info):
86                nethome = os.path.join(self.nethome_path,user_info["profile"],user_info["uid"])
87                self.delete_directory(nethome)
88                return nethome
89       
90        #def delete_home
91       
92       
93        def delete_directory(self,directorypath):
94               
95                if os.path.exists(directorypath):
96                        try:
97                                shutil.rmtree(directorypath)
98                        except OSError:
99                                print "This path is a link"
100                        except :
101                                pass
102                else:
103                        print "This path not exist "
104        #def delete_directory
105       
106        def exist_home_or_create(self,user_info,mode=0):
107
108                group = user_info["profile"]
109                uid = user_info["uid"]
110                nethome = os.path.join(self.nethome_path,group,uid)
111
112                if not os.path.exists(nethome):
113                        return self.create_home(user_info)
114                else:
115                        if mode==0:
116                                os.system("chown -R " + uid + ":nogroup '" + pipes.quote(nethome) + "'")
117                return False
118
119        #def exist_home_or_create
120       
121       
122        def check_main_folder(self):
123       
124                if not os.path.exists(self.groups_path):
125                               
126                                try:
127                                        os.mkdir(self.groups_path,0775)
128                                except Exception as e:
129                                        print(e)
130                                        return -1
131                                       
132                return 0
133       
134       
135        def create_group_folder(self,group_name):
136               
137                prevmask = os.umask(0)
138                ok=True
139               
140                self.check_main_folder()
141               
142                if not os.path.exists(self.groups_path+group_name):
143                       
144                        try:
145                                os.mkdir(self.groups_path+group_name,0750)
146                        except Exception as e:
147                                print(e)
148                                os.umask(prevmask)
149                                return -2
150
151                else:
152                        os.chmod(self.groups_path+group_name,0750)
153
154                try:
155
156                        gid=grp.getgrnam(group_name).gr_gid
157                        os.chown(self.groups_path+group_name,0,int(gid))
158                        command="setfacl %s '%s'"%(" ".join(self.acls),pipes.quote(self.groups_path+group_name))
159                        os.system(command)
160                       
161                except Exception as e:
162                        print(e)
163                        os.umask(prevmask)
164                        return -3
165
166                os.umask(prevmask)
167                return 0
168               
169        #def create_group_folder
170       
171        def remove_group_folder(self,group_name):
172               
173                try:
174                        shutil.rmtree(self.groups_path+group_name)
175                except Exception as e:
176                        print(e)
177                       
178                return True
179       
180       
181       
182if __name__=="__main__":
183        n=NetFilesManager(1)
Note: See TracBrowser for help on using the repository browser.