source: client-mount/trunk/fuentes/install-files/usr/share/n4d/python-plugins/ClientPamMount.py @ 6601

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

configure_xml is only executed on boot

File size: 1.8 KB
Line 
1#!/usr/bin/env python
2
3import os
4import shutil
5import tempfile
6import threading
7
8class ClientPamMount:
9       
10        def __init__(self):
11               
12                self.pam_skel="/etc/security/pam_mount.conf.xml.lliurex.skel"
13                self.pam_file="/etc/security/pam_mount.conf.xml.lliurex"
14                self.key="%%SERVER%%"
15               
16        #def init
17
18
19        def startup(self,options):
20               
21                if options["boot"]:
22                        t = threading.Thread(target=self._startup)
23                        t.daemon = True
24                        t.start()
25               
26        #def startup
27
28
29        def _startup(self):
30               
31                try:
32                        if os.path.exists(self.pam_skel):
33                                self.configure_xml()
34                except Exception as e:
35                        print(str(e))
36                       
37        #def _startup
38       
39       
40        def uchmod(self,file,mode):
41               
42                prevmask = os.umask(0)
43                os.chmod(file,mode)
44                os.umask(prevmask)
45               
46        #def uchmod
47
48       
49        def configure_xml(self):
50
51                configured=False
52
53                # Making sure we're able to read SRV_IP var from server
54                tries=10
55                for x in range(0,tries):
56                       
57                        ip=objects["VariablesManager"].get_variable("SRV_IP")
58                        if ip != None:
59                                f=open(self.pam_skel)
60                                tmp,filename=tempfile.mkstemp()
61                                tmp_file = open(filename,'w')
62                       
63                                for line in f.readlines():
64                                        tmp_file.write(line.replace(self.key,ip))
65                               
66                                f.close()
67                                tmp_file.close()
68                                self.uchmod(filename,0644)                             
69
70                                shutil.copy(filename,self.pam_file)
71                                os.remove(filename)
72                               
73                                configured=True
74                                break
75                               
76                        else:
77                                # lets sleep and try again
78                                time.sleep(1)
79               
80                if configured:
81                        return {"status":True,"msg":"Configured to %s"%ip}
82                else:
83                        # fallback to 'server'
84                        f=open(self.pam_skel)
85                        tmp,filename=tempfile.mkstemp()
86                        tmp_file = open(filename,'w')
87                        for line in f.readlines():
88                                tmp_file.write(line.replace(self.key,"server"))
89                               
90                        f.close()
91                        tmp_file.close()
92                        self.uchmod(filename,0644)
93                               
94                        shutil.copy(filename,self.pam_file)
95                        os.remove(filename)
96                       
97                        return {"status":False,"msg":"Fallen back to 'server'"}
98
99        #def configure_xml
100       
Note: See TracBrowser for help on using the repository browser.