From: Einar Jørgen Haraldseid Date: Mon, 29 Jul 2019 18:28:39 +0000 (+0200) Subject: Fix some bugs, use sudo only when needed X-Git-Url: https://git.slaskete.net/einar-bin/commitdiff_plain/6b74906b168af18ab388bca6a5da3039912dc3e6?hp=ff740c3d5a8133e44f0c962bb0abfbfab6f2e36c Fix some bugs, use sudo only when needed --- diff --git a/addfollowmeprint.sh b/addfollowmeprint.sh index 828cb32..75c7215 100755 --- a/addfollowmeprint.sh +++ b/addfollowmeprint.sh @@ -19,13 +19,6 @@ function printerror() { echo "${*}" 1>&2 } -# Test for root -if [ ${UID} -ne 0 ] ; then - echo "This script must be run as root, relaunching with sudo:" - sudo bash "$0" "$@" - exit $? -fi - # Set default options that may be overridden by passed options below Model="generic" Driver="postscript" @@ -78,6 +71,26 @@ while [[ $# -gt 0 ]]; do shift # past argument or value done +# Make sure we have sudo powers when we need it +if ! sudo -k; then + printerror "This script requires sudo to function" + exit 1 +fi + +# But don't run as super user, otherwise we can't access the keyring +if [ ${UID} -eq 0 ]; then + if [ "${Plaintext}" != "YES" ]; then + printerror "Please run this script as your normal user, we will prompt you for your sudo password when needed. Or you can use the --plaintext option" + exit 1 + fi +fi + +echo "Please provide sudo password, as some parts of this script requires it" +if ! sudo true; then + printerror "Sorry, this script requires working sudo privileges to function" + exit 1 +fi + # Test for supported OS Uname=$(uname | tr "[:upper:]" "[:lower:]") if [ "${Uname}" != "darwin" ] && [ "${Uname}" != "linux" ] && [ "${Force}" != "YES" ]; then @@ -98,7 +111,7 @@ else fi # Test for CUPS -if ! command -v lpadmin > /dev/null 2>&1; then +if ! sudo bash -c "command -v lpadmin" > /dev/null 2>&1; then printerror "You must have CUPS installed to add printers. Please install CUPS." exit 1 fi @@ -123,7 +136,7 @@ if [ "${Uname}" = "linux" ]; then if command -v zypper >/dev/null 2>&1; then if [ "${Driver}" = "postscript" ]; then if [ "${Model}" = "ricoh" ]; then - if ! rpm -q OpenPrintingPPDs-postscript >/dev/null 2>&1; then + if ! sudo rpm -q OpenPrintingPPDs-postscript >/dev/null 2>&1; then printerror "You don't seem to have the correct printer drivers installed, please run:" printerror " sudo zypper install OpenPrintingPPDs-postscript" printerror "first, or use the generic driver instead." @@ -135,7 +148,7 @@ if [ "${Uname}" = "linux" ]; then DriverPath="Postscript.ppd.gz" fi else - if ! rpm -q OpenPrintingPPDs-ghostscript >/dev/null 2>&1; then + if ! sudo rpm -q OpenPrintingPPDs-ghostscript >/dev/null 2>&1; then printerror "You don't seem to have the correct printer drivers installed, please run:" printerror " sudo zypper install OpenPrintingPPDs-ghostscript" printerror "first, or use the generic driver instead." @@ -153,7 +166,7 @@ if [ "${Uname}" = "linux" ]; then if [ "${Model}" = "ricoh" ]; then # This should match Fedora and other modern rpm based systems that have dnf as the primary package manager if command -v dnf >/dev/null 2>&1; then - if ! rpm -q foomatic-db-ppds 2>&1; then + if ! sudo rpm -q foomatic-db-ppds 2>&1; then printerror "You don't seem to have the correct printer drivers installed, please run:" printerror " sudo dnf install foomatic-db-ppds" printerror "first, or use the generic driver instead." @@ -168,7 +181,7 @@ if [ "${Uname}" = "linux" ]; then fi # This should match CentOS, RHEL and other RHEL based distros that have yum as the primary package manager if command -v yum >/dev/null 2>&1; then - if ! rpm -q foomatic-db-ppds >/dev/null 2>&1; then + if ! sudo rpm -q foomatic-db-ppds >/dev/null 2>&1; then printerror "You don't seem to have the correct printer drivers installed, please run:" printerror " sudo yum install foomatic-db-ppds" printerror "first, or use the generic driver instead." @@ -183,7 +196,7 @@ if [ "${Uname}" = "linux" ]; then fi # This should match Debian, Ubuntu and most if not all derivates that use dpkg as the primary package manager if command -v dpkg >/dev/null 2>&1; then - if ! dpkg -s openprinting-ppds > /dev/null 2>&1; then + if ! sudo dpkg -s openprinting-ppds > /dev/null 2>&1; then printerror "You must have the correct printer drivers installed, please run:" printerror " sudo apt-get install openprinting-ppds" printerror "first, or use the generic driver instead." @@ -246,7 +259,7 @@ if [ "${Uname}" = "darwin" ]; then fi # Finally we can add the printer, let's remove any existing printer share with the same name first -lpadmin -x ${QueueName} > /dev/null 2&>1 +sudo lpadmin -x ${QueueName} > /dev/null 2>&1 # The Linux way if [ "${Uname}" = "linux" ]; then @@ -258,8 +271,9 @@ if [ "${Uname}" = "linux" ]; then PrinterShare="smb://${Workgroup}/${PrintServer}/${PrintFile}" AuthInfo="username,password" fi - if ! lpadmin -p ${QueueName} \ + if ! sudo lpadmin -p ${QueueName} \ -D "FollowMe print queue at NTNU" \ + -L "Many locations" \ -v "${PrinterShare}" \ -m "${DriverPath}" \ -o auth-info-required="$AuthInfo" \ @@ -280,8 +294,9 @@ fi # The OSX way if [ "${Uname}" = "darwin" ]; then - if ! lpadmin -p ${QueueName} \ + if ! sudo lpadmin -p ${QueueName} \ -D "FollowMe print queue at NTNU" \ + -L "Many locations" \ -v "smb://${PrintServer}/${PrintFile}" \ -m "${DriverPath}" \ -o printer-is-shared=false -o printer-op-policy=authenticated \ @@ -290,8 +305,8 @@ if [ "${Uname}" = "darwin" ]; then exit 1 fi - cupsenable "${QueueName}" - cupsaccept "${QueueName}" + sudo cupsenable "${QueueName}" + sudo cupsaccept "${QueueName}" # Add credentials to the keychain if they are missing # Shamelessly stolen^W^WBorrowed from https://github.com/Orakeltjenesten/scripts/blob/33abfb353524f449f0bbdee27adb2f1f0a9756a2/print/ntnuprint-mac.sh @@ -305,13 +320,13 @@ if [ "${Uname}" = "darwin" ]; then fi # Set correct paper size and enable the duplexer option -if ! lpadmin -p ${QueueName} -o PageSize=A4 -o Option1=True; then +if ! sudo lpadmin -p ${QueueName} -o PageSize=A4 -o Option1=True; then printerror "Could not set default options on the print queue ${QueueName}. See above error for details." exit 1 fi # Set as default -if ! lpadmin -d ${QueueName}; then +if ! sudo lpadmin -d ${QueueName}; then printerror "Could not set the print queue ${QueueName} as default printer. See above error for details." exit 1 fi