[Pkg-cups-devel] r645 - in cupsys/branches/cups-1.2-ubuntu: . debian debian/local/backends
Martin Pitt
mpitt at alioth.debian.org
Tue Dec 4 08:33:39 UTC 2007
Author: mpitt
Date: Tue Dec 4 08:33:39 2007
New Revision: 645
Log:
merge from trunk
Modified:
cupsys/branches/cups-1.2-ubuntu/ (props changed)
cupsys/branches/cups-1.2-ubuntu/debian/changelog
cupsys/branches/cups-1.2-ubuntu/debian/control
cupsys/branches/cups-1.2-ubuntu/debian/local/backends/dnssd
Modified: cupsys/branches/cups-1.2-ubuntu/debian/changelog
==============================================================================
--- cupsys/branches/cups-1.2-ubuntu/debian/changelog (original)
+++ cupsys/branches/cups-1.2-ubuntu/debian/changelog Tue Dec 4 08:33:39 2007
@@ -1,9 +1,15 @@
cupsys (1.3.4-2ubuntu2) UNRELEASED; urgency=low
+ [ Martin Pitt ]
* debian/local/apparmor-profile: Run drivers (PPD generators) unconfined,
since they run as non-root and there are third-party ones we cannot
control.
+ [ Till Kamppeter ]
+ * debian/local/backends/dnssd: Updated dnssd to support Mac OS X servers
+ which broadcast their print queues only via DNS-SD and require clients
+ to create raw IPP queues pointing to the server's queues manually.
+
-- Martin Pitt <martin.pitt at ubuntu.com> Mon, 03 Dec 2007 11:22:57 +0100
cupsys (1.3.4-2ubuntu1) hardy; urgency=low
Modified: cupsys/branches/cups-1.2-ubuntu/debian/control
==============================================================================
--- cupsys/branches/cups-1.2-ubuntu/debian/control (original)
+++ cupsys/branches/cups-1.2-ubuntu/debian/control Tue Dec 4 08:33:39 2007
@@ -3,7 +3,7 @@
Section: net
Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss at lists.ubuntu.com>
XSBC-Original-Maintainer: Debian CUPS Maintainers <pkg-cups-devel at lists.alioth.debian.org>
-Standards-Version: 3.7.2
+Standards-Version: 3.7.3
Build-Depends: libpam0g-dev, libtiff4-dev, libjpeg62-dev, zlib1g-dev, libpng12-dev, libslp-dev, libgnutls-dev, libpaper-dev, libldap2-dev, debhelper (>= 5.0), po-debconf, cdbs (>= 0.4.27), sharutils, dpatch (>= 1.11), libdbus-1-dev, libkrb5-dev, libavahi-compat-libdnssd-dev
Uploaders: Kenshi Muto <kmuto at debian.org>, Martin Pitt <mpitt at debian.org>, Roger Leigh <rleigh at debian.org>, Martin-Éric Racine <q-funk at iki.fi>, Masayuki Hatta (mhatta) <mhatta at debian.org>, Jeff Licquia <licquia at debian.org>
Modified: cupsys/branches/cups-1.2-ubuntu/debian/local/backends/dnssd
==============================================================================
--- cupsys/branches/cups-1.2-ubuntu/debian/local/backends/dnssd (original)
+++ cupsys/branches/cups-1.2-ubuntu/debian/local/backends/dnssd Tue Dec 4 08:33:39 2007
@@ -45,8 +45,9 @@
# IPs which are for computers, consider their printer entries as queues
# set up with the local printing system (CUPS, LPD, Windows/Samba SMB, ...)
-my @ipblacklist = ();
+my @computerips = ();
my $output;
+my $hosts;
my ($interface, $nettype, $ip, $host, $make, $model, $description, $cmd, $makemodel, $deviceid, $protocol, $port, $uriext, $uri);
open (AVAHI, "$avahicmd |") or exit 0;
@@ -64,8 +65,8 @@
$protocol = "socket";
} elsif ($protocolinfo =~ /_printer/) {
$protocol = "lpd";
- #} elsif ($protocolinfo =~ /_ipp/) {
- # $protocol = "ipp";
+ } elsif ($protocolinfo =~ /_ipp/) {
+ $protocol = "ipp";
}
} elsif ($line =~ /^\s*hostname\s*=\s*\[([^\]]+)\]\s*$/) {
$host = $1;
@@ -73,7 +74,7 @@
} elsif ($line =~ /^\s*address\s*=\s*\[([^\]]+)\]\s*$/) {
$ip = $1;
if ($protocol eq "computer") {
- push (@ipblacklist, $ip);
+ push (@computerips, $ip);
$protocol = "";
}
} elsif ($line =~ /^\s*port\s*=\s*\[([^\]]+)\]\s*$/) {
@@ -124,7 +125,7 @@
$usb_DES ||= $product;
if ($usb_MFG) {
$make = $usb_MFG;
- } elsif ($usb_DES =~ /^KONICA\s+MINOLTA\b/i) {
+ } elsif ($usb_DES =~ /^KONICA\s*MINOLTA\b/i) {
$make = "KONICA MINOLTA";
} elsif ($usb_DES) {
$usb_DES =~ /^\s*(\S*)\b/;
@@ -138,7 +139,11 @@
$usb_CMD ||= $pdls;
my $extra;
if ($protocol eq "socket") {
- $uri = "socket://$ip:$port";
+ if ($port eq "9100") {
+ $uri = "socket://$ip";
+ } else {
+ $uri = "socket://$ip:$port";
+ }
$extra = "Port $port";
} elsif ($protocol eq "lpd") {
$uri = "lpd://$ip" . ($uriext ? "/$uriext" : "");
@@ -164,7 +169,8 @@
($usb_DES ? "DES:$usb_DES;" : "") .
($usb_CMD ? "CMD:$usb_CMD;" : "");
$deviceid .= "CLS:PRINTER;" if $deviceid;
- $output->{$ip}{$protocol}{$extra} =
+ $hosts->{$ip} = $hostname if ($hostname);
+ $output->{$ip}{$protocol}{$uriext} =
"network $uri \"$makemodel\" \"$makemodel $ip ($extra)\" \"$deviceid\"\n";
($interface, $nettype, $ip, $host, $make, $model, $description, $cmd, $makemodel, $deviceid, $protocol, $port, $uriext, $uri) =
("", "", "", "", "", "", "", "", "", "", "", "", "", "");
@@ -172,31 +178,87 @@
}
}
+my $localqueues = {};
+my $queue = undef;
+if (open LPSTAT, "LC_ALL=C lpstat -l -p -v |") {
+ while (my $line = <LPSTAT>) {
+ chomp $line;
+ if ($line =~ /^printer\s+(\S+)/i) {
+ $queue = $1;
+ $localqueues->{$queue} = {};
+ } elsif ($queue) {
+ if ($line =~ /^\s+Connection:\s+remote/i) {
+ $localqueues->{$queue}{remote} = 1;
+ } elsif ($line =~ /^\s+Interface:\s+(\S+)/i) {
+ $localqueues->{$queue}{interface} = $1;
+ } elsif ($line =~ /^device\s+for\s+(\S+)\s*:\s*(\S+)/i) {
+ $localqueues->{$1}{uri} = $2;
+ }
+ }
+ }
+ close LPSTAT
+}
+
+my @localips = ();
+if (open IFCONFIG, "LC_ALL=C /sbin/ifconfig |") {
+ while (my $line = <IFCONFIG>) {
+ chomp $line;
+ if ($line =~ /^\s*inet\s+addr:\s*(\S+)/i) {
+ push (@localips, $1);
+ }
+ }
+ close IFCONFIG;
+}
+
foreach my $ip (keys(%{$output})) {
- next if member($ip, @ipblacklist);
+ # Do not list print queues of the local machine
+ next if member($ip, @localips);
if ($output->{$ip}{"socket"}) {
- foreach my $extra (keys(%{$output->{$ip}{"socket"}})) {
- if (keys(%{$output->{$ip}{"socket"}}) = 1) {
- $output->{$ip}{"socket"}{$extra} =~
+ foreach my $uriext (keys(%{$output->{$ip}{"socket"}})) {
+ if (keys(%{$output->{$ip}{"socket"}}) == 1) {
+ $output->{$ip}{"socket"}{$uriext} =~
s/^(\s*\S*\s*\S*\s*\"[^\"]*\"\s*\"[^\"\(]*?)\s*\([^\)]*\)\s*(\"\s*.*)$/$1$2/;
}
- print $output->{$ip}{"socket"}{$extra};
+ print $output->{$ip}{"socket"}{$uriext};
}
} elsif ($output->{$ip}{"lpd"}) {
- foreach my $extra (keys(%{$output->{$ip}{"lpd"}})) {
- if (keys(%{$output->{$ip}{"lpd"}}) = 1) {
- $output->{$ip}{"lpd"}{$extra} =~
+ foreach my $uriext (keys(%{$output->{$ip}{"lpd"}})) {
+ if (keys(%{$output->{$ip}{"lpd"}}) == 1) {
+ $output->{$ip}{"lpd"}{$uriext} =~
s/^(\s*\S*\s*\S*\s*\"[^\"]*\"\s*\"[^\"\(]*?)\s*\([^\)]*\)\s*(\"\s*.*)$/$1$2/;
}
- print $output->{$ip}{"lpd"}{$extra};
+ print $output->{$ip}{"lpd"}{$uriext};
}
} elsif ($output->{$ip}{"ipp"}) {
- foreach my $extra (keys(%{$output->{$ip}{"ipp"}})) {
+ foreach my $uriext (keys(%{$output->{$ip}{"ipp"}})) {
+ if ($uriext =~ /^(printers|classes)\/(\S+)$/) {
+ # Queue from a CUPS server. We should suppress it if it
+ # is a queue received via CUPS broadcast
+ $queue=$2;
+ if (defined($localqueues->{"$queue\@$ip"})) {
+ $queue = "$queue\@$ip";
+ } elsif (defined($localqueues->{"$queue\@$hosts->{$ip}"})) {
+ $queue = "$queue\@$hosts->{$ip}";
+ }
+ if (defined($localqueues->{$queue})) {
+ if ($localqueues->{$queue}{remote} &&
+ ($localqueues->{$queue}{uri} =~
+ /^ipp:\/\/([^\/:]+)(:\d+|)\/(\S+)/)) {
+ my $host = $1;
+ my $ue = $3;
+ if ($host !~ /\d+\.\d+\.\d+\.\d+/) {
+ $host =
+ join(".", unpack("C4", gethostbyname($host)));
+ }
+ next if ($host eq $ip) && ($ue eq $uriext);
+ }
+ }
+ }
if (keys(%{$output->{$ip}{"ipp"}}) == 1) {
- $output->{$ip}{"ipp"}{$extra} =~
+ $output->{$ip}{"ipp"}{$uriext} =~
s/^(\s*\S*\s*\S*\s*\"[^\"]*\"\s*\"[^\"]*?)\s*\([^\)]*\)\s*(\"\s*.*)$/$1$2/;
}
- print $output->{$ip}{"ipp"}{$extra};
+ print $output->{$ip}{"ipp"}{$uriext};
}
}
}
More information about the Pkg-cups-devel
mailing list