summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsdconfig/share/media/ftp.subr
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2013-06-23 09:41:47 +0000
committerdteske <dteske@FreeBSD.org>2013-06-23 09:41:47 +0000
commitb9bf1edc0c801b2f4a08a6ca2b57453ab171c95b (patch)
treebf26267c7b170710c8315c1bcc70b2852ff6c2a3 /usr.sbin/bsdconfig/share/media/ftp.subr
parent456a58318f772df57faf95799c77f849e8e59e16 (diff)
downloadFreeBSD-src-b9bf1edc0c801b2f4a08a6ca2b57453ab171c95b.zip
FreeBSD-src-b9bf1edc0c801b2f4a08a6ca2b57453ab171c95b.tar.gz
Fine-tune the parsing of the URL. Re-order, comment, and add debugging to
each case of unique URL format.
Diffstat (limited to 'usr.sbin/bsdconfig/share/media/ftp.subr')
-rw-r--r--usr.sbin/bsdconfig/share/media/ftp.subr57
1 files changed, 46 insertions, 11 deletions
diff --git a/usr.sbin/bsdconfig/share/media/ftp.subr b/usr.sbin/bsdconfig/share/media/ftp.subr
index 6a7601d..c2c7e6a 100644
--- a/usr.sbin/bsdconfig/share/media/ftp.subr
+++ b/usr.sbin/bsdconfig/share/media/ftp.subr
@@ -378,27 +378,62 @@ f_media_set_ftp()
local hostname="${url#*://}" port=21 dir=/
case "$hostname" in
- "["*"]")
+ #
+ # The order in-which the below individual cases appear is important!
+ #
+ "["*"]":*/*) # IPv6 address with port and directory
+ f_dprintf "Looks like an IPv6 addr with port/dir: %s" \
+ "$hostname"
hostname="${hostname#\[}"
- hostname="${hostname%%\]*}"
+ port="${hostname#*\]:}"
+ port="${port%%[!0-9]*}"
+ dir="/${hostname#*/}"
+ hostname="${hostname%%\]:*}"
;;
- "["*"]/"*)
+ "["*"]":*) # IPv6 address with port
+ f_dprintf "Looks like an IPv6 addr with port: %s" "$hostname"
hostname="${hostname#\[}"
- dir="/${hostname#*/}"
- hostname="${hostname%%\]*}"
+ port="${hostname#*\]:}"
+ port="${port%%[!0-9]*}"
+ hostname="${hostname%%\]:*}"
;;
- *"/"*)
+ "["*"]"/*) # IPv6 address with directory
+ f_dprintf "Looks like an IPv6 addr with dir: %s" "$hostname"
+ hostname="${hostname#\[}"
dir="/${hostname#*/}"
- hostname="${hostname%%/*}"
+ hostname="${hostname%%\]*}"
;;
- "["*"]:"*)
+ "["*"]") # IPv6 address
+ f_dprintf "Looks like an IPv6 addr: %s" "$hostname"
hostname="${hostname#\[}"
- port="${hostname#*\]:}"
+ hostname="${hostname%\]}"
+ ;;
+ #
+ # ^^^ IPv6 above / DNS Name or IPv4 below vvv
+ #
+ *:*/*) # DNS name or IPv4 address with port and directory
+ f_dprintf "Looks like a %s with port/dir: %s" \
+ "DNS name or IPv4 addr" "$hostname"
+ port="${hostname#*:}"
port="${port%%[!0-9]*}"
- hostname="${hostname%%\]:*}"
+ dir="/${hostname#*/}"
+ hostname="${hostname%%:*}"
;;
- *)
+ *:*) # DNS name or IPv4 address with port
+ f_dprintf "Looks like a DNS name or IPv4 addr with port: %s" \
+ "$hostname"
+ port="${hostname#*:}"
+ hostname="${hostname%%:*}"
+ ;;
+ */*) # DNS name or IPv4 address with directory
+ f_dprintf "Looks like a DNS name or IPv4 addr with dir: %s" \
+ "$hostname"
+ dir="/${hostname#*/}"
hostname="${hostname%%/*}"
+ ;;
+ *) # DNS name or IPv4 address
+ f_dprintf "Looks like a DNS name or IPv4 addr: %s" "$hostname"
+ : leave hostname as-is
esac
f_dprintf "hostname = \`%s'" "$hostname"
OpenPOWER on IntegriCloud