ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/Token.py
Revision: 1.3
Committed: Fri Dec 5 11:53:51 2008 UTC (16 years, 4 months ago) by spiga
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +0 -0 lines
State: FILE REMOVED
Log Message:
moved to prodcommon

File Contents

# Content
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 )