From owner-svn-src-user@FreeBSD.ORG Tue Nov 11 14:44:47 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8817D106567A; Tue, 11 Nov 2008 14:44:47 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6FF678FC21; Tue, 11 Nov 2008 14:44:47 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mABEilDv004296; Tue, 11 Nov 2008 14:44:47 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mABEilgF004293; Tue, 11 Nov 2008 14:44:47 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200811111444.mABEilgF004293@svn.freebsd.org> From: Doug Rabson Date: Tue, 11 Nov 2008 14:44:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r184847 - in user/dfr/gssapi/6/crypto/heimdal: . lib/krb5 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Nov 2008 14:44:47 -0000 Author: dfr Date: Tue Nov 11 14:44:47 2008 New Revision: 184847 URL: http://svn.freebsd.org/changeset/base/184847 Log: Back-port a fix from heimdal 1.1 which notices when KRB5CCNAME changes. Modified: user/dfr/gssapi/6/crypto/heimdal/ (props changed) user/dfr/gssapi/6/crypto/heimdal/lib/krb5/cache.c user/dfr/gssapi/6/crypto/heimdal/lib/krb5/context.c user/dfr/gssapi/6/crypto/heimdal/lib/krb5/krb5.h Modified: user/dfr/gssapi/6/crypto/heimdal/lib/krb5/cache.c ============================================================================== --- user/dfr/gssapi/6/crypto/heimdal/lib/krb5/cache.c Tue Nov 11 14:19:46 2008 (r184846) +++ user/dfr/gssapi/6/crypto/heimdal/lib/krb5/cache.c Tue Nov 11 14:44:47 2008 (r184847) @@ -190,6 +190,39 @@ krb5_cc_get_ops(krb5_context context, kr } /* + * Return non-zero if envirnoment that will determine default krb5cc + * name has changed. + */ + +static int +environment_changed(krb5_context context) +{ + const char *e; + + /* if the cc name was set, don't change it */ + if (context->default_cc_name_set) + return 0; + + if(issuid()) + return 0; + + e = getenv("KRB5CCNAME"); + if (e == NULL) { + if (context->default_cc_name_env) { + free(context->default_cc_name_env); + context->default_cc_name_env = NULL; + return 1; + } + } else { + if (context->default_cc_name_env == NULL) + return 1; + if (strcmp(e, context->default_cc_name_env) != 0) + return 1; + } + return 0; +} + +/* * Set the default cc name for `context' to `name'. */ @@ -202,10 +235,14 @@ krb5_cc_set_default_name(krb5_context co if (name == NULL) { char *e; e = getenv("KRB5CCNAME"); - if (e) + if (e) { p = strdup(e); - else + if (context->default_cc_name_env) + free(context->default_cc_name_env); + context->default_cc_name_env = strdup(e); + } else { asprintf(&p,"FILE:/tmp/krb5cc_%u", (unsigned)getuid()); + } } else p = strdup(name); @@ -227,7 +264,7 @@ krb5_cc_set_default_name(krb5_context co const char* krb5_cc_default_name(krb5_context context) { - if (context->default_cc_name == NULL) + if (context->default_cc_name == NULL || environment_changed(context)) krb5_cc_set_default_name(context, NULL); return context->default_cc_name; Modified: user/dfr/gssapi/6/crypto/heimdal/lib/krb5/context.c ============================================================================== --- user/dfr/gssapi/6/crypto/heimdal/lib/krb5/context.c Tue Nov 11 14:19:46 2008 (r184846) +++ user/dfr/gssapi/6/crypto/heimdal/lib/krb5/context.c Tue Nov 11 14:44:47 2008 (r184847) @@ -177,6 +177,8 @@ init_context_from_config_file(krb5_conte INIT_FIELD(context, bool, srv_lookup, TRUE, "srv_lookup"); INIT_FIELD(context, bool, srv_lookup, context->srv_lookup, "dns_lookup_kdc"); context->default_cc_name = NULL; + context->default_cc_name_env = NULL; + context->default_cc_name_set = 0; return 0; } @@ -230,6 +232,8 @@ krb5_free_context(krb5_context context) { if (context->default_cc_name) free(context->default_cc_name); + if (context->default_cc_name_env) + free(context->default_cc_name_env); free(context->etypes); free(context->etypes_des); krb5_free_host_realm (context, context->default_realms); Modified: user/dfr/gssapi/6/crypto/heimdal/lib/krb5/krb5.h ============================================================================== --- user/dfr/gssapi/6/crypto/heimdal/lib/krb5/krb5.h Tue Nov 11 14:19:46 2008 (r184846) +++ user/dfr/gssapi/6/crypto/heimdal/lib/krb5/krb5.h Tue Nov 11 14:44:47 2008 (r184847) @@ -395,6 +395,8 @@ typedef struct krb5_context_data { char error_buf[256]; krb5_addresses *ignore_addresses; char *default_cc_name; + char *default_cc_name_env; + int default_cc_name_set; } krb5_context_data; typedef struct krb5_ticket {