40ccd17b0c5841f2bbf68347af1212b5dbb85133
[invirt/packages/python-afs.git] / afs / _pts.pyx
1 cimport afs as a
2
3 cdef class PTS:
4     cdef a.ubik_client * client
5     
6     def __cinit__(self, cell=None, sec=1):
7         cdef a.afs_int32 code
8         cdef a.afsconf_dir *cdir
9         cdef a.afsconf_cell info
10         cdef char * c_cell
11         cdef a.ktc_principal prin
12         cdef a.ktc_token token
13         
14         if cell is None:
15             c_cell = NULL
16         else:
17             c_cell = cell
18         
19         self.client = NULL
20         
21         code = a.rx_Init(0)
22         if code != 0:
23             raise Exception(code, "Error initializing Rx")
24         
25         cdir = a.afsconf_Open(a.AFSDIR_CLIENT_ETC_DIRPATH)
26         if cdir is NULL:
27             raise OSError(a.errno,
28                           "Error opening configuration directory (%s): %s" % \
29                               (a.AFSDIR_CLIENT_ETC_DIRPATH, a.strerror(a.errno)))
30         code = a.afsconf_GetCellInfo(cdir, c_cell, "afsprot", &info)
31         if code != 0:
32             raise Exception(code, "GetCellInfo: %s" % a.error_message(code))
33         
34         if sec > 0:
35             a.strncpy(prin.cell, info.name, sizeof(prin.cell))
36             prin.instance[0] = 0
37             a.strncpy(prin.name, "afs", sizeof(prin.name))
38             
39             code = a.ktc_GetToken(&prin, &token, sizeof(token), NULL);
40             if code != 0:
41                 if sec >= 2:
42                     # No really - we wanted authentication
43                     raise Exception(code, "Failed to get token for service AFS: %s" % a.error_message(code))
44                 sec = 0
45     
46     def __dealloc__(self):
47         a.rx_Finalize()