- if (ctx->acceptorName) {
- /* verify name */
- int equal = 0;
- OM_uint32 ignoredMinor = 0;
- major = gss_compare_name(minor, importedName,
- ctx->acceptorName, &equal);
- gss_release_name(&ignoredMinor, &importedName);
- if (GSS_ERROR(major))
- return major;
- if (!equal) {
- *minor = GSSEAP_BAD_CONTEXT_TOKEN;
- return GSS_S_DEFECTIVE_TOKEN;
- }
- } else {
- /* accept acceptor name hint */
- ctx->acceptorName = importedName;
- importedName = NULL;
- }
+
+ if (ctx->acceptorName != GSS_C_NO_NAME) {
+ /* verify name hint matched asserted acceptor name */
+ major = gss_compare_name(minor, nameHint,
+ ctx->acceptorName, &equal);
+ if (GSS_ERROR(major)) {
+ gss_release_name(&tmpMinor, &nameHint);
+ return major;
+ }
+
+ gss_release_name(&tmpMinor, &nameHint);
+
+ if (!equal) {
+ *minor = GSSEAP_BAD_CONTEXT_TOKEN;
+ return GSS_S_DEFECTIVE_TOKEN;
+ }
+ } else {
+ /* accept acceptor name hint */
+ ctx->acceptorName = nameHint;
+ nameHint = GSS_C_NO_NAME;
+ }