+ /* Acceptor-Host-Name */
+ krbDataToGssBuffer(krb5_princ_component(krbContext, krbPrinc, 1), &nameBuf);
+
+ major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
+ VENDOR_ATTR_GSS_ACCEPTOR_HOST_NAME,
+ VENDOR_ID_UKERNA,
+ &nameBuf);
+ if (GSS_ERROR(major))
+ return major;
+
+ if (krb5_princ_size(krbContext, krbPrinc) > 2) {
+ /* Acceptor-Service-Specific */
+ krb5_principal_data ssiPrinc = *krbPrinc;
+ char *ssi;
+
+ krb5_princ_size(krbContext, &ssiPrinc) -= 2;
+ krb5_princ_name(krbContext, &ssiPrinc) += 2;
+
+ *minor = krb5_unparse_name_flags(krbContext, &ssiPrinc,
+ KRB5_PRINCIPAL_UNPARSE_NO_REALM, &ssi);
+ if (*minor != 0)
+ return GSS_S_FAILURE;
+
+ nameBuf.value = ssi;
+ nameBuf.length = strlen(ssi);
+
+ major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
+ VENDOR_ATTR_GSS_ACCEPTOR_SERVICE_SPECIFIC,
+ VENDOR_ID_UKERNA,
+ &nameBuf);
+
+ if (GSS_ERROR(major)) {
+ krb5_free_unparsed_name(krbContext, ssi);
+ return major;
+ }
+ krb5_free_unparsed_name(krbContext, ssi);
+ }
+
+ krbDataToGssBuffer(krb5_princ_realm(krbContext, krbPrinc), &nameBuf);
+ if (nameBuf.length != 0) {
+ /* Acceptor-Realm-Name */
+ major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
+ VENDOR_ATTR_GSS_ACCEPTOR_REALM_NAME,
+ VENDOR_ID_UKERNA,
+ &nameBuf);
+ if (GSS_ERROR(major))
+ return major;
+ }
+
+ return GSS_S_COMPLETE;