]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[iscsi] Parse IPv6 address in root path
authorHannes Reinecke <hare@suse.de>
Thu, 1 Mar 2018 13:30:41 +0000 (13:30 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 1 Mar 2018 13:30:41 +0000 (13:30 +0000)
The iSCSI root path may contain a literal IPv6 address.  Update the
parser to handle this address format correctly.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/tcp/iscsi.c

index 789ac86e6b5ab29bfef732b6aef4d95824c5ba58..f8379b28582bd55bbbb46ef7c3ee13e49684455a 100644 (file)
@@ -1921,6 +1921,7 @@ static int iscsi_parse_root_path ( struct iscsi_session *iscsi,
        char rp_copy[ strlen ( root_path ) + 1 ];
        char *rp_comp[NUM_RP_COMPONENTS];
        char *rp = rp_copy;
+       int skip = 0;
        int i = 0;
        int rc;
 
@@ -1930,11 +1931,15 @@ static int iscsi_parse_root_path ( struct iscsi_session *iscsi,
                rp_comp[i++] = rp;
                if ( i == NUM_RP_COMPONENTS )
                        break;
-               for ( ; *rp != ':' ; rp++ ) {
+               for ( ; ( ( *rp != ':' ) || skip ) ; rp++ ) {
                        if ( ! *rp ) {
                                DBGC ( iscsi, "iSCSI %p root path \"%s\" "
                                       "too short\n", iscsi, root_path );
                                return -EINVAL_ROOT_PATH_TOO_SHORT;
+                       } else if ( *rp == '[' ) {
+                               skip = 1;
+                       } else if ( *rp == ']' ) {
+                               skip = 0;
                        }
                }
                *(rp++) = '\0';