* credential handle.
*/
- /*
- * Calling gssEapInquireCred() forces the default acceptor credential name
- * to be resolved.
- */
- major = gssEapInquireCred(minor, cred, &ctx->acceptorName, NULL, NULL, NULL);
- if (GSS_ERROR(major))
- goto cleanup;
+ if (cred->name != GSS_C_NO_NAME) {
+ major = gssEapDuplicateName(minor, cred->name, &ctx->acceptorName);
+ if (GSS_ERROR(major))
+ goto cleanup;
+ }
major = gssEapSmStep(minor,
cred,
GSSEAP_MUTEX_LOCK(&ctx->mutex);
if (src_name != NULL) {
- major = gssEapDuplicateName(minor, ctx->initiatorName, src_name);
- if (GSS_ERROR(major))
- goto cleanup;
+ if (ctx->initiatorName != GSS_C_NO_NAME) {
+ major = gssEapDuplicateName(minor, ctx->initiatorName, src_name);
+ if (GSS_ERROR(major))
+ goto cleanup;
+ } else
+ *src_name = GSS_C_NO_NAME;
}
if (targ_name != NULL) {
- major = gssEapDuplicateName(minor, ctx->acceptorName, targ_name);
- if (GSS_ERROR(major))
- goto cleanup;
+ if (ctx->acceptorName != GSS_C_NO_NAME) {
+ major = gssEapDuplicateName(minor, ctx->acceptorName, targ_name);
+ if (GSS_ERROR(major))
+ goto cleanup;
+ } else
+ *targ_name = GSS_C_NO_NAME;
}
if (lifetime_rec != NULL) {
credBuf->length = 0;
credBuf->value = NULL;
+ if (ctx->acceptorName == GSS_C_NO_NAME) {
+ *minor = GSSEAP_NO_ACCEPTOR_NAME;
+ return GSS_S_UNAVAILABLE;
+ }
+
GSSEAP_KRB_INIT(&krbContext);
code = getAcceptorKey(krbContext, ctx, cred, &server, &acceptorKey);