DEVEL15-aklog-referral-support-20080104
authorMarc Horowitz <marc@mit.edu>
Sat, 5 Jan 2008 04:46:52 +0000 (04:46 +0000)
committerDerrick Brashear <shadow@dementia.org>
Sat, 5 Jan 2008 04:46:52 +0000 (04:46 +0000)
LICENSE IPL10

with updates and configure support from Simon Wilkinson.

make aklog able to cope with referrals.

(cherry picked from commit 2d15ac79349678e025f407b863f2911cd20e6f4e)

src/aklog/aklog_main.c
src/cf/kerberos.m4

index 48854ee..64fe61f 100644 (file)
@@ -670,6 +670,33 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm)
        status = get_credv5(context, name, primary_instance, realm_of_cell,
                            &v5cred);
 
+#if !defined(USING_HEIMDAL) && defined(HAVE_KRB5_DECODE_TICKET)
+       if (status == 0 && strcmp(realm_of_cell, "") == 0) {
+           krb5_error_code code;
+           krb5_ticket *ticket;
+
+           code = krb5_decode_ticket(&v5cred->ticket, &ticket);
+
+           if (code != 0) {
+               fprintf(stderr,
+                       "%s: Couldn't decode ticket to determine realm for "
+                       "cell %s.\n",
+                       progname, cell_to_use);
+           } else {
+               int len = realm_len(context, ticket->server);
+               /* This really shouldn't happen. */
+               if (len > REALM_SZ-1)
+                   len = REALM_SZ-1;
+
+               strncpy(realm_of_cell, realm_data(context, ticket->server), 
+                       len);
+               realm_of_cell[len] = 0;
+
+               krb5_free_ticket(context, ticket);
+           }
+       }
+#endif
+
        if ((status == KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN || status == KRB5KRB_ERR_GENERIC) &&
            !realm_of_cell[0]) {
            char *afs_realm = afs_realm_of_cell(context, &ak_cellconfig, TRUE);
index fe3c439..f8dda46 100644 (file)
@@ -58,7 +58,7 @@ if test X$conf_krb5 = XYES; then
        CPPFLAGS="$CPPFLAGS $KRB5CFLAGS"
        save_LIBS="$LIBS"
        LIBS="$LIBS $KRB5LIBS"
-       AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket krb5_c_encrypt krb5_c_encrypt_length krb5_cc_register])
+       AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket krb5_c_encrypt krb5_c_encrypt_length krb5_cc_register krb5_decode_ticket])
        AC_CHECK_FUNCS([krb5_524_convert_creds], ,
            [AC_CHECK_FUNCS([krb524_convert_creds_kdc], ,
                [AC_CHECK_LIB([krb524], [krb524_convert_creds_kdc],