Codebase list cups-filters / ce47a8a
New upstream version 1.16.0 Didier Raboud 6 years ago
8 changed file(s) with 350 addition(s) and 49 deletion(s). Raw diff Collapse all Expand all
0 INSTALL - OpenPrinting CUPS Filters v1.15.0 - 2017-07-24
0 INSTALL - OpenPrinting CUPS Filters v1.16.0 - 2017-07-27
11 --------------------------------------------------------
22
33 This file describes how to compile and install OpenPrinting CUPS
0 NEWS - OpenPrinting CUPS Filters v1.15.0 - 2017-07-24
0 NEWS - OpenPrinting CUPS Filters v1.16.0 - 2017-07-27
11 -----------------------------------------------------
2
3 CHANGES IN V1.16.0
4
5 - cups-browsed: Let elements in arrays get stacked up in the
6 order they are added, before, they were in the order how
7 they are positioned in memory. This especially led to a
8 random order of printer cluster definitions and of
9 command-line-supplied configuration options.
10 - cups-browsed: On shutdown not all locally created queues got
11 deleted.
12 - cups-browsed: Added support for manual definition of
13 load-balancing printer clusters via the "Cluster" directive
14 in cups-browsed.conf.
215
316 CHANGES IN V1.15.0
417
0 README - OpenPrinting CUPS Filters v1.15.0 - 2017-07-24
0 README - OpenPrinting CUPS Filters v1.16.0 - 2017-07-27
11 -------------------------------------------------------
22
33 Looking for compile instructions? Read the file "INSTALL.txt"
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for cups-filters 1.15.0.
2 # Generated by GNU Autoconf 2.69 for cups-filters 1.16.0.
33 #
44 #
55 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
586586 # Identity of this package.
587587 PACKAGE_NAME='cups-filters'
588588 PACKAGE_TARNAME='cups-filters'
589 PACKAGE_VERSION='1.15.0'
590 PACKAGE_STRING='cups-filters 1.15.0'
589 PACKAGE_VERSION='1.16.0'
590 PACKAGE_STRING='cups-filters 1.16.0'
591591 PACKAGE_BUGREPORT=''
592592 PACKAGE_URL=''
593593
14931493 # Omit some internal or obsolete options to make the list less imposing.
14941494 # This message is too long to be a string in the A/UX 3.1 sh.
14951495 cat <<_ACEOF
1496 \`configure' configures cups-filters 1.15.0 to adapt to many kinds of systems.
1496 \`configure' configures cups-filters 1.16.0 to adapt to many kinds of systems.
14971497
14981498 Usage: $0 [OPTION]... [VAR=VALUE]...
14991499
15641564
15651565 if test -n "$ac_init_help"; then
15661566 case $ac_init_help in
1567 short | recursive ) echo "Configuration of cups-filters 1.15.0:";;
1567 short | recursive ) echo "Configuration of cups-filters 1.16.0:";;
15681568 esac
15691569 cat <<\_ACEOF
15701570
17911791 test -n "$ac_init_help" && exit $ac_status
17921792 if $ac_init_version; then
17931793 cat <<\_ACEOF
1794 cups-filters configure 1.15.0
1794 cups-filters configure 1.16.0
17951795 generated by GNU Autoconf 2.69
17961796
17971797 Copyright (C) 2012 Free Software Foundation, Inc.
24292429 This file contains any messages produced by compilers while
24302430 running configure, to aid debugging if configure makes a mistake.
24312431
2432 It was created by cups-filters $as_me 1.15.0, which was
2432 It was created by cups-filters $as_me 1.16.0, which was
24332433 generated by GNU Autoconf 2.69. Invocation command line was
24342434
24352435 $ $0 $@
34643464
34653465 # Define the identity of the package.
34663466 PACKAGE='cups-filters'
3467 VERSION='1.15.0'
3467 VERSION='1.16.0'
34683468
34693469
34703470 cat >>confdefs.h <<_ACEOF
2107221072 # report actual input values of CONFIG_FILES etc. instead of their
2107321073 # values after options handling.
2107421074 ac_log="
21075 This file was extended by cups-filters $as_me 1.15.0, which was
21075 This file was extended by cups-filters $as_me 1.16.0, which was
2107621076 generated by GNU Autoconf 2.69. Invocation command line was
2107721077
2107821078 CONFIG_FILES = $CONFIG_FILES
2113821138 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2113921139 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2114021140 ac_cs_version="\\
21141 cups-filters config.status 1.15.0
21141 cups-filters config.status 1.16.0
2114221142 configured by $0, generated by GNU Autoconf 2.69,
2114321143 with options \\"\$ac_cs_config\\"
2114421144
55 # Version informations
66 # ====================
77 m4_define([cups_filters_version_major],[1])
8 m4_define([cups_filters_version_minor],[15])
8 m4_define([cups_filters_version_minor],[16])
99 m4_define([cups_filters_version_micro],[0])
1010 m4_define([cups_filters_version],[cups_filters_version_major.cups_filters_version_minor.cups_filters_version_micro])
1111
270270 char *browse_options;
271271 } browse_data_t;
272272
273 /* Data structure for manual definition of load-balancing clusters */
274 typedef struct cluster_s {
275 char *local_queue_name;
276 cups_array_t *members;
277 } cluster_t;
278
273279 /* Ways how to represent the remote printer's IP in the device URI */
274280 typedef enum ip_based_uris_e {
275281 IP_BASED_URIS_NO,
382388 static ipp_queue_type_t IPPPrinterQueueType = PPD_YES;
383389 static int NewIPPPrinterQueuesShared = 0;
384390 static int AutoClustering = 1;
391 static cups_array_t *clusters;
385392 static load_balancing_type_t LoadBalancingType = QUEUE_ON_CLIENT;
386393 static const char *DefaultOptions = NULL;
387394 static int terminating = 0; /* received SIGTERM, ignore callbacks,
33583365
33593366 /* Remote CUPS printer or local queue remaining from previous cups-browsed
33603367 session */
3361 if (is_cups_queue == 1 || is_cups_queue == -1) {
3362 if (is_cups_queue == 1 && CreateRemoteCUPSPrinterQueues == 0) {
3368 /* is_cups_queue: -1: Unknown, 0: IPP printer, 1: Remote CUPS queue,
3369 2: Remote CUPS queue in user-defined cluster */
3370 if (is_cups_queue != 0) {
3371 if (is_cups_queue > 0 && CreateRemoteCUPSPrinterQueues == 0) {
33633372 debug_printf("Printer %s (%s) is a remote CUPS printer and cups-browsed is not configured to set up such printers automatically, ignoring this printer.\n",
33643373 p->queue_name, p->uri);
33653374 goto fail;
33663375 }
33673376 /* For a remote CUPS printer our local queue will be raw or get a
33683377 PPD file from the remote CUPS server, so that the driver on the
3369 remote CUPS server get used. So we will not generate a PPD file
3378 remote CUPS server gets used. So we will not generate a PPD file
33703379 or interface script at this point. */
33713380 p->netprinter = 0;
33723381 p->ppd = NULL;
33823391 !q->slave_of) /* Find the master of the queues with this name,
33833392 to avoid "daisy chaining" */
33843393 break;
3385 if (q && AutoClustering == 0) {
3386 debug_printf("We have already created a queue with the name %s for another remote CUPS printer but automatic clustering of equally named printers is turned off. Skipping this printer.\n", p->queue_name);
3387 debug_printf("In cups-browsed.conf try setting \"AutoClustering On\" to cluster equally-named remote CUPS printers or \"LocalQueueNamingRemoteCUPS DNS-SD\" to avoid queue name clashes.\n");
3394 if (q && AutoClustering == 0 && is_cups_queue == 1) {
3395 debug_printf("We have already created a queue with the name %s for another remote CUPS printer but automatic clustering of equally named printers is turned off nor did we find a manually defined cluster this printer belongs to. Skipping this printer.\n", p->queue_name);
3396 debug_printf("In cups-browsed.conf try setting \"AutoClustering On\" to cluster equally-named remote CUPS printers, \"LocalQueueNamingRemoteCUPS DNS-SD\" to avoid queue name clashes, or define clusters with the \"Cluster\" directive.\n");
33883397 goto fail;
33893398 }
33903399 if (q && q->netprinter == 1) {
37673776 }
37683777
37693778 /* Add the new remote printer entry */
3779 log_all_printers();
37703780 cupsArrayAdd(remote_printers, p);
37713781 log_all_printers();
37723782
39043914 p->slave_of = r;
39053915
39063916 debug_printf("Processing printer list ...\n");
3917 log_all_printers();
39073918 for (p = (remote_printer_t *)cupsArrayFirst(remote_printers);
39083919 p; p = (remote_printer_t *)cupsArrayNext(remote_printers)) {
39093920
40524063 if (p->ifscript) free (p->ifscript);
40534064 free(p);
40544065 p = NULL;
4055 if (q) log_cluster(q);
4056 log_all_printers();
40574066
40584067 /* If auto shutdown is active and all printers we have set up got removed
40594068 again, schedule the shutdown in autoshutdown_timeout seconds
40944103
40954104 debug_printf("Creating/Updating CUPS queue %s\n",
40964105 p->queue_name);
4097 log_cluster(p);
40984106
40994107 /* Make sure to have a connection to the local CUPS daemon */
41004108 if ((http = http_connect_local ()) == NULL) {
46324640
46334641 }
46344642 }
4643 log_all_printers();
46354644
46364645 free(r);
46374646
48374846 char *key = NULL, *value = NULL;
48384847 char *note_value = NULL;
48394848 #endif /* HAVE_AVAHI */
4849 cluster_t *cluster = NULL;
4850 char *member = NULL, *str = NULL;
48404851 remote_printer_t *p = NULL;
48414852 local_printer_t *local_printer = NULL;
48424853 char *backup_queue_name = NULL, *local_queue_name = NULL,
50675078 }
50685079 }
50695080
5070 if (!matched_filters (local_queue_name, remote_host, port, service_name, domain,
5071 txt)) {
5072 debug_printf("Printer %s does not match BrowseFilter lines in cups-browsed.conf, printer ignored.\n",
5073 local_queue_name);
5074 goto fail;
5075 }
5076
50775081 /* If we only want to create queues for printers for which CUPS does
50785082 not already auto-create queues, we check here whether we can skip
50795083 this printer */
50885092 goto fail;
50895093 }
50905094 }
5091
5095
5096 if (is_cups_queue) {
5097 /* Check whether our new printer matches one of the user-defined
5098 printer clusters */
5099 for (cluster = cupsArrayFirst(clusters);
5100 cluster;
5101 cluster = cupsArrayNext(clusters)) {
5102 for (member = cupsArrayFirst(cluster->members);
5103 member;
5104 member = cupsArrayNext(cluster->members)) {
5105 /* Match remote CUPS queue name */
5106 if ((str = strrchr(resource, '/')) != NULL && strlen(str) > 1) {
5107 str = remove_bad_chars(str + 1, 2);
5108 if (strcasecmp(member, str) == 0) /* Match */
5109 break;
5110 free(str);
5111 }
5112 /* Match make and model */
5113 if (make_model) {
5114 str = remove_bad_chars(make_model, 2);
5115 if (strcasecmp(member, str) == 0) /* Match */
5116 break;
5117 free(str);
5118 }
5119 /* Match DNS-SD service name */
5120 if (service_name) {
5121 str = remove_bad_chars(service_name, 2);
5122 if (strcasecmp(member, str) == 0) /* Match */
5123 break;
5124 free(str);
5125 }
5126 }
5127 if (member)
5128 break;
5129 }
5130 if (cluster) {
5131 local_queue_name = cluster->local_queue_name;
5132 is_cups_queue = 2;
5133 free(str);
5134 } else if (AutoClustering) {
5135 /* If we do automatic clustering by matching queue names, do not
5136 add a queue to a manually defined cluster because it matches
5137 the cluster's local queue name. Manually defined clusters can
5138 only be joined by printers which match one of the cluster's
5139 member names */
5140 for (cluster = cupsArrayFirst(clusters);
5141 cluster;
5142 cluster = cupsArrayNext(clusters)) {
5143 if (strcasecmp(local_queue_name, cluster->local_queue_name) == 0) {
5144 debug_printf("We have already a manually defined printer cluster with the name %s. Automatic clustering does not add this printer to this cluster as it does not match any of the cluster's member names. Skipping this printer.\n", local_queue_name);
5145 debug_printf("In cups-browsed.conf try \"LocalQueueNamingRemoteCUPS DNS-SD\" or give another name to your manually defined cluster (\"Cluster\" directive) to avoid name clashes.\n");
5146 goto fail;
5147 }
5148 }
5149 }
5150 }
5151
5152 if (!matched_filters (local_queue_name, remote_host, port, service_name, domain,
5153 txt)) {
5154 debug_printf("Printer %s does not match BrowseFilter lines in cups-browsed.conf, printer ignored.\n",
5155 local_queue_name);
5156 goto fail;
5157 }
5158
50925159 /* Check if we have already created a queue for the discovered
50935160 printer */
50945161 for (p = (remote_printer_t *)cupsArrayFirst(remote_printers);
67176784 }
67186785 #endif /* HAVE_LDAP */
67196786
6720 int
6721 compare_pointers (void *a, void *b, void *data)
6722 {
6723 if (a < b)
6724 return -1;
6725 if (a > b)
6726 return 1;
6727 return 0;
6728 }
6729
67306787 static void
67316788 sigterm_handler(int sig) {
67326789 (void)sig; /* remove compiler warnings... */
68516908 cups_file_t *fp;
68526909 int i, linenum = 0;
68536910 char line[HTTP_MAX_BUFFER];
6854 char *value = NULL, *ptr, *field;
6911 char *value = NULL, *ptr, *start;
68556912 const char *delim = " \t,";
68566913 int browse_allow_line_found = 0;
68576914 int browse_deny_line_found = 0;
68606917 browse_filter_t *filter = NULL;
68616918 int browse_filter_options, exact_match, err;
68626919 char errbuf[1024];
6920 cluster_t *cluster = NULL;
68636921
68646922 if (!filename)
68656923 filename = CUPS_SERVERROOT "/cups-browsed.conf";
70287086 value);
70297087 } else if (!strcasecmp(line, "BrowseFilter") && value) {
70307088 ptr = value;
7031 /* Skip whitw space */
7089 /* Skip white space */
70327090 while (*ptr && isspace(*ptr)) ptr ++;
70337091 /* Premature line end */
70347092 if (!*ptr) goto browse_filter_fail;
70637121 should match the regexp */
70647122 browse_filter_options = 0;
70657123 }
7066 field = ptr;
7124 start = ptr;
70677125 while (*ptr && !isspace(*ptr)) ptr ++;
70687126 if (*ptr) {
70697127 /* Mark end of the field name */
70727130 ptr ++;
70737131 while (*ptr && isspace(*ptr)) ptr ++;
70747132 }
7075 filter->field = strdup(field);
7133 filter->field = strdup(start);
70767134 if (!*ptr) {
70777135 /* Only field name and no regexp is given, so this rule is
70787136 about matching a boolean value */
72107268 else if (!strcasecmp(value, "no") || !strcasecmp(value, "false") ||
72117269 !strcasecmp(value, "off") || !strcasecmp(value, "0"))
72127270 AutoClustering = 0;
7271 } else if (!strcasecmp(line, "Cluster") && value) {
7272 ptr = value;
7273 /* Skip white space */
7274 while (*ptr && isspace(*ptr)) ptr ++;
7275 /* Premature line end */
7276 if (!*ptr) goto cluster_fail;
7277 /* Find the local queue name for the cluster */
7278 start = ptr;
7279 while (*ptr && !isspace(*ptr) && *ptr != ':') ptr ++;
7280 if (*ptr) {
7281 /* Mark end of the local queue name */
7282 *ptr = '\0';
7283 /* Skip colon and white space until next word or line end */
7284 ptr ++;
7285 while (*ptr && (isspace(*ptr) || *ptr == ':')) ptr ++;
7286 }
7287 /* Empty queue name */
7288 if (strlen(start) <= 0)
7289 goto cluster_fail;
7290 /* Clean queue name */
7291 start = remove_bad_chars(start, 0);
7292 /* Check whether we have already a cluster with this name */
7293 for (cluster = cupsArrayFirst(clusters);
7294 cluster;
7295 cluster = cupsArrayNext(clusters))
7296 if (!strcasecmp(start, cluster->local_queue_name)) {
7297 debug_printf("Duplicate cluster with queue name \"%s\".\n",
7298 start);
7299 cluster = NULL;
7300 goto cluster_fail;
7301 }
7302 /* Create the new cluster definition */
7303 cluster = calloc (1, sizeof (cluster_t));
7304 if (!cluster) goto cluster_fail;
7305 cluster->local_queue_name = start;
7306 cluster->members = cupsArrayNew(NULL, NULL);
7307 if (!*ptr) {
7308 /* Only local queue name given, so assume this name as the only
7309 member name (only remote queues with this name match) */
7310 cupsArrayAdd(cluster->members, remove_bad_chars(start, 2));
7311 } else {
7312 /* The rest of the line lists one or more member queue names */
7313 while (*ptr) {
7314 start = ptr;
7315 while (*ptr && !isspace(*ptr)) ptr ++;
7316 if (*ptr) {
7317 /* Mark end of the current word */
7318 *ptr = '\0';
7319 /* Skip white space until next word or line end */
7320 ptr ++;
7321 while (*ptr && isspace(*ptr)) ptr ++;
7322 }
7323 /* Add member queue name to the list */
7324 if (strlen(start) > 0)
7325 cupsArrayAdd(cluster->members, remove_bad_chars(start, 2));
7326 }
7327 }
7328 cupsArrayAdd (clusters, cluster);
7329 continue;
7330 cluster_fail:
7331 if (cluster) {
7332 if (cluster->local_queue_name)
7333 free(cluster->local_queue_name);
7334 if (cluster->members) {
7335 while ((ptr = cupsArrayFirst (cluster->members)) != NULL) {
7336 cupsArrayRemove (cluster->members, ptr);
7337 free (ptr);
7338 }
7339 cupsArrayDelete (cluster->members);
7340 }
7341 free(cluster);
7342 }
72137343 } else if (!strcasecmp(line, "LoadBalancing") && value) {
72147344 if (!strncasecmp(value, "QueueOnClient", 13))
72157345 LoadBalancingType = QUEUE_ON_CLIENT;
73917521 int subscription_id = 0;
73927522
73937523 /* Initialise the command_line_config array */
7394 command_line_config = cupsArrayNew(compare_pointers, NULL);
7524 command_line_config = cupsArrayNew(NULL, NULL);
73957525
73967526 /* Initialise the browseallow array */
7397 browseallow = cupsArrayNew(compare_pointers, NULL);
7527 browseallow = cupsArrayNew(NULL, NULL);
73987528
73997529 /* Initialise the browsefilter array */
7400 browsefilter = cupsArrayNew(compare_pointers, NULL);
7530 browsefilter = cupsArrayNew(NULL, NULL);
7531
7532 /* Initialise the clusters array */
7533 clusters = cupsArrayNew(NULL, NULL);
74017534
74027535 /* Read command line options */
74037536 if (argc >= 2) {
76387771 sleep(1);
76397772
76407773 /* Initialise the array of network interfaces */
7641 netifs = cupsArrayNew(compare_pointers, NULL);
7774 netifs = cupsArrayNew(NULL, NULL);
76427775 update_netifs (NULL);
76437776
76447777 local_printers = g_hash_table_new_full (g_str_hash,
665665
666666 .fam T
667667 .fi
668 Load-balancing printer cluster formation can also be manually
669 controlled by defining explicitly which remote CUPS printers should
670 get clustered together.
671 .PP
672 This is done by the "Cluster" directive:
673 .PP
674 .nf
675 .fam C
676 Cluster <QUEUENAME>: <EXPRESSION1> <EXPRESSION2> ...
677 Cluster <QUEUENAME>
678
679 .fam T
680 .fi
681 If no expressions are given, <QUEUENAME> is used as the first and
682 only expression for this cluster.
683 .PP
684 Discovered printers are matched against all the expressions of all
685 defined clusters. The first expression which matches the discovered
686 printer determines to which cluster it belongs. Note that this way a
687 printer can only belong to one cluster. Once matched, further
688 cluster definitions will not checked any more.
689 .PP
690 With the first printer matching a cluster's expression a local queue
691 with the name <QUEUENAME> is created. If more printers are
692 discovered and match this cluster, they join the cluster. Printing
693 to this queue prints to all these printers in a load-balancing
694 manner, according to to the setting of the LoadBalancing directive.
695 .PP
696 Each expression must be a string of characters without spaces. If
697 spaces are needed, replace them by underscores ('_').
698 .PP
699 An expression can be matched in three ways:
700 .PP
701 .nf
702 .fam C
703 1. By the name of the CUPS queue on the remote server
704 2. By make and model name of the remote printer
705 3. By the DNS-SD service name of the remote printer
706
707 .fam T
708 .fi
709 Note that the matching is done case-insensitively and any group of
710 non-alphanumerical characters is replaced by a single underscore.
711 .PP
712 So if an expression is "HP_DeskJet_2540" and the remote server
713 reports "hp Deskjet-2540" the printer gets matched to this cluster.
714 .PP
715 If "AutoClustering" is not set to "No" both your manual cluster
716 definitions will be followed and automatic clustering of
717 equally-named remote queues will be performed. If a printer matches
718 in both categories the match to the manually defined cluster has
719 priority. Automatic clustering of equally-named remote printers is
720 not performed if there is a manually defined cluster with this name
721 (at least as the printers do not match this cluster).
722 .PP
723 Examples:
724 .PP
725 To cluster all remote CUPS queues named "laserprinter" in your local
726 network but not cluster any other equally-named remote CUPS printers
727 use (Local queue will get named "laserprinter"):
728 .PP
729 .nf
730 .fam C
731 AutoClustering No
732 Cluster laserprinter
733
734 .fam T
735 .fi
736 To cluster all remote CUPS queues of HP LaserJet 4050 printers in a
737 local queue named "LJ4050":
738 .PP
739 .nf
740 .fam C
741 Cluster LJ4050: HP_LaserJet_4050
742
743 .fam T
744 .fi
745 As DNS-SD service names are unique in a network you can create a
746 cluster from exactly specified printers (spaces replaced by
747 underscors):
748 .PP
749 .nf
750 .fam C
751 Cluster hrdep: oldlaser_@_hr-server1 newlaser_@_hr-server2
752
753 .fam T
754 .fi
668755 The LoadBalancing directive switches between two methods of handling
669756 load balancing between equally-named remote queues which are
670757 represented by one local print queue making up a cluster of them
503503 # AutoClustering No
504504
505505
506 # Load-balancing printer cluster formation can also be manually
507 # controlled by defining explicitly which remote CUPS printers should
508 # get clustered together.
509
510 # This is done by the "Cluster" directive:
511
512 # Cluster <QUEUENAME>: <EXPRESSION1> <EXPRESSION2> ...
513 # Cluster <QUEUENAME>
514
515 # If no expressions are given, <QUEUENAME> is used as the first and
516 # only expression for this cluster.
517
518 # Discovered printers are matched against all the expressions of all
519 # defined clusters. The first expression which matches the discovered
520 # printer determines to which cluster it belongs. Note that this way a
521 # printer can only belong to one cluster. Once matched, further
522 # cluster definitions will not checked any more.
523
524 # With the first printer matching a cluster's expression a local queue
525 # with the name <QUEUENAME> is created. If more printers are
526 # discovered and match this cluster, they join the cluster. Printing
527 # to this queue prints to all these printers in a load-balancing
528 # manner, according to to the setting of the LoadBalancing directive.
529
530 # Each expression must be a string of characters without spaces. If
531 # spaces are needed, replace them by underscores ('_').
532
533 # An expression can be matched in three ways:
534
535 # 1. By the name of the CUPS queue on the remote server
536 # 2. By make and model name of the remote printer
537 # 3. By the DNS-SD service name of the remote printer
538
539 # Note that the matching is done case-insensitively and any group of
540 # non-alphanumerical characters is replaced by a single underscore.
541
542 # So if an expression is "HP_DeskJet_2540" and the remote server
543 # reports "hp Deskjet-2540" the printer gets matched to this cluster.
544
545 # If "AutoClustering" is not set to "No" both your manual cluster
546 # definitions will be followed and automatic clustering of
547 # equally-named remote queues will be performed. If a printer matches
548 # in both categories the match to the manually defined cluster has
549 # priority. Automatic clustering of equally-named remote printers is
550 # not performed if there is a manually defined cluster with this name
551 # (at least as the printers do not match this cluster).
552
553 # Examples:
554
555 # To cluster all remote CUPS queues named "laserprinter" in your local
556 # network but not cluster any other equally-named remote CUPS printers
557 # use (Local queue will get named "laserprinter"):
558
559 # AutoClustering No
560 # Cluster laserprinter
561
562 # To cluster all remote CUPS queues of HP LaserJet 4050 printers in a
563 # local queue named "LJ4050":
564
565 # Cluster LJ4050: HP_LaserJet_4050
566
567 # As DNS-SD service names are unique in a network you can create a
568 # cluster from exactly specified printers (spaces replaced by
569 # underscors):
570
571 # Cluster hrdep: oldlaser_@_hr-server1 newlaser_@_hr-server2
572
573
506574 # The LoadBalancing directive switches between two methods of handling
507575 # load balancing between equally-named remote queues which are
508576 # represented by one local print queue making up a cluster of them