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

Last change on this file since 7606 was 7606, checked in by hectorgh, 17 months ago

fixed syntax error

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