cifs.upcall: allocate a talloc context for smb_krb5_unparse_name
authorJeff Layton <jlayton@redhat.com>
Tue, 16 Feb 2010 14:16:42 +0000 (09:16 -0500)
committerGünther Deschner <gd@samba.org>
Wed, 17 Feb 2010 11:15:50 +0000 (12:15 +0100)
cifs.upcall calls smb_krb5_unparse_name with a NULL talloc context.
Older versions of this function though will conditionally use
SMB_REALLOC instead of TALLOC_REALLOC when a NULL context is passed
in. To make it more consistent, just spawn a talloc context that
we can pass into this function.

Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=565446
https://bugzilla.samba.org/show_bug.cgi?id=6868

Reported-by: Ludek Finstrle <luf@seznam.cz>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Günther Deschner <gd@samba.org>
client/cifs.upcall.c

index bfc70d15ed116e9d93b09026565e244ae4890b85..42632a0da09308ebc1f54256932b489626253c18 100644 (file)
@@ -56,6 +56,7 @@ get_tgt_time(const char *ccname) {
        krb5_principal principal;
        time_t credtime = 0;
        char *realm = NULL;
+       TALLOC_CTX *mem_ctx;
 
        if (krb5_init_context(&context)) {
                syslog(LOG_DEBUG, "%s: unable to init krb5 context", __func__);
@@ -87,9 +88,10 @@ get_tgt_time(const char *ccname) {
                goto err_ccstart;
        }
 
+       mem_ctx = talloc_init("cifs.upcall");
        while (!credtime && !krb5_cc_next_cred(context, ccache, &cur, &creds)) {
                char *name;
-               if (smb_krb5_unparse_name(NULL, context, creds.server, &name)) {
+               if (smb_krb5_unparse_name(mem_ctx, context, creds.server, &name)) {
                        syslog(LOG_DEBUG, "%s: unable to unparse name", __func__);
                        goto err_endseq;
                }
@@ -102,6 +104,7 @@ get_tgt_time(const char *ccname) {
                TALLOC_FREE(name);
         }
 err_endseq:
+       TALLOC_FREE(mem_ctx);
         krb5_cc_end_seq_get(context, ccache, &cur);
 err_ccstart:
        krb5_free_principal(context, principal);