diff --git a/cups/files/cupsd.conf b/cups/files/cupsd.conf
new file mode 100644
index 0000000..184549a
--- /dev/null
+++ b/cups/files/cupsd.conf
@@ -0,0 +1,88 @@
+#
+# "$Id: cupsd.conf.in 7199 2008-01-08 00:16:30Z mike $"
+#
+# Sample configuration file for the Common UNIX Printing System (CUPS)
+# scheduler. See "man cupsd.conf" for a complete description of this
+# file.
+#
+MaxLogSize 2000000000
+
+# Log general information in error_log - change "info" to "debug" for
+# troubleshooting...
+LogLevel info
+
+# Administrator user group...
+SystemGroup sys root sysadm
+
+# Disable preserving jobs
+PreserveJobFiles Off
+PreserveJobHistory Off
+
+# Only listen for connections from the local machine.
+Listen *:631
+Listen /var/run/cups/cups.sock
+
+# Show shared printers on the local network.
+Browsing On
+BrowseOrder allow,deny
+# (Change '@LOCAL' to 'ALL' if using directed broadcasts from another subnet.)
+BrowseAllow @LOCAL
+
+# Default authentication type, when authentication is required...
+DefaultAuthType Basic
+
+# Restrict access to the server...
+
+ Order allow,deny
+ Allow @LOCAL
+
+
+# Restrict access to the admin pages...
+
+ Encryption Required
+ Order allow,deny
+
+
+# Restrict access to configuration files...
+
+ AuthType Default
+ Require user @SYSTEM
+ Order allow,deny
+
+
+# Set the default printer/job policies...
+
+ # Job-related operations must be done by the owner or an administrator...
+
+ Require user @OWNER @SYSTEM
+ Order deny,allow
+
+
+ # All administration operations require an administrator to authenticate...
+
+ AuthType Default
+ Require user @SYSTEM
+ Order deny,allow
+
+
+ # All printer operations require a printer operator to authenticate...
+
+ AuthType Default
+ Require user @SYSTEM
+ Order deny,allow
+
+
+ # Only the owner or an administrator can cancel or authenticate a job...
+
+ Require user @OWNER @SYSTEM
+ Order deny,allow
+
+
+
+ Order deny,allow
+
+
+
+#
+# End of "$Id: cupsd.conf.in 7199 2008-01-08 00:16:30Z mike $".
+#
diff --git a/cups/manifests/init.pp b/cups/manifests/init.pp
index ea91882..784a566 100644
--- a/cups/manifests/init.pp
+++ b/cups/manifests/init.pp
@@ -41,12 +41,32 @@ class cups::server inherits cups::client {
ensure => installed,
}
+ file { "/etc/cups/cupsd.conf":
+ ensure => present,
+ source => [ "puppet:///files/cups/cupsd.conf.${fqdn}",
+ "puppet:///files/cups/cupsd.conf",
+ "puppet:///cups/cupsd.conf", ],
+ mode => 0640,
+ owner => root,
+ group => lp,
+ require => Package["cups"],
+ notify => Service["cups"],
+ }
+
service { "cups":
ensure => running,
enable => true,
require => Package["cups"],
}
+ file { "/etc/cups/ppd":
+ ensure => directory,
+ mode => 0755,
+ owner => root,
+ group => lp,
+ require => Package["cups"],
+ }
+
File["/etc/cups/client.conf"] {
content => "ServerName 127.0.0.1\n",
}
@@ -54,6 +74,83 @@ class cups::server inherits cups::client {
}
+# Install and configure printer.
+#
+# === Parameters
+#
+# $name:
+# Printer name.
+# $uri:
+# URI to use for connecting to printer device.
+# $location:
+# Printer location, defaults to empty.
+# $ppd:
+# PPD file to use for printer. If set to "auto" PPD will be copied
+# from "puppet:///files/cups/${name}.ppd".
+# $ensure:
+# If set to present printer will be installed and if set to absent
+# printer will be removed.
+#
+# === Sample usage
+#
+# cups::printer { "hp1":
+# ensure => present,
+# uri => "socket://hp1:9100,
+# location => "Unknown",
+# }
+#
+define cups::printer($uri, $ensure = present, $location = "", $ppd = "auto") {
+
+ case $ensure {
+ present: {
+ exec { "cups-add-printer-${name}":
+ command => "lpadmin -p ${name} -E -v ${uri} -o printer-error-policy=abort-job",
+ path => "/bin:/sbin:/usr/bin:/usr/sbin",
+ unless => "lpq -P ${name}",
+ require => Service["cups"],
+ }
+ exec { "cups-set-location-${name}":
+ command => "lpadmin -p ${name} -L '${location}'",
+ path => "/bin:/sbin:/usr/bin:/usr/sbin",
+ unless => $location ? {
+ "" => "lpoptions -p ${name} | egrep ' printer-location '",
+ default => "lpoptions -p ${name} | egrep ' printer-location=${location} '",
+ },
+ require => Exec["cups-add-printer-${name}"],
+ }
+ }
+ absent: {
+ exec { "cups-del-printer-${name}":
+ command => "lpadmin -x ${name}",
+ path => "/bin:/sbin:/usr/bin:/usr/sbin",
+ onlyif => "lpq -P ${name}",
+ require => Service["cups"],
+ }
+ }
+ default: {
+ fail("Unknown argument to ensure.")
+ }
+ }
+
+ file { "/etc/cups/ppd/${name}.ppd":
+ ensure => $ensure,
+ source => $ppd ? {
+ "auto" => "puppet:///files/cups/${name}.ppd",
+ default => "${ppd}",
+ },
+ mode => 0644,
+ owner => root,
+ group => root,
+ require => $ensure ? {
+ present => [ Exec["cups-add-printer-${name}"],
+ File["/etc/cups/ppd"], ],
+ absent => Exec["cups-del-printer-${name}"],
+ },
+ }
+
+}
+
+
# Install LP support into cups
#
class cups::lpd {