1
Files
qnap-rc-scripts/cupsd.sh
2016-09-04 22:20:40 +03:00

265 lines
12 KiB
Bash
Executable File

#/bin/sh
CUPS_CONF="/etc/config/cups/cupsd.conf"
TEMP="/tmp/cupsd.conf"
LPADMIN="/usr/local/sbin/lpadmin"
BACKEND_USB="/usr/lib/cups/backend/usb"
#LPADMIN="./systemv/lpadmin"
#BACKEND_USB="./backend/usb"
set_config()
{
[ ! -d /var/spool/cups ] && /bin/mkdir -p /var/spool/cups
[ ! -d /var/run/cups ] && /bin/mkdir -p /var/run/cups
if [ -f $CUPS_CONF ]; then
/bin/cat $CUPS_CONF|/bin/grep "BrowseRemoteProtocols" &> /dev/null
[ $? = 0 ] && return
fi
/bin/mkdir -p /etc/config/cups
echo "#" > /etc/config/cups/cupsd.conf
echo "# \"$Id: cupsd.sh,v 1.24 2011-11-23 04:52:13 aixchou Exp $\"" >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "# Sample configuration file for the CUPS scheduler. See \"man cupsd.conf\" for a" >> /etc/config/cups/cupsd.conf
echo "# complete description of this file." >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Log general information in error_log - change \"warn\" to \"debug\"" >> /etc/config/cups/cupsd.conf
echo "# for troubleshooting..." >> /etc/config/cups/cupsd.conf
echo "LogLevel warn" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Administrator user group..." >> /etc/config/cups/cupsd.conf
echo "SystemGroup administrators" >> /etc/config/cups/cupsd.conf
echo "ServerAlias *" >> /etc/config/cups/cupsd.conf
echo "PreserveJobHistory Yes" >> /etc/config/cups/cupsd.conf
echo "Include /etc/config/cups/cupsd.conf.maxjobs" >> /etc/config/cups/cupsd.conf
echo "Include /etc/config/cups/cupsd.conf.allowip" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Only listen for connections from the local machine." >> /etc/config/cups/cupsd.conf
echo "Listen *:631" >> /etc/config/cups/cupsd.conf
echo "Listen /var/run/cups/cups.sock" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Show shared printers on the local network." >> /etc/config/cups/cupsd.conf
echo "Browsing On" >> /etc/config/cups/cupsd.conf
echo "BrowseOrder allow,deny" >> /etc/config/cups/cupsd.conf
echo "BrowseAllow all" >> /etc/config/cups/cupsd.conf
echo "BrowseLocalProtocols CUPS" >> /etc/config/cups/cupsd.conf
echo "BrowseRemoteProtocols none" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Default authentication type, when authentication is required..." >> /etc/config/cups/cupsd.conf
echo "DefaultAuthType Basic" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to the server..." >> /etc/config/cups/cupsd.conf
echo "#<Location />" >> /etc/config/cups/cupsd.conf
echo "# Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "# allow all" >> /etc/config/cups/cupsd.conf
echo "#</Location>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to the admin pages..." >> /etc/config/cups/cupsd.conf
echo "<Location /admin>" >> /etc/config/cups/cupsd.conf
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "</Location>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to configuration files..." >> /etc/config/cups/cupsd.conf
echo "<Location /admin/conf>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "</Location>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Set the default printer/job policies..." >> /etc/config/cups/cupsd.conf
echo "<Policy default>" >> /etc/config/cups/cupsd.conf
echo " # Job-related operations must be done by the owner or an administrator..." >> /etc/config/cups/cupsd.conf
echo " <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All administration operations require an administrator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All printer operations require a printer operator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Only the owner or an administrator can cancel or authenticate a job..." >> /etc/config/cups/cupsd.conf
echo " <Limit Cancel-Job CUPS-Authenticate-Job>" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " <Limit All>" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "</Policy>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Set the authenticated printer/job policies..." >> /etc/config/cups/cupsd.conf
echo "<Policy authenticated>" >> /etc/config/cups/cupsd.conf
echo " # Job-related operations must be done by the owner or an administrator..." >> /etc/config/cups/cupsd.conf
echo " <Limit Create-Job Print-Job Print-URI>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All administration operations require an administrator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All printer operations require a printer operator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Only the owner or an administrator can cancel or authenticate a job..." >> /etc/config/cups/cupsd.conf
echo " <Limit Cancel-Job CUPS-Authenticate-Job>" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " <Limit All>" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " </Limit>" >> /etc/config/cups/cupsd.conf
echo "</Policy>" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "# End of \"$Id: cupsd.sh,v 1.24 2011-11-23 04:52:13 aixchou Exp $\"." >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "MaxJobsPerPrinter 500" > /etc/config/cups/cupsd.conf.maxjobs
echo "<Location />" > /etc/config/cups/cupsd.conf.allowip
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf.allowip
echo " allow all" >> /etc/config/cups/cupsd.conf.allowip
echo "</Location>" >> /etc/config/cups/cupsd.conf.allowip
}
cups_del_all_printers()
{
for i in 1 2 3 4 5 6 7; do
/usr/local/sbin/lpstat -t|/bin/grep printer|/bin/cut -d' ' -f2|xargs /usr/local/sbin/lpadmin -x > /dev/null 2>&1
done
/bin/rm -f /var/log/cups/* 2> /dev/null
}
cups_del_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
local printer=`/sbin/getcfg "Printers" "Name$index"`
$LPADMIN -x $printer 2> /dev/null
}
add_bonjour_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
/sbin/getcfg "Bonjour Service" "PRINTER$index" > /dev/null 2>&1
if [ $? != 0 ]; then
/sbin/setcfg "Bonjour Service" "PRINTER$index" "1"
local name=`/sbin/getcfg "Printers" "Name$index" -d "printer$index"`
/sbin/setcfg "Bonjour Service" "PRINTER Service Name$index" "$name"
fi
}
cups_add_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
local phy_exist=`/sbin/getcfg "Printers" "Phy exist$index"`
#echo "index = $index, phy_exit = $phy_exist"
[ "x$phy_exist" = "x" ] || [ "$phy_exist" = "0" ] && return
local printer=`/sbin/getcfg "Printers" "Name$index" -d "printer$index"`
local printer_model=`/sbin/getcfg "Printers" "Model$index"`
local printer_sn=`/sbin/getcfg "Printers" "SN$index" -d "unknow"`
if [ "$printer_sn" != "unknow" ]; then
local printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep "$printer_sn"|/bin/grep -v FAX|/bin/cut -d ' ' -f 2`
else
local printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep -v FAX|/bin/cut -d ' ' -f 2`
fi
if [ "$printer_uri" = "" ]; then
sleep 2
if [ "$printer_sn" != "unknow" ]; then
printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep "$printer_sn"|/bin/cut -d ' ' -f 2`
else
printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/cut -d ' ' -f 2`
fi
[ "$printer_uri" = "" ] && echo "can't get printer uri!" && exit 1
fi
#echo "printer = $printer uri = $printer_uri"
$LPADMIN -p $printer -v $printer_uri -o printer-error-policy=retry-job -E
add_bonjour_printer $index
}
start()
{
set_config
/usr/sbin/cupsd -c /etc/config/cups/cupsd.conf
#add or delete printers
for i in 1 2 3 4 5 6 7; do
index="$i"
[ "$index" = "1" ] && index=""
local phy_exist=`/sbin/getcfg "Printers" "Phy exist$index"`
if [ "x$phy_exist" = "x" ] || [ "$phy_exist" = "0" ]; then
cups_del_printer $i
elif [ "$phy_exist" = "1" ]; then
cups_add_printer $i
fi
done
}
stop()
{
/usr/bin/killall cupsd 2> /dev/null
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
add_printer)
cups_add_printer $2
;;
del_printer)
cups_del_printer $2
;;
del_all_printers)
cups_del_all_printers
;;
*)
/bin/echo $"Usage: $0 {start|stop|restart|add_printer|del_printer|del_all_printers}"
exit 1
esac
exit 0