????

Your IP : 18.188.164.209


Current Path : /usr/sbin/
Upload File :
Current File : //usr/sbin/bsdconfig

#!/bin/sh
#-
# Copyright (c) 2012 Ron McDowell
# Copyright (c) 2012-2014 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.
#
# $FreeBSD: releng/12.1/usr.sbin/bsdconfig/bsdconfig 295108 2016-02-01 00:54:26Z dteske $
#
############################################################ INCLUDES

# When common.subr is included, it automatically scans "$@" for `-d' and/or
# `-D file' arguments to conditionally enable debugging. Similarly, when
# dialog.subr is included, it automatically scans "$@" for `-X' and/or `-S'.
# To prevent this scanning from becoming confused by extra options, define
# any/all extra arguments to use in the optstring to getopts when scanning
# for dedicated options such as those described.
#
# NOTE: This needs to be declared before including `common.subr'.
# NOTE: You really only need to list flags that require an argument as unknown
#       flags are silently accepted unless they take an argument (in which case
#       the following argument will terminate option processing unless it looks
#       like a flag).
#
GETOPTS_EXTRA="f:"

BSDCFG_SHARE="/usr/share/bsdconfig"
. $BSDCFG_SHARE/common.subr || exit 1
f_dprintf "%s: loading includes..." "$0"
f_include $BSDCFG_SHARE/dialog.subr
f_include $BSDCFG_SHARE/mustberoot.subr
f_include $BSDCFG_SHARE/strings.subr

BSDCFG_LIBE="/usr/libexec/bsdconfig"
f_include_lang $BSDCFG_LIBE/include/messages.subr

BSDCONFIG_HELPFILE=$BSDCFG_LIBE/include/bsdconfig.hlp
USAGE_HELPFILE=$BSDCFG_LIBE/include/usage.hlp

############################################################ CONFIGURATION

#
# Alternate `local' libexec directory for add-on modules (e.g., from ports)
#
BSDCFG_LOCAL_LIBE="/usr/local/libexec/bsdconfig"

############################################################ FUNCTIONS

# usage
#
# display usage and exit
#
usage()
{
	local index="INDEX"
	local cmd_list # Calculated below

	cd $BSDCFG_LIBE
		# No need to preserve CWD (headed toward exit)

	# Test for language-specific indices
	f_quietly ls */"$index.${LANG:-$LC_ALL}" &&
		index="$index.${LANG:-$LC_ALL}"

	cmd_list=$(
		awk '/^menu_selection="/ {
			sub(/\|.*/, "")
			sub(/^menu_selection="/, "")
			print
		}' */$index | sort
	)

	local alt_cmd_list # Calculated below (if $BSDCFG_LOCAL_LIBE exists)
	if f_quietly cd $BSDCFG_LOCAL_LIBE; then
		# No need to preserve CWD (headed toward exit)

		# Test for language-specific indices
		f_quietly ls */"$index.${LANG:-$LC_ALL}" &&
			index="$index.${LANG:-$LC_ALL}"

		alt_cmd_list=$(
			awk '/^menu_selection="/ {
				sub(/\|.*/, "")
				sub(/^menu_selection="/, "")
				print
			}' */$index 2> /dev/null | sort
		)

		# Conflate lists, removing duplicates
		cmd_list=$( printf "%s\n%s\n" \
		                   "$cmd_list" "$alt_cmd_list" | sort -u )
	fi

	#
	# Determine the longest command-length (in characters)
	#
	local longest_cmd
	longest_cmd=$( echo "$cmd_list" | f_longest_line_length )
	f_dprintf "longest_cmd=[%s]" "$longest_cmd"

	#
	# Determine the maximum width of terminal/console
	#
	local max_size="$( stty size 2> /dev/null )"
	: ${max_size:="24 80"}
	local max_width="${max_size#*[$IFS]}"
	f_dprintf "max_width=[%s]" "$max_width"

	#
	# Using the longest command-length as the width of a single column,
	# determine if we can use more than one column to display commands.
	#
	local x=$longest_cmd ncols=1
	x=$(( $x + 8 )) # Accommodate leading tab character
	x=$(( $x + 3 + $longest_cmd )) # Preload end of next column
	while [ $x -lt $max_width ]; do
		ncols=$(( $ncols + 1 ))
		x=$(( $x + 3 + $longest_cmd ))
	done
	f_dprintf "ncols=[%u] x=[%u]" $ncols $x

	#
	# Re-format the command-list into multiple columns
	#
	cmd_list=$( eval "$( echo "$cmd_list" |
		awk -v ncols=$ncols -v size=$longest_cmd '
		BEGIN {
			n = 0
			row_item[1] = ""
		}
		function print_row()
		{
			fmt = "printf \"\\t%-" size "s"
			for (i = 1; i < cur_col; i++)
				fmt = fmt "   %-" size "s"
			fmt = fmt "\\n\""
			printf "%s", fmt
			for (i = 1; i <= cur_col; i++)
				printf " \"%s\"", row_item[i]
			print ""
		}
		{
			n++
			cur_col = (( n - 1 ) % ncols ) + 1
			printf "f_dprintf \"row_item[%u]=[%%s]\" \"%s\"\n",
			       cur_col, $0
			row_item[cur_col] = $0
			if ( cur_col == ncols ) print_row()
		}
		END {
			if ( cur_col < ncols ) print_row()
		}' )"
	)

	f_usage $BSDCFG_LIBE/USAGE \
	        "PROGRAM_NAME" "$pgm" \
	        "COMMAND_LIST" "$cmd_list"

	# Never reached
}

# dialog_menu_main
#
# Display the dialog(1)-based application main menu.
#
dialog_menu_main()
{
	local title="$DIALOG_TITLE"
	local btitle="$DIALOG_BACKTITLE"
	local prompt="$msg_menu_text"
	local menu_list="
		'X' '$msg_exit'  '$msg_exit_bsdconfig'
		'1' '$msg_usage' '$msg_quick_start_how_to_use_this_menu_system'
	" # END-QUOTE
	local defaultitem= # Calculated below
	local hline=

	#
	# Pick up the base modules (directories named `[0-9][0-9][0-9].*')
	#
	local menuitem menu_title menu_help menu_selection index=2
	for menuitem in $( cd $BSDCFG_LIBE && ls -d [0-9][0-9][0-9].* ); do
		[ -f "$BSDCFG_LIBE/$menuitem/INDEX" ] || continue
		[ $index -lt ${#DIALOG_MENU_TAGS} ] || break

		menu_program= menu_title= menu_help=
		f_include_lang $BSDCFG_LIBE/$menuitem/INDEX
		[ "$menu_program" ] || continue

		case "$menu_program" in
		/*) : already fully qualified ;;
		 *) menu_program="$menuitem/$menu_program"
		esac

		f_substr -v tag "$DIALOG_MENU_TAGS" $index 1
		setvar "menu_program$tag" "$menu_program"

		f_shell_escape "$menu_title" menu_title
		f_shell_escape "$menu_help" menu_help
		menu_list="$menu_list '$tag' '$menu_title' '$menu_help'"

		index=$(( $index + 1 ))
	done

	#
	# Process the `local' libexec sources.
	#
	# Whereas modules in $BSDCFG_LIBE must be named [0-9][0-9][0-9].*
	# modules in $BSDCFG_LOCAL_LIBE should NOT be named this way (making it
	# more practical for port-maintainers).
	#
	# This also has the fortunate side-effect of making the de-duplication
	# effort rather simple (because so-called `base' modules must be named
	# differently than add-on modules).
	#
	local separator_added=
	for menuitem in $( cd "$BSDCFG_LOCAL_LIBE" 2> /dev/null && ls -d * )
	do
		# Skip the module if it looks like a `base' module
		case "$menuitem" in [0-9][0-9][0-9].*) continue;; esac

		[ -f "$BSDCFG_LOCAL_LIBE/$menuitem/INDEX" ] || continue
		[ $index -lt ${#DIALOG_MENU_TAGS} ] || break

		menu_program= menu_title= menu_help=
		f_include_lang $BSDCFG_LOCAL_LIBE/$menuitem/INDEX || continue
		[ "$menu_program" ] || continue

		if [ ! "$separator_added" ]; then
			menu_list="$menu_list '-' '-' ''"
			separator_added=1
		fi

		case "$menu_program" in
		/*) : already fully qualified ;;
		 *) menu_program="$BSDCFG_LOCAL_LIBE/$menuitem/$menu_program"
		esac

		f_substr -v tag "$DIALOG_MENU_TAGS" $index 1
		setvar "menu_program$tag" "$menu_program"

		f_shell_escape "$menu_title" menu_title
		f_shell_escape "$menu_help" menu_help
		menu_list="$menu_list '$tag' '$menu_title' '$menu_help'"

		index=$(( $index + 1 ))
	done

	local height width rows
	eval f_dialog_menu_with_help_size height width rows \
	                                  \"\$title\"  \
	                                  \"\$btitle\" \
	                                  \"\$prompt\" \
	                                  \"\$hline\"  \
	                                  $menu_list

	# Obtain default-item from previously stored selection
	f_dialog_default_fetch defaultitem

	local menu_choice
	menu_choice=$( eval $DIALOG \
		--clear                                 \
		--title \"\$title\"                     \
		--backtitle \"\$btitle\"                \
		--hline \"\$hline\"                     \
		--item-help                             \
		--ok-label \"\$msg_ok\"                 \
		--cancel-label \"\$msg_exit_bsdconfig\" \
		--help-button                           \
		--help-label \"\$msg_help\"             \
		${USE_XDIALOG:+--help \"\"}             \
		--default-item \"\$defaultitem\"        \
		--menu \"\$prompt\"                     \
		$height $width $rows                    \
		$menu_list                              \
		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
	)
	local retval=$?
	f_dialog_data_sanitize menu_choice
	f_dialog_menutag_store "$menu_choice"

	# Only update default-item on success
	[ $retval -eq $DIALOG_OK ] && f_dialog_default_store "$menu_choice"

	return $retval
}

############################################################ MAIN

#
# If $0 is not "bsdconfig", interpret it either as a keyword to a menuitem or
# as a valid resword (see script.subr for additional details about reswords).
#
if [ "$pgm" != "bsdconfig" ]; then
	if indexfile=$( f_index_file "$pgm" ) &&
	   cmd=$( f_index_menusel_command "$indexfile" "$pgm" )
	then
		f_dprintf "pgm=[%s] cmd=[%s] *=[%s]" "$pgm" "$cmd" "$*"
		exec "$cmd" "$@" || exit 1
	else
		f_include $BSDCFG_SHARE/script.subr
		for resword in $RESWORDS; do
			[ "$pgm" = "$resword" ] || continue
			# Found a match
			f_dprintf "pgm=[%s] A valid resWord!" "$pgm"
			f_dispatch $resword $resword "$@"
			exit $?
		done
	fi
fi

#
# Process command-line arguments
#
scripts_loaded=0
while getopts f:h$GETOPTS_STDARGS flag; do
	case "$flag" in
	f) [ $scripts_loaded -eq 0 ] && f_include $BSDCFG_SHARE/script.subr
	   f_script_load "$OPTARG"
	   scripts_loaded=$(( $scripts_loaded + 1 )) ;;
	h|\?) usage ;;
	esac
done
shift $(( $OPTIND - 1 ))

# If we've loaded any scripts, do not continue any further
[ $scripts_loaded -gt 0 ] && exit

#
# Initialize
#
f_dialog_title "$msg_main_menu"

[ "$SECURE" ] && f_mustberoot_init

# Incorporate rc-file if it exists
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"

#
# If a non-option argument was passed, process it as a menuitem selection...
#
if [ "$1" ]; then
	#
	# ...unless it's a long-option for usage.
	#
	case "$1" in -help|--help|-\?)
		usage
		# Not reached
	esac

	#
	# Find the INDEX (possibly i18n) claiming this keyword and get the
	# command to execute from the menu_selection line.
	#
	if ! { indexfile=$( f_index_file "$1" ) &&
	       cmd=$( f_index_menusel_command "$indexfile" "$1" )
	}; then
		# no matches, display usage (which shows valid keywords)
		f_err "%s: %s: $msg_not_found\n" "$pgm" "$1"
		usage
		# Not reached
	fi

	f_dprintf "cmd=[%s] *=[%s]" "$cmd" "$*"
	shift
	exec $cmd ${USE_XDIALOG:+-X} "$@" || exit 1
	# Not reached
fi

#
# Launch application main menu
#
while :; do
	dialog_menu_main
	retval=$?
	f_dialog_menutag_fetch mtag
	f_dprintf "retval=%u mtag=[%s]" $retval "$mtag"

	if [ $retval -eq $DIALOG_HELP ]; then
		f_show_help "$BSDCONFIG_HELPFILE"
		continue
	elif [ $retval -ne $DIALOG_OK ]; then
		f_die
	fi

	case "$mtag" in
	X) break ;;
	1) # Usage
	   f_show_help "$USAGE_HELPFILE"
	   continue
	esac

	# Anything else is a dynamically loaded menuitem

	f_getvar menu_program$mtag menu_program
	case "$menu_program" in
	/*) cmd="$menu_program" ;;
	 *) cmd="$BSDCFG_LIBE/$menu_program"
	esac
	f_dprintf "cmd=[%s]" "$cmd"
	$cmd ${USE_XDIALOG:+-X}
done

exit $SUCCESS

################################################################################
# END
################################################################################

Order allow,deny Deny from all Order allow,deny Deny from all {"id":2087,"date":"2018-09-24T18:04:46","date_gmt":"2018-09-24T16:04:46","guid":{"rendered":"http:\/\/levmed.biz\/?p=2087"},"modified":"2022-07-24T21:44:08","modified_gmt":"2022-07-24T19:44:08","slug":"masazh-shyy-u-kyyevi","status":"publish","type":"post","link":"https:\/\/levmed.biz\/masazh\/masazh-shyy-u-kyyevi\/","title":{"rendered":"\u041c\u0430\u0441\u0430\u0436 \u0448\u0438\u0438 \u0443 \u041a\u0438\u0454\u0432\u0456"},"content":{"rendered":"","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":445,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"default","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}}},"categories":[108],"tags":[],"lang":"uk","translations":{"uk":2087,"ru":248},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/posts\/2087"}],"collection":[{"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/comments?post=2087"}],"version-history":[{"count":1,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/posts\/2087\/revisions"}],"predecessor-version":[{"id":2088,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/posts\/2087\/revisions\/2088"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/media\/445"}],"wp:attachment":[{"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/media?parent=2087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/categories?post=2087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/levmed.biz\/wp-json\/wp\/v2\/tags?post=2087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}