diff options
| author | jacobs <none@none> | 2006-11-15 19:19:07 -0800 |
|---|---|---|
| committer | jacobs <none@none> | 2006-11-15 19:19:07 -0800 |
| commit | 0a44ef6d9afbfe052a7e975f55ea0d2954b62a82 (patch) | |
| tree | afca18ba6ad0fb467b29e368f05399e53a19ec4a /usr/src/lib/print | |
| parent | 3383b6dda001791704e0e66f7b78dd0dfe74f547 (diff) | |
| download | illumos-gate-0a44ef6d9afbfe052a7e975f55ea0d2954b62a82.tar.gz | |
4634017 Lpadmin's new printer limit needs to be increased.
4941143 lpsched leaks memory in freeprinter()
6480891 lpsched fixes unused files
6486772 in.lpd should use libpapi
6486967 print-svc refers to /usr/sbin/cut
6487898 lpadmin doesn't add remote access
6488443 printmr/lpadmin should prefer IPP support when it's available
6490445 psm-lpd has incorrect mime type in it's translation table
6490453 lpr uses the wrong default mime type
6491971 in.lpd and the ipp listener should detect cycles
6491978 libhttp-core should build when -DDEBUG is specified
6492414 lpstat -o -l should report on requested form when available
--HG--
rename : usr/src/cmd/lp/cmd/adaptor/Makefile => deleted_files/usr/src/cmd/lp/cmd/adaptor/Makefile
rename : usr/src/cmd/lp/cmd/adaptor/cancel_job.c => deleted_files/usr/src/cmd/lp/cmd/adaptor/cancel_job.c
rename : usr/src/cmd/lp/cmd/adaptor/misc.c => deleted_files/usr/src/cmd/lp/cmd/adaptor/misc.c
rename : usr/src/cmd/lp/cmd/adaptor/misc.h => deleted_files/usr/src/cmd/lp/cmd/adaptor/misc.h
rename : usr/src/cmd/lp/cmd/adaptor/show_queue.c => deleted_files/usr/src/cmd/lp/cmd/adaptor/show_queue.c
rename : usr/src/cmd/lp/cmd/adaptor/submit_job.c => deleted_files/usr/src/cmd/lp/cmd/adaptor/submit_job.c
rename : usr/src/cmd/print/gateway/Makefile => deleted_files/usr/src/cmd/print/gateway/Makefile
rename : usr/src/cmd/print/gateway/adaptor.c => deleted_files/usr/src/cmd/print/gateway/adaptor.c
rename : usr/src/cmd/print/gateway/adaptor.h => deleted_files/usr/src/cmd/print/gateway/adaptor.h
rename : usr/src/cmd/print/gateway/cleanup.xml => deleted_files/usr/src/cmd/print/gateway/cleanup.xml
rename : usr/src/cmd/print/gateway/main.c => deleted_files/usr/src/cmd/print/gateway/main.c
rename : usr/src/cmd/print/gateway/print-cleanup => deleted_files/usr/src/cmd/print/gateway/print-cleanup
rename : usr/src/cmd/print/gateway/printd.c => deleted_files/usr/src/cmd/print/gateway/printd.c
rename : usr/src/cmd/print/gateway/translators/Makefile => deleted_files/usr/src/cmd/print/gateway/translators/Makefile
rename : usr/src/cmd/print/gateway/translators/cascade/Makefile => deleted_files/usr/src/cmd/print/gateway/translators/cascade/Makefile
rename : usr/src/cmd/print/gateway/translators/cascade/cascade.c => deleted_files/usr/src/cmd/print/gateway/translators/cascade/cascade.c
rename : usr/src/cmd/print/gateway/translators/test/Makefile => deleted_files/usr/src/cmd/print/gateway/translators/test/Makefile
rename : usr/src/cmd/print/gateway/translators/test/README => deleted_files/usr/src/cmd/print/gateway/translators/test/README
rename : usr/src/cmd/print/gateway/translators/test/test.c => deleted_files/usr/src/cmd/print/gateway/translators/test/test.c
rename : usr/src/cmd/print/gateway/rfc1179.xml => usr/src/cmd/print/bsd-sysv-commands/rfc1179.xml
Diffstat (limited to 'usr/src/lib/print')
| -rw-r--r-- | usr/src/lib/print/libhttp-core/common/http.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libhttp-core/common/http.h | 3 | ||||
| -rw-r--r-- | usr/src/lib/print/libipp-listener/common/ipp-listener.c | 68 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-common/common/attribute.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-common/common/common.c | 3 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-common/common/list.c | 52 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-common/common/mapfile | 4 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-common/common/papi.h | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-dynamic/common/mapfile | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-ipp/common/ipp-support.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-ipp/common/mapfile | 2 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-lpd/common/lpd-job.c | 4 | ||||
| -rw-r--r-- | usr/src/lib/print/libpapi-lpd/common/mapfile | 2 |
13 files changed, 124 insertions, 24 deletions
diff --git a/usr/src/lib/print/libhttp-core/common/http.c b/usr/src/lib/print/libhttp-core/common/http.c index 83a0790022..b32b1eb3bc 100644 --- a/usr/src/lib/print/libhttp-core/common/http.c +++ b/usr/src/lib/print/libhttp-core/common/http.c @@ -191,7 +191,7 @@ static const char * const months[12] = }; void -httpDumpData(FILE *fp, char *tag, char *buffer, int bytes) +httpDumpData(FILE *fp, const char *tag, const char *buffer, int bytes) { int i, j, ch; diff --git a/usr/src/lib/print/libhttp-core/common/http.h b/usr/src/lib/print/libhttp-core/common/http.h index da36b461a3..593b7b68f6 100644 --- a/usr/src/lib/print/libhttp-core/common/http.h +++ b/usr/src/lib/print/libhttp-core/common/http.h @@ -420,6 +420,9 @@ extern char *httpAddrLookup(const http_addr_t *addr, extern char *httpAddrString(const http_addr_t *addr, char *s, int slen); +#include <stdio.h> +extern void httpDumpData(FILE *, const char *, const char *, int); + /* * C++ magic... diff --git a/usr/src/lib/print/libipp-listener/common/ipp-listener.c b/usr/src/lib/print/libipp-listener/common/ipp-listener.c index 9163ddffa3..fc46366ea0 100644 --- a/usr/src/lib/print/libipp-listener/common/ipp-listener.c +++ b/usr/src/lib/print/libipp-listener/common/ipp-listener.c @@ -39,9 +39,12 @@ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> +#include <unistd.h> +#include <sys/systeminfo.h> #include <papi.h> #include <ipp-listener.h> +#include <uri.h> typedef papi_status_t (ipp_handler_t)(papi_service_t svc, papi_attribute_t **request, @@ -360,6 +363,61 @@ ipp_initialize_response(papi_attribute_t **request, return (PAPI_OK); } +/* simplistic check for cyclical service references */ +static int +cyclical_service_check(char *svc_name, int port) +{ + papi_attribute_t **list; + char buf[BUFSIZ]; + uri_t *uri = NULL; + char *s = NULL; + + /* was there a service_uri? */ + if (svc_name == NULL) + return (0); + + if ((list = getprinterbyname(svc_name, NULL)) == NULL) + return (0); /* if it doesnt' resolve, we will fail later */ + + papiAttributeListGetString(list, NULL, "printer-uri-supported", &s); + if ((s == NULL) || (strcasecmp(svc_name, s) != 0)) + return (0); /* they don't match */ + + /* is it in uri form? */ + if (uri_from_string(s, &uri) < 0) + return (0); + + if ((uri == NULL) || (uri->scheme == NULL) || (uri->host == NULL)) { + uri_free(uri); + return (0); + } + + /* is it ipp form */ + if (strcasecmp(uri->scheme, "ipp") != 0) { + uri_free(uri); + return (0); + } + + /* does the host match up */ + sysinfo(SI_HOSTNAME, buf, sizeof (buf)); + if ((strcasecmp(uri->host, "localhost") != 0) && + (strcasecmp(uri->host, buf) != 0)) { + uri_free(uri); + return (0); + } + + /* does the port match our own */ + if (((uri->port == NULL) && (port != 631)) || + ((uri->port != NULL) && (atoi(uri->port) != port))) { + uri_free(uri); + return (0); + } + + uri_free(uri); + + return (1); +} + static papi_status_t print_service_connect(papi_service_t *svc, papi_attribute_t **request, papi_attribute_t ***response) @@ -369,6 +427,7 @@ print_service_connect(papi_service_t *svc, papi_attribute_t **request, char *printer_uri = NULL; char *svc_name = NULL; char *user = NULL; + int port = 631; /* Get the operational attributes group from the request */ (void) papiAttributeListGetCollection(request, NULL, @@ -384,6 +443,15 @@ print_service_connect(papi_service_t *svc, papi_attribute_t **request, "default-service", &svc_name); get_printer_id(operational, &svc_name, NULL); + /* get the port that we are listening on */ + (void) papiAttributeListGetInteger(request, NULL, "uri-port", &port); + + if (cyclical_service_check(svc_name, port) != 0) { + status = PAPI_NOT_POSSIBLE; + ipp_set_status(response, status, "printer-uri is cyclical"); + return (status); + } + status = papiServiceCreate(svc, svc_name, user, NULL, NULL, PAPI_ENCRYPT_NEVER, NULL); if (status != PAPI_OK) { diff --git a/usr/src/lib/print/libpapi-common/common/attribute.c b/usr/src/lib/print/libpapi-common/common/attribute.c index 2b2e035cfe..4fd9f01a19 100644 --- a/usr/src/lib/print/libpapi-common/common/attribute.c +++ b/usr/src/lib/print/libpapi-common/common/attribute.c @@ -387,7 +387,7 @@ papiAttributeListDelete(papi_attribute_t ***list, char *name) if ((attribute = papiAttributeListFind(*list, name)) == NULL) return (PAPI_NOT_FOUND); - list_remove(*list, attribute); + list_remove(list, attribute); papiAttributeFree(attribute); return (PAPI_OK); diff --git a/usr/src/lib/print/libpapi-common/common/common.c b/usr/src/lib/print/libpapi-common/common/common.c index 318b1d2c83..c14515417b 100644 --- a/usr/src/lib/print/libpapi-common/common/common.c +++ b/usr/src/lib/print/libpapi-common/common/common.c @@ -130,3 +130,6 @@ papiJobGetId(papi_job_t job) #pragma weak papiJobGetJobTicket = _unsupported_null_return #pragma weak papiJobFree = _unsupported_no_return #pragma weak papiJobListFree = _unsupported_no_return + +/* private functions */ +#pragma weak getprinterbyname = _unsupported_null_return diff --git a/usr/src/lib/print/libpapi-common/common/list.c b/usr/src/lib/print/libpapi-common/common/list.c index 9ed0d2ded2..ddd29a76df 100644 --- a/usr/src/lib/print/libpapi-common/common/list.c +++ b/usr/src/lib/print/libpapi-common/common/list.c @@ -60,6 +60,8 @@ list_append(void ***list, void *item) __list_increment; new_list = (void **)calloc(new_size, sizeof (void *)); + if (new_list == NULL) + return (-1); for (count = 0; (*list)[count] != NULL; count++) new_list[count] = (*list)[count]; @@ -136,26 +138,36 @@ list_locate(void **list, int (*compare)(void *, void *), void *element) } void -list_remove(void **list, void *item) +list_remove(void ***list, void *item) { - int i, last; - - if ((list == NULL) || (*list == NULL) || (item == NULL)) - return; - - for (last = 0; list[last] != NULL; last++) - ; - --last; - - /* - * This doesn't preserve order, and doesn't shrink the allocation if we - * go below % __list_increment == 0. <shrug> - */ - for (i = 0; list[i] != NULL; i++) { - if (list[i] == item) { - list[i] = list[last]; - list[last] = NULL; - break; - } + int i, count; + void **tmp = NULL; + + if ((list == NULL) || (*list == NULL) || (item == NULL)) + return; + + for (count = 0; (*list)[count] != NULL; count++) + ; + + if (count > 0) { + int new_size = (((count + 1) / __list_increment) + 1) * + __list_increment; + + if ((tmp = (void **)calloc(new_size, sizeof (void *))) != NULL) + tmp = *list; + + /* copy up to item */ + for (i = 0; (((*list)[i] != NULL) && ((*list)[i] != item)); i++) + tmp[i] = (*list)[i]; + /* copy after item */ + if ((*list)[i] == item) + for (++i; ((*list)[i] != NULL); i++) + tmp[i-1] = (*list)[i]; + } + + /* replace the list */ + if (tmp != *list) { + free(*list); + *list = tmp; } } diff --git a/usr/src/lib/print/libpapi-common/common/mapfile b/usr/src/lib/print/libpapi-common/common/mapfile index a187eb4da8..729e6f3abb 100644 --- a/usr/src/lib/print/libpapi-common/common/mapfile +++ b/usr/src/lib/print/libpapi-common/common/mapfile @@ -134,11 +134,15 @@ SUNWprivate_1.0 { # Misc. semi-private supporting calls uri_from_string; uri_to_string; uri_free; + # list list_remove; list_append; list_concatenate; + # NS + getprinterbyname; + # extra Attribute Calls copy_attributes; split_and_copy_attributes; diff --git a/usr/src/lib/print/libpapi-common/common/papi.h b/usr/src/lib/print/libpapi-common/common/papi.h index 7c1d891eb2..b84e7904ac 100644 --- a/usr/src/lib/print/libpapi-common/common/papi.h +++ b/usr/src/lib/print/libpapi-common/common/papi.h @@ -441,6 +441,8 @@ extern void split_and_copy_attributes(char **list, papi_attribute_t ***in, papi_attribute_t ***out); +extern papi_attribute_t **getprinterbyname(char *name, char *ns); + #ifdef __cplusplus } #endif diff --git a/usr/src/lib/print/libpapi-dynamic/common/mapfile b/usr/src/lib/print/libpapi-dynamic/common/mapfile index 2cd1ca7fe4..41734836cb 100644 --- a/usr/src/lib/print/libpapi-dynamic/common/mapfile +++ b/usr/src/lib/print/libpapi-dynamic/common/mapfile @@ -139,6 +139,8 @@ SUNWprivate_1.0 { list_remove = FUNCTION FILTER libpapi-common.so ; list_append = FUNCTION FILTER libpapi-common.so ; list_concatenate = FUNCTION FILTER libpapi-common.so ; + # NS + getprinterbyname ; # extra Attribute Calls copy_attributes = FUNCTION FILTER libpapi-common.so ; diff --git a/usr/src/lib/print/libpapi-ipp/common/ipp-support.c b/usr/src/lib/print/libpapi-ipp/common/ipp-support.c index f0f6ced38d..9e648de23c 100644 --- a/usr/src/lib/print/libpapi-ipp/common/ipp-support.c +++ b/usr/src/lib/print/libpapi-ipp/common/ipp-support.c @@ -40,6 +40,8 @@ #include <config-site.h> +#include <ipp.h> + papi_status_t http_to_papi_status(http_status_t status) { diff --git a/usr/src/lib/print/libpapi-ipp/common/mapfile b/usr/src/lib/print/libpapi-ipp/common/mapfile index ca9a53f0a4..918398aa74 100644 --- a/usr/src/lib/print/libpapi-ipp/common/mapfile +++ b/usr/src/lib/print/libpapi-ipp/common/mapfile @@ -139,6 +139,8 @@ SUNWprivate_1.0 { list_remove = FUNCTION FILTER libpapi-common.so ; list_append = FUNCTION FILTER libpapi-common.so ; list_concatenate = FUNCTION FILTER libpapi-common.so ; + # NS + getprinterbyname = FUNCTION FILTER libpapi-common.so ; # extra Attribute Calls copy_attributes = FUNCTION FILTER libpapi-common.so ; diff --git a/usr/src/lib/print/libpapi-lpd/common/lpd-job.c b/usr/src/lib/print/libpapi-lpd/common/lpd-job.c index 3d36fef99d..6d9976825f 100644 --- a/usr/src/lib/print/libpapi-lpd/common/lpd-job.c +++ b/usr/src/lib/print/libpapi-lpd/common/lpd-job.c @@ -49,7 +49,7 @@ static char mime_type_to_rfc1179_type(char *mime) { static struct { char *mime; char rfc; } cvt[] = { - { "plain/text", 'f' }, + { "text/plain", 'f' }, { "application/octet-stream", 'l' }, { "application/postscript", 'f' }, /* rfc incorrectly has 'o' */ { "application/x-pr", 'p' }, @@ -422,7 +422,7 @@ papi_status_t lpd_job_add_files(service_t *svc, papi_attribute_t **attributes, char **files, char **metadata, papi_attribute_t ***used) { - char *format = "plain/text"; + char *format = "text/plain"; char rfc_fmt = 'l'; int copies = 1; char host[BUFSIZ]; diff --git a/usr/src/lib/print/libpapi-lpd/common/mapfile b/usr/src/lib/print/libpapi-lpd/common/mapfile index d21b349ff7..257a97becf 100644 --- a/usr/src/lib/print/libpapi-lpd/common/mapfile +++ b/usr/src/lib/print/libpapi-lpd/common/mapfile @@ -139,6 +139,8 @@ SUNWprivate_1.0 { list_remove = FUNCTION FILTER libpapi-common.so ; list_append = FUNCTION FILTER libpapi-common.so ; list_concatenate = FUNCTION FILTER libpapi-common.so ; + # NS + getprinterbyname = FUNCTION FILTER libpapi-common.so ; # extra Attribute Calls copy_attributes = FUNCTION FILTER libpapi-common.so ; |
