diff --git a/lib/init.c b/lib/init.c index c638c8e..cc79b1b 100644 --- a/lib/init.c +++ b/lib/init.c @@ -232,9 +232,13 @@ iscsi_parse_full_url(struct iscsi_context *iscsi, const char *url) char *target; char *lun; char *tmp; + int l; if (strncmp(url, "iscsi://", 8)) { - iscsi_set_error(iscsi, "Invalid URL %s\niSCSI URL must be of the form \"iscsi://[[%%]@][:]//\"\n", url); + iscsi_set_error(iscsi, "Invalid URL %s\niSCSI URL must be of " + "the form " + "\"iscsi://[[%%]@]" + "[:]//\"\n", url); return NULL; } @@ -260,7 +264,10 @@ iscsi_parse_full_url(struct iscsi_context *iscsi, const char *url) target = index(portal, '/'); if (target == NULL) { - iscsi_set_error(iscsi, "Invalid URL %s\niSCSI URL must be of the form \"iscsi://[:]//\"\n", url); + iscsi_set_error(iscsi, "Invalid URL %s\nCould not parse " + "''\niSCSI URL must be of the form " + "\"iscsi://[[%%]@]" + "[:]//\"\n", url); free(str); return NULL; } @@ -268,12 +275,23 @@ iscsi_parse_full_url(struct iscsi_context *iscsi, const char *url) lun = index(target, '/'); if (lun == NULL) { - iscsi_set_error(iscsi, "Invalid URL %s\niSCSI URL must be of the form \"iscsi://[:]//\"\n", url); + iscsi_set_error(iscsi, "Invalid URL %s\nCould not parse \n" + "iSCSI URL must be of the form \"iscsi://" + "[:]//\"\n", url); free(str); return NULL; } *lun++ = 0; + l = strtol(lun, &tmp, 10); + if (*lun == 0 || *tmp != 0) { + iscsi_set_error(iscsi, "Invalid URL %s\nCould not parse \n" + "iSCSI URL must be of the form \"iscsi://" + "[:]//\"\n", + url); + free(str); + return NULL; + } iscsi_url = malloc(sizeof(struct iscsi_url)); if (iscsi_url == NULL) { @@ -319,7 +337,7 @@ iscsi_parse_full_url(struct iscsi_context *iscsi, const char *url) } } - iscsi_url->lun = atoi(lun); + iscsi_url->lun = l; free(str); return iscsi_url; } diff --git a/src/iscsi-inq.c b/src/iscsi-inq.c index ee455cd..4691fad 100644 --- a/src/iscsi-inq.c +++ b/src/iscsi-inq.c @@ -194,12 +194,14 @@ int main(int argc, const char *argv[]) if (url == NULL) { fprintf(stderr, "You must specify the URL\n"); - fprintf(stderr, " iscsi://[[%%]@][:]//\n"); + fprintf(stderr, " iscsi://[[%%]@]" + "[:]//\n"); exit(10); } iscsi_url = iscsi_parse_full_url(iscsi, url); if (iscsi_url == NULL) { - fprintf(stderr, "Failed to parse URL : %s %s\n", url, iscsi_get_error(iscsi)); + fprintf(stderr, "Failed to parse URL: %s\n", + iscsi_get_error(iscsi)); exit(10); }