Copy cc_ops and kt_types when copying a krb5_context in krb5_copy_context()
This commit is contained in:
		
				
					committed by
					
						
						Love Hornquist Astrand
					
				
			
			
				
	
			
			
			
						parent
						
							7262cbab9c
						
					
				
				
					commit
					81b70c3488
				
			@@ -242,6 +242,29 @@ cc_ops_register(krb5_context context)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
cc_ops_copy(krb5_context context, const krb5_context src_context)
 | 
			
		||||
{
 | 
			
		||||
    context->cc_ops = NULL;
 | 
			
		||||
    context->num_cc_ops = 0;
 | 
			
		||||
 | 
			
		||||
    if (src_context->num_cc_ops == 0)
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
    context->cc_ops = malloc(sizeof(context->cc_ops[0]) * src_context->num_cc_ops);
 | 
			
		||||
    if (context->cc_ops == NULL) {
 | 
			
		||||
	krb5_set_error_message(context, KRB5_CC_NOMEM,
 | 
			
		||||
			       N_("malloc: out of memory", ""));
 | 
			
		||||
	return KRB5_CC_NOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    context->num_cc_ops = src_context->num_cc_ops;
 | 
			
		||||
    memcpy(context->cc_ops, src_context->cc_ops,
 | 
			
		||||
	   sizeof(context->cc_ops[0]) * src_context->num_cc_ops);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
kt_ops_register(krb5_context context)
 | 
			
		||||
{
 | 
			
		||||
@@ -259,6 +282,28 @@ kt_ops_register(krb5_context context)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
kt_ops_copy(krb5_context context, const krb5_context src_context)
 | 
			
		||||
{
 | 
			
		||||
    context->num_kt_types = 0;
 | 
			
		||||
    context->kt_types     = NULL;
 | 
			
		||||
 | 
			
		||||
    if (src_context->num_kt_types == 0)
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
    context->kt_types = malloc(sizeof(context->kt_types[0]) * src_context->num_kt_types);
 | 
			
		||||
    if (context->kt_types == NULL) {
 | 
			
		||||
	krb5_set_error_message(context, ENOMEM,
 | 
			
		||||
			       N_("malloc: out of memory", ""));
 | 
			
		||||
	return ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    context->num_kt_types = src_context->num_kt_types;
 | 
			
		||||
    memcpy(context->kt_types, src_context->kt_types,
 | 
			
		||||
	   sizeof(context->kt_types[0]) * src_context->num_kt_types);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initializes the context structure and reads the configuration file
 | 
			
		||||
@@ -424,8 +469,9 @@ krb5_copy_context(krb5_context context, krb5_context *out)
 | 
			
		||||
 | 
			
		||||
    /* XXX should copy */
 | 
			
		||||
    krb5_init_ets(p);
 | 
			
		||||
    cc_ops_register(p);
 | 
			
		||||
    kt_ops_register(p);
 | 
			
		||||
 | 
			
		||||
    cc_ops_copy(p, context);
 | 
			
		||||
    kt_ops_copy(p, context);
 | 
			
		||||
 | 
			
		||||
#if 0 /* XXX */
 | 
			
		||||
    if(context->warn_dest != NULL)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user