From 1da4cb361e7de718e5eba34f9e036796cfa704e6 Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Sun, 21 Dec 2008 14:10:24 -0600 Subject: [PATCH] I can get tokens now! Not that I do anything with them yet. Signed-off-by: Evan Broder --- afs/_pts.pyx | 14 ++++++++++++++ afs/afs.pxd | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/afs/_pts.pyx b/afs/_pts.pyx index 822caf5..40ccd17 100644 --- a/afs/_pts.pyx +++ b/afs/_pts.pyx @@ -8,6 +8,8 @@ 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 if cell is None: c_cell = NULL @@ -28,6 +30,18 @@ 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 def __dealloc__(self): a.rx_Finalize() diff --git a/afs/afs.pxd b/afs/afs.pxd index 5d50e09..e518288 100644 --- a/afs/afs.pxd +++ b/afs/afs.pxd @@ -1,8 +1,12 @@ +cdef extern from *: + ctypedef long size_t + cdef extern from "errno.h": int errno cdef extern from "string.h": char * strerror(int errnum) + char * strncpy(char *s1, char *s2, size_t n) cdef extern from "netinet/in.h": struct in_addr: @@ -58,5 +62,34 @@ cdef extern from "rx/rx.h": int rx_Init(int port) void rx_Finalize() +cdef extern from "rx/rxkad.h": + enum: + MAXKTCNAMELEN + MAXKTCREALMLEN + + struct ktc_principal: + char name[MAXKTCNAMELEN] + char instance[MAXKTCNAMELEN] + char cell[MAXKTCREALMLEN] + cdef extern from "afs/com_err.h": char * error_message(int) + +cdef extern from "afs/auth.h": + enum: + MAXKTCTICKETLEN + + # We don't look into this + struct ktc_encryptionKey: + pass + + struct ktc_token: + ktc_encryptionKey sessionKey + short kvno + int ticketLen + char ticket[MAXKTCTICKETLEN] + + int ktc_GetToken(ktc_principal *server, + ktc_token *token, + int tokenLen, + ktc_principal *client) -- 1.7.9.5