I can get tokens now!
authorEvan Broder <broder@mit.edu>
Sun, 21 Dec 2008 20:10:24 +0000 (14:10 -0600)
committerEvan Broder <broder@mit.edu>
Sun, 21 Dec 2008 20:10:33 +0000 (14:10 -0600)
Not that I do anything with them yet.

Signed-off-by: Evan Broder <broder@mit.edu>

afs/_pts.pyx
afs/afs.pxd

index 822caf5..40ccd17 100644 (file)
@@ -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()
index 5d50e09..e518288 100644 (file)
@@ -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)