From: Marc Horowitz Date: Sat, 5 Jan 2008 04:48:40 +0000 (+0000) Subject: STABLE14-aklog-referral-support-20080104 X-Git-Tag: openafs-stable-1_4_7pre1~89 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=800e4e0ebc5137e487b47804d8f5e6fc81061ebe;p=packages%2Fo%2Fopenafs.git STABLE14-aklog-referral-support-20080104 LICENSE IPL10 with updates and configure support from Simon Wilkinson. make aklog able to cope with referrals. (cherry picked from commit 2d15ac79349678e025f407b863f2911cd20e6f4e) --- diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index 2eea4c94b..3207a2778 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -660,6 +660,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); diff --git a/src/cf/kerberos.m4 b/src/cf/kerberos.m4 index fe3c43936..f8dda460b 100644 --- a/src/cf/kerberos.m4 +++ b/src/cf/kerberos.m4 @@ -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],