if (!matched) {
/* There was no matching authenticator, create a new one */
*cca = ca_create(home, scheme, realm);
- if (ca_challenge((*cca), ch, crcl, scheme, realm) < 0) {
+
+ if (*cca == NULL) {
+ return -1;
+ }
+ else if (ca_challenge((*cca), ch, crcl, scheme, realm) < 0) {
ca_destroy(home, *cca), *cca = NULL;
return -1;
}
- retval = 1; /* Updated authenticator */
+ /* XXX - case w/ unknown authentication scheme */
+ else
+ retval = 1; /* Updated authenticator */
}
}
/** Check if authentication client has been extended. @NEW_1_12_6. */
#define AUTH_CLIENT_IS_EXTENDED(ca) \
- ((ca)->ca_auc->auc_plugin_size > \
+ ((ca)->ca_auc && \
+ (ca)->ca_auc->auc_plugin_size > \
(int)offsetof(auth_client_plugin_t, auc_clear) \
&& (ca)->ca_auc->auc_clear != NULL)