OM_uint32 generic_gss_add_buffer_set_member (OM_uint32 * minor_status, const gss_buffer_t member_buffer, gss_buffer_set_t *buffer_set) { gss_buffer_set_t set; gss_buffer_t p; OM_uint32 ret; if (*buffer_set == GSS_C_NO_BUFFER_SET) { ret = generic_gss_create_empty_buffer_set(minor_status, buffer_set); if (ret) { return ret; } } set = *buffer_set; set->elements = (gss_buffer_desc *)realloc(set->elements, (set->count + 1) * sizeof(gss_buffer_desc)); if (set->elements == NULL) { free(set); /* SUNW17PACresync - MIT17 bug */ *minor_status = ENOMEM; return GSS_S_FAILURE; } p = &set->elements[set->count]; p->value = malloc(member_buffer->length); if (p->value == NULL) { free(set->elements); /* SUNW17PACresync - MIT17 bug */ free(set); /* SUNW17PACresync - MIT17 bug */ *minor_status = ENOMEM; return GSS_S_FAILURE; } (void) memcpy(p->value, member_buffer->value, member_buffer->length); p->length = member_buffer->length; set->count++; *minor_status = 0; return GSS_S_COMPLETE; }
OM_uint32 KRB5_CALLCONV gss_create_empty_buffer_set (OM_uint32 * minor_status, gss_buffer_set_t *buffer_set) { return generic_gss_create_empty_buffer_set(minor_status, buffer_set); }