error_code GSSEAP_BAD_INITIATOR_NAME, "Initiator identity must be a valid name"
error_code GSSEAP_NO_HOSTNAME, "Could not determine local host name"
error_code GSSEAP_NO_ACCEPTOR_NAME, "Could not determine acceptor identity"
+error_code GSSEAP_BAD_NAME_TOKEN, "Name token is malformed or corrupt"
#
# Credential errors
if (typeid(e) == typeid(std::bad_alloc)) {
*minor = ENOMEM;
goto cleanup;
+ } else if (typeid(e) == typeid(std::runtime_error)) {
+ major = GSS_S_BAD_NAME;
+ *minor = GSSEAP_BAD_ATTR_TOKEN;
+ goto cleanup;
}
/* Errors we delegate to providers */
if (!ctx->initFromBuffer(buffer)) {
delete ctx;
*minor = GSSEAP_BAD_ATTR_TOKEN;
- return GSS_S_DEFECTIVE_TOKEN;
+ return GSS_S_BAD_NAME;
}
name->attrCtx = ctx;
} catch (std::exception &e) {
gss_OID_desc mech;
/* TOK_ID || MECH_OID_LEN || MECH_OID */
- if (remain < 6)
+ if (remain < 6) {
+ *minor = GSSEAP_BAD_NAME_TOKEN;
return GSS_S_BAD_NAME;
+ }
if (flags & EXPORT_NAME_FLAG_COMPOSITE)
tokType = TOK_TYPE_EXPORT_NAME_COMPOSITE;
tokType = TOK_TYPE_EXPORT_NAME;
/* TOK_ID */
- if (load_uint16_be(p) != tokType)
+ if (load_uint16_be(p) != tokType) {
+ *minor = GSSEAP_WRONG_TOK_ID;
return GSS_S_BAD_NAME;
+ }
UPDATE_REMAIN(2);
/* MECH_OID_LEN */
len = load_uint16_be(p);
- if (len < 2)
+ if (len < 2) {
+ *minor = GSSEAP_BAD_NAME_TOKEN;
return GSS_S_BAD_NAME;
+ }
UPDATE_REMAIN(2);
/* MECH_OID */
- if (p[0] != 0x06)
+ if (p[0] != 0x06) {
+ *minor = GSSEAP_BAD_NAME_TOKEN;
return GSS_S_BAD_NAME;
+ }
mech.length = p[1];
mech.elements = &p[2];