aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorfelics2018-05-22 14:31:38 +0200
committerfelics2018-05-22 14:31:38 +0200
commit39f65f73a1699d9b8309ebe5c578e1d93640baa5 (patch)
tree9cd2b5f8ed61dd4990f73bf7c087b1bc8a421318
parent37f24c78b856b45f6cafa2ac200e0422c2bbe13a (diff)
downloadaur-cups-print-to-programme.tar.gz
Allowing only a whitelist of characters in $DEVICE_URI. Also, changed the API. Bug fixes.
-rw-r--r--.SRCINFO6
-rw-r--r--PKGBUILD4
-rwxr-xr-xcups-programme.sh48
3 files changed, 31 insertions, 27 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f062f82066bb..33b4a9b6931d 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = cups-print-to-programme
pkgdesc = Virtual printer for cups which prints to a file and opens that with a programme the user can choose in the settings. For example, print to gimp.
- pkgver = 0.2.2
+ pkgver = 0.3
pkgrel = 1
url = http://felics.kettenbruch.de/software/cups-print-to-programme/
install = cups-programme.install
@@ -20,7 +20,7 @@ pkgbase = cups-print-to-programme
optdepends = seahorse: For a graphical password input frontend for sudo.
optdepends = ksshaskpass: For a graphical password input frontend for sudo.
optdepends = gnome-ssh-askpass2: For a graphical password input frontend for sudo.
- provides = cups-print-to-programme-doc=0.2.2
+ provides = cups-print-to-programme-doc=0.3
backup = etc/cups/cups-programme.conf
source = cups-programme.sh
source = cups-programme.conf
@@ -28,7 +28,7 @@ pkgbase = cups-print-to-programme
source = TODO.txt
source = GPL3.txt
source = cups-programme.install
- sha256sums = a603b98e98334d59076ec97f9c49b6fc26825bdf938a009e315a4e9c80af74d0
+ sha256sums = cef16938a15385e10c8b9d6a1294dedf78004845452dfebd3fedbfffa25f9518
sha256sums = f583ed8969deef9e890b20c475bc24fd4eed8ef3c3a51544f9183fcc69d38c5c
sha256sums = 3f62486a89f586f9e706107f573283c6b19e236ccd19991fb6a6b482b090fd73
sha256sums = 83b54a69c67d39d03b1b02a4da1c2bccb45c459f239809568221844c2e7500a7
diff --git a/PKGBUILD b/PKGBUILD
index 9f67635ecdba..1c761e60613c 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -3,7 +3,7 @@
_pkgname=cups-print-to-programme
pkgname="${_pkgname}"
-pkgver=0.2.2
+pkgver=0.3
pkgrel=1
pkgdesc="Virtual printer for cups which prints to a file and opens that with a programme the user can choose in the settings. For example, print to gimp."
arch=('any')
@@ -38,7 +38,7 @@ optdepends=(
)
provides=("${_pkgname}-doc=${pkgver}")
backup=('etc/cups/cups-programme.conf')
-sha256sums=('a603b98e98334d59076ec97f9c49b6fc26825bdf938a009e315a4e9c80af74d0'
+sha256sums=('cef16938a15385e10c8b9d6a1294dedf78004845452dfebd3fedbfffa25f9518'
'f583ed8969deef9e890b20c475bc24fd4eed8ef3c3a51544f9183fcc69d38c5c'
'3f62486a89f586f9e706107f573283c6b19e236ccd19991fb6a6b482b090fd73'
'83b54a69c67d39d03b1b02a4da1c2bccb45c459f239809568221844c2e7500a7'
diff --git a/cups-programme.sh b/cups-programme.sh
index a59e0f0e1250..da76646a2770 100755
--- a/cups-programme.sh
+++ b/cups-programme.sh
@@ -43,22 +43,20 @@ conffile=/etc/cups/cups-programme.conf
# Timestamp
tstamp="$(date '+%Y-%m-%d_%T%z')"
-case "$1" in
- '-V'|'-version'|'--version')
- echo "${VERSION}"
- exit 0
- ;;
-esac
-
+# How to output text to stdout:
+stdout() {
+ # Don't use 'echo', since it might interpret leading '-e', '-E', '-n' and maybe others.
+ cat <<< "$@"
+}
# Write to stderr:
stderr() {
- echo "$@" 1>&2
+ stdout "$@" 1>&2
}
### Local logging:
log_local() {
- echo "$@" >> "${logfile}"
+ stdout "$@" >> "${logfile}"
}
### CUPS logging with corresponding loglevels:
@@ -109,6 +107,12 @@ emerg() {
log_cups "EMERG: ${firstarg}" "$@"
}
+case "$1" in
+ '-V'|'-version'|'--version')
+ stdout "${VERSION}"
+ exit 0
+ ;;
+esac
### Reading arguments passed from CUPS:
backend=${0}
@@ -134,7 +138,7 @@ outfile_prefix="/tmp/${backend_name}.${jobid}"
case ${#} in
0)
# This case is for "backend discovery mode."
- echo "direct ${backend_name} \"Unknown\" \"cups-programme: Print to file and open in programme. DeviceURI example: ${backend_name}:/usr/bin/gimp?u=<user>&DISPLAY=%C0.0&%s\". See documentation!"
+ stdout "direct ${backend_name} \"Unknown\" \"cups-programme: Print to file and open in programme. DeviceURI example: ${backend_name}:/usr/bin/gimp?u=<user>&DISPLAY=%C0.0&%s\". See documentation!"
exit 0
;;
5)
@@ -259,17 +263,17 @@ replace_strings() {
# Put the '-' last in order for grep not interpreting it special.
# Put the '^' not first in order for grep not interpreting it special.
_allowd_chars='][)(}{äÄöÖüÜß.:,;_@^°§%&/=?+*~a-zA-Z0-9-'
-if echo "${DEVICE_URI}" | grep -qE -e "[^${_allowd_chars}]"; then
- _rejected_chars="$(echo "${DEVICE_URI}" | grep -oE -e "[^${_allowd_chars}]" | sort | uniq | tr -d '\n')"
+if stdout "${DEVICE_URI}" | grep -qE -e "[^${_allowd_chars}]"; then
+ _rejected_chars="$(stdout "${DEVICE_URI}" | grep -oE -e "[^${_allowd_chars}]" | sort | uniq | tr -d '\n')"
error "$0: \$DEVICE_URI contains forbidden character(s) '${_rejected_chars}'. Allowed set: [${_allowd_chars}]. Aborting."
exit 5
fi
# Getting the command from $DEVICE_URI:
-cmd="$(echo "${DEVICE_URI}" | sed "s|^${backend_name}":'||g' | sed 's|?.*$||')"
+cmd="$(stdout "${DEVICE_URI}" | sed "s|^${backend_name}":'||g' | sed 's|?.*$||')"
# Getting the raw options, arguments, ... from $DEVICE_URI:
-argstr="$(echo "${DEVICE_URI}" | sed -n 's|^[^?]*?\(.*\)$|\1|p')"
+argstr="$(stdout "${DEVICE_URI}" | sed -n 's|^[^?]*?\(.*\)$|\1|p')"
# Taking the raw options, arguments, ... apart:
IFS='&' read -r -a argv <<< "${argstr}"
@@ -327,17 +331,17 @@ fi
outfile="${outfile_prefix}.${filetype}"
# Now, after $outfile is set, do the string replacements:
-if [ -v cmd ]; then cmd="$(echo "${cmd}" | replace_strings)"; fi
-if [ -v user ]; then user="$(echo "${user}" | replace_strings)"; fi
-if [ -v group ]; then group="$(echo "${group}" | replace_strings)"; fi
+if [ -v cmd ]; then cmd="$(replace_strings <<< "${cmd}" )"; fi
+if [ -v user ]; then user="$(replace_strings <<< "${user}" )"; fi
+if [ -v group ]; then group="$(replace_strings <<< "${group}" )"; fi
cmd_args_replaced=()
for _arg in "${cmd_args[@]}"; do
- cmd_args_replaced+=("$(echo "${_arg}" | replace_strings)")
+ cmd_args_replaced+=("$(replace_strings <<< "${_arg}")")
done
# Exporting environment variables after replacements.
for _env in "${env_vars[@]}"; do
- _var="$(echo "${_env%%=*}" | replace_strings)"
- _val="$(echo "${_env#?*=}" | replace_strings)"
+ _var="$(replace_strings <<< "${_env%%=*}" )"
+ _val="$(replace_strings <<< "${_env#?*=}" )"
log_local "Exporting environment variable '${_var}=${_val}'."
declare -g "${_var}=${_val}"
export "${_var}"
@@ -544,7 +548,7 @@ if [ -v user ] || [ -v group ]; then
if [ -v user ]; then
su_opts+=" -u ${user@Q}"
fi
- su_opts+=" -c ${cmd@Q} ${cmd_args_replaced[@]@Q}"
+ su_opts+=" -c \"${cmd@Q} ${cmd_args_replaced[@]@Q}\""
;;
'kdesudo')
su_cmd='kdesudo'
@@ -555,7 +559,7 @@ if [ -v user ] || [ -v group ]; then
if [ -v user ]; then
su_opts+=" -u ${user@Q}"
fi
- su_opts+=" -c ${cmd@Q} ${cmd_args_replaced[@]@Q}"
+ su_opts+=" -c \"${cmd@Q} ${cmd_args_replaced[@]@Q}\""
;;
*)
error "$0: Error: Unsupported su_variant '${su_variant}' provided. Aborting."