diff --git a/CHANGES b/CHANGES
index 0e80ec19aca130f5e943a35fb950dc9dd4d84b2d..cada3131593fdae231dd02dca0e8c859b2ff93e8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,7 @@ OpenLDAP 2.4.11 Engineering
 	Fixed liblber ber_get_next length decoding (ITS#5580)
 	Added libldap assertion control (ITS#5560)
 	Fixed libldap GnuTLS CRL result handling (ITS#5577)
+	Fixed slapd check for structural_class failures (ITS#5540)
 	Fixed slapd crash with no listeners (ITS#5563)
 	Fixed slapd sets memory leak (ITS#5557)
 	Fixed slapd-sock, back-shell buffer count (ITS#5558)
diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index 450cbbfc8ef84c7bf6f6e21b141151fa7a354c58..bd93b5c7b4797855ac12e30dd9e907376df1c4ec 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -5507,6 +5507,12 @@ config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
 	oc_at = attr_find( e->e_attrs, slap_schema.si_ad_objectClass );
 	rc = structural_class(oc_at->a_vals, &oc, NULL, &text, c->cr_msg,
 		sizeof(c->cr_msg), op ? op->o_tmpmemctx : NULL );
+	if ( rc != LDAP_SUCCESS ) {
+		Debug( LDAP_DEBUG_ANY,
+			"config_build_entry: build \"%s\" failed: \"%s\"\n",
+			rdn->bv_val, text, 0);
+		return NULL;
+	}
 	attr_merge_normalize_one(e, slap_schema.si_ad_structuralObjectClass, &oc->soc_cname, NULL );
 	if ( op ) {
 		op->ora_e = e;