1
2
3 import os
4 import pickle
5 import time
6
7 try:
8 from types import DictType
9 except ImportError:
10 DictType = dict
11
12 from rhn import rpclib
13 from up2date_client import clientCaps
14 from up2date_client import config
15 from up2date_client import rhnserver
16 from up2date_client import up2dateErrors
17 from up2date_client import up2dateLog
18 from up2date_client import up2dateUtils
19
20 loginInfo = None
21 pcklAuthFileName = "/var/spool/up2date/loginAuth.pkl"
22
24 cfg = config.initUp2dateConfig()
25 path = cfg["systemIdPath"]
26 if not os.access(path, os.R_OK):
27 return None
28
29 f = open(path, "r")
30 ret = f.read()
31
32 f.close()
33 return ret
34
35
36
37
39 cfg = config.initUp2dateConfig()
40 try:
41 idVer = rpclib.xmlrpclib.loads(getSystemId())[0][0]['os_release']
42 except:
43
44 return 0
45
46 systemVer = up2dateUtils.getVersion()
47
48 if idVer != systemVer:
49 s = rhnserver.RhnServer()
50
51 newSystemId = s.registration.upgrade_version(getSystemId(), systemVer)
52
53 path = cfg["systemIdPath"]
54 dir = path[:path.rfind("/")]
55 if not os.access(dir, os.W_OK):
56 try:
57 os.mkdir(dir)
58 except:
59 return 0
60 if not os.access(dir, os.W_OK):
61 return 0
62
63 if os.access(path, os.F_OK):
64
65 savePath = path + ".save"
66 try:
67 os.rename(path, savePath)
68 except:
69 return 0
70
71 f = open(path, "w")
72 f.write(newSystemId)
73 f.close()
74 try:
75 os.chmod(path, int('0600', 8))
76 except:
77 pass
78
79
81 """
82 Pickle loginInfo to a file
83 Returns:
84 True -- wrote loginInfo to a pickle file
85 False -- did _not_ write loginInfo to a pickle file
86 """
87 log = up2dateLog.initLog()
88 log.log_debug("writeCachedLogin() invoked")
89 if not loginInfo:
90 log.log_debug("writeCachedLogin() loginInfo is None, so bailing.")
91 return False
92 data = {'time': time.time(),
93 'loginInfo': loginInfo}
94
95 pcklDir = os.path.dirname(pcklAuthFileName)
96 if not os.access(pcklDir, os.W_OK):
97 try:
98 os.mkdir(pcklDir)
99 os.chmod(pcklDir, int('0700', 8))
100 except:
101 log.log_me("Unable to write pickled loginInfo to %s" % pcklDir)
102 return False
103 pcklAuth = open(pcklAuthFileName, 'wb')
104 os.chmod(pcklAuthFileName, int('0600', 8))
105 pickle.dump(data, pcklAuth)
106 pcklAuth.close()
107 expireTime = data['time'] + float(loginInfo['X-RHN-Auth-Expire-Offset'])
108 log.log_debug("Wrote pickled loginInfo at ", data['time'], " with expiration of ",
109 expireTime, " seconds.")
110 return True
111
113 """
114 Read pickle info from a file
115 Caches authorization info for connecting to the server.
116 """
117 log = up2dateLog.initLog()
118 log.log_debug("readCachedLogin invoked")
119 if not os.access(pcklAuthFileName, os.R_OK):
120 log.log_debug("Unable to read pickled loginInfo at: %s" % pcklAuthFileName)
121 return False
122 pcklAuth = open(pcklAuthFileName, 'rb')
123 try:
124 data = pickle.load(pcklAuth)
125 except (EOFError, ValueError):
126 log.log_debug("Unexpected EOF. Probably an empty file, \
127 regenerate auth file")
128 pcklAuth.close()
129 return False
130 pcklAuth.close()
131
132 try:
133 idVer = rpclib.xmlrpclib.loads(getSystemId())[0][0]['system_id']
134 cidVer = "ID-%s" % data['loginInfo']['X-RHN-Server-Id']
135 if idVer != cidVer:
136 log.log_debug("system id version changed: %s vs %s" % (idVer, cidVer))
137 return False
138 except:
139 pass
140 createdTime = data['time']
141 li = data['loginInfo']
142 currentTime = time.time()
143 expireTime = createdTime + float(li['X-RHN-Auth-Expire-Offset'])
144
145 log.log_debug("Checking pickled loginInfo, currentTime=", currentTime,
146 ", createTime=", createdTime, ", expire-offset=",
147 float(li['X-RHN-Auth-Expire-Offset']))
148 if (currentTime > expireTime):
149 log.log_debug("Pickled loginInfo has expired, created = %s, expire = %s." \
150 %(createdTime, expireTime))
151 return False
152 _updateLoginInfo(li)
153 log.log_debug("readCachedLogin(): using pickled loginInfo set to expire at ", expireTime)
154 return True
155
170
171
172
173 -def login(systemId=None, forceUpdate=False, timeout=None):
209
218
219
231