]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Use rfc3961 library to decrypt kerberos 5 tickets
authorChaskiel Grundman <cg2v@andrew.cmu.edu>
Sat, 6 Apr 2013 17:42:23 +0000 (13:42 -0400)
committerSimon Wilkinson <sxw@your-file-system.com>
Sat, 13 Jul 2013 09:32:21 +0000 (10:32 +0100)
Decrypt tickets with non-des enctypes by calling out to the rfc3961 library.
This requires the security object to be given an enhanced get_key callback
that supports looking up keys by enctype.
Include a wrapper around afsconf_GetKeyByTypes so rxkad doesn't have
to know anything about libauth internals/interfaces

Change-Id: Id2b085fb41e2ed3576ec66b2914c03e78c0077ec

52 files changed:
Makefile.in
src/WINNT/afsd/NTMakefile
src/WINNT/afssvrmgr/NTMakefile
src/WINNT/aklog/NTMakefile
src/WINNT/client_creds/NTMakefile
src/WINNT/netidmgr_plugin/NTMakefile
src/auth/Makefile.in
src/auth/NTMakefile
src/auth/authcon.c
src/auth/cellconfig.p.h
src/bozo/Makefile.in
src/bozo/NTMakefile
src/bucoord/Makefile.in
src/bucoord/NTMakefile
src/budb/Makefile.in
src/budb/NTMakefile
src/butc/Makefile.in
src/butc/NTMakefile
src/finale/Makefile.in
src/fsprobe/Makefile.in
src/gtx/Makefile.in
src/kauth/Makefile.in
src/kauth/NTMakefile
src/kauth/test/NTMakefile
src/libafsrpc/Makefile.in
src/libafsrpc/afsrpc.def
src/libafsrpc/libafsrpc.la.sym
src/log/Makefile.in
src/ptserver/Makefile.in
src/ptserver/NTMakefile
src/rxkad/Makefile.in
src/rxkad/liboafs_rxkad.la.sym
src/rxkad/private_data.h
src/rxkad/rxkad.p.h
src/rxkad/rxkad_prototypes.h
src/rxkad/rxkad_server.c
src/rxkad/ticket5.c
src/scout/Makefile.in
src/sgistuff/Makefile.in
src/tbutc/NTMakefile
src/tests/Makefile.in
src/tptserver/NTMakefile
src/tsm41/Makefile.in
src/update/Makefile.in
src/update/NTMakefile
src/uss/Makefile.in
src/venus/Makefile.in
src/viced/NTMakefile
src/vlserver/Makefile.in
src/vlserver/NTMakefile
src/volser/Makefile.in
src/volser/NTMakefile

index d9193756d5aaba2d1b4dddbe06b0dd0cbf69e5c3..b0013365e7a4f2d652e25b8efab6655d980bf68d 100644 (file)
@@ -216,7 +216,7 @@ afs: config export comerr afs_depinstall
 sys: cmd comerr afs hcrypto rx rxstat fsint sys_depinstall
        +${COMPILE_PART1} sys ${COMPILE_PART2}
 
-rxkad: cmd comerr hcrypto rx rxkad_depinstall
+rxkad: cmd comerr hcrypto rfc3961 rx rxkad_depinstall
        +${COMPILE_PART1} rxkad ${COMPILE_PART2}
 
 auth: cmd comerr hcrypto lwp rx rxkad audit sys auth_depinstall
index 1c7bb0a6f83045113e13f633de2eeaf7bd09ee6e..11b92047ee7fe0d2222cd2e3747643a3c45b2e6e 100644 (file)
@@ -335,6 +335,7 @@ LOGON_DLLLIBS =\
     $(DESTDIR)\lib\afs\afsutil.lib \
     $(DESTDIR)\lib\opr.lib \
     $(DESTDIR)\lib\afsroken.lib \
+    $(DESTDIR)\lib\afsrpc.lib \
     $(LANAHELPERLIB) \
     $(AFSKFWLIB)
 
@@ -421,7 +422,8 @@ EXELIBS = \
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 EXELIBS2 = \
         $(DESTDIR)\lib\afsrpc.lib \
index c279ae50d22df5595fff50ca7e4cd2426554e3b0..ced9882df9511a95eb8cbb1b341a037a832b2b93 100644 (file)
@@ -103,7 +103,8 @@ EXELIBS = \
        $(DESTDIR)\lib\afs\TaAfsAppLib.lib \
         $(DESTDIR)\lib\afs\afsutil.lib \
        $(DESTDIR)\lib\opr.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrpc.lib
 
 ############################################################################
 
index 79da73f69ee70fc43eddf80bdea70a6956d90088..c8d4293571440387f4e54995243e46a0d76235ce 100644 (file)
@@ -38,7 +38,8 @@ EXELIBS = \
         $(DESTDIR)\lib\afsrpc.lib \
         $(DESTDIR)\lib\afsauthent.lib \
        $(DESTDIR)\lib\opr.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrpc.lib
 
 OTHERLIBS = dnsapi.lib mpr.lib
 
index 030cb25c4e1e274ac87935e6f67d2f85d6903f3f..74a43a99e10a94f23ea4eb63b4d8885facc5a466 100644 (file)
@@ -73,7 +73,8 @@ EXELIBS = \
         $(DESTDIR)\lib\afs\afscom_err.lib \
         $(DESTDIR)\lib\afs\afsutil.lib \
        $(DESTDIR)\lib\opr.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrpc.lib
 
 ############################################################################
 #
index 25a197b606a688180f4d2227b47a16e188b69ea3..e3ea181c4c64988f7e05dd1392368b7ad1ff647d 100644 (file)
@@ -94,6 +94,7 @@ OBJFILES=                             \
 
 LIBFILES=                              \
         $(DESTDIR)\lib\afsroken.lib     \
+       $(DESTDIR)\lib\afsrpc.lib       \
        $(DESTDIR)\lib\afsauthent.lib   \
        $(DESTDIR)\lib\libafsconf.lib   \
         $(DESTDIR)\lib\afs\mtafsutil.lib\
index e6001c2035124c17b8f7577eaa21339ec025d642..2a2c4008d9eb148da9c09423c645c1487bdfc8db 100644 (file)
@@ -29,6 +29,7 @@ LT_libs= $(LDFLAGS_roken) $(LIB_roken)
 
 LIBS=libauth.a \
       ${TOP_LIBDIR}/librxkad.a \
+      ${TOP_LIBDIR}/libafsrfc3961.a \
       ${TOP_LIBDIR}/librx.a \
       ${TOP_LIBDIR}/libsys.a \
       ${TOP_LIBDIR}/liblwp.a \
index 37146e8216e9ee6382d49bb92fb71d5a0f6e6263..0e77e0e505d46c724844576a9450c51b5ca81bb0 100644 (file)
@@ -99,7 +99,8 @@ EXELIBS =\
        $(EXELIBDIR)\libafsconf.lib \
        $(EXELIBDIR)\opr.lib \
        $(EXELIBDIR)\afshcrypto.lib \
-       $(EXELIBDIR)\afsroken.lib
+       $(EXELIBDIR)\afsroken.lib \
+       $(EXELIBDIR)\afsrfc3961.lib
 
 $(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS)
        $(EXECONLINK) dnsapi.lib shell32.lib
index 54e842dbbf16a6a548927c68dd7170e309fbd3a5..8976947ba7128ae23ee4118289f19924d8c274cc 100644 (file)
@@ -42,6 +42,31 @@ QuickAuth(struct rx_securityClass **astr, afs_int32 *aindex)
 }
 
 #if !defined(UKERNEL)
+static int _afsconf_GetRxkadKrb5Key(void *arock, int kvno, int enctype, void *outkey,
+                                   size_t *keylen)
+{
+    struct afsconf_dir *adir = arock;
+    struct afsconf_typedKey *kobj;
+    struct rx_opaque *keymat;
+    afsconf_keyType tktype;
+    int tkvno, tenctype;
+    int code;
+
+    code = afsconf_GetKeyByTypes(adir, afsconf_rxkad_krb5, kvno, enctype, &kobj);
+    if (code != 0)
+       return code;
+    afsconf_typedKey_values(kobj, &tktype, &tkvno, &tenctype, &keymat);
+    if (*keylen < keymat->len) {
+       afsconf_typedKey_put(&kobj);
+       return AFSCONF_BADKEY;
+    }
+    memcpy(outkey, keymat->val, keymat->len);
+    *keylen = keymat->len;
+    afsconf_typedKey_put(&kobj);
+    return 0;
+}
+
+
 /* Return an appropriate security class and index */
 afs_int32
 afsconf_ServerAuth(void *arock,
@@ -53,7 +78,8 @@ afsconf_ServerAuth(void *arock,
 
     LOCK_GLOBAL_MUTEX;
     tclass = (struct rx_securityClass *)
-       rxkad_NewServerSecurityObject(0, adir, afsconf_GetKey, NULL);
+       rxkad_NewKrb5ServerSecurityObject(0, adir, afsconf_GetKey,
+                                         _afsconf_GetRxkadKrb5Key, NULL);
     if (tclass) {
        *astr = tclass;
        *aindex = RX_SECIDX_KAD;
@@ -254,12 +280,16 @@ afsconf_BuildServerSecurityObjects(void *rock,
 
     (*classes)[0] = rxnull_NewServerSecurityObject();
     (*classes)[1] = NULL;
-    (*classes)[2] = rxkad_NewServerSecurityObject(0, dir,
-                                                 afsconf_GetKey, NULL);
+    (*classes)[2] = rxkad_NewKrb5ServerSecurityObject(0, dir,
+                                                     afsconf_GetKey,
+                                                     _afsconf_GetRxkadKrb5Key,
+                                                     NULL);
 
     if (dir->securityFlags & AFSCONF_SECOPTS_ALWAYSENCRYPT)
-       (*classes)[3] = rxkad_NewServerSecurityObject(rxkad_crypt, dir,
-                                                     afsconf_GetKey, NULL);
+       (*classes)[3] = rxkad_NewKrb5ServerSecurityObject(rxkad_crypt, dir,
+                                                         afsconf_GetKey,
+                                                         _afsconf_GetRxkadKrb5Key,
+                                                         NULL);
 }
 #endif
 
index f22153d97013c80b47f569628e555a596dc108eb..c641fc37b1a2818faaea81f4b4b01ac0dfd9d428 100644 (file)
@@ -150,7 +150,8 @@ struct afsconf_typedKeyList {
 
 typedef enum {
     afsconf_rxkad = 0,
-    afsconf_rxgk  =1
+    afsconf_rxgk  =1,
+    afsconf_rxkad_krb5  =2
 } afsconf_keyType;
 
 extern struct afsconf_typedKey *
index 51cefac1b70e87e5f922dadacfa815869b91a465..b565d1707a3ea749aacbd90b6a2fc865363ea341 100644 (file)
@@ -39,6 +39,7 @@ LIBS=   ${TOP_LIBDIR}/librx.a \
        ${TOP_LIBDIR}/libopr.a \
        ${TOP_LIBDIR}/libsys.a \
        ${TOP_LIBDIR}/libprocmgmt.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 OBJS=bosserver.o bnode.o ezbnodeops.o fsbnodeops.o bosint.ss.o bosint.xdr.o \
index a2ed440113a3c633bd70c0d6d7ff226d347d952a..c4c1703c6075c5dfd1b375e9ab647f6e04a45ed6 100644 (file)
@@ -70,7 +70,8 @@ BOSSERVER_EXELIBS =\
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
@@ -109,7 +110,8 @@ BOS_EXELIBS =\
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
index cb1ad0eccd95397b1464c55fe3c988a968a0e6b9..f70369e0c7503a7c614f673c15fb9cfdb8b8a608 100644 (file)
@@ -21,6 +21,7 @@ LIBS=${TOP_LIBDIR}/libbudb.a ${TOP_LIBDIR}/libbubasics.a \
         ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/util.a \
        $(TOP_LIBDIR)/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 all: ${TOP_LIBDIR}/libbxdb.a ${TOP_INCDIR}/afs/bucoord_prototypes.h ${TOP_INCDIR}/afs/bc.h backup
index 3085b95cc0f262ce6241fb8a7886e44ccb0af058..05db66cfc9c0860877d4d2ea0a45185f26ee5e53 100644 (file)
@@ -93,7 +93,8 @@ EXELIBS =\
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
        
 
 $(EXEFILE): $(EXEOBJS) $(EXERES) $(EXELIBS)
index 2a406f3c53dcc584840e4fb809f7470b6b08cc96..1d39793a6d16d76bc72ce0e927a1951c6337eb00 100644 (file)
@@ -42,6 +42,7 @@ LIBS=${TOP_LIBDIR}/libbubasics.a \
        ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/util.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 COMMON_OBJS = database.o db_alloc.o db_dump.o db_hash.o struct_ops.o ol_verify.o
index 5d947417330b9d61ef8c19d5616df9d4d9fe787d..1d9ecb9c3e84abdcb1bf183aae02a70844f3e6a3 100644 (file)
@@ -81,7 +81,8 @@ EXELIBS =\
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(EXEFILE): $(EXEOBJS)  $(EXELIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
index 1dbe5bf591f168d5433d9b79d1353099ef1d3fd4..4648f96b7afe32f52229d48882ccd3a4d226f1c2 100644 (file)
@@ -41,6 +41,7 @@ LIBS=${TOP_LIBDIR}/libbudb.a \
        ${TOP_LIBDIR}/liblwp.a \
         ${TOP_LIBDIR}/libcmd.a \
        ${TOP_LIBDIR}/libafscom_err.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a \
        ${TOP_LIBDIR}/libusd.a \
        ${TOP_LIBDIR}/util.a \
index e0e0ffbb55771b1be784f3c8b7f0765a3bf1a2e5..719333c1eb36f1a2aba83e3d22780636ca82f872 100644 (file)
@@ -55,7 +55,8 @@ EXELIBS =\
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(EXERES): butc.rc AFS_component_version_number.h
 
index c15415a3ab7a628de7472393f3d7e2766ebabaae..606f7c970a0fe622e3550a7dfd136a788393fc1e 100644 (file)
@@ -40,6 +40,7 @@ LIBS=${TOP_LIBDIR}/libubik.a \
        ${TOP_LIBDIR}/libkauth.a \
        ${TOP_LIBDIR}/libprot.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${XLIBS}
 
 all: translate_et
index 6b1b9e7df8b8b3a73e5644a6905ed067ba24fa02..c26d3f2b9ae434e2a02e529877776e6e9de3dbe2 100644 (file)
@@ -26,6 +26,7 @@ LIBS=${TOP_LIBDIR}/libvolser.a ${TOP_LIBDIR}/vlib.a ${TOP_LIBDIR}/libacl.a \
        ${TOP_LIBDIR}/liblwp.a \
        ${TOP_LIBDIR}/libsys.a \
        ${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 all: ${TOP_INCDIR}/afs/fsprobe.h ${TOP_LIBDIR}/libfsprobe.a fsprobe_test
index b0433d05e83747ea21ba6ced6919b573fb09e8b1..1688e6f5ef47eb00e52da630a68743a12e6ff27b 100644 (file)
@@ -36,6 +36,7 @@ LIBS=\
        ${TOP_LIBDIR}/libkauth.a \
        ${TOP_LIBDIR}/libauth.a \
        ${TOP_LIBDIR}/librxkad.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/libopr.a \
        ${TOP_LIBDIR}/util.a
index 54b3849ec94274b1aa9bd5525154fd907a00c73e..c325247c2db40db65dfa21fc36c20dc08bd79434 100644 (file)
@@ -51,6 +51,7 @@ LIBS=${TOP_LIBDIR}/libubik.a \
        ${TOP_LIBDIR}/libafsutil.a \
        ${TOP_LIBDIR}/libopr.a \
        $(DBM) \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 KLIBS=${TOP_LIBDIR}/libubik.a \
@@ -65,6 +66,7 @@ KLIBS=${TOP_LIBDIR}/libubik.a \
        ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/libafsutil.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 all: liboafs_kauth.la libauthent_kauth.la \
index 6efcb3d73bdb4e905446c9abf5fd37ac52523d4c..7e3897a535a1ce36983300ce8c53bf66a4f80319 100644 (file)
@@ -95,7 +95,8 @@ AFSLIBS =  \
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 TOKENLIB = $(DESTDIR)\lib\afs\afspioctl.lib
 
index 0fe5c66b376dd24add6f829848fbeb549076a1cc..8a836c7dfff7c560eaa3bff30d3c1828f1b6ed54 100644 (file)
@@ -18,7 +18,8 @@ EXELIBS = \
        $(DESTDIR)\afs\afsprot.lib \
        $(DESTDIR)\afsrx.lib \
        $(DESTDIR)\afs\afscom_err.lib \
-       $(DESTDIR)\afs\afskauth.lib
+       $(DESTDIR)\afs\afskauth.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 
 $(OUT)\multiklog.exe: $(OUT)\multiklog.obj
index 78ba93e23b97d6aabdac5ec28a47202c0ba8178c..95ad027699c513e5b2f22b1d36ffab8ca93533f5 100644 (file)
@@ -13,6 +13,7 @@ LT_objs = \
        $(top_builddir)/src/fsint/libafsrpc_fsint.la \
        $(top_builddir)/src/rx/libafsrpc_rx.la \
        $(top_builddir)/src/rxkad/libafsrpc_rxkad.la \
+       $(top_builddir)/src/crypto/rfc3961/libafsrpc_rfc3961.la \
        $(top_builddir)/src/comerr/libafsrpc_comerr.la \
        $(top_builddir)/src/util/libafsrpc_util.la \
        $(top_builddir)/src/rxstat/libafsrpc_rxstat.la \
index 8c6bedded08a2381e3be62d67e82e8f01b14e147..5d226691c4657ef75c1b7d97c17692109479ceb2 100755 (executable)
@@ -340,6 +340,7 @@ EXPORTS
        initialize_RXK_error_table              @345
        rx_GetNetworkError                      @346
         afs_set_com_err_hook                    @347
+       rxkad_NewKrb5ServerSecurityObject       @348
 
 ; for performance testing
         rx_TSFPQGlobSize                        @2001 DATA
index b1858a9846a5ebc59000b1378f69b769473238bf..b5c05713fe17266eabfa3ac51b0d94aaa199e303 100644 (file)
@@ -153,6 +153,7 @@ rxi_RoundUpPacket
 rxi_SetCallNumberVector
 rxkad_GetServerInfo
 rxkad_NewClientSecurityObject
+rxkad_NewKrb5ServerSecurityObject
 rxkad_NewServerSecurityObject
 rxkad_global_stats
 rxkad_global_stats_lock
index 49a48c3d09ef04623e4fb00a95dce88ced65a634..cdc63977e036006b922a66f1b4982fc254646753 100644 (file)
@@ -22,6 +22,7 @@ LIBRARIES=${TOP_LIBDIR}/libauth.a \
                ${TOP_LIBDIR}/libsys.a \
                ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libcmd.a \
                ${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libopr.a \
+               ${TOP_LIBDIR}/libafsrfc3961.a \
                ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 KLIBRARIES=${TOP_LIBDIR}/libauth.krb.a \
@@ -30,6 +31,7 @@ KLIBRARIES=${TOP_LIBDIR}/libauth.krb.a \
                ${TOP_LIBDIR}/libsys.a \
                ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libcmd.a \
                ${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libopr.a \
+               ${TOP_LIBDIR}/libafsrfc3961.a \
                ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 #
index 3d018e8129644d42c0f95e30f1de382954224743..dee45137d80a9f696112fe6e1ca5341bee5ce1d7 100644 (file)
@@ -41,6 +41,7 @@ LIBS=   ${TOP_LIBDIR}/libubik.a \
        ${TOP_LIBDIR}/libaudit.a \
        ${TOP_LIBDIR}/libafsutil.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 LT_objs = ptuser.lo pterror.lo ptint.cs.lo ptint.xdr.lo display.lo
index bc5846e9c1c1e0c8a59984571f710b0724d82529..709bd440135c738f2b5838be4b4f663dbedce789 100644 (file)
@@ -73,7 +73,8 @@ PTSERVER_EXELIBS =\
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 !IF (("$(SYS_NAME)"!="i386_win95" ) && ("$(SYS_NAME)"!="I386_WIN95" ))
 PTSERVER_EXELIBS =$(PTSERVER_EXELIBS) $(DESTDIR)\lib\afs\afsprocmgmt.lib
@@ -126,7 +127,8 @@ PTS_EXELIBS =\
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
index 31ba16e9f4e783c05500cb5feaa4c305c6f79227..4300d6a1b4cc284cde84d2e9962373e65e7131e6 100644 (file)
@@ -23,7 +23,8 @@ LT_objs=rxkad_client.lo rxkad_server.lo rxkad_common.lo rxkad_errs.lo \
 
 LT_deps=$(top_builddir)/src/comerr/liboafs_comerr.la \
        $(top_builddir)/src/rx/liboafs_rx.la \
-       $(top_builddir)/src/opr/liboafs_opr.la
+       $(top_builddir)/src/opr/liboafs_opr.la \
+       $(top_builddir)/src/crypto/rfc3961/liboafs_rfc3961.la
 
 LT_libs=$(LDFLAGS_hcrypto) $(LIB_hcrypto)
 
index 75905999ad54e386c2f3307832513046043d8999..acf9f3c2c78425ee4d0170e960b01ee338ed6fb3 100644 (file)
@@ -2,6 +2,7 @@ initialize_RXK_error_table
 life_to_time
 rxkad_GetServerInfo
 rxkad_NewClientSecurityObject
+rxkad_NewKrb5ServerSecurityObject
 rxkad_NewServerSecurityObject
 time_to_life
 tkt_CheckTimes
index a26c603ffc502e985c66f9dacef7e4ec838ccfcd..fc4ccf6857f3f030211aca8e12180c31e4c70700 100644 (file)
@@ -78,6 +78,7 @@ struct rxkad_sprivate {
     int (*get_key) (void *, int,
                    struct ktc_encryptionKey *);
                                /* func. of kvno and server key ptr */
+    rxkad_get_key_enctype_func get_key_enctype;
     int (*user_ok) (char *, char *,
                    char *, afs_int32);
                                /* func called with new client name */
index 55cfcfa74a7274e290bea53d8a690634d59f3b3e..141f534d8046ff92c08c8ff988f74f44fd4309b9 100644 (file)
@@ -91,6 +91,10 @@ typedef signed char rxkad_level;
 
 
 extern int rxkad_EpochWasSet;  /* TRUE => we called rx_SetEpoch */
+/* Get key by enctype.  Takes a rock (path to conf dir), kvno and enctype as
+ * input and returns the key and key length.  On input, the keylength parameter
+ * must be set to the length of storage allocated by the caller. */
+typedef int (*rxkad_get_key_enctype_func) (void *, int, int, void *, size_t *);
 
 #include <rx/rxkad_prototypes.h>
 
index 9fa059ff139ebd3a9170e89d97f56cda8c17621e..e73f1d1a23795524bc42768fabce88f4e4375958 100644 (file)
@@ -106,6 +106,12 @@ extern struct rx_securityClass *rxkad_NewServerSecurityObject(rxkad_level
                                                               char *cell,
                                                               afs_int32
                                                               kvno));
+extern struct rx_securityClass *rxkad_NewKrb5ServerSecurityObject
+(rxkad_level level, void *get_key_rock,
+ int (*get_key) (void *get_key_rock, int kvno,
+                struct ktc_encryptionKey *serverKey),
+ rxkad_get_key_enctype_func get_key_enctype,
+ int (*user_ok) (char *name, char *instance, char *cell, afs_int32 kvno));
 extern int rxkad_CheckAuthentication(struct rx_securityClass *aobj,
                                     struct rx_connection *aconn);
 extern int rxkad_CreateChallenge(struct rx_securityClass *aobj,
@@ -151,6 +157,7 @@ extern afs_uint32 _rxkad_crc_update(const char *p, size_t len, afs_uint32 res);
 extern int tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len,
                             int (*get_key) (void *, int,
                                             struct ktc_encryptionKey *),
+                            rxkad_get_key_enctype_func get_key2,
                             char *get_key_rock, int serv_kvno, char *name,
                             char *inst, char *cell, struct ktc_encryptionKey *session_key,
                             afs_int32 * host, afs_uint32 * start,
index be0abefe6e057a75d2eb5e2215a899dddcc5bb8b..07e806bcdf36e3fd5840650cf91d17ded297d278 100644 (file)
@@ -165,6 +165,23 @@ rxkad_NewServerSecurityObject(rxkad_level level, void *get_key_rock,
     return tsc;
 }
 
+struct rx_securityClass *
+rxkad_NewKrb5ServerSecurityObject(rxkad_level level, void *get_key_rock,
+                                 int (*get_key) (void *get_key_rock, int kvno,
+                                                 struct ktc_encryptionKey *
+                                                 serverKey),
+                                 rxkad_get_key_enctype_func get_key_enctype,
+                                 int (*user_ok) (char *name, char *instance,
+                                                 char *cell, afs_int32 kvno)
+) {
+    struct rx_securityClass *tsc;
+    struct rxkad_sprivate *tsp;
+    tsc = rxkad_NewServerSecurityObject(level, get_key_rock, get_key, user_ok);
+    tsp = (struct rxkad_sprivate *)tsc->privateData;
+    tsp->get_key_enctype = get_key_enctype;
+    return tsc;
+}
+
 /* server: called to tell if a connection authenticated properly */
 
 int
@@ -325,8 +342,9 @@ rxkad_CheckResponse(struct rx_securityClass *aobj,
     if (code == -1 && ((kvno == RXKAD_TKT_TYPE_KERBEROS_V5)
        || (kvno == RXKAD_TKT_TYPE_KERBEROS_V5_ENCPART_ONLY))) {
        code =
-           tkt_DecodeTicket5(tix, tlen, tsp->get_key, tsp->get_key_rock,
-                             kvno, client.name, client.instance, client.cell,
+           tkt_DecodeTicket5(tix, tlen, tsp->get_key, tsp->get_key_enctype,
+                             tsp->get_key_rock, kvno, client.name,
+                             client.instance, client.cell,
                              &sessionkey, &host, &start, &end,
                              tsp->flags & RXS_CONFIG_FLAGS_DISABLE_DOTCHECK);
        if (code)
index f0e830cf4c137bfd667c0b8fbe22e81f8a3fc437..5ce4c7a94dc2c398f86b3f299d1a3fba5591352d 100644 (file)
 #include "v5der.c"
 #include "v5gen.c"
 
+#define RFC3961_NO_ENUMS
+#define RFC3961_NO_CKSUM
+#include <afs/rfc3961.h>
+
 /*
  * Principal conversion Taken from src/lib/krb5/krb/conv_princ from MIT Kerberos.  If you
  * find a need to change the services here, please consider opening a
@@ -176,12 +180,19 @@ static int
 int
 tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len,
                  int (*get_key) (void *, int, struct ktc_encryptionKey *),
+                 rxkad_get_key_enctype_func get_key_enctype,
                  char *get_key_rock, int serv_kvno, char *name, char *inst,
                  char *cell, struct ktc_encryptionKey *session_key, afs_int32 * host,
                  afs_uint32 * start, afs_uint32 * end, afs_int32 disableCheckdot)
 {
     char plain[MAXKRB5TICKETLEN];
     struct ktc_encryptionKey serv_key;
+    void *keybuf;
+    size_t keysize, allocsiz;
+    krb5_context context;
+    krb5_keyblock k;
+    krb5_crypto cr;
+    krb5_data plaindata;
     Ticket t5;                 /* Must free */
     EncTicketPart decr_part;   /* Must free */
     int code;
@@ -224,25 +235,82 @@ tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len,
     case ETYPE_DES_CBC_CRC:
     case ETYPE_DES_CBC_MD4:
     case ETYPE_DES_CBC_MD5:
+       /* check ticket */
+       if (t5.enc_part.cipher.length > sizeof(plain)
+           || t5.enc_part.cipher.length % 8 != 0)
+           goto bad_ticket;
+
+       code = (*get_key) (get_key_rock, v5_serv_kvno, &serv_key);
+       if (code)
+           goto unknown_key;
+
+       /* Decrypt data here, save in plain, assume it will shrink */
+       code =
+           krb5_des_decrypt(&serv_key, t5.enc_part.etype,
+                            t5.enc_part.cipher.data, t5.enc_part.cipher.length,
+                            plain, &plainsiz);
        break;
     default:
-       goto unknown_key;
+       if (get_key_enctype == NULL)
+           goto unknown_key;
+       code = krb5_init_context(&context);
+       if (code != 0)
+           goto unknown_key;
+       code = krb5_enctype_valid(context, t5.enc_part.etype);
+       if (code != 0) {
+           krb5_free_context(context);
+           goto unknown_key;
+       }
+       code = krb5_enctype_keybits(context,  t5.enc_part.etype, &keysize);
+       if (code != 0) {
+           krb5_free_context(context);
+           goto unknown_key;
+       }
+       keysize = keysize / 8;
+       allocsiz = keysize;
+       keybuf = rxi_Alloc(allocsiz);
+       /* this is not quite a hole for afsconf_GetKeyByTypes. A wrapper
+          that calls afsconf_GetKeyByTypes and afsconf_typedKey_values
+          is needed */
+       code = get_key_enctype(get_key_rock, v5_serv_kvno, t5.enc_part.etype,
+                              keybuf, &keysize);
+       if (code) {
+           rxi_Free(keybuf, allocsiz);
+           krb5_free_context(context);
+           goto unknown_key;
+       }
+       code = krb5_keyblock_init(context, t5.enc_part.etype,
+                                 keybuf, keysize, &k);
+       rxi_Free(keybuf, allocsiz);
+       if (code != 0) {
+           krb5_free_context(context);
+           goto unknown_key;
+       }
+       code = krb5_crypto_init(context, &k, t5.enc_part.etype, &cr);
+       krb5_free_keyblock_contents(context, &k);
+       if (code != 0) {
+           krb5_free_context(context);
+           goto unknown_key;
+       }
+#ifndef KRB5_KU_TICKET
+#define KRB5_KU_TICKET 2
+#endif
+       code = krb5_decrypt(context, cr, KRB5_KU_TICKET, t5.enc_part.cipher.data,
+                           t5.enc_part.cipher.length, &plaindata);
+       krb5_crypto_destroy(context, cr);
+       if (code == 0) {
+           if (plaindata.length > MAXKRB5TICKETLEN) {
+               krb5_data_free(&plaindata);
+               krb5_free_context(context);
+               goto bad_ticket;
+           }
+           memcpy(plain, plaindata.data, plaindata.length);
+           plainsiz = plaindata.length;
+           krb5_data_free(&plaindata);
+       }
+       krb5_free_context(context);
     }
 
-    /* check ticket */
-    if (t5.enc_part.cipher.length > sizeof(plain)
-       || t5.enc_part.cipher.length % 8 != 0)
-       goto bad_ticket;
-
-    code = (*get_key) (get_key_rock, v5_serv_kvno, &serv_key);
-    if (code)
-       goto unknown_key;
-
-    /* Decrypt data here, save in plain, assume it will shrink */
-    code =
-       krb5_des_decrypt(&serv_key, t5.enc_part.etype,
-                        t5.enc_part.cipher.data, t5.enc_part.cipher.length,
-                        plain, &plainsiz);
     if (code != 0)
        goto bad_ticket;
 
index 53e8b2db34dfda07989b9b5b17092acefac5bff6..d7708cdcd537833344a96418b20b9433d664d989 100644 (file)
@@ -43,6 +43,7 @@ LIBS=${TOP_LIBDIR}/libgtx.a \
        ${TOP_LIBDIR}/liblwp.a \
        ${TOP_LIBDIR}/util.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 all: scout
index 5c55120e850eb185d4d3ccc79784353357417317..5d36ea1a3f71ae8b8fd19e4365fb7d99228bf8fc 100644 (file)
@@ -25,6 +25,7 @@ AFSLIBS=${TOP_LIBDIR}/libkauth.a \
        ${TOP_LIBDIR}/librxkad.a \
        ${TOP_LIBDIR}/libsys.a \
        ${LIBDIR}/librx.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a \
        ${LIBDIR}/liblwp.a \
         ${TOP_LIBDIR}/libcmd.a \
@@ -38,6 +39,7 @@ KAFSLIBS=${TOP_LIBDIR}/libkauth.krb.a \
        ${TOP_LIBDIR}/librxkad.a \
        ${TOP_LIBDIR}/libsys.a \
        ${LIBDIR}/librx.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a \
        ${LIBDIR}/liblwp.a \
         ${TOP_LIBDIR}/libcmd.a \
index ee134fa4cc0cde45a308cea090b7df316cce58f2..3c991f3428e5d5da11a4f982cb0cc3cd93e72070 100644 (file)
@@ -83,7 +83,8 @@ BUTCLIBS=$(DESTDIR)\lib\afs\afsbudb.lib  \
             $(DESTDIR)\lib\libafsconf.lib \
             $(DESTDIR)\lib\opr.lib \
             $(DESTDIR)\lib\afshcrypto.lib \
-            $(DESTDIR)\lib\afsroken.lib
+            $(DESTDIR)\lib\afsroken.lib \
+            $(DESTDIR)\lib\afsrfc3961.lib
 
 # rm $(OUT)\tcstatus.obj
 # nmake /nologo /f ntmakefile install
index c9a82f5342ddf13c96e3d23e1b4008292fe903f4..c7d3e0c8a85d1e5695176deb57c41bd0418d0ec2 100644 (file)
@@ -11,7 +11,7 @@ SYS_LIBS      = ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/liblwp.a $
 
 AUTH_LIBS      = ${TOP_LIBDIR}/libauth.a ${SYS_LIBS}
 
-INT_LIBS       = ${TOP_LIBDIR}/libafsint.a ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libafscom_err.a ${TOP_LIBDIR}/util.a
+INT_LIBS       = ${TOP_LIBDIR}/libafsint.a ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/libafscom_err.a ${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libafsrfc3961.a
 
 TEST_PROGRAMS = write-ro-file hello-world read-vs-mmap read-vs-mmap2    \
                mmap-and-read large-dir large-dir2 large-dir3 mountpoint \
index f53592367720bb503137e5efceb9f831ced16db6..6ccfd7d83e488856a307e7799bd2fbb4527e4500 100644 (file)
@@ -95,7 +95,8 @@ PTSERVER_EXELIBS =\
        $(DESTDIR)\lib\libafsconf.lib \
         $(DESTDIR)\lib\afs\afspioctl.lib \
         $(DESTDIR)\lib\afs\afsprocmgmt.lib \
-        $(DESTDIR)\lib\afspthread.lib
+        $(DESTDIR)\lib\afspthread.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(PTSERVER): $(PTSERVER_EXEOBJS) $(PTUTILS_OBJ) $(PTINT_XDR_OBJ) $(UTILS_OBJ) $(MAP_OBJ) $(LWP_OBJS) $(PTSERVER_EXERES) $(RXKADOBJS) $(PTSERVER_EXELIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
index a5249010dd42919636e4174b5fb9ca88a0fc7082..a88a2e779f89667cb53220e378ce60650adb9d23 100644 (file)
@@ -18,6 +18,7 @@ AFSLIBS = \
                ${TOP_LIBDIR}/libauth.a \
                ${TOP_LIBDIR}/librxkad.a \
                ${TOP_LIBDIR}/libsys.a \
+               ${TOP_LIBDIR}/libafsrfc3961.a \
                ${TOP_LIBDIR}/libafshcrypto_lwp.a \
                ${TOP_LIBDIR}/librx.a \
                ${TOP_LIBDIR}/liblwp.a \
index 96fb5d1e37c72e52393768c878a2863e90be427b..2dd023dfc18d46a49f925b9f9256cb3809025541 100644 (file)
@@ -19,6 +19,7 @@ LIBS=${TOP_LIBDIR}/libauth.a \
        ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/util.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 all: upserver upclient
index 5577e64d61cbfa461851b73f7bea7ee161b6cf27..2f6f9e764a783fbe47595badbb4f2a8145a4fe22 100644 (file)
@@ -25,7 +25,8 @@ LIBS = \
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 ############################################################################
 # Definitions for generating files via RXGEN
index 0fe78676d29df85bbd02d1ea79570cbe9ffa4c09..250aa3f1ddedda1f9ee850e89ba88a88b4d8cfd4 100644 (file)
@@ -30,6 +30,7 @@ LIBS=${TOP_LIBDIR}/libvolser.a \
        ${TOP_LIBDIR}/libafscom_err.a \
        ${TOP_LIBDIR}/util.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 OBJS =  uss_procs.o \
index c78a80efea16cfca77069eaeb24b89b1535ab68d..7eb6aed9d8c3da92ad5596756ee4a62c8c86d2d6 100644 (file)
@@ -47,6 +47,7 @@ FSLIBS=${TOP_LIBDIR}/libsys.a \
         ${TOP_LIBDIR}/libaudit.a \
         $(TOP_LIBDIR)/libafsutil.a \
         $(TOP_LIBDIR)/libopr.a \
+        ${TOP_LIBDIR}/libafsrfc3961.a \
         ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 CMLIBS=${TOP_LIBDIR}/libsys.a \
index 3c0b782165bad4f937c3851afdfe71a601babd1d..72aa02d2ab128b0dad58a74f724941cc2bcb2781 100644 (file)
@@ -82,7 +82,8 @@ EXELIBS = \
         $(DESTDIR)\lib\afs\mtafsdir.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afspthread.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(EXEFILE): $(EXEOBJS) $(EXELIBS)
        $(EXECONLINK)
index d2ac689395914574437e4e7009680239ad317176..13957e460b59b58526707bfd44db010c30f2d1b3 100644 (file)
@@ -35,6 +35,7 @@ LIBS=\
        ${TOP_LIBDIR}/libaudit.a \
        ${TOP_LIBDIR}/libafsutil.a \
        $(TOP_LIBDIR)/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 LT_objs = vldbint.xdr.lo vldbint.cs.lo vl_errors.lo
index fc28ef97c8e5d04b0a7e4fe91708db5c76545087..d097ab59a35966b902d83d0c15002533cdf03582 100644 (file)
@@ -92,7 +92,8 @@ VLSERVER_EXECLIBS = \
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
        $(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
index 87f4dd49802d715c5ed227247d799d9c6059a39d..40669596574bddc79d82f0298174fc3632b1cd52 100644 (file)
@@ -42,6 +42,7 @@ LIBS=\
        ${TOP_LIBDIR}/libusd.a \
        ${TOP_LIBDIR}/util.a \
        ${TOP_LIBDIR}/libopr.a \
+       ${TOP_LIBDIR}/libafsrfc3961.a \
        ${TOP_LIBDIR}/libafshcrypto_lwp.a
 
 VOLDUMP_LIBS = \
index 8622554b31c1cd0a4167eca1aa0bb7910cdd9f70..e134b624e1ceb9ee2e2cd50d40818670c1cb6aac 100644 (file)
@@ -75,7 +75,8 @@ EXEC_LIBS = \
         $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\opr.lib \
        $(DESTDIR)\lib\afshcrypto.lib \
-       $(DESTDIR)\lib\afsroken.lib
+       $(DESTDIR)\lib\afsroken.lib \
+       $(DESTDIR)\lib\afsrfc3961.lib
 
 
 ############################################################################