X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/python-afs.git/blobdiff_plain/de7387fa5a6a9023ce16c679ccb08b6496afc9b7..021577002827b695ffe3e4c190bdf5137f95075a:/afs/_pts.pyx diff --git a/afs/_pts.pyx b/afs/_pts.pyx index 822caf5..a06911d 100644 --- a/afs/_pts.pyx +++ b/afs/_pts.pyx @@ -8,6 +8,9 @@ cdef class PTS: cdef a.afsconf_dir *cdir cdef a.afsconf_cell info cdef char * c_cell + cdef a.ktc_principal prin + cdef a.ktc_token token + cdef a.rx_securityClass *sc if cell is None: c_cell = NULL @@ -28,6 +31,33 @@ cdef class PTS: code = a.afsconf_GetCellInfo(cdir, c_cell, "afsprot", &info) if code != 0: raise Exception(code, "GetCellInfo: %s" % a.error_message(code)) + + if sec > 0: + a.strncpy(prin.cell, info.name, sizeof(prin.cell)) + prin.instance[0] = 0 + a.strncpy(prin.name, "afs", sizeof(prin.name)) + + code = a.ktc_GetToken(&prin, &token, sizeof(token), NULL); + if code != 0: + if sec >= 2: + # No really - we wanted authentication + raise Exception(code, "Failed to get token for service AFS: %s" % a.error_message(code)) + sec = 0 + else: + if sec == 3: + level = a.rxkad_crypt + else: + level = a.rxkad_clear + sc = a.rxkad_NewClientSecurityObject(level, &token.sessionKey, + token.kvno, token.ticketLen, + token.ticket) + + if sec == 0: + sc = a.rxnull_NewClientSecurityObject() + else: + sec = 2 + + code = a.rxs_Release(sc) def __dealloc__(self): a.rx_Finalize()