shell bypass 403

GrazzMean-Shell Shell

: /bin/ [ drwxr-xr-x ]
Uname: Linux wputd 5.4.0-200-generic #220-Ubuntu SMP Fri Sep 27 13:19:16 UTC 2024 x86_64
Software: Apache/2.4.41 (Ubuntu)
PHP version: 7.4.3-4ubuntu2.24 [ PHP INFO ] PHP os: Linux
Server Ip: 158.69.144.88
Your Ip: 3.23.103.203
User: www-data (33) | Group: www-data (33)
Safe Mode: OFF
Disable Function:
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,

name : dpkg-maintscript-helper
#!/bin/sh
#
# Copyright © 2007, 2011-2015 Guillem Jover <guillem@debian.org>
# Copyright © 2010 Raphaël Hertzog <hertzog@debian.org>
# Copyright © 2008 Joey Hess <joeyh@debian.org>
# Copyright © 2005 Scott James Remnant (original implementation on www.dpkg.org)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

# The conffile related functions are inspired by
# https://wiki.debian.org/DpkgConffileHandling

# This script is documented in dpkg-maintscript-helper(1)

##
## Functions to remove an obsolete conffile during upgrade
##
rm_conffile() {
	local CONFFILE="$1"
	local LASTVERSION="$2"
	local PACKAGE="$3"
	if [ "$LASTVERSION" = "--" ]; then
		LASTVERSION=""
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	if [ "$PACKAGE" = "--" -o -z "$PACKAGE" ]; then
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	# Skip remaining parameters up to --
	while [ "$1" != "--" -a $# -gt 0 ]; do shift; done
	[ $# -gt 0 ] || badusage "missing arguments after --"
	shift

	[ -n "$PACKAGE" ] || error "couldn't identify the package"
	[ -n "$1" ] || error "maintainer script parameters are missing"
	[ -n "$DPKG_MAINTSCRIPT_NAME" ] || \
		error "environment variable DPKG_MAINTSCRIPT_NAME is required"
	[ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] || \
		error "environment variable DPKG_MAINTSCRIPT_PACKAGE is required"
	[ "${CONFFILE}" != "${CONFFILE#/}" ] || \
		error "conffile '$CONFFILE' is not an absolute path"
	validate_optional_version "$LASTVERSION"

	debug "Executing $0 rm_conffile in $DPKG_MAINTSCRIPT_NAME" \
	      "of $DPKG_MAINTSCRIPT_PACKAGE"
	debug "CONFFILE=$CONFFILE PACKAGE=$PACKAGE" \
	      "LASTVERSION=$LASTVERSION ACTION=$1 PARAM=$2"
	case "$DPKG_MAINTSCRIPT_NAME" in
	preinst)
		if [ "$1" = "install" -o "$1" = "upgrade" ] && [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			prepare_rm_conffile "$CONFFILE" "$PACKAGE"
		fi
		;;
	postinst)
		if [ "$1" = "configure" ] && [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			finish_rm_conffile "$CONFFILE"
		fi
		;;
	postrm)
		if [ "$1" = "purge" ]; then
			rm -f "$CONFFILE.dpkg-bak" "$CONFFILE.dpkg-remove" \
			      "$CONFFILE.dpkg-backup"
		fi
		if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
		   [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			abort_rm_conffile "$CONFFILE" "$PACKAGE"
		fi
		;;
	*)
		debug "$0 rm_conffile not required in $DPKG_MAINTSCRIPT_NAME"
		;;
	esac
}

prepare_rm_conffile() {
	local CONFFILE="$1"
	local PACKAGE="$2"

	[ -e "$CONFFILE" ] || return 0
	ensure_package_owns_file "$PACKAGE" "$CONFFILE" || return 0

	local md5sum old_md5sum
	md5sum="$(md5sum "$CONFFILE" | sed -e 's/ .*//')"
	old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$PACKAGE" | \
		sed -n -e "\\'^ $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
	if [ "$md5sum" != "$old_md5sum" ]; then
		mv -f "$CONFFILE" "$CONFFILE.dpkg-backup"
	else
		mv -f "$CONFFILE" "$CONFFILE.dpkg-remove"
	fi
}

finish_rm_conffile() {
	local CONFFILE="$1"

	if [ -e "$CONFFILE.dpkg-backup" ]; then
		echo "Obsolete conffile $CONFFILE has been modified by you."
		echo "Saving as $CONFFILE.dpkg-bak ..."
		mv -f "$CONFFILE.dpkg-backup" "$CONFFILE.dpkg-bak"
	fi
	if [ -e "$CONFFILE.dpkg-remove" ]; then
		echo "Removing obsolete conffile $CONFFILE ..."
		rm -f "$CONFFILE.dpkg-remove"
	fi
}

abort_rm_conffile() {
	local CONFFILE="$1"
	local PACKAGE="$2"

	ensure_package_owns_file "$PACKAGE" "$CONFFILE" || return 0

	if [ -e "$CONFFILE.dpkg-remove" ]; then
		echo "Reinstalling $CONFFILE that was moved away"
		mv "$CONFFILE.dpkg-remove" "$CONFFILE"
	fi
	if [ -e "$CONFFILE.dpkg-backup" ]; then
		echo "Reinstalling $CONFFILE that was backed-up"
		mv "$CONFFILE.dpkg-backup" "$CONFFILE"
	fi
}

##
## Functions to rename a conffile during upgrade
##
mv_conffile() {
	local OLDCONFFILE="$1"
	local NEWCONFFILE="$2"
	local LASTVERSION="$3"
	local PACKAGE="$4"
	if [ "$LASTVERSION" = "--" ]; then
		LASTVERSION=""
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	if [ "$PACKAGE" = "--" -o -z "$PACKAGE" ]; then
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	# Skip remaining parameters up to --
	while [ "$1" != "--" -a $# -gt 0 ]; do shift; done
	[ $# -gt 0 ] || badusage "missing arguments after --"
	shift

	[ -n "$PACKAGE" ] || error "couldn't identify the package"
	[ -n "$1" ] || error "maintainer script parameters are missing"
	[ -n "$DPKG_MAINTSCRIPT_NAME" ] || \
		error "environment variable DPKG_MAINTSCRIPT_NAME is required"
	[ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] || \
		error "environment variable DPKG_MAINTSCRIPT_PACKAGE is required"
	[ "${OLDCONFFILE}" != "${OLDCONFFILE#/}" ] || \
		error "old-conffile '$OLDCONFFILE' is not an absolute path"
	[ "${NEWCONFFILE}" != "${NEWCONFFILE#/}" ] || \
		error "new-conffile '$NEWCONFFILE' is not an absolute path"
	validate_optional_version "$LASTVERSION"

	debug "Executing $0 mv_conffile in $DPKG_MAINTSCRIPT_NAME" \
	      "of $DPKG_MAINTSCRIPT_PACKAGE"
	debug "CONFFILE=$OLDCONFFILE -> $NEWCONFFILE PACKAGE=$PACKAGE" \
	      "LASTVERSION=$LASTVERSION ACTION=$1 PARAM=$2"
	case "$DPKG_MAINTSCRIPT_NAME" in
	preinst)
		if [ "$1" = "install" -o "$1" = "upgrade" ] && [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			prepare_mv_conffile "$OLDCONFFILE" "$PACKAGE"
		fi
		;;
	postinst)
		if [ "$1" = "configure" ] && [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			finish_mv_conffile "$OLDCONFFILE" "$NEWCONFFILE" "$PACKAGE"
		fi
		;;
	postrm)
		if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
		   [ -n "$2" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			abort_mv_conffile "$OLDCONFFILE" "$PACKAGE"
		fi
		;;
	*)
		debug "$0 mv_conffile not required in $DPKG_MAINTSCRIPT_NAME"
		;;
	esac
}

prepare_mv_conffile() {
	local CONFFILE="$1"
	local PACKAGE="$2"

	[ -e "$CONFFILE" ] || return 0

	ensure_package_owns_file "$PACKAGE" "$CONFFILE" || return 0

	local md5sum old_md5sum
	md5sum="$(md5sum "$CONFFILE" | sed -e 's/ .*//')"
	old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$PACKAGE" | \
		sed -n -e "\\'^ $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
	if [ "$md5sum" = "$old_md5sum" ]; then
		mv -f "$CONFFILE" "$CONFFILE.dpkg-remove"
	fi
}

finish_mv_conffile() {
	local OLDCONFFILE="$1"
	local NEWCONFFILE="$2"
	local PACKAGE="$3"

	rm -f "$OLDCONFFILE.dpkg-remove"

	[ -e "$OLDCONFFILE" ] || return 0
	ensure_package_owns_file "$PACKAGE" "$OLDCONFFILE" || return 0

	echo "Preserving user changes to $NEWCONFFILE (renamed from $OLDCONFFILE)..."
	if [ -e "$NEWCONFFILE" ]; then
		mv -f "$NEWCONFFILE" "$NEWCONFFILE.dpkg-new"
	fi
	mv -f "$OLDCONFFILE" "$NEWCONFFILE"
}

abort_mv_conffile() {
	local CONFFILE="$1"
	local PACKAGE="$2"

	ensure_package_owns_file "$PACKAGE" "$CONFFILE" || return 0

	if [ -e "$CONFFILE.dpkg-remove" ]; then
		echo "Reinstalling $CONFFILE that was moved away"
		mv "$CONFFILE.dpkg-remove" "$CONFFILE"
	fi
}

##
## Functions to replace a symlink with a directory
##
symlink_to_dir() {
	local SYMLINK="$1"
	local SYMLINK_TARGET="$2"
	local LASTVERSION="$3"
	local PACKAGE="$4"

	if [ "$LASTVERSION" = "--" ]; then
		LASTVERSION=""
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	if [ "$PACKAGE" = "--" -o -z "$PACKAGE" ]; then
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi

	# Skip remaining parameters up to --
	while [ "$1" != "--" -a $# -gt 0 ]; do shift; done
	[ $# -gt 0 ] || badusage "missing arguments after --"
	shift

	[ -n "$DPKG_MAINTSCRIPT_NAME" ] || \
		error "environment variable DPKG_MAINTSCRIPT_NAME is required"
	[ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] || \
		error "environment variable DPKG_MAINTSCRIPT_PACKAGE is required"
	[ -n "$PACKAGE" ] || error "cannot identify the package"
	[ -n "$SYMLINK" ] || error "symlink parameter is missing"
	[ "${SYMLINK#/}" = "$SYMLINK" ] && \
		error "symlink pathname is not an absolute path"
	[ "${SYMLINK%/}" = "$SYMLINK" ] || \
		error "symlink pathname ends with a slash"
	[ -n "$SYMLINK_TARGET" ] || error "original symlink target is missing"
	[ -n "$1" ] || error "maintainer script parameters are missing"
	validate_optional_version "$LASTVERSION"

	debug "Executing $0 symlink_to_dir in $DPKG_MAINTSCRIPT_NAME" \
	      "of $DPKG_MAINTSCRIPT_PACKAGE"
	debug "SYMLINK=$SYMLINK -> $SYMLINK_TARGET PACKAGE=$PACKAGE" \
	      "LASTVERSION=$LASTVERSION ACTION=$1 PARAM=$2"

	case "$DPKG_MAINTSCRIPT_NAME" in
	preinst)
		if [ "$1" = "install" -o "$1" = "upgrade" ] &&
		   [ -n "$2" ] && [ -h "$SYMLINK" ] &&
		   symlink_match "$SYMLINK" "$SYMLINK_TARGET" &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup"
		fi
		;;
	postinst)
		# We cannot bail depending on the version, as here we only
		# know what was the last configured version, and we might
		# have been unpacked, then upgraded with an unpack and thus
		# never been configured before.
		if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
		   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET"
		then
			rm -f "${SYMLINK}.dpkg-backup"
		fi
		;;
	postrm)
		if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ]; then
		    rm -f "${SYMLINK}.dpkg-backup"
		fi
		if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
		   [ -n "$2" ] &&
		   [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] &&
		   symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			echo "Restoring backup of $SYMLINK ..."
			mv "${SYMLINK}.dpkg-backup" "$SYMLINK"
		fi
		;;
	*)
		debug "$0 symlink_to_dir not required in $DPKG_MAINTSCRIPT_NAME"
		;;
	esac
}

##
## Functions to replace a directory with a symlink
##
dir_to_symlink() {
	local PATHNAME="${1%/}"
	local SYMLINK_TARGET="$2"
	local LASTVERSION="$3"
	local PACKAGE="$4"

	if [ "$LASTVERSION" = "--" ]; then
		LASTVERSION=""
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi
	if [ "$PACKAGE" = "--" -o -z "$PACKAGE" ]; then
		PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
	fi

	# Skip remaining parameters up to --
	while [ "$1" != "--" -a $# -gt 0 ]; do shift; done
	[ $# -gt 0 ] || badusage "missing arguments after --"
	shift

	[ -n "$DPKG_MAINTSCRIPT_NAME" ] || \
		error "environment variable DPKG_MAINTSCRIPT_NAME is required"
	[ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] || \
		error "environment variable DPKG_MAINTSCRIPT_PACKAGE is required"
	[ -n "$PACKAGE" ] || error "cannot identify the package"
	[ -n "$PATHNAME" ] || error "directory parameter is missing"
	[ "${PATHNAME#/}" = "$PATHNAME" ] && \
		error "directory parameter is not an absolute path"
	[ -n "$SYMLINK_TARGET" ] || error "new symlink target is missing"
	[ -n "$1" ] || error "maintainer script parameters are missing"
	validate_optional_version "$LASTVERSION"

	debug "Executing $0 dir_to_symlink in $DPKG_MAINTSCRIPT_NAME" \
	      "of $DPKG_MAINTSCRIPT_PACKAGE"
	debug "PATHNAME=$PATHNAME SYMLINK_TARGET=$SYMLINK_TARGET" \
	      "PACKAGE=$PACKAGE LASTVERSION=$LASTVERSION ACTION=$1 PARAM=$2"

	case "$DPKG_MAINTSCRIPT_NAME" in
	preinst)
		if [ "$1" = "install" -o "$1" = "upgrade" ] &&
		   [ -n "$2" ] &&
		   [ ! -h "$PATHNAME" ] && [ -d "$PATHNAME" ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			prepare_dir_to_symlink "$PACKAGE" "$PATHNAME"
		fi
		;;
	postinst)
		# We cannot bail depending on the version, as here we only
		# know what was the last configured version, and we might
		# have been unpacked, then upgraded with an unpack and thus
		# never been configured before.
		if [ "$1" = "configure" ] &&
		   [ -d "${PATHNAME}.dpkg-backup" ] &&
		   [ ! -h "$PATHNAME" ] && [ -d "$PATHNAME" ] &&
		   [ -f "$PATHNAME/.dpkg-staging-dir" ]; then
			finish_dir_to_symlink "$PATHNAME" "$SYMLINK_TARGET"
		fi
		;;
	postrm)
		if [ "$1" = "purge" ] && [ -d "${PATHNAME}.dpkg-backup" ]; then
		    rm -rf "${PATHNAME}.dpkg-backup"
		fi
		if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] &&
		   [ -n "$2" ] &&
		   [ -d "${PATHNAME}.dpkg-backup" ] &&
		   [ \( ! -h "$PATHNAME" -a -d "$PATHNAME" -a \
		        -f "$PATHNAME/.dpkg-staging-dir" \) -o \
		     \( -h "$PATHNAME" -a \
		        \( "$(readlink "$PATHNAME")" = "$SYMLINK_TARGET" -o \
		           "$(readlink -f "$PATHNAME")" = "$SYMLINK_TARGET" \) \) ] &&
		   dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
			abort_dir_to_symlink "$PATHNAME"
		fi
		;;
	*)
		debug "$0 dir_to_symlink not required in $DPKG_MAINTSCRIPT_NAME"
		;;
	esac
}

prepare_dir_to_symlink()
{
	local PACKAGE="$1"
	local PATHNAME="$2"

	local LINE
	# If there are conffiles we should not perform the switch.
	dpkg-query -W -f='${Conffiles}\n' "$PACKAGE" | while read -r LINE; do
		case "$LINE" in
		"$PATHNAME"/*)
			error "directory '$PATHNAME' contains conffiles," \
			      "cannot switch to symlink"
			;;
		esac
	done

	# If there are locally created files or files owned by another package
	# we should not perform the switch.
	export DPKG_MAINTSCRIPT_HELPER_INTERNAL_API="$version"
	find "$PATHNAME" -print0 | \
		xargs -0 -n1 "$0" _internal_pkg_must_own_file "$PACKAGE" || \
		error "directory '$PATHNAME' contains files not owned by" \
		      "package $PACKAGE, cannot switch to symlink"
	unset DPKG_MAINTSCRIPT_HELPER_INTERNAL_API

	# At this point, we know that the directory either contains no files,
	# or only non-conffiles owned by the package.
	#
	# To do the switch we cannot simply replace it with the final symlink
	# just yet, because dpkg needs to remove any file present in the old
	# package that have disappeared in the new one, and we do not want to
	# lose files resolving to the same pathname in the symlink target.
	#
	# We cannot replace the directory with a staging symlink either,
	# because dpkg will update symlinks to their new target.
	#
	# So we need to create a staging directory, to avoid removing files
	# from other packages, and to trap any new files in the directory
	# to move them to their correct place later on.
	mv -f "$PATHNAME" "${PATHNAME}.dpkg-backup"
	mkdir "$PATHNAME"

	# Mark it as a staging directory, so that we can track things.
	touch "$PATHNAME/.dpkg-staging-dir"
}

finish_dir_to_symlink()
{
	local PATHNAME="$1"
	local SYMLINK_TARGET="$2"

	# Move the contents of the staging directory to the symlink target,
	# as those are all new files installed between this package being
	# unpacked and configured.
	local ABS_SYMLINK_TARGET
	if [ "${SYMLINK_TARGET#/}" = "$SYMLINK_TARGET" ]; then
		ABS_SYMLINK_TARGET="$(dirname "$PATHNAME")/$SYMLINK_TARGET"
	else
		ABS_SYMLINK_TARGET="$SYMLINK_TARGET"
	fi
	rm "$PATHNAME/.dpkg-staging-dir"
	find "$PATHNAME" -mindepth 1 -maxdepth 1 -print0 | \
		xargs -0 -i% mv -f "%" "$ABS_SYMLINK_TARGET/"

	# Remove the staging directory.
	rmdir "$PATHNAME"

	# Do the actual switch.
	ln -s "$SYMLINK_TARGET" "$PATHNAME"

	# We are left behind the old files owned by this package in the backup
	# directory, just remove it.
	rm -rf "${PATHNAME}.dpkg-backup"
}

abort_dir_to_symlink()
{
	local PATHNAME="$1"

	echo "Restoring backup of $PATHNAME ..."
	if [ -h "$PATHNAME" ]; then
		rm -f "$PATHNAME"
	else
		# The staging directory must be empty, as no other package
		# should have been unpacked in between.
		rm -f "$PATHNAME/.dpkg-staging-dir"
		rmdir "$PATHNAME"
	fi

	mv "${PATHNAME}.dpkg-backup" "$PATHNAME"
}

# Common functions
validate_optional_version() {
	local VERSION="$1"

	if [ -z "$VERSION" ]; then
		return
	fi

	if ! VERSIONCHECK=$(dpkg --validate-version -- "$VERSION" 2>&1); then
		error "$VERSIONCHECK"
	fi
}

ensure_package_owns_file() {
	local PACKAGE="$1"
	local FILE="$2"

	if ! dpkg-query -L "$PACKAGE" | grep -F -q -x "$FILE"; then
		debug "File '$FILE' not owned by package " \
		      "'$PACKAGE', skipping $command"
		return 1
	fi
	return 0
}

internal_pkg_must_own_file()
{
	local PACKAGE="$1"
	local FILE="$2"

	if [ "$DPKG_MAINTSCRIPT_HELPER_INTERNAL_API" != "$version" ]; then
		error "internal API used by external command"
	fi

	if ! ensure_package_owns_file "$PACKAGE" "$FILE"; then
		error "file '$FILE' not owned by package '$PACKAGE'"
	fi
	return 0
}

symlink_match()
{
	local SYMLINK="$1"
	local SYMLINK_TARGET="$2"

	[ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \
	[ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ]
}

# Standard ANSI colors and attributes.
COLOR_NORMAL=''
COLOR_RESET=''
COLOR_BOLD=''
COLOR_BLACK=''
COLOR_RED=''
COLOR_GREEN=''
COLOR_YELLOW=''
COLOR_BLUE=''
COLOR_MAGENTA=''
COLOR_CYAN=''
COLOR_WHITE=''
COLOR_BOLD_BLACK=''
COLOR_BOLD_RED=''
COLOR_BOLD_GREEN=''
COLOR_BOLD_YELLOW=''
COLOR_BOLD_BLUE=''
COLOR_BOLD_MAGENTA=''
COLOR_BOLD_CYAN=''
COLOR_BOLD_WHITE=''

setup_colors()
{
	: "${DPKG_COLORS=auto}"

	case "$DPKG_COLORS" in
	auto)
		if [ -t 1 ]; then
			USE_COLORS=yes
		else
			USE_COLORS=no
		fi
		;;
	always)
		USE_COLORS=yes
		;;
	*)
		USE_COLORS=no
		;;
	esac

	if [ $USE_COLORS = yes ]; then
		COLOR_PROG="$COLOR_BOLD"
		COLOR_INFO="$COLOR_GREEN"
		COLOR_NOTICE="$COLOR_YELLOW"
		COLOR_WARN="$COLOR_BOLD_YELLOW"
		COLOR_ERROR="$COLOR_BOLD_RED"
	else
		COLOR_RESET=""
	fi
	FMT_PROG="$COLOR_PROG$PROGNAME$COLOR_RESET"
}

debug() {
	if [ -n "$DPKG_DEBUG" ]; then
		echo "DEBUG: $FMT_PROG: $*" >&2
	fi
}

error() {
	echo "$FMT_PROG: ${COLOR_ERROR}error${COLOR_RESET}: $*" >&2
	exit 1
}

warning() {
	echo "$FMT_PROG: ${COLOR_WARN}warning${COLOR_RESET}: $*" >&2
}

usage() {
	cat <<END
Usage: $PROGNAME <command> <parameter>... -- <maintainer-script-parameter>...

Commands:
  supports <command>
	Returns 0 (success) if the given command is supported, 1 otherwise.
  rm_conffile <conffile> [<last-version> [<package>]]
	Remove obsolete conffile. Must be called in preinst, postinst and
	postrm.
  mv_conffile <old-conf> <new-conf> [<last-version> [<package>]]
	Rename a conffile. Must be called in preinst, postinst and postrm.
  symlink_to_dir <pathname> <old-symlink-target> [<last-version> [<package>]]
	Replace a symlink with a directory. Must be called in preinst,
	postinst and postrm.
  dir_to_symlink <pathname> <new-symlink-target> [<last-version> [<package>]]
	Replace a directory with a symlink. Must be called in preinst,
	postinst and postrm.
  help
	Display this usage information.
END
}

badusage() {
	echo "$FMT_PROG: ${COLOR_ERROR}error${COLOR_RESET}: $1" >&2
	echo >&2
	echo "Use '$PROGNAME help' for program usage information." >&2
	exit 1
}

# Main code
set -e

PROGNAME=$(basename "$0")
version="1.19.7"

setup_colors

command="$1"
[ $# -gt 0 ] || badusage "missing command"
shift

case "$command" in
supports)
	case "$1" in
	rm_conffile|mv_conffile|symlink_to_dir|dir_to_symlink)
		code=0
		;;
	*)
		code=1
		;;
	esac
	if [ -z "$DPKG_MAINTSCRIPT_NAME" ]; then
		warning "environment variable DPKG_MAINTSCRIPT_NAME missing"
		code=1
	fi
	if [ -z "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
		warning "environment variable DPKG_MAINTSCRIPT_PACKAGE missing"
		code=1
	fi
	exit $code
	;;
rm_conffile)
	rm_conffile "$@"
	;;
mv_conffile)
	mv_conffile "$@"
	;;
symlink_to_dir)
	symlink_to_dir "$@"
	;;
dir_to_symlink)
	dir_to_symlink "$@"
	;;
_internal_pkg_must_own_file)
	# This is an internal command, must not be used outside this program.
	internal_pkg_must_own_file "$@"
	;;
--help|help|-?)
	usage
	;;
--version)
	cat <<-END
	Debian $PROGNAME version $version.

	This is free software; see the GNU General Public License version 2 or
	later for copying conditions. There is NO warranty.
	END
	;;
*)
	badusage "command $command is unknown
Hint: upgrading dpkg to a newer version might help."
esac

exit 0
© 2025 GrazzMean-Shell
January 2023 - Page 9 of 22 - Michigan AI Application Development - Best Microsoft C# Developers & Technologists

Tech Blog

Tech Insights, Information, and Inspiration
SEO Marketing

SEO Marketing

SEO marketing is a type of digital marketing that focuses on improving the ranking of a website on search engine results pages (SERPs). The goal of SEO marketing is to increase the quantity and quality of traffic to a website from search engines. This is typically achieved by implementing a combination of on-page and off-page optimization strategies, such as keyword research, link building, and content creation. By making a website more visible and relevant to search engines, SEO marketing can help attract more qualified leads and ultimately increase sales and revenue.

What is Google E.A.T. and Why it Matters

What is Google E.A.T. and Why it Matters

Google E.A.T. stands for Expertise, Authoritativeness, and Trustworthiness. It is a set of guidelines that Google suggests webmasters and content creators follow in order to produce high-quality content that is both useful and trustworthy. These guidelines are intended to help ensure that the content that appears in search results is reliable and relevant. E.A.T. is just one of many factors that Google considers when ranking websites and determining which search results to show for a given query.

Mobile Application Architecture

Mobile Application Architecture

The process of mobile application architecture includes the planning of the user experience, the integration of different systems, the development of the application, and the testing and maintenance of the application. It is a complex process that requires a lot of coordination and collaboration between various stakeholders.

Machine Learning in Transportation

Machine Learning in Transportation

Machine learning has the potential to revolutionize transportation by optimizing the efficiency of existing systems and enabling the development of new technologies. Machine learning algorithms can be used to optimize the scheduling and routing of public transportation, helping to reduce traffic congestion, improve safety, and reduce emissions.

Front-end Frameworks

Front-end Frameworks

Front-end frameworks are collections of tools and technologies which are used to build the user interface of a website or application. These frameworks provide a structure for developers to work within and are typically used to simplify the code writing process. Front-end frameworks provide developers with a wide range of components and tools that can be used to create a fully-functional website.

Machine Learning in Finance

Machine Learning in Finance

Machine Learning, or ML, is an increasingly popular technology in the world of finance. It is a branch of artificial intelligence (AI) that uses algorithms and statistical models to allow computers to learn from data and make decisions with minimal human intervention. ML is being used in the financial sector for a variety of tasks, from predicting stock prices and trading strategies to fraud detection and customer segmentation.

Get In Touch

5 + 5 =

UseTech Design, LLC
TROY, MI • BLOOMFIELD HILLS, MI
Call or text +1(734) 367-4100

Approaching AI: How Today’s Businesses Can Harness Its Capabilities

Artificial Intelligence (AI) has transitioned from being a speculative concept in science fiction to a transformative force across numerous industries. Among the most intriguing aspects of AI are AI agents, which are software entities that perform tasks on behalf of users. Understanding AI agents in real-world terms involves examining their components, capabilities, applications, and the ethical considerations they raise.

AI Agents: Bridging the Gap Between Technology and Real-World Applications

Among the most intriguing aspects of AI are AI agents, which are software entities that perform tasks on behalf of users. Understanding AI agents in real-world terms involves examining their components, capabilities, applications, and the ethical considerations they raise.

Utilizing AI Agents for Effective Legacy Code Modernization

As companies strive to keep pace with innovation, the modernization of legacy code becomes imperative. Artificial Intelligence (AI) agents offer a compelling solution to this problem, providing sophisticated tools and methodologies to facilitate the transition from legacy systems to modern architectures.

Embracing the Future: How AI Agents Will Change Everything

The future with AI agent technology holds immense promise for transforming our world in profound and unprecedented ways. From personalized experiences and seamless integration into daily life to empowering human-computer collaboration and revolutionizing healthcare, AI agents are poised to redefine the way we live, work, and interact with technology.

AI Agents vs. Traditional Customer Support: A Comparative Analysis

While traditional support offers a human touch and emotional connection, AI agents provide scalability, efficiency, and 24/7 availability. Moving forward, businesses must carefully assess their unique needs and customer expectations to determine the optimal balance between AI-driven automation and human interaction.

The Future of Business Intelligence: AI Solutions for Data-driven Decision Making

The future of business intelligence is AI-powered, where data becomes not just a strategic asset but a competitive advantage. In today’s hyper-connected digital world, data has become the lifeblood of business operations. Every click, purchase, and interaction generates valuable information that, when analyzed effectively, can provide crucial insights for strategic decision-making.

Democratized AI: Making Artificial Intelligence Accessible to All

Democratized AI has the potential to revolutionize industries and improve society by making AI technologies more accessible and inclusive. However, it also presents challenges such as data privacy, bias, and ethical considerations that must be addressed to ensure responsible implementation.

Explainable AI (XAI): Techniques and Methodologies within the Field of AI

Imagine a black box. You feed data into it, and it spits out a decision. That’s how many AI systems have traditionally functioned. This lack of transparency can be problematic, especially when it comes to trusting the AI’s reasoning. This is where Explainable AI (XAI) comes in.

Building an AI-Ready Workforce: Key Skills and Training Strategies

As artificial intelligence (AI) continues to transform industries and reshape the employment landscape, the demand for a skilled AI-ready workforce intensifies. Organizations across various sectors are recognizing the imperative of equipping their employees with the necessary skills and knowledge to thrive in an AI-driven world.

Working Together: Approaches to Multi-agent Collaboration in AI

Imagine a team of specialists – a data whiz, a communication expert, and an action master – all working in sync. This is the power of multi-agent collaboration, with the potential to revolutionize fields like scientific discovery, robotics, and self-driving cars. But getting these AI agents to collaborate effectively presents unique challenges