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

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

should support ' in names although it's not advised

File size: 4.1 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                        command='rsync -rltgD /etc/skel-net/ "%s"'%nethome
55                        p1=os.system(command)
56                       
57                        #out = p1.communicate()
58                       
59                        '''
60                                #chown -R user:guser
61                                #chmod 770 for all directories
62                                #chmod 660 for all files
63                        '''
64                        os.lchown(nethome, nobody_id,usergid)
65                        for base ,directories, files in os.walk(nethome):
66                                for directori in directories:
67                                        auxpath = os.path.join(base ,directori)
68                                        os.lchown(auxpath,userid,usergid)
69                                        os.chmod(auxpath,02770)
70                       
71                                for auxfile in files:
72                                        auxpath = os.path.join(base,auxfile)
73                                        os.chown(auxpath,userid,usergid)
74                                        os.chmod(auxpath,0660) 
75                        # for
76
77                        # restore old umask
78                        os.chmod(nethome,02770)
79                        os.umask(prevmask)
80                        for acl in self.home_acls:
81                                #command='setfacl %s "%s"'%(acl%str(userid),pipes.quote(nethome))
82                                command='setfacl %s "%s"'%(acl%str(userid),nethome)
83                                os.system(command)
84                return nethome
85               
86               
87        #def createHome
88       
89        def delete_home(self,user_info):
90                nethome = os.path.join(self.nethome_path,user_info["profile"],user_info["uid"])
91                self.delete_directory(nethome)
92                return nethome
93       
94        #def delete_home
95       
96       
97        def delete_directory(self,directorypath):
98               
99                if os.path.exists(directorypath):
100                        try:
101                                shutil.rmtree(directorypath)
102                        except OSError:
103                                print "This path is a link"
104                        except :
105                                pass
106                else:
107                        print "This path not exist "
108        #def delete_directory
109       
110        def exist_home_or_create(self,user_info,mode=0):
111
112                group = user_info["profile"]
113                uid = user_info["uid"]
114                nethome = os.path.join(self.nethome_path,group,uid)
115
116                if not os.path.exists(nethome):
117                        return self.create_home(user_info)
118                else:
119                        if mode==0:
120                                #os.system("chown -R " + uid + ":nogroup '" + pipes.quote(nethome) + "'")
121                                command='chown -R ' + uid + ':nogroup "' + nethome + '"'
122                                os.system(command)
123                return False
124
125        #def exist_home_or_create
126       
127       
128        def check_main_folder(self):
129       
130                if not os.path.exists(self.groups_path):
131                               
132                                try:
133                                        os.mkdir(self.groups_path,0775)
134                                except Exception as e:
135                                        print(e)
136                                        return -1
137                                       
138                return 0
139       
140       
141        def create_group_folder(self,group_name):
142               
143                prevmask = os.umask(0)
144                ok=True
145               
146                self.check_main_folder()
147               
148                if not os.path.exists(self.groups_path+group_name):
149                       
150                        try:
151                                os.mkdir(self.groups_path+group_name,0750)
152                        except Exception as e:
153                                print(e)
154                                os.umask(prevmask)
155                                return -2
156
157                else:
158                        os.chmod(self.groups_path+group_name,0750)
159
160                try:
161
162                        gid=grp.getgrnam(group_name).gr_gid
163                        os.chown(self.groups_path+group_name,0,int(gid))
164                        #command="setfacl %s '%s'"%(" ".join(self.acls),pipes.quote(self.groups_path+group_name))
165                        command='setfacl %s "%s"'%(" ".join(self.acls),self.groups_path+group_name)
166                        os.system(command)
167                       
168                except Exception as e:
169                        print(e)
170                        os.umask(prevmask)
171                        return -3
172
173                os.umask(prevmask)
174                return 0
175               
176        #def create_group_folder
177       
178        def remove_group_folder(self,group_name):
179               
180                try:
181                        shutil.rmtree(self.groups_path+group_name)
182                except Exception as e:
183                        print(e)
184                       
185                return True
186       
187       
188       
189if __name__=="__main__":
190        n=NetFilesManager(1)
Note: See TracBrowser for help on using the repository browser.