git: 5e7aa7574445 - main - bsdconfig: remove support for ftp, pkg does not support it anymore
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 05 Oct 2023 12:44:23 UTC
The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=5e7aa7574445f1fc90140bc93ec75de83e850fbe commit 5e7aa7574445f1fc90140bc93ec75de83e850fbe Author: Baptiste Daroussin <bapt@FreeBSD.org> AuthorDate: 2023-10-05 12:39:13 +0000 Commit: Baptiste Daroussin <bapt@FreeBSD.org> CommitDate: 2023-10-05 12:44:18 +0000 bsdconfig: remove support for ftp, pkg does not support it anymore --- ObsoleteFiles.inc | 3 +- usr.sbin/bsdconfig/include/media.hlp | 16 - usr.sbin/bsdconfig/include/messages.subr | 11 - usr.sbin/bsdconfig/share/media/Makefile | 2 +- usr.sbin/bsdconfig/share/media/any.subr | 15 +- usr.sbin/bsdconfig/share/media/ftp.subr | 840 -------------------------- usr.sbin/bsdconfig/share/media/httpproxy.subr | 1 - usr.sbin/bsdconfig/share/media/options.subr | 9 - usr.sbin/bsdconfig/share/media/tcpip.subr | 1 - usr.sbin/bsdconfig/share/script.subr | 6 - usr.sbin/bsdconfig/share/variable.subr | 11 - 11 files changed, 9 insertions(+), 906 deletions(-) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 89594ac77b9b..09e18daa7abf 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -51,8 +51,9 @@ # xargs -n1 | sort | uniq -d; # done -# 20231005: bsdconfig remove support for floppy +# 20231005: bsdconfig remove support for floppy and ftp OLD_FILES+=usr/share/bsdconfig/media/floppy.subr +OLD_FILES+=usr/share/bsdconfig/media/ftp.subr # 20230927: Man pages renamed to match the actual functions OLD_FILES+=usr/share/man/man9/cr_seeothergids.9.gz diff --git a/usr.sbin/bsdconfig/include/media.hlp b/usr.sbin/bsdconfig/include/media.hlp index 1f07789ec0a4..ec92e035f833 100644 --- a/usr.sbin/bsdconfig/include/media.hlp +++ b/usr.sbin/bsdconfig/include/media.hlp @@ -16,22 +16,6 @@ You can install from the following types of media: get the distribution files from there. - FTP Get the distribution files from an anonymous ftp server - (you will be presented with a list). Please note that - you may invoke FTP in "Active"/"Passive" auto-mode, or - via an HTTP proxy. - - By default, ftp(1) will automatically use the best mode - for the server. Using an HTTP proxy is sometimes necessary - for firewalls which block all FTP connections. - - If you chose to enter your own URL in the FTP menu, please - note that all paths are *relative* to the home directory - of the user being logged in as. By default, this is the - user "ftp" (anonymous ftp) but you may change this in the - Options screen. - - HTTP Direct Get the distribution files directly from an HTTP server. diff --git a/usr.sbin/bsdconfig/include/messages.subr b/usr.sbin/bsdconfig/include/messages.subr index b9ddd8e2f466..267743e87b0a 100644 --- a/usr.sbin/bsdconfig/include/messages.subr +++ b/usr.sbin/bsdconfig/include/messages.subr @@ -93,10 +93,8 @@ msg_could_not_unmount_the_cdrom_dvd="Could not unmount the CDROM/DVD from %s: %s msg_could_not_unmount_the_dos_partition="Could not unmount the DOS partition from %s: %s" msg_could_not_unmount_the_nfs_partition="Could not unmount the NFS partition from %s: %s" msg_could_not_unmount_the_ufs_partition="Could not unmount the UFS partition from %s: %s" -msg_couldnt_connect_to_ftp_server="Couldn't connect to FTP server" msg_couldnt_connect_to_proxy="Couldn't connect to proxy" msg_couldnt_connect_to_server="Couldn't connect to server" -msg_couldnt_open_ftp_connection="Couldn't open FTP connection to %s:\n %s." msg_create_new="Create New" msg_created_path="Created %s" msg_czech_republic="Czech Republic" @@ -147,8 +145,6 @@ msg_france="France" msg_french_desc="Ported software for French countries." msg_ftp="FTP" msg_ftp_desc="FTP client and server utilities." -msg_ftp_passive="FTP Passive" -msg_ftp_username="FTP username" msg_generating_index_from_pkg_database="Generating INDEX from pkg(8) database\n(this can take a while)..." msg_geography_desc="Geography-related software." msg_german_desc="Ported software for Germanic countries." @@ -171,8 +167,6 @@ msg_install_from_a_dos_partition="Install from a DOS partition" msg_install_from_a_freebsd_cd_dvd="Install from a FreeBSD CD/DVD" msg_install_from_a_ufs_partition="Install from a UFS partition" msg_install_from_a_usb_drive="Install from a USB drive" -msg_install_from_an_ftp_server="Install from an FTP server" -msg_install_from_an_ftp_server_thru_firewall="Install from an FTP server through a firewall" msg_install_from_an_ftp_server_thru_proxy="Install from an FTP server through an HTTP proxy" msg_install_from_an_http_server="Install from an HTTP server" msg_install_from_the_existing_filesystem="Install from the existing filesystem" @@ -224,7 +218,6 @@ msg_media_timeout="Media Timeout" msg_media_type="Media Type" msg_menu_text="If you've already installed FreeBSD, you may use\nthis menu to customize it somewhat to suit your\nparticular configuration. Most importantly, you\ncan use the Packages utility to load extra '3rd\nparty' software not provided in the base\ndistributions." msg_misc_desc="Miscellaneous utilities." -msg_missing_ftp_host_or_directory="Missing FTP host or directory specification. FTP media not initialized." msg_multimedia_desc="Multimedia software." msg_must_be_root_to_execute="%s: must be root to execute" msg_must_have_pkg_to_execute="%s: must have pkg(8) to execute" @@ -294,7 +287,6 @@ msg_please_enter_the_username_you_wish_to_login_as="Please enter the username yo msg_please_enter_username_password="Please enter a username and password for sudo(8):" msg_please_select_a_category_to_display="Please select a category to display." msg_please_select_a_cd_dvd_drive="FreeBSD can be installed directly from a CD/DVD containing a valid\nFreeBSD distribution. If you are seeing this menu it is because\nmore than one CD/DVD drive was found on your system. Please select\none of the following CD/DVD drives as your installation drive." -msg_please_select_a_freebsd_ftp_distribution_site="Please select a FreeBSD FTP distribution site" msg_please_select_a_freebsd_http_distribution_site="Please select a FreeBSD HTTP distribution site" msg_please_select_a_usb_drive="You have more than one USB drive. Please choose which drive\nyou would like to use." msg_please_select_dos_partition="FreeBSD can be installed directly from a DOS partition assuming,\nof course, that you have copied the relevant distributions into\nyour DOS partition before starting this installation. If this is\nnot the case then you should reboot DOS at this time and copy the\ndistributions you wish to install into a \"FREEBSD\" subdirectory\non one of your DOS partitions. Otherwise, please select the DOS\npartition containing the FreeBSD distribution files." @@ -331,7 +323,6 @@ msg_rescan_devices="Re-scan Devices" msg_reset="RESET!" msg_reset_all_values_to_startup_defaults="Reset all values to startup defaults" msg_return_to_previous_menu="Return to previous menu" -msg_reuse_old_ftp_site_selection_values="Re-use old FTP site selection values?" msg_reuse_old_http_site_settings="Re-use old HTTP site settings?" msg_review="Review" msg_review_desc="Review/perform pending actions" @@ -370,7 +361,6 @@ msg_sorry_try_again="Sorry, try again." msg_south_africa="South Africa" msg_spain="Spain" msg_spanish_desc="Ported software for the Spanish market." -msg_specify_some_other_ftp_site="Specify some other ftp site by URL" msg_specify_some_other_http_site="Specify some other http site by URL" msg_sweden="Sweden" msg_sysutils_desc="Various system utilities." @@ -390,7 +380,6 @@ msg_ukrainian_desc="Ported software for the Ukrainian market." msg_unable_to_configure_device="Unable to configure the %s interface!\nThis installation method cannot be used." msg_unable_to_fetch_package_from_selected_media="Unable to fetch package %s from selected media.\nNo package add will be done." msg_unable_to_get_file_from_selected_media="Unable to get %s file from selected media.\n\nThis may be because the packages collection is not available\non the distribution media you've chosen, most likely an FTP site\nwithout the packages collection mirrored. Please verify that\nyour media, or your path to the media, is correct and try again." -msg_unable_to_get_proper_ftp_path="Unable to get proper FTP path. FTP media not initialized." msg_unable_to_initialize_media_type_for_package_extract="Unable to initialize media type for package extract." msg_unable_to_make_directory_mountpoint="Unable to make %s directory mountpoint for %s!" msg_unable_to_open="Unable to open %s" diff --git a/usr.sbin/bsdconfig/share/media/Makefile b/usr.sbin/bsdconfig/share/media/Makefile index 2cbce2d492b2..e90b87f70cc2 100644 --- a/usr.sbin/bsdconfig/share/media/Makefile +++ b/usr.sbin/bsdconfig/share/media/Makefile @@ -1,7 +1,7 @@ FILESDIR= ${SHAREDIR}/bsdconfig/media FILES= any.subr cdrom.subr common.subr directory.subr dos.subr \ - ftp.subr http.subr httpproxy.subr network.subr \ + http.subr httpproxy.subr network.subr \ nfs.subr options.subr tcpip.subr ufs.subr usb.subr wlan.subr .include <bsd.prog.mk> diff --git a/usr.sbin/bsdconfig/share/media/any.subr b/usr.sbin/bsdconfig/share/media/any.subr index ea4fef0b5151..2c6720be364d 100644 --- a/usr.sbin/bsdconfig/share/media/any.subr +++ b/usr.sbin/bsdconfig/share/media/any.subr @@ -34,7 +34,6 @@ f_include $BSDCFG_SHARE/dialog.subr f_include $BSDCFG_SHARE/media/cdrom.subr f_include $BSDCFG_SHARE/media/directory.subr f_include $BSDCFG_SHARE/media/dos.subr -f_include $BSDCFG_SHARE/media/ftp.subr f_include $BSDCFG_SHARE/media/http.subr f_include $BSDCFG_SHARE/media/httpproxy.subr f_include $BSDCFG_SHARE/media/nfs.subr @@ -69,15 +68,14 @@ f_media_get_type() local prompt="$msg_choose_installation_media_description" local menu_list=" '1 $msg_cd_dvd' '$msg_install_from_a_freebsd_cd_dvd' - '2 $msg_ftp' '$msg_install_from_an_ftp_server' - '3 $msg_http_proxy' + '2 $msg_http_proxy' '$msg_install_from_an_ftp_server_thru_proxy' - '4 $msg_http_direct' '$msg_install_from_an_http_server' - '5 $msg_directory' '$msg_install_from_the_existing_filesystem' + '3 $msg_http_direct' '$msg_install_from_an_http_server' + '4 $msg_directory' '$msg_install_from_the_existing_filesystem' '6 $msg_nfs' '$msg_install_over_nfs' - '7 $msg_dos' '$msg_install_from_a_dos_partition' - '8 $msg_ufs' '$msg_install_from_a_ufs_partition' - 'A $msg_usb' '$msg_install_from_a_usb_drive' + '6 $msg_dos' '$msg_install_from_a_dos_partition' + '7 $msg_ufs' '$msg_install_from_a_ufs_partition' + '8 $msg_usb' '$msg_install_from_a_usb_drive' 'X $msg_options' '$msg_view_set_various_media_options' " # END-QUOTE local hline="$hline_choose_help_for_more_information_on_media_types" @@ -119,7 +117,6 @@ f_media_get_type() case "$mtag" in ?" $msg_cd_dvd") f_media_set_cdrom ;; - ?" $msg_ftp") f_media_set_ftp ;; ?" $msg_http_proxy") f_media_set_http_proxy ;; ?" $msg_http_direct") f_media_set_http ;; ?" $msg_directory") f_media_set_directory ;; diff --git a/usr.sbin/bsdconfig/share/media/ftp.subr b/usr.sbin/bsdconfig/share/media/ftp.subr deleted file mode 100644 index 05c551c7f3d6..000000000000 --- a/usr.sbin/bsdconfig/share/media/ftp.subr +++ /dev/null @@ -1,840 +0,0 @@ -if [ ! "$_MEDIA_FTP_SUBR" ]; then _MEDIA_FTP_SUBR=1 -# -# Copyright (c) 2012-2013 Devin Teske -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# -############################################################ INCLUDES - -BSDCFG_SHARE="/usr/share/bsdconfig" -. $BSDCFG_SHARE/common.subr || exit 1 -f_dprintf "%s: loading includes..." media/ftp.subr -f_include $BSDCFG_SHARE/device.subr -f_include $BSDCFG_SHARE/dialog.subr -f_include $BSDCFG_SHARE/media/common.subr -f_include $BSDCFG_SHARE/media/tcpip.subr -f_include $BSDCFG_SHARE/strings.subr -f_include $BSDCFG_SHARE/struct.subr -f_include $BSDCFG_SHARE/variable.subr - -BSDCFG_LIBE="/usr/libexec/bsdconfig" -f_include_lang $BSDCFG_LIBE/include/messages.subr - -############################################################ GLOBALS - -FTP_SKIP_RESOLV= - -URL_MAX=261261 # according to actual fetch(1) test-results - -FTP_DIRS=" - . - releases/$UNAME_P - snapshots/$UNAME_P - pub/FreeBSD - pub/FreeBSD/releases/$UNAME_P - pub/FreeBSD/snapshots/$UNAME_P - pub/FreeBSD-Archive/old-releases/$UNAME_P -" # END-QUOTE - -############################################################ FUNCTIONS - -# f_dialog_menu_media_ftp -# -# Prompt the user to select from a range of ``built-in'' FTP servers or specify -# their own. If the user makes a choice and doesn't cancel or press Esc, stores -# the user's choice in VAR_FTP_PATH (see variables.subr) and returns success. -# -f_dialog_menu_media_ftp() -{ - f_dialog_title "$msg_please_select_a_freebsd_ftp_distribution_site" - local title="$DIALOG_TITLE" btitle="$DIALOG_BACKTITLE" - f_dialog_title_restore - local prompt="$msg_please_select_the_site_closest_to_you_or_other" - local menu_list=" - '$msg_main_site' 'download.freebsd.org' - '$msg_australia $msg_v6' 'ftp.au.freebsd.org' - ' $msg_australia #3' 'ftp3.au.freebsd.org' - '$msg_austria $msg_v6' 'ftp.at.freebsd.org' - '$msg_brazil #2' 'ftp2.br.freebsd.org' - ' $msg_brazil #3' 'ftp3.br.freebsd.org' - '$msg_bulgaria $msg_v6' 'ftp.bg.freebsd.org' - '$msg_czech_republic $msg_v6' 'ftp.cz.freebsd.org' - '$msg_denmark $msg_v6' 'ftp.dk.freebsd.org' - '$msg_finland' 'ftp.fi.freebsd.org' - '$msg_france $msg_v6' 'ftp.fr.freebsd.org' - ' $msg_france #3' 'ftp3.fr.freebsd.org' - ' $msg_france #6' 'ftp6.fr.freebsd.org' - '$msg_germany $msg_v6' 'ftp.de.freebsd.org' - ' $msg_germany #1 $msg_v6' 'ftp1.de.freebsd.org' - ' $msg_germany #2 $msg_v6' 'ftp2.de.freebsd.org' - ' $msg_germany #5 $msg_v6' 'ftp5.de.freebsd.org' - ' $msg_germany #7 $msg_v6' 'ftp7.de.freebsd.org' - '$msg_greece $msg_v6' 'ftp.gr.freebsd.org' - ' $msg_greece #2 $msg_v6' 'ftp2.gr.freebsd.org' - '$msg_japan $msg_v6' 'ftp.jp.freebsd.org' - ' $msg_japan #2' 'ftp2.jp.freebsd.org' - ' $msg_japan #3' 'ftp3.jp.freebsd.org' - ' $msg_japan #4' 'ftp4.jp.freebsd.org' - ' $msg_japan #6 $msg_v6' 'ftp6.jp.freebsd.org' - '$msg_korea' 'ftp.kr.freebsd.org' - ' $msg_korea #2' 'ftp2.kr.freebsd.org' - '$msg_latvia' 'ftp.lv.freebsd.org' - '$msg_netherlands $msg_v6' 'ftp.nl.freebsd.org' - ' $msg_netherlands #2' 'ftp2.nl.freebsd.org' - '$msg_new_zealand' 'ftp.nz.freebsd.org' - '$msg_norway $msg_v6' 'ftp.no.freebsd.org' - '$msg_poland $msg_v6' 'ftp.pl.freebsd.org' - '$msg_russia $msg_v6' 'ftp.ru.freebsd.org' - ' $msg_russia #2' 'ftp2.ru.freebsd.org' - '$msg_slovenia $msg_v6' 'ftp.si.freebsd.org' - '$msg_south_africa $msg_v6' 'ftp.za.freebsd.org' - ' $msg_south_africa #2 $msg_v6' 'ftp2.za.freebsd.org' - ' $msg_south_africa #4' 'ftp4.za.freebsd.org' - '$msg_sweden $msg_v6' 'ftp.se.freebsd.org' - '$msg_taiwan #4' 'ftp4.tw.freebsd.org' - ' $msg_taiwan #5' 'ftp5.tw.freebsd.org' - '$msg_uk' 'ftp.uk.freebsd.org' - ' $msg_uk #2' 'ftp2.uk.freebsd.org' - '$msg_ukraine $msg_v6' 'ftp.ua.freebsd.org' - '$msg_usa #5 $msg_v6' 'ftp5.us.freebsd.org' - ' $msg_usa #11 $msg_v6' 'ftp11.us.freebsd.org' - ' $msg_usa #14' 'ftp14.us.freebsd.org' - " # END-QUOTE - local hline="$msg_select_a_site_thats_close" - - local height width rows - eval f_dialog_menu_size height width rows \ - \"\$title\" \ - \"\$btitle\" \ - \"\$prompt\" \ - \"\$hline\" \ - $menu_list - - local mtag - mtag=$( eval $DIALOG \ - --title \"\$title\" \ - --backtitle \"\$btitle\" \ - --hline \"\$hline\" \ - --ok-label \"\$msg_ok\" \ - --cancel-label \"\$msg_cancel\" \ - --menu \"\$prompt\" \ - $height $width $rows \ - $menu_list \ - 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) || return $DIALOG_CANCEL - f_dialog_data_sanitize mtag - - case "$mtag" in - URL) setvar $VAR_FTP_PATH "other" ;; - *) - local value - value=$( eval f_dialog_menutag2item \"\$mtag\" $menu_list ) - setvar $VAR_FTP_PATH "ftp://$value" - esac - - return $DIALOG_OK -} - -# f_media_set_ftp -# -# Return success if we both found and set the media type to be an FTP server. -# Variables from variable.subr that can be used to script user input: -# -# VAR_FTP_PATH -# Can be a URL (including "ftp://" protocol-prefix) or "other" -# (user is prompted to enter FTP URL). If a URL, can optionally -# contain directory prefix after hostname/port. Valid examples -# include: -# ftp://myhost -# ftp://somename:21/pub/ -# ftp://192.168.2.3/pub/ -# ftp://[::1]:21/ -# The default port if not specified is 21. -# VAR_NAMESERVER [Optional] -# If set, overrides resolv.conf(5) and sets the nameserver that -# is used to convert names into addresses (when a name converts -# into multiple addresses, the first address to successfully -# connect is used). -# -# Meanwhile, the following variables from variable.subr are set after -# successful execution: -# -# VAR_FTP_HOST -# The FTP host to connect to, parsed from VAR_FTP_PATH. In the -# example case of IPv6 where VAR_FTP_PATH is "ftp://[::1]", this -# variable will be set to "::1" (the outer brackets are removed). -# VAR_FTP_PORT -# The TCP port to connect to, parsed from VAR_FTP_PATH. Usually -# 21 unless VAR_FTP_PATH was of one of the following forms: -# ftp://hostname:OTHER_PORT -# ftp://hostname:OTHER_PORT/* -# ftp://ip:OTHER_PORT -# ftp://ip:OTHER_PORT/* -# ftp://[ip6]:OTHER_PORT -# ftp://[ip6]:OTHER_PORT/* -# VAR_FTP_DIR -# If VAR_FTP_PATH contained a directory element (e.g., -# "ftp://localhost/pub") this variable contains only the -# directory element (e.g., "/pub"). -# -f_media_set_ftp() -{ - f_media_close - - local url - f_getvar $VAR_FTP_PATH url - - # If we've been through here before ... - if f_struct device_network && [ "${url#$msg_other}" ]; then - f_dialog_yesno "$msg_reuse_old_ftp_site_selection_values" || - url= - fi - - if [ ! "$url" ]; then - f_dialog_menu_media_ftp || return $FAILURE - f_getvar $VAR_FTP_PATH url - fi - [ "$url" ] || return $FAILURE - - case "$url" in - other) - setvar $VAR_FTP_PATH "ftp://" - f_variable_get_value $VAR_FTP_PATH \ - "$msg_please_specify_url_of_a_freebsd_distribution" - f_getvar $VAR_FTP_PATH url - if [ ! "${url#ftp://}" ]; then - unset $VAR_FTP_PATH - return $FAILURE - fi - if [ ${#url} -gt ${URL_MAX:-261261} ]; then - f_show_msg "$msg_length_of_specified_url_is_too_long" \ - ${#url} ${URL_MAX:-261261} - unset $VAR_FTP_PATH - return $FAILURE - fi - case "$url" in - ftp://*) : valid URL ;; - *) - f_show_msg "$msg_sorry_invalid_url" "$url" - unset $VAR_FTP_PATH - return $FAILURE - esac - esac - case "$url" in - ftp://*) : valid URL ;; - *) - f_show_msg "$msg_sorry_invalid_url" "$url" - unset $VAR_FTP_PATH - return $FAILURE - esac - - # Set the name of the FTP device to the URL - f_struct_new DEVICE device_ftp - device_ftp set name "$url" - - if ! f_struct device_network || - ! f_dialog_yesno "$msg_youve_already_done_the_network_configuration" - then - f_struct device_network && - f_device_shutdown device_network - if ! f_device_select_tcp; then - unset $VAR_FTP_PATH - return $FAILURE - fi - local dev if - f_getvar $VAR_NETWORK_DEVICE if - f_device_find -1 "$if" $DEVICE_TYPE_NETWORK dev - f_struct_copy "$dev" device_network - fi - if ! f_device_init device_network; then - f_dprintf "f_media_set_ftp: %s" "$msg_net_device_init_failed" - unset $VAR_FTP_PATH - return $FAILURE - fi - - 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#\[}" - 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#\[}" - 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%%\]*}" - ;; - "["*"]") # IPv6 address - f_dprintf "Looks like an IPv6 addr: %s" "$hostname" - hostname="${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]*}" - 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" - f_dprintf "dir = \`%s'" "$dir" - f_dprintf "port \# = \`%d'" "$port" - - local ns - f_getvar $VAR_NAMESERVER ns - [ "$ns" ] || f_resolv_conf_nameservers ns - if [ "$ns" -a ! "$FTP_SKIP_RESOLV" ] && ! { - f_validate_ipaddr "$hostname" || - f_validate_ipaddr6 "$hostname" - }; then - f_show_info "$msg_looking_up_host" "$hostname" - f_dprintf "%s: Looking up hostname, %s, using host(1)" \ - "f_media_set_ftp" "$hostname" - if ! f_quietly f_host_lookup "$hostname"; then - f_show_msg "$msg_cannot_resolve_hostname" "$hostname" - f_struct device_network && - f_device_shutdown device_network - f_struct_free device_network - unset $VAR_FTP_PATH - return $FAILURE - fi - f_dprintf "Found DNS entry for %s successfully." "$hostname" - fi - - setvar $VAR_FTP_HOST "$hostname" - setvar $VAR_FTP_PORT "$port" - setvar $VAR_FTP_DIR "$dir" - - device_ftp set type $DEVICE_TYPE_FTP - device_ftp set init f_media_init_ftp - device_ftp set get f_media_get_ftp - device_ftp set shutdown f_media_shutdown_ftp - device_ftp set private device_network - f_struct_copy device_ftp device_media - f_struct_free device_ftp - - return $SUCCESS -} - -# f_media_set_ftp_active -# -# Wrapper to f_media_set_ftp to access FTP servers actively. -# -f_media_set_ftp_active() -{ - setvar $VAR_FTP_STATE "active" - f_media_set_ftp -} - -# f_media_set_ftp_passive -# -# Wrapper to f_media_set_ftp to access FTP servers passively. -# -f_media_set_ftp_passive() -{ - setvar $VAR_FTP_STATE "passive" - f_media_set_ftp -} - -# f_media_set_ftp_userpass -# -# Prompt the user to enter/confirm the username/password variables that will -# be used to communicate with the FTP servers. Returns success if the user does -# not cancel or press Esc to either username or password. -# -# Variables from variable.subr that can be used to script user input: -# -# VAR_FTP_USER -# The username to send via ftp(1) when connecting to an FTP -# server. -# VAR_FTP_PASS -# The password to send with the above username. -# -# Does not prompt for confirmation of values if VAR_NONINTERACTIVE is set (see -# variable.subr for more information). -# -f_media_set_ftp_userpass() -{ - local user pass - f_variable_get_value $VAR_FTP_USER \ - "$msg_please_enter_the_username_you_wish_to_login_as" - f_getvar $VAR_FTP_USER user - if [ "$user" ]; then - f_variable_get_value $VAR_FTP_PASS \ - "$msg_please_enter_the_password_for_this_user" - f_getvar $VAR_FTP_PASS pass - else - pass= - fi - [ "$pass" ] # Return status -} - -# f_device_network_up $device -# -# Brings up attached network device, if any - takes FTP device as arg. -# -f_device_network_up() -{ - local dev="$1" netDev - f_struct "$dev" || return $FAILURE - $dev get private netDev || return $SUCCESS # No net == happy net -debug=1 f_dprintf "netDev=[$netDev]" - f_device_init $netDev -} - -# f_device_network_down $device -# -# Brings down attached network device, if any - takes FTP device as arg. -# -f_device_network_down() -{ - local dev="$1" netDev - f_struct "$dev" || return $FAILURE - $dev get private netDev || return $SUCCESS - f_device_shutdown $netDev -} - -# f_media_init_ftp $device -# -# Initializes the FTP media device. Returns success if both able to log into -# the FTP server and confirm the existence of at least one known release path -# using ftp(1). -# -# Variables from variable.subr used to initialize the connection are as follows -# (all of which are configured by f_media_set_ftp above): -# -# VAR_FTP_PATH -# The unparsed FTP URL representing the server to contact. -# Usually "ftp://server" for example. Can contain TCP port number -# and/or directory path (but should not contain username/password -# info). -# VAR_FTP_HOST -# The FTP host to connect to. Can be an IPv4 address (e.g., -# 127.0.0.1), IPv6 address (e.g., ::1), or DNS hostname. Usually -# set automatically in f_media_set_ftp() by parsing VAR_FTP_PATH. -# VAR_FTP_PORT -# The TCP port to connect to. Usually set automatically in -# f_media_set_ftp() by parsing VAR_FTP_PATH. -# VAR_FTP_DIR -# The base FTP directory to use when downloading files from the -# FTP server. Usually set automatically in f_media_set_ftp() by -# parsing VAR_FTP_PATH. -# VAR_FTP_USER [Optional] -# If unset, defaults to using anonymous access. -# VAR_FTP_PASS [Optional] -# If unset, defaults to a sensible value. -# -# In addition, the following (managed either manually or by f_media_set_ftp_*): -# -# VAR_FTP_STATE -# Sets FTPMODE for ftp(1) and can be one of: -# active active mode FTP only -# auto automatic determination of passive or active -# (this is the default) -# gate gate-ftp mode -# passive passive mode FTP only -# See ftp(1) for additional information. -# -# And last, but not least (managed automatically or manually): -# -# VAR_RELNAME -# Defaults to being set to $(uname -r) but can be overridden. -# This sets the name of a release to look for as part of a well -# known set of paths to search for release data once connected -# via FTP. If set to "__RELEASE" or "any" then the VAR_FTP_DIR is -# taken as the absolute path to the release and no further -# searching is done (see FTP_DIRS above in the GLOBALS section -# for a list of well known paths that are used when searching for -# a VAR_RELNAME sub-directory). -# -f_media_init_ftp() -{ - local dev="$1" - local url - - $dev get name url - f_dprintf "Init routine called for FTP device. url=[%s]" "$url" - - if [ "$FTP_INITIALIZED" ]; then - f_dprintf "FTP device already initialized." - return $SUCCESS - fi - - # If we can't initialize the network, bag it! - f_device_network_up $dev || return $FAILURE - - local cp - while :; do - f_getvar $VAR_FTP_PATH cp - if [ ! "$cp" ]; then - if ! f_media_set_ftp || - ! f_getvar $VAR_FTP_PATH cp || - [ ! "$cp" ] - then - f_show_msg "$msg_unable_to_get_proper_ftp_path" - f_device_network_down $dev - return $FAILURE - fi - fi - - local ftp_host ftp_dir - if ! { - f_getvar $VAR_FTP_HOST ftp_host && - f_getvar $VAR_FTP_DIR ftp_dir - }; then - f_show_msg "$msg_missing_ftp_host_or_directory" - f_device_network_down $dev - return $FAILURE - fi - - local ftp_port - f_getvar $VAR_FTP_PORT ftp_port - local host="$ftp_host" port="${ftp_port:+:$ftp_port}" - case "$host" in *:*) host="[$host]"; esac - - local user pass use_anon= - f_getvar $VAR_FTP_USER user - if [ ! "$user" ]; then - user="anonymous" - use_anon=1 - fi - if ! f_getvar $VAR_FTP_PASS pass; then - f_getvar $VAR_HOSTNAME cp - if f_running_as_init; then - pass="installer@$cp" - else - local name="$( id -un 2> /dev/null )" - pass="${name:-ftp}@$cp" - fi - fi - - f_show_info "$msg_logging_in_to_user_at_host" \ - "$user" "$ftp_host" - - local userpass="" - if [ ! "$use_anon" ] && [ "$user" -o "$pass" ]; then - userpass="$user${pass:+:$( f_uriencode "$pass" )}" - userpass="$userpass${userpass:+@}" - fi - - local mode rx - f_getvar $VAR_FTP_STATE mode - - if [ "$ftp_dir" ]; then - if ! rx=$( - printf 'cd "%s"\npwd\n' "$ftp_dir" | eval \ - FTPMODE=\"\$mode\" \ - ${use_anon:+FTPANONPASS=\"\$pass\"} \ - ftp -V ${use_anon:+-a} \ - \"ftp://\$userpass\$host\$port\" \ - 2>&1 - ); then - f_show_msg "$msg_couldnt_open_ftp_connection" \ - "$ftp_host" "$rx" - break # to failure - fi - if echo "$rx" | awk -v dir="/${ftp_dir#/}" ' - BEGIN { - found = 0 - if ( dir != "/" ) sub("/$", "", dir) - } - /^Remote directory: / { - sub(/^[^:]*:[[:space:]]*/, "") - if ($0 != dir) next - found = 1; exit - } - END { exit ! found } - '; then - setvar $VAR_FTP_DIR "$ftp_dir" - setvar $VAR_FTP_PATH \ - "ftp://$ftp_host/${ftp_dir#/}" - else - f_show_msg \ - "$msg_please_check_the_url_and_try_again" \ - "ftp://$ftp_host/${ftp_dir#/}" - break # to failure - fi - fi - - # - # Now that we've verified that the path we're given is ok, - # let's try to be a bit intelligent in locating the release we - # are looking for. First off, if the release is specified as - # "__RELEASE" or "any", then just assume that the current - # directory is the one we want and give up. - # - local rel - f_getvar $VAR_RELNAME rel - f_dprintf "f_media_init_ftp: rel=[%s]" "$rel" - - case "$rel" in - __RELEASE|any) - FTP_INITIALIZED=YES - return $SUCCESS - ;; - *) - # - # Ok, since we have a release variable, let's walk - # through the list of directories looking for a release - # directory. First successful CWD wins. - # - if ! rx=$( - for dir in $FTP_DIRS; do - # Avoid confusing some servers - [ "$dir" = "." ] && continue - printf 'cd "/%s/%s"\npwd\n' \ - "$dir" "$rel" - done | eval \ - FTPMODE=\"\$mode\" \ - ${use_anon:+FTPANONPASS=\"\$pass\"} \ - ftp -V ${use_anon:+-a} \ - \"ftp://\$userpass\$host\$port\" \ - 2>&1 - ); then - f_show_msg "$msg_couldnt_open_ftp_connection" \ - "$ftp_host" "$rx" - break # to failure - fi - - local fdir - if fdir=$( echo "$rx" | awk ' - /^Remote directory: / { - sub(/^[^:]*:[[:space:]]*/, "") - if ($0 == "/") next - # Exit after the first dir - found++; print; exit - } - END { exit ! found } - ' ); then - setvar $VAR_FTP_DIR "$fdir" - setvar $VAR_FTP_PATH "ftp://$ftp_host$fdir" - FTP_INITIALIZED=YES - return $SUCCESS - else - f_yesno "$msg_cant_find_distribution" \ - "$rel" "$ftp_host" - if [ $? -eq $DIALOG_OK ]; then - unset $VAR_FTP_PATH - f_media_set_ftp && continue - fi - fi - esac - break # to failure - done - - unset FTP_INITIALIZED $VAR_FTP_PATH - f_device_network_down $dev - return $FAILURE -} - -# f_media_get_ftp $device $file [$probe_type] -# -# Returns data from $file on an FTP server using ftp(1). Please note that -# $device is unused but must be present (even if null). Information is instead -# gathered from the environment. If $probe_type is present and non-NULL, -# returns success if $file exists. If $probe_type is equal to $PROBE_SIZE, -# prints the size of $file in bytes to standard-out. -# -# Variables from variable.subr used to configure the connection are as follows -# (all of which are configured by f_media_set_ftp above): -# -# VAR_FTP_HOST -# FTP host to connect to. Can be an IPv4 address, IPv6 address, -# or DNS hostname of your choice. -# VAR_FTP_PORT -# TCP port to connect on; see f_media_set_ftp() above. -# VAR_FTP_USER [Optional] -# If unset, defaults to using anonymous access. -# VAR_FTP_PASS [Optional] -# If unset, defaults to a sensible value. -# -# In addition, the following (managed either manually or by f_media_set_ftp_*): -# -# VAR_FTP_STATE -# Sets FTPMODE for ftp(1) and can be one of: -# active active mode FTP only -# auto automatic determination of passive or active -# (this is the default) -# gate gate-ftp mode -# passive passive mode FTP only -# See ftp(1) for additional information. -# -# See variable.subr for additional information. -# -# Example usage: -# f_media_set_ftp -# f_media_get_ftp media $file -# -f_media_get_ftp() -{ - local funcname=f_media_get_ftp - local dev="$1" file="$2" probe_type="$3" hosts= - - f_dprintf "f_media_get_ftp: dev=[%s] file=[%s] probe_type=%s" \ - "$dev" "$file" "$probe_type" - - local ftp_host ftp_port - f_getvar $VAR_FTP_HOST ftp_host - f_getvar $VAR_FTP_PORT ftp_port - - if [ ! "$FTP_INITIALIZED" ]; then - f_dprintf "No FTP connection open, can't get file %s" "$file" - return $FAILURE - fi - - if ! { - f_validate_ipaddr "$ftp_host" || - f_validate_ipaddr6 "$ftp_host" || - { - f_dprintf "%s: Looking up hostname, %s, using host(1)" \ - "f_media_get_ftp" "$ftp_host" - f_host_lookup "$ftp_host" hosts - } - }; then - # All the above validations failed - [ "$hosts" ] && f_dialog_msgbox "$hosts" - return $FAILURE - elif [ ! "$hosts" ]; then - # One of the first two validations passed - hosts="$ftp_host" - fi - - local host connected= - for host in $hosts; do - f_quietly nc -nz "$host" "$ftp_port" || continue - connected=1; break - done - if [ ! "$connected" ]; then - f_show_msg "$msg_couldnt_connect_to_ftp_server %s:%s" \ - "$ftp_host" "$ftp_port" - return $FAILURE - fi - - local user pass use_anon= - f_getvar $VAR_FTP_USER user - if [ ! "$user" ]; then - user="anonymous" - use_anon=1 - fi - if ! f_getvar $VAR_FTP_PASS pass; then - f_getvar $VAR_HOSTNAME cp - if f_running_as_init; then - pass="installer@$cp" - else - local name="$( id -un 2> /dev/null )" - pass="${name:-ftp}@$cp" - fi - fi - *** 173 LINES SKIPPED ***