view bin/putcrc @ 52:d07ce874a280

[bash] securing test. Should use bashism but I hate bashism.
author Edho Prima Arief <me@myconan.net>
date Wed, 27 Apr 2011 11:50:03 -0400
parents 94ee419ad047
children 08d5f6023998
line wrap: on
line source

#!/bin/sh
safe_path()
{
	# It all depends on the first character.
	__start=$(printf "%s" "$*" | cut -c 1)
	__path=
	case "${__start}" in
		.|/) __path="$*";; # . and / is safe. No change.
		*) __path="./$*";; # Anything else must be prefixed with ./
	esac
	printf "%s" "${__path}" # Return.
}

if [ "$#" -lt 1 ]; then
	cat <<EOF
Usage: $(basename "/$0") file1 file2 ... fileN
EOF
	exit 1
fi

for file in "$@"; do
	if [ -f "${file}" ] && [ -r "${file}" ] && [ -n "$(printf "%s\n" "${file}" | sed -e 's/.*[A-F0-9]\{8\}.*//')" ]; then
		filename="$(basename "$(safe_path "${file}")")"
		dirname="$(dirname "$(safe_path "${file}")")"
		myfile="$(printf "%s\n" "${filename%.*}" | sed -e 's/\([^]]\)$/\1 /')"
		myext="${filename##*.}"; if [ "${myext}" = "${filename}" ]; then myext=""; else myext=".${myext}"; fi
		crc=$(cek.rb "$(safe_path "${file}")" | tail -1 | sed -e 's/.*\([A-F0-9]\{8\}\)$/\1/')
		mv -- "${file}" "${dirname}/${myfile}[${crc}]${myext}" && printf "%s => %s\n" "${file}" "${myfile}[${crc}]${myext}"
	else
		printf "%s\n" "${file} is not a file or unreadable"
	fi
done