summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsdconfig/networking/share/ipaddr.subr
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2013-02-25 19:55:32 +0000
committerdteske <dteske@FreeBSD.org>2013-02-25 19:55:32 +0000
commit1f658c88bed0f72839a6caee6fdc9731cfd3a516 (patch)
treecd0ba840ab0526258652c2740f9e0c046edb8374 /usr.sbin/bsdconfig/networking/share/ipaddr.subr
parent66bd226a8bcd9c32e76c9a7c414af10c393e50d8 (diff)
downloadFreeBSD-src-1f658c88bed0f72839a6caee6fdc9731cfd3a516.zip
FreeBSD-src-1f658c88bed0f72839a6caee6fdc9731cfd3a516.tar.gz
Import media selection/preparation framework (sysinstall inspired). Makes
accessing files from various types of media nice and abstracted away from the wet-work involved in preparing, validating, and initializing those types of media. This will be used for the package management system module and other modules that need access to files and want to allow the user to decide where those files come from (either in a scripted fashion, prompted fashion, or any combination thereof). Heavily inspired by sysinstall and even uses the same reserved words so that scripts are portable. Coded over months, tested continuously through- out, and reviewed several times. Some notes about the changes: - Move network-setting acquisition/validation routines to media/tcpip.subr - The options screen from sysinstall has been converted to a dialog menu - The "UFS" media choice is renamed to "Directory" to reflect how sysinstall treats the choice and a new [true] "UFS" media choice has been added that acts on real UFS partitions (such as external disks with disklabels). - Many more help files have been resurrected from sysinstall (I noticed that some of the content seems a bit dated; I gave them a once-over but they could really use an update). - A total of 10 media choices are presented (via mediaGetType) including: CD/DVD, FTP, FTP Passive, HTTP Proxy, Directory, NFS, DOS, UFS, Floppy, USB - Novel struct/device management layer for managing the issue of passing more information than can comfortably fit in an argument list.
Diffstat (limited to 'usr.sbin/bsdconfig/networking/share/ipaddr.subr')
-rw-r--r--usr.sbin/bsdconfig/networking/share/ipaddr.subr204
1 files changed, 2 insertions, 202 deletions
diff --git a/usr.sbin/bsdconfig/networking/share/ipaddr.subr b/usr.sbin/bsdconfig/networking/share/ipaddr.subr
index d5398e5..4b39dd2 100644
--- a/usr.sbin/bsdconfig/networking/share/ipaddr.subr
+++ b/usr.sbin/bsdconfig/networking/share/ipaddr.subr
@@ -1,6 +1,6 @@
if [ ! "$_NETWORKING_IPADDR_SUBR" ]; then _NETWORKING_IPADDR_SUBR=1
#
-# Copyright (c) 2006-2012 Devin Teske
+# Copyright (c) 2006-2013 Devin Teske
# All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -40,75 +40,10 @@ f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
############################################################ FUNCTIONS
-# f_ifconfig_inet $interface
-#
-# Returns the IPv4 address associated with $interface.
-#
-f_ifconfig_inet()
-{
- local interface="$1"
- ifconfig "$interface" 2> /dev/null | awk \
- '
- BEGIN { found = 0 }
- ( $1 == "inet" ) \
- {
- print $2
- found = 1
- exit
- }
- END { exit ! found }
- '
-}
-
-# f_validate_ipaddr $ipaddr
-#
-# Returns zero if the given argument (an IP address) is of the proper format.
-#
-# The return status for invalid IP address is one of:
-# 1 One or more individual octets within the IP address (separated
-# by dots) contains one or more invalid characters.
-# 2 One or more individual octets within the IP address are null
-# and/or missing.
-# 3 One or more individual octets within the IP address exceeds the
-# maximum of 255 (or 2^8, being an octet comprised of 8 bits).
-# 4 The IP address has either too few or too many octets.
-#
-f_validate_ipaddr()
-{
- local ip="$1"
-
- ( # Operate within a sub-shell to protect the parent environment
-
- # Track number of octets for error checking
- noctets=0
-
- IFS="." # Split on `dot'
- for octet in $ip; do
-
- # Return error if the octet is null
- [ "$octet" ] || exit 2
-
- # Return error if not a whole integer
- f_isinteger "$octet" || exit 1
-
- # Return error if not a positive integer
- [ $octet -ge 0 ] || exit 1
-
- # Return error if the octet exceeds 255
- [ $octet -gt 255 ] && exit 3
-
- noctets=$(( $noctets + 1 ))
-
- done
-
- [ $noctets -eq 4 ] || exit 4
- )
-}
-
# f_dialog_iperror $error $ipaddr
#
# Display a msgbox with the appropriate error message for an error returned by
-# the f_validate_ipaddr function above.
+# the f_validate_ipaddr function.
#
f_dialog_iperror()
{
@@ -144,141 +79,6 @@ f_dialog_validate_ipaddr()
return $retval
}
-# f_validate_ipaddr6 $ipv6_addr
-#
-# Returns zero if the given argument (an IPv6 address) is of the proper format.
-#
-# The return status for invalid IP address is one of:
-# 1 One or more individual segments within the IP address
-# (separated by colons) contains one or more invalid characters.
-# Segments must contain only combinations of the characters 0-9,
-# A-F, or a-f.
-# 2 Too many/incorrect null segments. A single null segment is
-# allowed within the IP address (separated by colons) but not
-# allowed at the beginning or end (unless a double-null segment;
-# i.e., "::*" or "*::").
-# 3 One or more individual segments within the IP address
-# (separated by colons) exceeds the length of 4 hex-digits.
-# 4 The IP address entered has either too few (less than 3), too
-# many (more than 8), or not enough segments, separated by
-# colons.
-# 5* The IPv4 address at the end of the IPv6 address is invalid.
-# * When there is an error with the dotted-quad IPv4 address at the
-# end of the IPv6 address, the return value of 5 is OR'd with a
-# bit-shifted (<< 4) return of f_validate_ipaddr.
-#
-f_validate_ipaddr6()
-{
- local ip="$1"
-
- ( # Operate within a sub-shell to protect the parent environment
-
- IFS=":" # Split on `colon'
- set -- $ip:
-
- # Return error if too many or too few segments
- # Using 9 as max in case of leading or trailing null spanner
- [ $# -gt 9 -o $# -lt 3 ] && exit 4
-
- h="[0-9A-Fa-f]"
- nulls=0
- nsegments=$#
- contains_ipv4_segment=
-
- while [ $# -gt 0 ]; do
-
- segment="${1%:}"
- shift
-
- #
- # Return error if this segment makes one null too-many.
- # A single null segment is allowed anywhere in the
- # middle as well as double null segments are allowed at
- # the beginning or end (but not both).
- #
- if [ ! "$segment" ]; then
- nulls=$(( $nulls + 1 ))
- if [ $nulls -eq 3 ]; then
- # Only valid syntax for 3 nulls is `::'
- [ "$ip" = "::" ] || exit 2
- elif [ $nulls -eq 2 ]; then
- # Only valid if begins/ends with `::'
- case "$ip" in
- ::*|*::) : fall thru ;;
- *) exit 2
- esac
- fi
- continue
- fi
-
- #
- # Return error if not a valid hexadecimal short
- #
- case "$segment" in
- $h|$h$h|$h$h$h|$h$h$h$h)
- : valid segment of 1-4 hexadecimal digits
- ;;
- *[!0-9A-Fa-f]*)
- # Segment contains at least one invalid char
-
- # Return error immediately if not last segment
- [ $# -eq 0 ] || exit 1
-
- # Otherwise, check for legacy IPv4 notation
- case "$segment" in
- *[!0-9.]*)
- # Segment contains at least one invalid
- # character even for an IPv4 address
- exit 1
- esac
-
- # Return error if not enough segments
- if [ $nulls -eq 0 ]; then
- [ $nsegments -eq 7 ] || exit 4
- fi
-
- contains_ipv4_segment=1
-
- # Validate the IPv4 address
- f_validate_ipaddr "$segment" ||
- exit $(( 5 | $? << 4 ))
- ;;
- *)
- # Segment characters are all valid but too many
- exit 3
- esac
-
- done
-
- if [ $nulls -eq 1 ]; then
- # Single null segment cannot be at beginning/end
- case "$ip" in
- :*|*:) exit 2
- esac
- fi
-
- #
- # A legacy IPv4 address can span the last two 16-bit segments,
- # reducing the amount of maximum allowable segments by-one.
- #
- maxsegments=8
- if [ "$contains_ipv4_segment" ]; then
- maxsegments=7
- fi
-
- case $nulls in
- # Return error if missing segments with no null spanner
- 0) [ $nsegments -eq $maxsegments ] || exit 4 ;;
- # Return error if null spanner with too many segments
- 1) [ $nsegments -le $maxsegments ] || exit 4 ;;
- # Return error if leading/trailing `::' with too many segments
- 2) [ $nsegments -le $(( $maxsegments + 1 )) ] || exit 4 ;;
- esac
-
- exit $SUCCESS
- )
-}
-
# f_dialog_ip6error $error $ipv6_addr
#
# Display a msgbox with the appropriate error message for an error returned by
OpenPOWER on IntegriCloud