1 |
import os,sys
|
2 |
import commands
|
3 |
import traceback
|
4 |
import time
|
5 |
|
6 |
from ProdCommon.BossLite.Common.System import executeCommand
|
7 |
|
8 |
class Token:
|
9 |
"""
|
10 |
basic class to handle user Token
|
11 |
"""
|
12 |
def __init__( self, **args ):
|
13 |
self.timeout = args.get( "timeout", None )
|
14 |
self.myproxyServer = args.get( "myProxySvr", '')
|
15 |
self.serverDN = args.get( "serverDN", '')
|
16 |
self.shareDir = args.get( "shareDir", '')
|
17 |
self.userName = args.get( "userName", '')
|
18 |
self.debug = args.get("debug",False)
|
19 |
self.args = args
|
20 |
|
21 |
def ExecuteCommand( self, command ):
|
22 |
"""
|
23 |
_ExecuteCommand_
|
24 |
|
25 |
Util it execute the command provided in a popen object with a timeout
|
26 |
"""
|
27 |
|
28 |
return executeCommand( command, self.timeout )
|
29 |
|
30 |
|
31 |
def registerCredential( self, command ):
|
32 |
"""
|
33 |
"""
|
34 |
credentialList = []
|
35 |
if command == 'submit': credentialList.append(self.getUserToken())
|
36 |
|
37 |
credentialList.append(self.getUserKerberos())
|
38 |
|
39 |
self.delegate( credentialList )
|
40 |
|
41 |
return
|
42 |
|
43 |
def getUserKerberos( self ):
|
44 |
"""
|
45 |
"""
|
46 |
try:
|
47 |
kerbFile = os.path.expandvars('$KRB5CCNAME').split('FILE:')[1]
|
48 |
except Exception,ex:
|
49 |
msg = ('Error %s in getUserKereros search\n' %str(ex))
|
50 |
if self.debug : msg += traceback.format_exc()
|
51 |
raise Exception(msg)
|
52 |
return kerbFile
|
53 |
|
54 |
def getUserToken(self):
|
55 |
"""
|
56 |
"""
|
57 |
userToken = os.path.join(self.shareDir,'Token_%s'%self.userName)
|
58 |
|
59 |
cmd = '/afs/usr/local/etc/GetToken > ' + userToken
|
60 |
|
61 |
out, ret = self.ExecuteCommand(cmd)
|
62 |
if ret != 0 :
|
63 |
msg = ('Error %s in getToken while executing : %s ' % (out, cmd))
|
64 |
raise Exception(msg)
|
65 |
|
66 |
return userToken
|
67 |
|
68 |
def delegate( self, list ):
|
69 |
"""
|
70 |
"""
|
71 |
serverName = self.args['serverName']
|
72 |
for i in list:
|
73 |
cmd = 'rfcp '+i+' '+serverName+':/data/proxyCache/'
|
74 |
|
75 |
out, ret = self.ExecuteCommand(cmd)
|
76 |
if ret != 0 :
|
77 |
msg = ('Error %s in getToken while executing : %s ' % (out, cmd))
|
78 |
raise Exception(msg)
|
79 |
cmd = 'rfchmod 777 '+serverName+':/data/proxyCache/%s'%os.path.basename(i)
|
80 |
|
81 |
out, ret = self.ExecuteCommand(cmd)
|
82 |
if ret != 0 :
|
83 |
msg = ('Error %s in getToken while executing : %s ' % (out, cmd))
|
84 |
raise Exception(msg)
|
85 |
return
|
86 |
|
87 |
def checkCredential( self,userKerb ):
|
88 |
"""
|
89 |
"""
|
90 |
expires = None
|
91 |
if userKerb == None:
|
92 |
userKerb = self.getUserKerberos()
|
93 |
|
94 |
cmd = 'klist -c %s'%userKerb
|
95 |
|
96 |
out, ret = self.ExecuteCommand(cmd)
|
97 |
if ret != 0 :
|
98 |
msg = ('Error %s in checkCredential while executing : %s ' % (out, cmd))
|
99 |
raise Exception(msg)
|
100 |
lines = out.split('\n')
|
101 |
for i in range(len(lines)) :
|
102 |
if lines[i].find('Expires') > 1:
|
103 |
expires = lines[i+1].split(' ')[1]
|
104 |
return expires
|
105 |
|
106 |
|
107 |
def getSubject( self, userKerb ):
|
108 |
"""
|
109 |
"""
|
110 |
expires = None
|
111 |
if userKerb == None:
|
112 |
userKerb = self.getUserKerberos()
|
113 |
cmd = 'klist -c %s'%userKerb
|
114 |
|
115 |
out, ret = self.ExecuteCommand(cmd)
|
116 |
if ret != 0 :
|
117 |
msg = ('Error %s in checkCredential while executing : %s ' % (out, cmd))
|
118 |
raise Exception(msg)
|
119 |
lines = out.split('\n')
|
120 |
for line in lines :
|
121 |
if line.find('Default principal') >= 0:
|
122 |
subject = line.split(':')[1].split('@')[0]
|
123 |
return subject.strip()
|
124 |
|
125 |
def getUserName( self,userKerb ):
|
126 |
"""
|
127 |
"""
|
128 |
return self.getSubject( userKerb )
|