- if (z3950_gdu && z3950_gdu->which == Z_GDU_Z3950
- && z3950_gdu->u.z3950->which == Z_APDU_initResponse
- && *z3950_gdu->u.z3950->u.initResponse->result)
- return true;
-
+ int error = YAZ_SRW_SYSTEM_TEMPORARILY_UNAVAILABLE;
+ const char *addinfo = 0;
+ if (z3950_gdu && z3950_gdu->which == Z_GDU_Z3950
+ && z3950_gdu->u.z3950->which == Z_APDU_initResponse)
+ {
+ Z_InitResponse *initrs = z3950_gdu->u.z3950->u.initResponse;
+ if (*initrs->result)
+ return true;
+ int no = 0;
+ while (1)
+ {
+ Z_DefaultDiagFormat *df = yaz_decode_init_diag(no, initrs);
+
+ if (!df)
+ break;
+ yaz_add_srw_diagnostic(odr_en,
+ &(sru_pdu_res->u.response->diagnostics),
+ &(sru_pdu_res->u.response->num_diagnostics),
+ yaz_diag_bib1_to_srw(*df->condition),
+ df->u.v2Addinfo);
+ no++;
+ }
+ if (no)
+ return false; // got least one diagnostic from init
+
+ // we just have result=false.
+ error = YAZ_SRW_AUTHENTICATION_ERROR;
+ }
+ else
+ addinfo = "sru_z3950: expected initResponse";