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

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

server is the default option, ip will be used afterwards only if it can be calculated

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                        # revert to server first thing, instead of waiting for a 10times timeout
33                        self.set_address("server")
34                        # Then try to get server ip
35                        self.configure_xml()
36                       
37                except Exception as e:
38                        print(str(e))
39                       
40        #def _startup
41       
42       
43        def uchmod(self,file,mode):
44               
45                prevmask = os.umask(0)
46                os.chmod(file,mode)
47                os.umask(prevmask)
48               
49        #def uchmod
50
51        def set_address(self,address):
52               
53                if os.path.exists(self.pam_skel):
54                       
55                        f=open(self.pam_skel)
56                        tmp,filename=tempfile.mkstemp()
57                        tmp_file = open(filename,'w')
58                        for line in f.readlines():
59                                tmp_file.write(line.replace(self.key,address))
60                               
61                        f.close()
62                        tmp_file.close()
63                        self.uchmod(filename,0644)
64                               
65                        shutil.copy(filename,self.pam_file)
66                        os.remove(filename)
67                       
68                        return True
69                       
70                return False
71               
72        #def set_address
73
74       
75        def configure_xml(self):
76
77                configured=False
78
79                # Making sure we're able to read SRV_IP var from server
80                tries=10
81                for x in range(0,tries):
82                       
83                        ip=objects["VariablesManager"].get_variable("SRV_IP")
84                        if ip != None:
85                               
86                                if self.set_address(ip):
87                                        configured=True
88                                break
89                               
90                        else:
91                                # lets sleep and try again
92                                time.sleep(1)
93               
94                if configured:
95                        return {"status":True,"msg":"Configured to %s"%ip}
96                else:
97                        # fallback to 'server'
98                        return {"status":False,"msg":"Fallen back to 'server'"}
99
100        #def configure_xml
101       
Note: See TracBrowser for help on using the repository browser.