gss_buffer_t defaultIdentity,
gss_buffer_t defaultCreds)
{
- OM_uint32 major;
+ OM_uint32 major, tmpMinor;
FILE *fp = NULL;
char pwbuf[BUFSIZ], buf[BUFSIZ];
char *ccacheName;
fp = fopen(ccacheName, "r");
if (fp == NULL) {
- *minor = GSSEAP_NO_DEFAULT_CRED;
major = GSS_S_CRED_UNAVAIL;
+ *minor = GSSEAP_NO_DEFAULT_CRED;
goto cleanup;
}
if (fp != NULL)
fclose(fp);
+ if (GSS_ERROR(major)) {
+ gss_release_buffer(&tmpMinor, defaultIdentity);
+ gss_release_buffer(&tmpMinor, defaultCreds);
+ }
+
return major;
}
if (cred->flags & CRED_FLAG_INITIATE) {
major = readDefaultIdentityAndCreds(minor, &defaultIdentity, &defaultCreds);
- if (GSS_ERROR(major))
- goto cleanup;
-
- major = gssEapImportName(minor, &defaultIdentity, GSS_C_NT_USER_NAME,
- nameMech, &defaultIdentityName);
- if (GSS_ERROR(major))
+ if (major == GSS_S_COMPLETE) {
+ major = gssEapImportName(minor, &defaultIdentity, GSS_C_NT_USER_NAME,
+ nameMech, &defaultIdentityName);
+ if (GSS_ERROR(major))
+ goto cleanup;
+ } else if (major != GSS_S_CRED_UNAVAIL)
goto cleanup;
}
if (GSS_ERROR(major))
goto cleanup;
} else if (cred->flags & CRED_FLAG_INITIATE) {
+ if (defaultIdentityName == GSS_C_NO_NAME) {
+ major = GSS_S_CRED_UNAVAIL;
+ *minor = GSSEAP_NO_DEFAULT_IDENTITY;
+ goto cleanup;
+ }
+
cred->name = defaultIdentityName;
defaultIdentityName = GSS_C_NO_NAME;
}
goto cleanup;
cred->flags |= CRED_FLAG_PASSWORD;
- } else if (defaultCreds.value != NULL) {
+ } else if (defaultCreds.value != NULL &&
+ (cred->flags & CRED_FLAG_DEFAULT_IDENTITY)) {
cred->password = defaultCreds;
defaultCreds.length = 0;