diff options
author | felics | 2018-05-22 14:31:38 +0200 |
---|---|---|
committer | felics | 2018-05-22 14:31:38 +0200 |
commit | 39f65f73a1699d9b8309ebe5c578e1d93640baa5 (patch) | |
tree | 9cd2b5f8ed61dd4990f73bf7c087b1bc8a421318 | |
parent | 37f24c78b856b45f6cafa2ac200e0422c2bbe13a (diff) | |
download | aur-cups-print-to-programme.tar.gz |
Allowing only a whitelist of characters in $DEVICE_URI. Also, changed the API. Bug fixes.
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | PKGBUILD | 4 | ||||
-rwxr-xr-x | cups-programme.sh | 48 |
3 files changed, 31 insertions, 27 deletions
@@ -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 @@ -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." |