diff options
author | jacobs <none@none> | 2008-06-06 17:25:53 -0700 |
---|---|---|
committer | jacobs <none@none> | 2008-06-06 17:25:53 -0700 |
commit | 36615d24946b849e48cedbbafa9adfb4a02b590c (patch) | |
tree | 29c151cfa7f79e50891cb8b14ad08c90a6be09a4 /usr/src | |
parent | 25cfde9ce623f31c57891c6d61fc4d43a7f5d7de (diff) | |
download | illumos-gate-36615d24946b849e48cedbbafa9adfb4a02b590c.tar.gz |
6699255 127127/127128-11 break lp operation if the prinit server and client have different kernel version
6707436 print-service should save/restore /etc/printers.conf configuration
6707986 lpset/ldap/printer-uri/libpapi incompatibilities cause printing problems
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/print/bsd-sysv-commands/common.c | 15 | ||||
-rw-r--r-- | usr/src/cmd/print/bsd-sysv-commands/in.lpd.c | 19 | ||||
-rwxr-xr-x | usr/src/cmd/print/selector/print-service | 11 | ||||
-rw-r--r-- | usr/src/lib/print/libpapi-dynamic/common/nss.c | 11 |
4 files changed, 44 insertions, 12 deletions
diff --git a/usr/src/cmd/print/bsd-sysv-commands/common.c b/usr/src/cmd/print/bsd-sysv-commands/common.c index 73483957ff..fbc68459f8 100644 --- a/usr/src/cmd/print/bsd-sysv-commands/common.c +++ b/usr/src/cmd/print/bsd-sysv-commands/common.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * */ @@ -193,6 +193,8 @@ print_job_line(FILE *fp, int count, papi_job_t job, int fmt, int ac, char *av[]) (void) papiAttributeListGetInteger(list, NULL, "job-id", &id); + (void) papiAttributeListGetInteger(list, NULL, + "job-id-requested", &id); (void) papiAttributeListGetString(list, NULL, "job-originating-user-name", &user); (void) papiAttributeListGetString(list, NULL, @@ -238,16 +240,20 @@ cancel_job(papi_service_t svc, FILE *fp, char *printer, papi_job_t job, papi_status_t status; papi_attribute_t **list = papiJobGetAttributeList(job); int id = 0; + int rid = 0; char *user = ""; char *mesg = gettext("cancelled"); papiAttributeListGetInteger(list, NULL, "job-id", &id); + papiAttributeListGetInteger(list, NULL, + "job-id-requested", &rid); papiAttributeListGetString(list, NULL, "job-originating-user-name", &user); /* if we are looking and it doesn't match, return early */ - if ((ac > 0) && (match_job(id, user, ac, av) < 0)) + if ((ac > 0) && (match_job(id, user, ac, av) < 0) && + (match_job(rid, user, ac, av) < 0)) return; status = papiJobCancel(svc, printer, id); @@ -267,7 +273,7 @@ berkeley_queue_report(papi_service_t svc, FILE *fp, char *dest, int fmt, char *pattrs[] = { "printer-name", "printer-state", "printer-state-reasons", NULL }; char *jattrs[] = { "job-name", "job-octets", "job-k-octets", "job-id", - "job-originating-user-name", + "job-originating-user-name", "job-id-requested", "job-originating-host-name", "number-of-intervening-jobs", NULL }; int num_jobs = 0; @@ -315,7 +321,8 @@ berkeley_cancel_request(papi_service_t svc, FILE *fp, char *dest, { papi_status_t status; papi_job_t *jobs = NULL; - char *jattrs[] = { "job-originating-user-name", "job-id", NULL }; + char *jattrs[] = { "job-originating-user-name", "job-id", + "job-id-requested", NULL }; status = papiPrinterListJobs(svc, dest, jattrs, PAPI_LIST_JOBS_ALL, 0, &jobs); diff --git a/usr/src/cmd/print/bsd-sysv-commands/in.lpd.c b/usr/src/cmd/print/bsd-sysv-commands/in.lpd.c index e10a5b249c..e4bf689d47 100644 --- a/usr/src/cmd/print/bsd-sysv-commands/in.lpd.c +++ b/usr/src/cmd/print/bsd-sysv-commands/in.lpd.c @@ -35,6 +35,7 @@ #include <fcntl.h> #include <stdarg.h> #include <string.h> +#include <ctype.h> #include <errno.h> #include <syslog.h> #include <libintl.h> @@ -381,7 +382,8 @@ parse_cf(papi_service_t svc, char *cf, char **files) } static papi_status_t -submit_job(papi_service_t svc, FILE *ifp, char *printer, char *cf, char **files) +submit_job(papi_service_t svc, FILE *ifp, char *printer, int rid, char *cf, + char **files) { papi_attribute_t **list = NULL; papi_status_t status; @@ -397,6 +399,10 @@ submit_job(papi_service_t svc, FILE *ifp, char *printer, char *cf, char **files) "job-originating-host-name", host); free(host); } + if (rid > 0) { + papiAttributeListAddInteger(&list, PAPI_ATTR_EXCL, + "job-id-requested", rid); + } } status = papiJobSubmit(svc, printer, list, NULL, files, &job); @@ -500,6 +506,7 @@ berkeley_receive_files(papi_service_t svc, FILE *ifp, FILE *ofp, char *printer) papi_status_t status = PAPI_OK; char *file, **files = NULL; /* the job data files */ char *cf = NULL; + int rid = 0; char buf[BUFSIZ]; while (fgets(buf, sizeof (buf), ifp) != NULL) { @@ -515,12 +522,18 @@ berkeley_receive_files(papi_service_t svc, FILE *ifp, FILE *ofp, char *printer) cleanup(&files, &cf); break; case 0x02: { /* Receive control file */ + if (((cf = strchr(buf, ' ')) != NULL) && + (strlen(cf) > 4)) { + while ((*cf != NULL) && (isdigit(*cf) == 0)) + cf++; + rid = atoi(cf); + } cf = receive_control_file(svc, ifp, ofp, atoi(&buf[1])); if (cf == NULL) { cleanup(&files, &cf); return (PAPI_BAD_REQUEST); } else if (files != NULL) { - status = submit_job(svc, ifp, printer, cf, + status = submit_job(svc, ifp, printer, rid, cf, files); cleanup(&files, &cf); } @@ -543,7 +556,7 @@ berkeley_receive_files(papi_service_t svc, FILE *ifp, FILE *ofp, char *printer) } if ((cf != NULL) && (files != NULL)) - status = submit_job(svc, ifp, printer, cf, files); + status = submit_job(svc, ifp, printer, rid, cf, files); cleanup(&files, &cf); diff --git a/usr/src/cmd/print/selector/print-service b/usr/src/cmd/print/selector/print-service index c2857a9a43..f78a4d89dd 100755 --- a/usr/src/cmd/print/selector/print-service +++ b/usr/src/cmd/print/selector/print-service @@ -59,6 +59,7 @@ my $SVCCFG = '/usr/sbin/svccfg'; my $SVC_LP_SCHEDULER = 'print/server'; my $SVC_LP_LPD = 'print/rfc1179'; my $SVC_LP_IPP = 'print/ipp-listener'; +my $SVC_LP_PPD = 'print/ppd-cache-update'; my $SVC_CUPS_SCHEDULER = 'cups/scheduler'; my $SVC_CUPS_LPD = 'cups/in-lpd'; @@ -230,8 +231,11 @@ sub select_service { # enable/disable the services if ($service eq 'cups') { + (-f '/etc/printers.conf') && (! -f '/etc/lp/printers.conf') && + rename('/etc/printers.conf', '/etc/lp/printers.conf'); print("disabling LP services...\n"); - svcadm("disable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD); + svcadm("disable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD, + $SVC_LP_PPD); print("enabling CUPS services...\n"); svcadm("enable", $SVC_CUPS_SCHEDULER, $SVC_CUPS_LPD); svccfg("cups/scheduler:default", @@ -240,7 +244,10 @@ sub select_service { print("disabling CUPS services...\n"); svcadm("disable", $SVC_CUPS_SCHEDULER, $SVC_CUPS_LPD); print("enabling LP services...\n"); - svcadm("enable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD); + svcadm("enable", $SVC_LP_SCHEDULER, $SVC_LP_IPP, $SVC_LP_LPD, + $SVC_LP_PPD); + (-f '/etc/lp/printers.conf') && + rename('/etc/lp/printers.conf', '/etc/printers.conf'); svccfg("cups/scheduler:default", "delprop general/active"); } diff --git a/usr/src/lib/print/libpapi-dynamic/common/nss.c b/usr/src/lib/print/libpapi-dynamic/common/nss.c index fa1305c377..22cb2992d5 100644 --- a/usr/src/lib/print/libpapi-dynamic/common/nss.c +++ b/usr/src/lib/print/libpapi-dynamic/common/nss.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * */ @@ -268,9 +268,14 @@ fill_printer_uri_supported(papi_attribute_t ***list) if (attribute != NULL) /* we have what we need, return */ return; - /* do we have a printer-uri to rename */ + /* do we have a printer-uri (in URI form) to rename */ attribute = papiAttributeListFind(*list, "printer-uri"); - if (attribute != NULL) { /* rename it in place and return */ + if ((attribute != NULL) && + (attribute->type == PAPI_STRING) && + (attribute->values != NULL) && + (attribute->values[0]->string != NULL) && + (strstr(attribute->values[0]->string, "://") != NULL)) { + /* rename it in place and return */ free(attribute->name); attribute->name = strdup("printer-uri-supported"); return; |