[Printing-architecture] [cups-filters] using cups-browsed for DNS-SD/IPP discovery

Brian Norris computersforpeace at gmail.com
Mon Apr 11 16:51:43 UTC 2016


Ping? Should I just file a bug for these sort of questions?

On Tue, Mar 22, 2016 at 01:40:34PM -0700, Brian Norris wrote:
> Hi,
> 
> I'm looking at the features of cups-browsed to see if I would want to
> use it for my purposes, and I ran across a really confusing piece of
> logic in the source code:
> 
>     if (!pdl || pdl[0] == '\0' ||
>         (!strcasestr(pdl, "application/postscript") &&
>          !strcasestr(pdl, "application/pdf") &&
>          !strcasestr(pdl, "image/pwg-raster") &&
>          ((!strcasestr(pdl, "application/vnd.hp-PCL") &&
>            !strcasestr(pdl, "application/PCL") &&
>            !strcasestr(pdl, "application/x-pcl")) ||
>           ((strncasecmp(make_model, "HP", 2) ||
>             strncasecmp(make_model, "Hewlett Packard", 15) ||
>             strncasecmp(make_model, "Hewlett-Packard", 15)) &&
>            !strcasestr(make_model, "LaserJet") &&
>            !strcasestr(make_model, "Mopier"))) &&
>          !strcasestr(pdl, "application/vnd.hp-PCLXL"))) {
>       debug_printf("cups-browsed: Cannot create remote printer %s (%s) as its PDLs are not known, ignoring this printer.\n",
>                    p->name, p->uri);
>       goto fail;
>     }
> 
> First of all, can anyone explain exactly what the block about HP is
> really supposed to be doing? I can't honestly figure it out.
> 
> But at any rate, I don't see how it could be correct. Particularly, this
> clause is always true (at most one of the comparisons will return 0), so
> why is it there?
> 
>            (strncasecmp(make_model, "HP", 2) ||
>             strncasecmp(make_model, "Hewlett Packard", 15) ||
>             strncasecmp(make_model, "Hewlett-Packard", 15))
> 
> Seems like at a minimum, this block should be corrected to actually
> produce the status of "is this an HP model." e.g., does the following
> diff make sense?
> 
> === modified file 'utils/cups-browsed.c'
> --- utils/cups-browsed.c	2016-02-10 14:18:28 +0000
> +++ utils/cups-browsed.c	2016-03-22 20:25:19 +0000
> @@ -2784,8 +2784,8 @@
>  	 ((!strcasestr(pdl, "application/vnd.hp-PCL") &&
>  	   !strcasestr(pdl, "application/PCL") &&
>  	   !strcasestr(pdl, "application/x-pcl")) ||
> -	  ((strncasecmp(make_model, "HP", 2) ||
> -	    strncasecmp(make_model, "Hewlett Packard", 15) ||
> +	  ((strncasecmp(make_model, "HP", 2) &&
> +	    strncasecmp(make_model, "Hewlett Packard", 15) &&
>  	    strncasecmp(make_model, "Hewlett-Packard", 15)) &&
>  	   !strcasestr(make_model, "LaserJet") &&
>  	   !strcasestr(make_model, "Mopier"))) &&
> 
> But I still don't feel like that's really what's intended, so an answer
> to my first question would be the most helpful.
> 
> Now, besides the correctness of this logic, is this aspect of the daemon
> something that people regularly use? I see that it's installed on many
> Linux distributions, but it seems like it isn't really exercised for
> Bonjour/DNS-SD discovery unless someone modifies the default
> cups-browsed.conf to have 'CreateIPPPrinterQueues Yes'.
> 
> Regards,
> Brian


More information about the Printing-architecture mailing list