+struct eap_gss_attribute_args {
+ gss_buffer_t prefix;
+ gss_buffer_set_t attrs;
+};
+
+static OM_uint32
+addAttribute(OM_uint32 *minor,
+ void *data,
+ gss_buffer_t attribute)
+{
+ struct eap_gss_attribute_args *args = (struct eap_gss_attribute_args *)data;
+ OM_uint32 major, tmpMinor;
+ gss_buffer_desc qualifiedAttr;
+
+ if (attribute != GSS_C_NO_BUFFER) {
+ major = composeAttributeName(minor, args->prefix, attribute, &qualifiedAttr);
+ if (GSS_ERROR(major))
+ return major;
+
+ major = gss_add_buffer_set_member(minor, &qualifiedAttr, args->attrs);
+
+ gss_release_buffer(&tmpMinor, &qualifiedAttr);
+ } else {
+ major = gss_add_buffer_set_member(minor, args->prefix, args->attrs);
+ }
+
+ return major;
+}
+