They'll show up via bytarget as diagnostic id =
ZOOM_ERROR_CCL_CONFIG = 10013 and additional info as returned
by new YAZ function ccl_qual_fitem2.
res = ccl_qual_mk();
for (s = sdb->settings[PZ_CCLMAP]; s; s = s->next)
{
res = ccl_qual_mk();
for (s = sdb->settings[PZ_CCLMAP]; s; s = s->next)
{
+ const char *addinfo = 0;
char *p = strchr(s->name + 3, ':');
if (!p)
{
char *p = strchr(s->name + 3, ':');
if (!p)
{
- yaz_log(YLOG_WARN, "Malformed cclmap name: %s", s->name);
+ WRBUF w = wrbuf_alloc();
+ wrbuf_printf(w, "Malformed cclmap. name=%s", s->name);
+ yaz_log(YLOG_WARN, "%s: %s", client_get_id(cl), wrbuf_cstr(w));
+ client_set_diagnostic(cl, ZOOM_ERROR_CCL_CONFIG, wrbuf_cstr(w));
+ client_set_state_nb(cl, Client_Error);
- ccl_qual_fitem(res, s->value, p);
+ if (ccl_qual_fitem2(res, s->value, p, &addinfo))
+ {
+ WRBUF w = wrbuf_alloc();
+
+ wrbuf_printf(w, "Malformed cclmap. name=%s: value=%s (%s)",
+ s->name, p, addinfo);
+ yaz_log(YLOG_WARN, "%s: %s", client_get_id(cl), wrbuf_cstr(w));
+ client_set_diagnostic(cl, ZOOM_ERROR_CCL_CONFIG, wrbuf_cstr(w));
+ client_set_state_nb(cl, Client_Error);
+ ccl_qual_rm(&res);
+ wrbuf_destroy(w);
+ return 0;
+ }
Z_RPNQuery *zquery;
if (!ccl_map)
Z_RPNQuery *zquery;
if (!ccl_map)
if (maxrecs && atoi(maxrecs) != cl->maxrecs)
{
if (maxrecs && atoi(maxrecs) != cl->maxrecs)
{
no_failed_query++;
else if (parse_ret == -2)
no_failed_limit++;
no_failed_query++;
else if (parse_ret == -2)
no_failed_limit++;
+ else if (parse_ret)
+ no_working++; /* other error, such as bad CCL map */