X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=1230cdb8bc41e77a8c3227dd664b22a29fc45b08;hp=d7a0ec1d97eac24f51cd36c82fabb8a1dea5f206;hb=46f5205bdb8e837ab305644839451949916e40cb;hpb=6158d7465f3e832a18554c3e1157c12faaa7828e diff --git a/client/client.c b/client/client.c index d7a0ec1..1230cdb 100644 --- a/client/client.c +++ b/client/client.c @@ -1200,6 +1200,25 @@ static int send_srw(Z_SRW_PDU *sr) gdu = z_get_HTTP_Request_host_path(out, host_port, path); + if (auth) + { + if (auth->which == Z_IdAuthentication_open) + { + char **darray; + int num; + nmem_strsplit(out->mem, "/", auth->u.open, &darray, &num); + if (num >= 1) + sr->username = darray[0]; + if (num >= 2) + sr->password = darray[1]; + } + else if (auth->which == Z_IdAuthentication_idPass) + { + sr->username = auth->u.idPass->userId; + sr->password = auth->u.idPass->password; + } + } + if (!yaz_matchstr(sru_method, "get")) { yaz_sru_get_encode(gdu->u.HTTP_Request, sr, out, charset); @@ -2764,36 +2783,50 @@ static int cmd_setnames(const char *arg) /* PRESENT SERVICE ----------------------------- */ -static void parse_show_args(const char *arg_c, char *setstring, - Odr_int *start, Odr_int *number) +static int parse_show_args(const char *arg_c, char *setstring, + Odr_int *start, Odr_int *number) { - char arg[40]; - char *p; + char *end_ptr; - strncpy(arg, arg_c, sizeof(arg)-1); - arg[sizeof(arg)-1] = '\0'; + if (setnumber >= 0) + sprintf(setstring, "%d", setnumber); + else + *setstring = '\0'; - if ((p = strchr(arg, '+'))) + if (!strcmp(arg_c, "all")) { - *number = odr_atoi(p + 1); - *p = '\0'; + *number = last_hit_count; + *start = 1; } - if (*arg) + *start = odr_strtol(arg_c, &end_ptr, 10); + if (end_ptr == arg_c || *end_ptr == '\0') + return 1; + while (isspace(*(unsigned char *)end_ptr)) + end_ptr++; + if (*end_ptr != '+') { - if (!strcmp(arg, "all")) - { - *number = last_hit_count; - *start = 1; - } - else - *start = odr_atoi(arg); + printf("Bad show arg: expected +. Got %s\n", end_ptr); + return 0; } - if (p && (p=strchr(p+1, '+'))) - strcpy(setstring, p+1); - else if (setnumber >= 0) - sprintf(setstring, "%d", setnumber); - else - *setstring = '\0'; + end_ptr++; + arg_c = end_ptr; + *number = odr_strtol(arg_c, &end_ptr, 10); + if (end_ptr == arg_c) + { + printf("Bad show arg: expected number after +\n"); + return 0; + } + if (*end_ptr == '\0') + return 1; + while (isspace(*(unsigned char *)end_ptr)) + end_ptr++; + if (*end_ptr != '+') + { + printf("Bad show arg: + expected. Got %s\n", end_ptr); + return 0; + } + strcpy(setstring, end_ptr+1); + return 1; } static int send_presentRequest(const char *arg) @@ -2806,7 +2839,8 @@ static int send_presentRequest(const char *arg) req->referenceId = set_refid(out); - parse_show_args(arg, setstring, &setno, &nos); + if (!parse_show_args(arg, setstring, &setno, &nos)) + return 0; if (*setstring) req->resultSetId = setstring; @@ -2897,7 +2931,8 @@ static int send_SRW_presentRequest(const char *arg) if (!sr) return 0; - parse_show_args(arg, setstring, &setno, &nos); + if (!parse_show_args(arg, setstring, &setno, &nos)) + return 0; sr->u.request->startRecord = odr_intdup(out, setno); sr->u.request->maximumRecords = odr_intdup(out, nos); if (record_schema) @@ -4966,7 +5001,7 @@ static void client(void) line_in=readline(C_PROMPT); if (!line_in) { - putchar("\n"); + putchar('\n'); break; } #if HAVE_READLINE_HISTORY_H