Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet 5b5a12ad96 Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.4.3@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
278 arquivos alterados com 12283 adições e 1341 exclusões
+102 -1
Ver Arquivo
@@ -1,6 +1,107 @@
CHANGES.txt - 2009-09-11
CHANGES.txt - 2010-03-30
------------------------
CHANGES IN CUPS V1.4.3
- SECURITY: The scheduler could try responding on a closed client
connection, leading to a crash (STR #3200)
- SECURITY: The lppasswd program allowed the localization files to be
overridden when running in setuid mode (STR #3482)
- Localization updates (STR #3352, STR #3409, STR #3422, STR #3452,
STR #3473, STR #3502)
- Documentation updates (STR #3451, STR #3504)
- The IPP backend now sets the printer-state-message to "Ready to
print." at the end of a successful job (STR #3460)
- The PPD compiler did not correctly add the manufacturer to the output
filename when using the "-m" option (STR #3469)
- The IPP backend did not handle authentication properly for the Get-
Printer-Attributes operation (STR 3458)
- Getting SNMP values larger than 127 bytes did not work.
- IPP conformance: Get-Jobs has a default value for requested-attributes
(STR #3383)
- cupsPrintFiles() did not report all errors (STR #3449)
- cupsAddDest() could read freed memory (STR #3448)
- The DBUS notifier did not build (STR #3447)
- The scheduler would crash when an active printer was deleted.
- The snmp backend did not work with some printers (STR #3413)
- The web interface did not show the conflicting values when setting
options (STR #3440)
- Setting options in the web interface did not always work (STR #3439)
- The scheduler did not use the Get-Job-Attributes policy for a printer
(STR #3431)
- The scheduler added two job-name attributes to each job object
(STR #3428)
- CSS files would not print (STR #3442)
- The scheduler did not clean out completed jobs when PreserveJobHistory
was turned off (STR #3425)
- The web interface did not show completed jobs for a printer
(STR #3436)
- Authenticated printing did not always work when printing directly to
a remote server (STR #3435)
- The USB backend did not work on Solaris (STR #3423)
- cupstestppd didn't catch problems with JobPatchFile definitions
(STR #3421)
- The socket backend could crash if a SNMP string had a negative length.
- Fixed some termination issues with the USB backend on Mac OS X.
- The side-channel APIs did not handle interrupts properly.
- The network backends incorrectly cleared the media-empty-warning
state.
- The web interface did not allow users to successfully add serial
printers (STR #3391)
- cupsTempFd() did not work in some situations (STR #3382)
- Some C API headers were missing C++ wrapper logic.
- The PPD compiler did not localize single-language PPD options properly
(STR #3386)
- Modifying a printer from the web interface sometimes caused the wrong
driver to be selected (STR #3418)
- The scheduler did not handle out-of-memory conditions properly when
loading a job (STR #3407)
- When adding printers from the web interface, the dynamic updates of
the device list made it hard to pick a device (STR #3406)
- Fixed a typo in the web interface admin page template (STR 3403)
- The web interface did not preserve the "printer is shared" state when
modifying a printer (STR #3390)
- The PPD compiler incorrectly inserted translations of empty strings
(STR #3411)
- The scheduler did not reset the SIGPIPE handler of child processes
(STR #3399)
- cupsGetNamedDest() incorrectly returned the default printer if the
named printer did not exist (STR #3397)
- Fixed a GNU TLS error handling bug (STR #3381)
CHANGES IN CUPS V1.4.2
- SECURITY: The CUPS web interface was vulnerable to several XSS and
HTTP header/body attacks via attribute injection (STR #3367,
STR #3401)
- Fixed localization errors (STR #3359, STR #3372, STR #3380, STR #3387)
- The documentation for classes.conf and printers.conf did not provide
the correct instructions for manual changes (STR #3351)
- The scheduler did not always rebuild printer cache files when the
driver was changed (STR #3356)
- The documentation makefile failed to install localizations when using
newer versions of Bash (STR #3360)
- The configure script did not use the --with-xinetd value for the
default LPD configuration path (STR #3347)
- The configure script incorrectly required glib for DBUS support
(STR #3346)
- The cupstestppd program incorrectly reported filters with bad
permisssions as missing (STR #3363)
- The cups.desktop file used the wrong locale names (STR #3358)
- cupsSideChannelRead() did not return an error for short reads.
- The installed PAM configuration file did not use the correct options
with the pam_unix2 module (STR #3313)
- The scheduler did not preserve default options that contained special
characters (STR #3340)
- The scheduler did not remove old pre-filters when updating a printer
driver (STR #3342)
- The HP/GL-2 filter did not check for early end-of-file (STR #3319)
- The USB backend did not compile on some platforms (STR #3332)
- cupsSideChannelSNMPWalk() could go into an infinite loop with broken
SNMP implementations.
CHANGES IN CUPS V1.4.1
- Documention fixes (STR #3296)
+2 -2
Ver Arquivo
@@ -1,4 +1,4 @@
CREDITS.txt - 2009-07-07
CREDITS.txt - 2010-03-13
------------------------
Few projects are completed by one person, and CUPS is no exception. We'd
@@ -40,7 +40,7 @@ like to thank the following individuals for their contributions:
Opher Shachar - Hebrew localization.
Stuart Stevens - HP JetDirect IPP information.
Andrea Suatoni - IRIX desktop integration and testing.
Teppo Turlianen - Finnish localization.
Teppo Turliainen - Finnish localization.
Tim Waugh - Lots of patches, testing, and Linux
integration.
Yugami - LDAP browsing support.
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
INSTALL - CUPS v1.4.0 - 2009-06-26
INSTALL - CUPS v1.4.3 - 2009-12-15
----------------------------------
This file describes how to compile and install CUPS from source code. For more
+6 -4
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Top-level Makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 2007-2009 by Apple Inc.
# Copyright 2007-2010 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -139,13 +139,15 @@ depend:
#
# Run the clang.llvm.org static code analysis tool on the C sources.
# (at least checker-231 is required for scan-build to work this way)
#
.PHONY: clang
.PHONY: clang clang-changes
clang:
$(RM) -r clang
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) \
CC=ccc-analyzer CXX=ccc-analyzer clean all
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all
clang-changes:
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
#
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
README - CUPS v1.4.0 - 2009-06-26
README - CUPS v1.4.3 - 2009-12-15
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt"
+22 -1
Ver Arquivo
@@ -34,6 +34,26 @@
# include <cups/string.h>
# include <signal.h>
# ifdef __linux
# include <sys/ioctl.h>
# include <linux/lp.h>
# define IOCNR_GET_DEVICE_ID 1
# define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
# include <linux/parport.h>
# include <linux/ppdev.h>
# include <unistd.h>
# include <fcntl.h>
# endif /* __linux */
# ifdef __sun
# ifdef __sparc
# include <sys/ecppio.h>
# else
# include <sys/ioccom.h>
# include <sys/ecppsys.h>
# endif /* __sparc */
# endif /* __sun */
/*
* C++ magic...
@@ -280,7 +300,8 @@ extern int backendNetworkSideCB(int print_fd, int device_fd,
int snmp_fd, http_addr_t *addr,
int use_bc);
extern ssize_t backendRunLoop(int print_fd, int device_fd, int snmp_fd,
http_addr_t *addr, int use_bc,
http_addr_t *addr, int use_bc,
int update_state,
int (*side_cb)(int print_fd,
int device_fd,
int snmp_fd,
+1 -21
Ver Arquivo
@@ -3,7 +3,7 @@
*
* IEEE-1284 support functions for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -27,26 +27,6 @@
#include "backend-private.h"
#ifdef __linux
# include <sys/ioctl.h>
# include <linux/lp.h>
# define IOCNR_GET_DEVICE_ID 1
# define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
# include <linux/parport.h>
# include <linux/ppdev.h>
# include <unistd.h>
# include <fcntl.h>
#endif /* __linux */
#ifdef __sun
# ifdef __sparc
# include <sys/ecppio.h>
# else
# include <sys/ioccom.h>
# include <sys/ecppsys.h>
# endif /* __sparc */
#endif /* __sun */
/*
* 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and
+19 -4
Ver Arquivo
@@ -3,7 +3,7 @@
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -434,7 +434,7 @@ main(int argc, /* I - Number of command-line args */
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
tbytes = backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0,
tbytes = backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0,
backendNetworkSideCB);
if (snmp_fd >= 0)
@@ -738,6 +738,15 @@ main(int argc, /* I - Number of command-line args */
return (CUPS_BACKEND_STOP);
}
else if (ipp_status == IPP_NOT_AUTHORIZED || ipp_status == IPP_FORBIDDEN)
{
if (!strncmp(httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE),
"Negotiate", 9))
auth_info_required = "negotiate";
fprintf(stderr, "ATTR: auth-info-required=%s\n", auth_info_required);
return (CUPS_BACKEND_AUTH_REQUIRED);
}
else
{
_cupsLangPrintf(stderr,
@@ -1353,7 +1362,10 @@ main(int argc, /* I - Number of command-line args */
else if (ipp_status > IPP_OK_CONFLICT)
return (CUPS_BACKEND_FAILED);
else
{
_cupsLangPuts(stderr, _("INFO: Ready to print.\n"));
return (CUPS_BACKEND_OK);
}
}
@@ -1831,8 +1843,11 @@ run_pictwps_filter(char **argv, /* I - Command-line arguments */
* Change to an unpriviledged user...
*/
setgid(fileinfo.st_gid);
setuid(fileinfo.st_uid);
if (setgid(fileinfo.st_gid))
return (errno);
if (setuid(fileinfo.st_uid))
return (errno);
}
execlp("pictwpstops", printer, argv[1], argv[2], argv[3], argv[4], argv[5],
+2 -2
Ver Arquivo
@@ -447,7 +447,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
_cupsLangPuts(stderr, _("INFO: Copying print data...\n"));
backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, backendNetworkSideCB);
backendRunLoop(-1, fd, snmp_fd, &(addrlist->addr), 0, 0,
backendNetworkSideCB);
if (snmp_fd >= 0)
_cupsSNMPClose(snmp_fd);
@@ -797,7 +798,6 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
error = errno;
close(fd);
fd = -1;
if (addr->next)
continue;
+6 -2
Ver Arquivo
@@ -170,9 +170,13 @@ backendNetworkSideCB(
case CUPS_ASN1_BIT_STRING :
case CUPS_ASN1_OCTET_STRING :
i = (int)(sizeof(data) - (dataptr - data));
if (packet.object_value.string.num_bytes < i)
if (packet.object_value.string.num_bytes < 0)
i = 0;
else if (packet.object_value.string.num_bytes <
(sizeof(data) - (dataptr - data)))
i = packet.object_value.string.num_bytes;
else
i = (int)(sizeof(data) - (dataptr - data));
memcpy(dataptr, packet.object_value.string.bytes, i);
+1 -1
Ver Arquivo
@@ -284,7 +284,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
lseek(print_fd, 0, SEEK_SET);
}
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, side_cb);
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb);
if (print_fd != 0 && tbytes >= 0)
_cupsLangPrintf(stderr,
+6 -5
Ver Arquivo
@@ -147,6 +147,7 @@ backendRunLoop(
int snmp_fd, /* I - SNMP socket or -1 if none */
http_addr_t *addr, /* I - Address of device */
int use_bc, /* I - Use back-channel? */
int update_state, /* I - Update printer-state-reasons? */
int (*side_cb)(int, int, int, http_addr_t *, int))
/* I - Side-channel callback */
{
@@ -245,7 +246,7 @@ backendRunLoop(
* Pause printing to clear any pending errors...
*/
if (errno == ENXIO && offline != 1)
if (errno == ENXIO && offline != 1 && update_state)
{
fputs("STATE: +offline-report\n", stderr);
_cupsLangPuts(stderr, _("INFO: Printer is currently offline.\n"));
@@ -351,7 +352,7 @@ backendRunLoop(
if (errno == ENOSPC)
{
if (paperout != 1)
if (paperout != 1 && update_state)
{
fputs("STATE: +media-empty-warning\n", stderr);
_cupsLangPuts(stderr, _("ERROR: Out of paper!\n"));
@@ -360,7 +361,7 @@ backendRunLoop(
}
else if (errno == ENXIO)
{
if (offline != 1)
if (offline != 1 && update_state)
{
fputs("STATE: +offline-report\n", stderr);
_cupsLangPuts(stderr, _("INFO: Printer is currently off-line.\n"));
@@ -376,13 +377,13 @@ backendRunLoop(
}
else
{
if (paperout)
if (paperout && update_state)
{
fputs("STATE: -media-empty-warning\n", stderr);
paperout = 0;
}
if (offline)
if (offline && update_state)
{
fputs("STATE: -offline-report\n", stderr);
_cupsLangPuts(stderr, _("INFO: Printer is now online.\n"));
+2
Ver Arquivo
@@ -232,6 +232,8 @@ backendSNMPSupplies(
if (packet.object_value.string.num_bytes == 2)
new_state = (packet.object_value.string.bytes[0] << 8) |
packet.object_value.string.bytes[1];
else if (packet.object_value.string.num_bytes == 1)
new_state = (packet.object_value.string.bytes[0] << 8);
else
new_state = 0;
+5 -3
Ver Arquivo
@@ -999,7 +999,7 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
DEVICE_PRODUCT, LexmarkProductOID2);
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_URI, LexmarkDeviceIdOID);
DEVICE_ID, LexmarkDeviceIdOID);
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_PRODUCT, XeroxProductOID);
@@ -1054,7 +1054,9 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
break;
case DEVICE_ID :
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING)
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING &&
(!device->id ||
strlen(device->id) < packet.object_value.string.num_bytes))
{
/*
* Update an existing cache entry...
@@ -1107,7 +1109,7 @@ read_snmp_response(int fd) /* I - SNMP socket file descriptor */
case DEVICE_URI :
if (device && packet.object_type == CUPS_ASN1_OCTET_STRING &&
!device->uri)
!device->uri && packet.object_value.string.num_bytes > 0)
{
/*
* Update an existing cache entry...
+1 -1
Ver Arquivo
@@ -393,7 +393,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
lseek(print_fd, 0, SEEK_SET);
}
tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addr->addr), 1,
tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addr->addr), 1, 0,
backendNetworkSideCB);
if (print_fd != 0 && tbytes >= 0)
+48 -43
Ver Arquivo
@@ -292,9 +292,8 @@ static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
#if defined(__i386__) || defined(__x86_64__)
static pid_t child_pid; /* Child PID */
static void run_legacy_backend(int argc, char *argv[], int fd); /* Starts child backend process running as a ppc executable */
#endif /* __i386__ || __x86_64__ */
static int job_canceled = 0; /* Was the job canceled? */
static void sigterm_handler(int sig); /* SIGTERM handler */
#endif /* __i386__ || __x86_64__ */
#ifdef PARSE_PS_ERRORS
static const char *next_line (const char *buffer);
@@ -374,12 +373,12 @@ print_device(const char *uri, /* I - Device URI */
if (!g.make || !g.model)
{
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
if (!g.make)
fputs("DEBUG: USB make string is NULL!\n", stderr);
fputs("DEBUG: USB make string is NULL\n", stderr);
if (!g.model)
fputs("DEBUG: USB model string is NULL!\n", stderr);
fputs("DEBUG: USB model string is NULL\n", stderr);
return (CUPS_BACKEND_STOP);
}
@@ -432,7 +431,7 @@ print_device(const char *uri, /* I - Device URI */
strlcpy(print_buffer, "USB class driver", sizeof(print_buffer));
fputs("STATE: +apple-missing-usbclassdriver-error\n", stderr);
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
fprintf(stderr, "DEBUG: Could not load %s\n", print_buffer);
if (driverBundlePath)
@@ -461,9 +460,9 @@ print_device(const char *uri, /* I - Device URI */
fputs("STATE: -connecting-to-device\n", stderr);
/*
* Now that we are "connected" to the port, catch SIGTERM so that we
* Now that we are "connected" to the port, ignore SIGTERM so that we
* can finish out any page data the driver sends (e.g. to eject the
* current page... Only catch SIGTERM if we are printing data from
* current page... Only ignore SIGTERM if we are printing data from
* stdin (otherwise you can't cancel raw jobs...)
*/
@@ -475,7 +474,7 @@ print_device(const char *uri, /* I - Device URI */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
action.sa_handler = sigterm_handler;
action.sa_handler = SIG_IGN;
sigaction(SIGTERM, &action, NULL);
}
@@ -497,8 +496,9 @@ print_device(const char *uri, /* I - Device URI */
if (pthread_create(&sidechannel_thread_id, NULL, sidechannel_thread, NULL))
{
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
fputs("DEBUG: Couldn't create side-channel thread!\n", stderr);
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
fputs("DEBUG: Couldn't create side-channel thread\n", stderr);
registry_close();
return (CUPS_BACKEND_STOP);
}
}
@@ -515,8 +515,9 @@ print_device(const char *uri, /* I - Device URI */
if (pthread_create(&read_thread_id, NULL, read_thread, NULL))
{
_cupsLangPuts(stderr, _("ERROR: Fatal USB error!\n"));
fputs("DEBUG: Couldn't create read thread!\n", stderr);
_cupsLangPuts(stderr, _("ERROR: Fatal USB error\n"));
fputs("DEBUG: Couldn't create read thread\n", stderr);
registry_close();
return (CUPS_BACKEND_STOP);
}
@@ -594,14 +595,16 @@ print_device(const char *uri, /* I - Device URI */
if (errno == EINTR && total_bytes == 0)
{
fputs("DEBUG: Received an interrupt before any bytes were "
"written, aborting!\n", stderr);
"written, aborting\n", stderr);
registry_close();
return (CUPS_BACKEND_OK);
}
else if (errno != EAGAIN && errno != EINTR)
{
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
_cupsLangPuts(stderr, _("ERROR: Unable to read print data\n"));
perror("DEBUG: select");
return (CUPS_BACKEND_FAILED);
registry_close();
return (CUPS_BACKEND_FAILED);
}
}
@@ -641,8 +644,9 @@ print_device(const char *uri, /* I - Device URI */
if (errno != EAGAIN && errno != EINTR)
{
_cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
_cupsLangPuts(stderr, _("ERROR: Unable to read print data\n"));
perror("DEBUG: read");
registry_close();
return (CUPS_BACKEND_FAILED);
}
@@ -675,7 +679,7 @@ print_device(const char *uri, /* I - Device URI */
if (iostatus == kIOUSBTransactionTimeout)
{
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
fputs("DEBUG: Got USB transaction timeout during write\n", stderr);
iostatus = 0;
}
@@ -685,7 +689,7 @@ print_device(const char *uri, /* I - Device URI */
else if (iostatus == kIOUSBPipeStalled)
{
fputs("DEBUG: Got USB pipe stalled during write!\n", stderr);
fputs("DEBUG: Got USB pipe stalled during write\n", stderr);
bytes = g.print_bytes;
iostatus = (*g.classdriver)->WritePipe(g.classdriver, (UInt8*)print_ptr, &bytes, 0);
@@ -698,7 +702,7 @@ print_device(const char *uri, /* I - Device URI */
else if (iostatus == kIOReturnAborted)
{
fputs("DEBUG: Got return aborted during write!\n", stderr);
fputs("DEBUG: Got USB return aborted during write\n", stderr);
IOReturn err = (*g.classdriver)->Abort(g.classdriver);
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n", err);
@@ -717,7 +721,7 @@ print_device(const char *uri, /* I - Device URI */
* Write error - bail if we don't see an error we can retry...
*/
_cupsLangPuts(stderr, _("ERROR: Unable to send print data!\n"));
_cupsLangPuts(stderr, _("ERROR: Unable to send print data\n"));
fprintf(stderr, "DEBUG: USB class driver WritePipe returned %x\n",
iostatus);
@@ -725,7 +729,7 @@ print_device(const char *uri, /* I - Device URI */
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n",
err);
status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
status = CUPS_BACKEND_FAILED;
break;
}
else if (bytes > 0)
@@ -898,11 +902,11 @@ static void *read_thread(void *reference)
#endif
}
else if (readstatus == kIOUSBTransactionTimeout)
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
fputs("DEBUG: Got USB transaction timeout during read\n", stderr);
else if (readstatus == kIOUSBPipeStalled)
fputs("DEBUG: Got USB pipe stalled during read!\n", stderr);
fputs("DEBUG: Got USB pipe stalled during read\n", stderr);
else if (readstatus == kIOReturnAborted)
fputs("DEBUG: Got return aborted during read!\n", stderr);
fputs("DEBUG: Got USB return aborted during read\n", stderr);
/*
* Make sure this loop executes no more than once every 250 miliseconds...
@@ -944,7 +948,12 @@ sidechannel_thread(void *reference)
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
continue;
{
if (status == CUPS_SC_STATUS_TIMEOUT)
continue;
else
break;
}
switch (command)
{
@@ -1902,6 +1911,7 @@ static void run_legacy_backend(int argc,
* Setup a SIGTERM handler then block it before forking...
*/
int err; /* posix_spawn result */
struct sigaction action; /* POSIX signal action */
sigset_t newmask, /* New signal mask */
oldmask; /* Old signal mask */
@@ -1950,7 +1960,7 @@ static void run_legacy_backend(int argc,
# else
perror("DEBUG: Unable to set binary preference to ppc");
# endif /* __x86_64__ */
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver!\n"));
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver\n"));
exit(CUPS_BACKEND_STOP);
}
}
@@ -1968,11 +1978,12 @@ static void run_legacy_backend(int argc,
my_argv[i] = NULL;
if (posix_spawn(&child_pid, usbpath, NULL, &attrs, my_argv, environ))
if ((err = posix_spawn(&child_pid, usbpath, NULL, &attrs, my_argv,
environ)) != 0)
{
fprintf(stderr, "DEBUG: Unable to exec %s: %s\n", usbpath,
strerror(errno));
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver!\n"));
strerror(err));
_cupsLangPrintf(stderr, _("Unable to use legacy USB class driver\n"));
exit(CUPS_BACKEND_STOP);
}
@@ -1998,14 +2009,14 @@ static void run_legacy_backend(int argc,
if (WIFSIGNALED(childstatus))
{
exitstatus = CUPS_BACKEND_STOP;
fprintf(stderr, "DEBUG: usb(legacy) backend %d crashed on signal %d!\n",
fprintf(stderr, "DEBUG: usb(legacy) backend %d crashed on signal %d\n",
child_pid, WTERMSIG(childstatus));
}
else
{
if ((exitstatus = WEXITSTATUS(childstatus)) != 0)
fprintf(stderr,
"DEBUG: usb(legacy) backend %d stopped with status %d!\n",
"DEBUG: usb(legacy) backend %d stopped with status %d\n",
child_pid, exitstatus);
else
fprintf(stderr, "DEBUG: usb(legacy) backend %d exited with no errors\n",
@@ -2020,8 +2031,6 @@ static void run_legacy_backend(int argc,
exit(exitstatus);
}
#endif /* __i386__ || __x86_64__ */
/*
* 'sigterm_handler()' - SIGTERM handler.
@@ -2030,7 +2039,8 @@ static void run_legacy_backend(int argc,
static void
sigterm_handler(int sig) /* I - Signal */
{
#if defined(__i386__) || defined(__x86_64__)
/* If we started a child process pass the signal on to it...
*/
if (child_pid)
{
/*
@@ -2048,19 +2058,14 @@ sigterm_handler(int sig) /* I - Signal */
exit(0);
else
{
fprintf(stderr, "DEBUG: Child crashed on signal %d!\n", status);
fprintf(stderr, "DEBUG: Child crashed on signal %d\n", status);
exit(CUPS_BACKEND_STOP);
}
}
#endif /* __i386__ || __x86_64__ */
/*
* Otherwise just flag that the job has been canceled...
*/
job_canceled = 1;
}
#endif /* __i386__ || __x86_64__ */
#ifdef PARSE_PS_ERRORS
/*
+4 -4
Ver Arquivo
@@ -5,7 +5,7 @@
*
* This file is included from "usb.c" when compiled on UNIX/Linux.
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -187,10 +187,10 @@ print_device(const char *uri, /* I - Device URI */
* select() or poll(), so we can't support the sidechannel either...
*/
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, NULL);
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, NULL);
#else
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, side_cb);
tbytes = backendRunLoop(print_fd, device_fd, -1, NULL, use_bc, 1, side_cb);
#endif /* __sun */
if (print_fd != 0 && tbytes >= 0)
@@ -560,7 +560,7 @@ open_device(const char *uri, /* I - Device URI */
* 'side_cb()' - Handle side-channel requests...
*/
static void
static int /* O - 0 on success, -1 on error */
side_cb(int print_fd, /* I - Print file */
int device_fd, /* I - Device file */
int snmp_fd, /* I - SNMP socket (unused) */
+17 -1
Ver Arquivo
@@ -340,7 +340,18 @@ show_jobs(const char *command, /* I - Command name */
char resource[1024]; /* Resource string */
char rankstr[255]; /* Rank string */
char namestr[1024]; /* Job name string */
static const char *ranks[10] = /* Ranking strings */
static const char * const jobattrs[] =/* Job attributes we want to see */
{
"copies",
"job-id",
"job-k-octets",
"job-name",
"job-originating-user-name",
"job-printer-uri",
"job-priority",
"job-state"
};
static const char * const ranks[10] = /* Ranking strings */
{
"th",
"st",
@@ -368,6 +379,7 @@ show_jobs(const char *command, /* I - Command name */
* attributes-charset
* attributes-natural-language
* job-uri or printer-uri
* requested-attributes
*/
request = ippNewRequest(id ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS);
@@ -397,6 +409,10 @@ show_jobs(const char *command, /* I - Command name */
ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1);
}
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes",
(int)(sizeof(jobattrs) / sizeof(jobattrs[0])), NULL, jobattrs);
/*
* Do the request and get back a response...
*/
+144 -57
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Administration CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -52,8 +52,7 @@
* Local globals...
*/
static int current_device; /* Current device for add/modify */
static time_t last_device_time; /* Last update time for device list */
static int current_device = 0; /* Current device shown */
/*
@@ -122,6 +121,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "admin");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we have form data...
@@ -191,7 +191,7 @@ main(int argc, /* I - Number of command-line arguments */
}
else if (op && !strcmp(op, "redirect"))
{
const char *url; /* Redirection URL... */
const char *url; /* Redirection URL... */
char prefix[1024]; /* URL prefix */
@@ -205,7 +205,50 @@ main(int argc, /* I - Number of command-line arguments */
fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix);
if ((url = cgiGetVariable("URL")) != NULL)
printf("Location: %s%s\n\n", prefix, url);
{
char encoded[1024], /* Encoded URL string */
*ptr; /* Pointer into encoded string */
ptr = encoded;
if (*url != '/')
*ptr++ = '/';
for (; *url && ptr < (encoded + sizeof(encoded) - 4); url ++)
{
if (strchr("%@&+ <>#=", *url) || *url < ' ' || *url & 128)
{
/*
* Percent-encode this character; safe because we have at least 4
* bytes left in the array...
*/
sprintf(ptr, "%%%02X", *url & 255);
ptr += 3;
}
else
*ptr++ = *url;
}
*ptr = '\0';
if (*url)
{
/*
* URL was too long, just redirect to the admin page...
*/
printf("Location: %s/admin\n\n", prefix);
}
else
{
/*
* URL is OK, redirect there...
*/
printf("Location: %s%s\n\n", prefix, encoded);
}
}
else
printf("Location: %s/admin\n\n", prefix);
}
@@ -248,6 +291,21 @@ choose_device_cb(
const char *device_location, /* I - Location */
const char *title) /* I - Page title */
{
/*
* For modern browsers, start a multi-part page so we can show that something
* is happening. Non-modern browsers just get everything at the end...
*/
if (current_device == 0 && cgiSupportsMultipart())
{
cgiStartMultipart();
cgiStartHTML(title);
cgiCopyTemplateLang("choose-device.tmpl");
cgiEndHTML();
fflush(stdout);
}
/*
* Add the device to the array...
*/
@@ -260,23 +318,6 @@ choose_device_cb(
cgiSetArray("device_location", current_device, device_location);
current_device ++;
if (time(NULL) > last_device_time && cgiSupportsMultipart())
{
/*
* Update the page...
*/
if (!last_device_time)
cgiStartMultipart();
cgiStartHTML(title);
cgiCopyTemplateLang("choose-device.tmpl");
cgiEndHTML();
fflush(stdout);
time(&last_device_time);
}
}
@@ -345,6 +386,31 @@ do_add_rss_subscription(http_t *http) /* I - HTTP connection */
* and classes and (re)show the add page...
*/
if (cgiGetVariable("EVENT_JOB_CREATED"))
cgiSetVariable("EVENT_JOB_CREATED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_COMPLETED"))
cgiSetVariable("EVENT_JOB_COMPLETED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_STOPPED"))
cgiSetVariable("EVENT_JOB_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_JOB_CONFIG_CHANGED"))
cgiSetVariable("EVENT_JOB_CONFIG_CHANGED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_STOPPED"))
cgiSetVariable("EVENT_PRINTER_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_ADDED"))
cgiSetVariable("EVENT_PRINTER_ADDED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_MODIFIED"))
cgiSetVariable("EVENT_PRINTER_MODIFIED", "CHECKED");
if (cgiGetVariable("EVENT_PRINTER_DELETED"))
cgiSetVariable("EVENT_PRINTER_DELETED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_STARTED"))
cgiSetVariable("EVENT_SERVER_STARTED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_STOPPED"))
cgiSetVariable("EVENT_SERVER_STOPPED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_RESTARTED"))
cgiSetVariable("EVENT_SERVER_RESTARTED", "CHECKED");
if (cgiGetVariable("EVENT_SERVER_AUDIT"))
cgiSetVariable("EVENT_SERVER_AUDIT", "CHECKED");
request = ippNewRequest(CUPS_GET_PRINTERS);
response = cupsDoRequest(http, request, "/");
@@ -467,6 +533,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
ipp_attribute_t *attr; /* member-uris attribute */
char uri[HTTP_MAX_URI]; /* Device or printer URI */
const char *name, /* Pointer to class name */
*op, /* Operation name */
*ptr; /* Pointer to CGI variable */
const char *title; /* Title of page */
static const char * const pattrs[] = /* Requested printer attributes */
@@ -478,6 +545,7 @@ do_am_class(http_t *http, /* I - HTTP connection */
title = cgiText(modify ? _("Modify Class") : _("Add Class"));
op = cgiGetVariable("OP");
name = cgiGetVariable("PRINTER_NAME");
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
@@ -502,6 +570,12 @@ do_am_class(http_t *http, /* I - HTTP connection */
* Do the request and get back a response...
*/
cgiClearVariables();
if (op)
cgiSetVariable("OP", op);
if (name)
cgiSetVariable("PRINTER_NAME", name);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
/*
@@ -895,7 +969,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
if (isalnum(*uriptr & 255) || *uriptr == '_' || *uriptr == '-' ||
*uriptr == '.')
*tptr++ = *uriptr;
else if ((*uriptr == ' ' || *uriptr == '/') && tptr[-1] != '_')
else if ((*uriptr == ' ' || *uriptr == '/') && tptr > template &&
tptr[-1] != '_')
*tptr++ = '_';
else if (*uriptr == '?' || *uriptr == '(')
break;
@@ -924,31 +999,28 @@ do_am_printer(http_t *http, /* I - HTTP connection */
}
/*
* Scan for devices for up to 30 seconds, updating the page as we find
* them...
* Scan for devices for up to 30 seconds...
*/
fputs("DEBUG: Getting list of devices...\n", stderr);
last_device_time = 0;
current_device = 0;
current_device = 0;
if (cupsGetDevices(http, 30, CUPS_INCLUDE_ALL, CUPS_EXCLUDE_NONE,
(cups_device_cb_t)choose_device_cb,
(void *)title) == IPP_OK)
{
fputs("DEBUG: Got device list!\n", stderr);
if (!cgiSupportsMultipart())
{
/*
* Non-modern browsers that don't support multi-part documents get
* everything at the end...
*/
if (cgiSupportsMultipart())
cgiStartMultipart();
cgiStartHTML(title);
cgiCopyTemplateLang("choose-device.tmpl");
cgiEndHTML();
}
cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
cgiStartHTML(title);
cgiCopyTemplateLang("choose-device.tmpl");
cgiEndHTML();
if (cgiSupportsMultipart())
cgiEndMultipart();
}
else
{
@@ -969,16 +1041,6 @@ do_am_printer(http_t *http, /* I - HTTP connection */
return;
}
}
/*
* Show the final selection page...
*/
cgiSetVariable("CUPS_GET_DEVICES_DONE", "1");
cgiStartHTML(title);
cgiCopyTemplateLang("choose-device.tmpl");
cgiEndHTML();
cgiEndMultipart();
}
else if (strchr(var, '/') == NULL)
{
@@ -1044,6 +1106,11 @@ do_am_printer(http_t *http, /* I - HTTP connection */
if ((attr = ippFindAttribute(oldinfo, "printer-location",
IPP_TAG_TEXT)) != NULL)
cgiSetVariable("PRINTER_LOCATION", attr->values[0].string.text);
if ((attr = ippFindAttribute(oldinfo, "printer-is-shared",
IPP_TAG_BOOLEAN)) != NULL)
cgiSetVariable("PRINTER_IS_SHARED",
attr->values[0].boolean ? "1" : "0");
}
cgiCopyTemplateLang("modify-printer.tmpl");
@@ -1179,7 +1246,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
* Got the list of PPDs, see if the user has selected a make...
*/
if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0)
if (cgiSetIPPVars(response, NULL, NULL, NULL, 0) == 0 && !modify)
{
/*
* No PPD files with this make, try again with all makes...
@@ -1215,8 +1282,11 @@ do_am_printer(http_t *http, /* I - HTTP connection */
*/
cgiStartHTML(title);
cgiSetVariable("CURRENT_MAKE_AND_MODEL",
cgiGetArray("PPD_MAKE_AND_MODEL", 0));
if (!cgiGetVariable("PPD_MAKE"))
cgiSetVariable("PPD_MAKE", cgiGetVariable("CURRENT_MAKE"));
if (!modify)
cgiSetVariable("CURRENT_MAKE_AND_MODEL",
cgiGetArray("PPD_MAKE_AND_MODEL", 0));
cgiCopyTemplateLang("choose-model.tmpl");
cgiEndHTML();
}
@@ -1508,7 +1578,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
#ifdef HAVE_GSSAPI
char default_auth_type[255];
/* DefaultAuthType value */
const char *val; /* Setting value */
const char *val; /* Setting value */
#endif /* HAVE_GSSAPI */
@@ -1580,7 +1650,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
strcat(local_protocols, "slp");
}
#endif /* HAVE_SLP */
if (cgiGetVariable("BROWSE_REMOTE_CUPS"))
strcpy(remote_protocols, "cups");
else
@@ -1833,7 +1903,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
perror(tempfile);
return;
}
@@ -1845,7 +1915,7 @@ do_config_server(http_t *http) /* I - HTTP connection */
cgiSetVariable("ERROR", strerror(errno));
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
perror(tempfile);
close(tempfd);
unlink(tempfile);
@@ -2621,7 +2691,9 @@ do_menu(http_t *http) /* I - HTTP connection */
if ((val = cupsGetOption("DefaultAuthType", num_settings,
settings)) != NULL && !strcasecmp(val, "Negotiate"))
cgiSetVariable("KERBEROS", "CHECKED");
else
#endif /* HAVE_GSSAPI */
cgiSetVariable("KERBEROS", "");
#ifdef HAVE_DNSSD
cgiSetVariable("HAVE_DNSSD", "1");
@@ -3233,11 +3305,16 @@ do_set_options(http_t *http, /* I - HTTP connection */
for (option = ppdFirstOption(ppd);
option;
option = ppdNextOption(ppd))
{
if ((var = cgiGetVariable(option->keyword)) != NULL)
{
have_options = 1;
ppdMarkOption(ppd, option->keyword, var);
fprintf(stderr, "DEBUG: Set %s to %s...\n", option->keyword, var);
}
else
fprintf(stderr, "DEBUG: Didn't find %s...\n", option->keyword);
}
}
if (!have_options || ppdConflicts(ppd))
@@ -3258,7 +3335,7 @@ do_set_options(http_t *http, /* I - HTTP connection */
((ppdattr = ppdFindAttr(ppd, "cupsCommands", NULL)) != NULL &&
ppdattr->value && strstr(ppdattr->value, "AutoConfigure")))
cgiSetVariable("HAVE_AUTOCONFIGURE", "YES");
else
else
{
for (i = 0; i < ppd->num_filters; i ++)
if (!strncmp(ppd->filters[i], "application/vnd.cups-postscript", 31))
@@ -3344,6 +3421,16 @@ do_set_options(http_t *http, /* I - HTTP connection */
{
cgiSetArray("ckeyword", k, option->keyword);
cgiSetArray("ckeytext", k, option->text);
for (m = 0; m < option->num_choices; m ++)
{
if (option->choices[m].marked)
{
cgiSetArray("cchoice", k, option->choices[m].text);
break;
}
}
k ++;
}
@@ -3362,7 +3449,7 @@ do_set_options(http_t *http, /* I - HTTP connection */
cgiSetVariable("GROUP", group->text);
cgiCopyTemplateLang("option-header.tmpl");
for (j = group->num_options, option = group->options;
j > 0;
j --, option ++)
@@ -4006,7 +4093,7 @@ get_option_value(
snprintf(buffer, bufsize, "Custom.%gx%g%s", width, length, uval);
}
else if (cupsArrayCount(coption->params) == 1)
else if (cupsArrayCount(coption->params) == 1)
{
cparam = ppdFirstCustomParam(coption);
snprintf(keyword, sizeof(keyword), "%s.%s", coption->keyword, cparam->name);
+13
Ver Arquivo
@@ -33,6 +33,14 @@
# include "help-index.h"
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Types...
*/
@@ -54,6 +62,7 @@ typedef struct cgi_file_s /**** Uploaded file data ****/
extern void cgiAbort(const char *title, const char *stylesheet,
const char *format, ...);
extern int cgiCheckVariables(const char *names);
extern void cgiClearVariables(void);
extern void *cgiCompileSearch(const char *query);
extern void cgiCopyTemplateFile(FILE *out, const char *tmpl);
extern void cgiCopyTemplateLang(const char *tmpl);
@@ -98,6 +107,10 @@ extern void cgiStartMultipart(void);
extern int cgiSupportsMultipart(void);
extern const char *cgiText(const char *message);
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_CGI_H_ */
/*
+1
Ver Arquivo
@@ -72,6 +72,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "classes");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we are displaying a printer or all classes...
+12
Ver Arquivo
@@ -23,6 +23,14 @@
# include <cups/array.h>
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Data structures...
*/
@@ -68,6 +76,10 @@ extern help_index_t *helpSearchIndex(help_index_t *hi, const char *query,
const char *filename);
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_HELP_INDEX_H_ */
/*
+9 -2
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Online help CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -63,6 +63,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "help");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Load the help index...
@@ -102,7 +103,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
for (i = 0; i < argc; i ++)
fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
if ((helpfile = getenv("PATH_INFO")) != NULL)
{
@@ -182,6 +183,12 @@ main(int argc, /* I - Number of command-line arguments */
topic = cgiGetVariable("TOPIC");
si = helpSearchIndex(hi, query, topic, helpfile);
cgiClearVariables();
if (query)
cgiSetVariable("QUERY", query);
if (topic)
cgiSetVariable("TOPIC", topic);
fprintf(stderr, "DEBUG: query=\"%s\", topic=\"%s\"\n",
query ? query : "(null)", topic ? topic : "(null)");
+32 -12
Ver Arquivo
@@ -333,7 +333,7 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
NULL, job_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "job-printer-uri");
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
if ((attr = ippFindAttribute(response, "job-printer-uri",
@@ -926,7 +926,7 @@ cgiRewriteURL(const char *uri, /* I - Current URI */
ishttps ? "https" : "http",
userpass, hostname, port, resource);
else
snprintf(url, urlsize, "%s://%s:%d%s",
snprintf(url, urlsize, "%s://%s:%d%s",
ishttps ? "https" : "http",
hostname, port, resource);
}
@@ -1398,7 +1398,9 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
int ascending, /* Order of jobs (0 = descending) */
first, /* First job to show */
count; /* Number of jobs */
const char *var; /* Form variable */
const char *var, /* Form variable */
*query, /* Query string */
*section; /* Section in web interface */
void *search; /* Search data */
char url[1024], /* Printer URI */
val[1024]; /* Form variable */
@@ -1442,11 +1444,14 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
* Get a list of matching job objects.
*/
if ((var = cgiGetVariable("QUERY")) != NULL &&
if ((query = cgiGetVariable("QUERY")) != NULL &&
!cgiGetVariable("CLEAR"))
search = cgiCompileSearch(var);
search = cgiCompileSearch(query);
else
{
query = NULL;
search = NULL;
}
jobs = cgiGetIPPObjects(response, search);
count = cupsArrayCount(jobs);
@@ -1471,16 +1476,27 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
if (first < 0)
first = 0;
sprintf(val, "%d", count);
cgiSetVariable("TOTAL", val);
if ((var = cgiGetVariable("ORDER")) != NULL)
ascending = !strcasecmp(var, "asc");
else
{
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
}
section = cgiGetVariable("SECTION");
cgiClearVariables();
if (query)
cgiSetVariable("QUERY", query);
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
cgiSetVariable("SECTION", section);
sprintf(val, "%d", count);
cgiSetVariable("TOTAL", val);
if (which_jobs)
cgiSetVariable("WHICH_JOBS", which_jobs);
if (ascending)
{
@@ -1502,7 +1518,11 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
*/
if (dest)
snprintf(val, sizeof(val), "/%s/%s", cgiGetVariable("SECTION"), dest);
{
snprintf(val, sizeof(val), "/%s/%s", section, dest);
cgiSetVariable("PRINTER_NAME", dest);
cgiSetVariable("PRINTER_URI_SUPPORTED", val);
}
else
strlcpy(val, "/jobs/", sizeof(val));
+1
Ver Arquivo
@@ -57,6 +57,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "jobs");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Connect to the HTTP server...
+1
Ver Arquivo
@@ -1,4 +1,5 @@
_cgiCheckVariables
_cgiClearVariables
_cgiCompileSearch
_cgiCopyTemplateFile
_cgiCopyTemplateLang
+1
Ver Arquivo
@@ -73,6 +73,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "printers");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we are displaying a printer or all printers...
+13 -4
Ver Arquivo
@@ -3,7 +3,7 @@
*
* CGI template function.
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -119,7 +119,7 @@ cgiCopyTemplateLang(const char *tmpl) /* I - Base filename */
*locptr = '\0'; /* Strip charset */
}
fprintf(stderr, "DEBUG: lang=\"%s\", locale=\"%s\"...\n",
fprintf(stderr, "DEBUG2: lang=\"%s\", locale=\"%s\"...\n",
lang ? lang : "(null)", locale);
/*
@@ -437,7 +437,14 @@ cgi_copy(FILE *out, /* I - Output file */
* Test for existance...
*/
result = cgiGetArray(name, element) != NULL && outptr[0];
if (name[0] == '?')
result = cgiGetArray(name + 1, element) != NULL;
else if (name[0] == '#')
result = cgiGetVariable(name + 1) != NULL;
else
result = cgiGetArray(name, element) != NULL;
result = result && outptr[0];
compare[0] = '\0';
}
else
@@ -675,6 +682,8 @@ cgi_puts(const char *s, /* I - String to output */
fputs("&gt;", out);
else if (*s == '\"')
fputs("&quot;", out);
else if (*s == '\'')
fputs("&#39;", out);
else if (*s == '&')
fputs("&amp;", out);
else
@@ -695,7 +704,7 @@ cgi_puturi(const char *s, /* I - String to output */
{
while (*s)
{
if (strchr("%&+ <>#=", *s) || *s & 128)
if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128)
fprintf(out, "%%%02X", *s & 255);
else
putc(*s, out);
+35 -9
Ver Arquivo
@@ -15,6 +15,7 @@
* Contents:
*
* cgiCheckVariables() - Check for the presence of "required" variables.
* cgiClearVariables() - Clear all form variables.
* cgiGetArray() - Get an element from a form array...
* cgiGetFile() - Get the file (if any) that was submitted in the form.
* cgiGetSize() - Get the size of a form array value.
@@ -134,6 +135,31 @@ cgiCheckVariables(const char *names) /* I - Variables to look for */
}
/*
* 'cgiClearVariables()' - Clear all form variables.
*/
void
cgiClearVariables(void)
{
int i, j; /* Looping vars */
_cgi_var_t *v; /* Current variable */
for (v = form_vars, i = form_count; i > 0; v ++, i --)
{
_cupsStrFree(v->name);
for (j = 0; j < v->nvalues; j ++)
if (v->values[j])
_cupsStrFree(v->values[j]);
}
form_count = 0;
cgi_unlink_file();
}
/*
* 'cgiGetArray()' - Get an element from a form array...
*/
@@ -151,7 +177,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
if (element < 0 || element >= var->nvalues)
return (NULL);
return (var->values[element]);
return (_cupsStrRetain(var->values[element]));
}
@@ -206,7 +232,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
var->values[var->nvalues - 1]));
#endif /* DEBUG */
return ((var == NULL) ? NULL : var->values[var->nvalues - 1]);
return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
}
@@ -337,9 +363,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
var->nvalues = element + 1;
}
else if (var->values[element])
free((char *)var->values[element]);
_cupsStrFree((char *)var->values[element]);
var->values[element] = strdup(value);
var->values[element] = _cupsStrAlloc(value);
}
}
@@ -384,7 +410,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
{
for (i = size; i < var->nvalues; i ++)
if (var->values[i])
free((void *)(var->values[i]));
_cupsStrFree((void *)(var->values[i]));
}
var->nvalues = size;
@@ -417,9 +443,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
{
for (i = 0; i < var->nvalues; i ++)
if (var->values[i])
free((char *)var->values[i]);
_cupsStrFree((char *)var->values[i]);
var->values[0] = strdup(value);
var->values[0] = _cupsStrAlloc(value);
var->nvalues = 1;
}
}
@@ -465,10 +491,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
if ((var->values = calloc(element + 1, sizeof(char *))) == NULL)
return;
var->name = strdup(name);
var->name = _cupsStrAlloc(name);
var->nvalues = element + 1;
var->avalues = element + 1;
var->values[element] = strdup(value);
var->values[element] = _cupsStrAlloc(value);
form_count ++;
}
+1 -1
Ver Arquivo
@@ -90,7 +90,7 @@ install-data:
done
-if test x$(PAMDIR) != x; then \
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(PAMDIR); \
if test -r $(BUILDROOT)$(PAMDIR)/cups/$(PAMFILE) ; then \
if test -r $(BUILDROOT)$(PAMDIR)/cups ; then \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
else \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
+1
Ver Arquivo
@@ -46,6 +46,7 @@ application/x-csource application/postscript 33 texttops
application/x-perl application/postscript 33 texttops
application/x-shell application/postscript 33 texttops
text/plain application/postscript 33 texttops
text/css application/postscript 33 texttops
text/html application/postscript 33 texttops
image/gif application/vnd.cups-postscript 66 imagetops
image/png application/vnd.cups-postscript 66 imagetops
-3
Ver Arquivo
@@ -1,3 +0,0 @@
#%PAM-1.0
auth required pam_unix.so shadow nodelay nullok
account required pam_unix.so
+1 -1
Ver Arquivo
@@ -1,2 +1,2 @@
auth required @PAMMOD@ nullok shadow
auth required @PAMMODAUTH@
account required @PAMMOD@
+6 -10
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-common.m4 8783 2009-08-28 17:51:05Z mike $"
dnl "$Id: cups-common.m4 8938 2009-12-18 23:52:01Z mike $"
dnl
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Version number information...
CUPS_VERSION="1.4.1"
CUPS_VERSION="1.4.3"
CUPS_REVISION=""
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -142,7 +142,7 @@ else
fi
dnl Check for random number functions...
AC_CHECK_FUNCS(random mrand48 lrand48)
AC_CHECK_FUNCS(random lrand48 arc4random)
dnl Check for geteuid function.
AC_CHECK_FUNCS(geteuid)
@@ -262,15 +262,12 @@ if test "x$enable_dbus" != xno; then
AC_DEFINE(HAVE_DBUS)
CFLAGS="$CFLAGS `$PKGCONFIG --cflags dbus-1` -DDBUS_API_SUBJECT_TO_CHANGE"
CUPSDLIBS="$CUPSDLIBS `$PKGCONFIG --libs dbus-1`"
DBUS_NOTIFIER="dbus"
DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs dbus-1`"
AC_CHECK_LIB(dbus-1,
dbus_message_iter_init_append,
AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND),,
`$PKGCONFIG --libs dbus-1`)
if $PKGCONFIG --exists glib-2.0 && $PKGCONFIG --exists dbus-glib-1; then
DBUS_NOTIFIER="dbus"
DBUS_NOTIFIERLIBS="`$PKGCONFIG --libs glib-2.0` `$PKGCONFIG --libs dbus-glib-1` `$PKGCONFIG --libs dbus-1`"
CFLAGS="$CFLAGS `$PKGCONFIG --cflags glib-2.0`"
fi
else
AC_MSG_RESULT(no)
fi
@@ -289,7 +286,6 @@ LEGACY_BACKENDS="parallel scsi"
case $uname in
Darwin*)
# FONTS=""
LEGACY_BACKENDS=""
BACKLIBS="$BACKLIBS -framework IOKit"
CUPSDLIBS="$CUPSDLIBS -sectorder __TEXT __text cupsd.order -e start -framework IOKit -framework SystemConfiguration -weak_framework ApplicationServices"
@@ -355,5 +351,5 @@ AC_SUBST(FONTS)
AC_SUBST(LEGACY_BACKENDS)
dnl
dnl End of "$Id: cups-common.m4 8783 2009-08-28 17:51:05Z mike $".
dnl End of "$Id: cups-common.m4 8938 2009-12-18 23:52:01Z mike $".
dnl
+18 -5
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $"
dnl "$Id: cups-defaults.m4 8929 2009-12-15 22:40:37Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
@@ -208,6 +208,10 @@ AC_ARG_WITH(cups_user, [ --with-cups-user set default user for CUPS],
AC_MSG_RESULT(no password file, using "$CUPS_USER")
fi)
if test "x$CUPS_USER" = "xroot" -o "x$CUPS_USER" = "x0"; then
AC_MSG_ERROR([The default user for CUPS cannot be root!])
fi
AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS],
CUPS_GROUP="$withval",
AC_MSG_CHECKING(for default print group)
@@ -238,6 +242,10 @@ AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS],
AC_MSG_RESULT(no group file, using "$CUPS_GROUP")
fi)
if test "x$CUPS_GROUP" = "xroot" -o "x$CUPS_GROUP" = "xwheel" -o "x$CUPS_GROUP" = "x0"; then
AC_MSG_ERROR([The default group for CUPS cannot be root!])
fi
AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups for CUPS],
CUPS_SYSTEM_GROUPS="$withval",
if test x$uname = xDarwin; then
@@ -269,9 +277,14 @@ AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups
fi
fi)
CUPS_PRIMARY_SYSTEM_GROUP="`echo $CUPS_SYSTEM_GROUPS | awk '{print $1}'`"
for group in $CUPS_SYSTEM_GROUPS; do
if test "x$CUPS_GROUP" = "x$group"; then
AC_MSG_ERROR([The default system groups cannot contain the default CUPS group!])
fi
done
AC_SUBST(CUPS_USER)
AC_SUBST(CUPS_GROUP)
AC_SUBST(CUPS_SYSTEM_GROUPS)
@@ -325,8 +338,8 @@ if test x$default_lpdconfigfile != xno; then
CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist"
;;
*)
if test -d /etc/xinetd.d; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd:///etc/xinetd.d/cups-lpd"
if test "x$XINETD" != x; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd"
else
CUPS_DEFAULT_LPD_CONFIG_FILE=""
fi
@@ -435,5 +448,5 @@ AC_SUBST(BANNERTOPS)
AC_SUBST(TEXTTOPS)
dnl
dnl End of "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $".
dnl End of "$Id: cups-defaults.m4 8929 2009-12-15 22:40:37Z mike $".
dnl
+15 -17
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $"
dnl "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $"
dnl
dnl PAM stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -22,9 +22,10 @@ if test $uname = AIX; then
fi
PAMDIR=""
PAMFILE=""
PAMFILE="pam.std"
PAMLIBS=""
PAMMOD="pam_unknown.so"
PAMMODAUTH="pam_unknown.so"
if test x$enable_pam != xno; then
SAVELIBS="$LIBS"
@@ -60,7 +61,7 @@ if test x$enable_pam != xno; then
case "$uname" in
Darwin*)
# Darwin, MacOS X
# Darwin/Mac OS X
if test "x$with_pam_module" != x; then
PAMFILE="pam.$with_pam_module"
elif test -f /usr/lib/pam/pam_opendirectory.so.2; then
@@ -70,26 +71,22 @@ if test x$enable_pam != xno; then
fi
;;
IRIX)
# SGI IRIX
PAMFILE="pam.irix"
;;
*)
# All others; this test might need to be updated
# as Linux distributors move things around...
if test "x$with_pam_module" != x; then
PAMMOD="pam_${with_pam_module}.so"
else
for mod in pam_unix2.so pam_unix.so pam_pwdb.so; do
if test -f /lib/security/$mod; then
PAMMOD="$mod"
break;
fi
done
elif test -f /lib/security/pam_unix2.so; then
PAMMOD="pam_unix2.so"
elif test -f /lib/security/pam_unix.so; then
PAMMOD="pam_unix.so"
fi
PAMFILE="pam.std"
if test "x$PAMMOD" = xpam_unix.so; then
PAMMODAUTH="$PAMMOD shadow nodelay"
else
PAMMODAUTH="$PAMMOD nodelay"
fi
;;
esac
fi
@@ -98,7 +95,8 @@ AC_SUBST(PAMDIR)
AC_SUBST(PAMFILE)
AC_SUBST(PAMLIBS)
AC_SUBST(PAMMOD)
AC_SUBST(PAMMODAUTH)
dnl
dnl End of "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $".
dnl End of "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $".
dnl
+15 -1
Ver Arquivo
@@ -586,10 +586,24 @@
* Which random number generator function to use...
*/
#undef HAVE_ARC4RANDOM
#undef HAVE_RANDOM
#undef HAVE_MRAND48
#undef HAVE_LRAND48
#ifdef HAVE_ARC4RANDOM
# define CUPS_RAND() arc4random()
# define CUPS_SRAND(v) arc4random_stir()
#elif defined(HAVE_RANDOM)
# define CUPS_RAND() random()
# define CUPS_SRAND(v) srandom(v)
#elif defined(HAVE_LRAND48)
# define CUPS_RAND() lrand48()
# define CUPS_SRAND(v) srand48(v)
#else
# define CUPS_RAND() rand()
# define CUPS_SRAND(v) srand(v)
#endif /* HAVE_ARC4RANDOM */
/*
* Do we have vproc_transaction_begin/end?
+12
Ver Arquivo
@@ -26,6 +26,14 @@
# include "versioning.h"
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Constants...
*/
@@ -57,6 +65,10 @@ extern void cupsBackendReport(const char *device_scheme,
_CUPS_API_1_4;
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_BACKEND_H_ */
/*
+5 -1
Ver Arquivo
@@ -583,9 +583,13 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
* Clear all conflicts...
*/
cupsArraySave(ppd->options);
for (o = ppdFirstOption(ppd); o; o = ppdNextOption(ppd))
o->conflicted = 0;
cupsArrayRestore(ppd->options);
/*
* Test for conflicts...
*/
@@ -641,7 +645,7 @@ ppdInstallableConflict(
DEBUG_printf(("2ppdInstallableConflict(ppd=%p, option=\"%s\", choice=\"%s\")",
ppd, option, choice));
/*
/*
* Range check input...
*/
+2 -2
Ver Arquivo
@@ -59,10 +59,10 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0401
# define CUPS_VERSION 1.0403
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 4
# define CUPS_VERSION_PATCH 1
# define CUPS_VERSION_PATCH 3
# define CUPS_BC_FD 3 /* Back-channel file descriptor for select/poll */
# define CUPS_DATE_ANY (time_t)-1
+11 -4
Ver Arquivo
@@ -33,7 +33,6 @@
* server.
* appleCopyLocations() - Copy the location history array.
* appleCopyNetwork() - Get the network ID for the current location.
* appleGetDefault() - Get the default printer for this location.
* appleGetPaperSize() - Get the default paper size.
* appleGetPrinter() - Get a printer from the history array.
* appleSetDefault() - Set the default printer for this location.
@@ -139,12 +138,17 @@ cupsAddDest(const char *name, /* I - Destination name */
if (!cupsGetDest(name, instance, num_dests, *dests))
{
if (instance &&
(parent = cupsGetDest(name, NULL, num_dests, *dests)) == NULL)
if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
return (num_dests);
dest = cups_add_dest(name, instance, &num_dests, dests);
/*
* Find the base dest again now the array has been realloc'd.
*/
parent = cupsGetDest(name, NULL, num_dests, *dests);
if (instance && parent && parent->num_options > 0)
{
/*
@@ -549,7 +553,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
if (!cups_get_sdests(http, op, name, 0, &dest))
{
if (op == CUPS_GET_DEFAULT)
if (op == CUPS_GET_DEFAULT || name)
return (NULL);
/*
@@ -1288,6 +1292,9 @@ appleUseLastPrinter(void)
CFPropertyListRef uselast; /* Use last printer preference value */
if (getenv("CUPS_DISABLE_APPLE_DEFAULT"))
return (0);
if ((uselast = CFPreferencesCopyAppValue(kUseLastPrinterAsCurrentPrinterKey,
kPMPrintingPreferences)) != NULL)
{
+1
Ver Arquivo
@@ -772,6 +772,7 @@ ppdEmitString(ppd_file_t *ppd, /* I - PPD file record */
if (section == PPD_ORDER_JCL)
{
if (!strcasecmp(choices[i]->choice, "Custom") &&
choices[i]->code &&
(coption = ppdFindCustomOption(ppd, choices[i]->option->keyword))
!= NULL)
{
+34 -10
Ver Arquivo
@@ -38,20 +38,44 @@
static void
cups_env_init(_cups_globals_t *g) /* I - Global data */
{
if ((g->cups_datadir = getenv("CUPS_DATADIR")) == NULL)
g->cups_datadir = CUPS_DATADIR;
#ifdef HAVE_GETEUID
if ((geteuid() != getuid() && getuid()) || getegid() != getgid())
#else
if (!getuid())
#endif /* HAVE_GETEUID */
{
/*
* When running setuid/setgid, don't allow environment variables to override
* the directories...
*/
if ((g->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL)
g->cups_serverbin = CUPS_SERVERBIN;
if ((g->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL)
g->cups_datadir = CUPS_DATADIR;
g->cups_serverbin = CUPS_SERVERBIN;
g->cups_serverroot = CUPS_SERVERROOT;
g->cups_statedir = CUPS_STATEDIR;
g->localedir = CUPS_LOCALEDIR;
}
else
{
/*
* Allow directories to be overridden by environment variables.
*/
if ((g->cups_statedir = getenv("CUPS_STATEDIR")) == NULL)
g->cups_statedir = CUPS_STATEDIR;
if ((g->cups_datadir = getenv("CUPS_DATADIR")) == NULL)
g->cups_datadir = CUPS_DATADIR;
if ((g->localedir = getenv("LOCALEDIR")) == NULL)
g->localedir = CUPS_LOCALEDIR;
if ((g->cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL)
g->cups_serverbin = CUPS_SERVERBIN;
if ((g->cups_serverroot = getenv("CUPS_SERVERROOT")) == NULL)
g->cups_serverroot = CUPS_SERVERROOT;
if ((g->cups_statedir = getenv("CUPS_STATEDIR")) == NULL)
g->cups_statedir = CUPS_STATEDIR;
if ((g->localedir = getenv("LOCALEDIR")) == NULL)
g->localedir = CUPS_LOCALEDIR;
}
}
+73 -16
Ver Arquivo
@@ -26,7 +26,6 @@
* httpClearCookie() - Clear the cookie value(s).
* httpClearFields() - Clear HTTP request fields.
* httpClose() - Close an HTTP connection...
* httpConnect() - Connect to a HTTP server.
* httpConnectEncrypt() - Connect to a HTTP server using encryption.
* _httpCreate() - Create an unconnected HTTP connection.
* httpDelete() - Send a DELETE request to the server.
@@ -721,7 +720,7 @@ httpGetField(http_t *http, /* I - Connection to server */
{
if (!http || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX)
return (NULL);
else if (field == HTTP_FIELD_AUTHORIZATION &&
else if (field == HTTP_FIELD_AUTHORIZATION &&
http->field_authorization)
{
/*
@@ -1137,7 +1136,7 @@ httpGets(char *line, /* I - Line to read into */
http->activity = time(NULL);
*lineptr = '\0';
DEBUG_printf(("3httpGets: Returning \"%s\"", line));
return (line);
@@ -2283,7 +2282,7 @@ httpWait(http_t *http, /* I - Connection to server */
*
* @deprecated@
*/
int /* O - Number of bytes written */
httpWrite(http_t *http, /* I - Connection to server */
const char *buffer, /* I - Buffer for data */
@@ -2298,7 +2297,7 @@ httpWrite(http_t *http, /* I - Connection to server */
*
* @since CUPS 1.2/Mac OS X 10.5@
*/
ssize_t /* O - Number of bytes written */
httpWrite2(http_t *http, /* I - Connection to server */
const char *buffer, /* I - Buffer for data */
@@ -2456,7 +2455,7 @@ _httpWriteCDSA(
else
{
*dataLength = 0;
if (errno == EAGAIN)
result = errSSLWouldBlock;
else
@@ -2517,7 +2516,7 @@ http_bio_ctrl(BIO *h, /* I - BIO data */
}
else
return (0);
case BIO_CTRL_DUP :
case BIO_CTRL_FLUSH :
return (1);
@@ -2719,7 +2718,36 @@ http_read_ssl(http_t *http, /* I - Connection to server */
return (SSL_read((SSL *)(http->tls), buf, len));
# elif defined(HAVE_GNUTLS)
return (gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len));
ssize_t result; /* Return value */
result = gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len);
if (result < 0 && !errno)
{
/*
* Convert GNU TLS error to errno value...
*/
switch (result)
{
case GNUTLS_E_INTERRUPTED :
errno = EINTR;
break;
case GNUTLS_E_AGAIN :
errno = EAGAIN;
break;
default :
errno = EPIPE;
break;
}
result = -1;
}
return ((int)result);
# elif defined(HAVE_CDSASSL)
int result; /* Return value */
@@ -2857,7 +2885,7 @@ http_send(http_t *http, /* I - Connection to server */
DEBUG_printf(("9http_send: %s: %s", http_fields[i],
httpGetField(http, i)));
if (httpPrintf(http, "%s: %s\r\n", http_fields[i],
if (httpPrintf(http, "%s: %s\r\n", http_fields[i],
httpGetField(http, i)) < 1)
{
http->status = HTTP_ERROR;
@@ -2896,15 +2924,15 @@ http_send(http_t *http, /* I - Connection to server */
* The Kerberos and AuthRef authentication strings can only be used once...
*/
if (http->field_authorization && http->authstring &&
(!strncmp(http->authstring, "Negotiate", 9) ||
if (http->field_authorization && http->authstring &&
(!strncmp(http->authstring, "Negotiate", 9) ||
!strncmp(http->authstring, "AuthRef", 7)))
{
http->_authstring[0] = '\0';
if (http->authstring != http->_authstring)
free(http->authstring);
http->authstring = http->_authstring;
}
@@ -3220,7 +3248,7 @@ http_upgrade(http_t *http) /* I - Connection to server */
/*
* 'http_write()' - Write a buffer to a HTTP connection.
*/
static int /* O - Number of bytes written */
http_write(http_t *http, /* I - Connection to server */
const char *buffer, /* I - Buffer for data */
@@ -3335,7 +3363,36 @@ http_write_ssl(http_t *http, /* I - Connection to server */
return (SSL_write((SSL *)(http->tls), buf, len));
# elif defined(HAVE_GNUTLS)
return (gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len));
ssize_t result; /* Return value */
result = gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len);
if (result < 0 && !errno)
{
/*
* Convert GNU TLS error to errno value...
*/
switch (result)
{
case GNUTLS_E_INTERRUPTED :
errno = EINTR;
break;
case GNUTLS_E_AGAIN :
errno = EAGAIN;
break;
default :
errno = EPIPE;
break;
}
result = -1;
}
return ((int)result);
# elif defined(HAVE_CDSASSL)
int result; /* Return value */
OSStatus error; /* Error info */
@@ -3358,11 +3415,11 @@ http_write_ssl(http_t *http, /* I - Connection to server */
else
{
result = -1;
errno = EINTR;
errno = EINTR;
}
break;
default :
errno = EPIPE;
errno = EPIPE;
result = -1;
break;
}
+29 -7
Ver Arquivo
@@ -842,6 +842,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
if (!strcasecmp(option, "AP_D_InputSlot"))
{
cupsArraySave(ppd->options);
if ((o = ppdFindOption(ppd, "InputSlot")) != NULL)
{
key.option = o;
@@ -851,13 +853,21 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
cupsArrayRemove(ppd->marked, oldc);
}
}
cupsArrayRestore(ppd->options);
}
/*
* Check for custom options...
*/
if ((o = ppdFindOption(ppd, option)) == NULL)
cupsArraySave(ppd->options);
o = ppdFindOption(ppd, option);
cupsArrayRestore(ppd->options);
if (!o)
return;
loc = localeconv();
@@ -912,15 +922,15 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
if (units)
{
if (!strcasecmp(units, "cm"))
cparam->current.custom_points *= 72.0f / 2.54f;
cparam->current.custom_points *= 72.0f / 2.54f;
else if (!strcasecmp(units, "mm"))
cparam->current.custom_points *= 72.0f / 25.4f;
cparam->current.custom_points *= 72.0f / 25.4f;
else if (!strcasecmp(units, "m"))
cparam->current.custom_points *= 72.0f / 0.0254f;
cparam->current.custom_points *= 72.0f / 0.0254f;
else if (!strcasecmp(units, "in"))
cparam->current.custom_points *= 72.0f;
cparam->current.custom_points *= 72.0f;
else if (!strcasecmp(units, "ft"))
cparam->current.custom_points *= 12.0f * 72.0f;
cparam->current.custom_points *= 12.0f * 72.0f;
}
break;
@@ -1060,6 +1070,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
* appropriate...
*/
cupsArraySave(ppd->options);
if (!strcasecmp(option, "PageSize"))
{
if ((o = ppdFindOption(ppd, "PageRegion")) != NULL)
@@ -1084,6 +1096,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
}
}
}
cupsArrayRestore(ppd->options);
}
else if (!strcasecmp(option, "InputSlot"))
{
@@ -1091,6 +1105,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
* Unmark ManualFeed option...
*/
cupsArraySave(ppd->options);
if ((o = ppdFindOption(ppd, "ManualFeed")) != NULL)
{
key.option = o;
@@ -1100,6 +1116,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
cupsArrayRemove(ppd->marked, oldc);
}
}
cupsArrayRestore(ppd->options);
}
else if (!strcasecmp(option, "ManualFeed") &&
!strcasecmp(choice, "True"))
@@ -1108,6 +1126,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
* Unmark InputSlot option...
*/
cupsArraySave(ppd->options);
if ((o = ppdFindOption(ppd, "InputSlot")) != NULL)
{
key.option = o;
@@ -1117,6 +1137,8 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */
cupsArrayRemove(ppd->marked, oldc);
}
}
cupsArrayRestore(ppd->options);
}
}
@@ -1197,7 +1219,7 @@ ppd_mark_size(ppd_file_t *ppd, /* I - PPD file */
return;
}
else
return;
return;
/*
* Search the PPD file for a matching size...
+9 -13
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Page size functions for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -250,6 +250,9 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
* Figure out the current minimum width and length...
*/
width = ppd->custom_min[0];
length = ppd->custom_min[1];
if (qualifier2)
{
/*
@@ -277,18 +280,13 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
attr = ppdFindAttr(ppd, "cupsMinSize", spec);
}
if (!attr ||
(attr->value && sscanf(attr->value, "%f%f", &width, &length) != 2))
if ((attr && attr->value &&
sscanf(attr->value, "%f%f", &width, &length) != 2) || !attr)
{
width = ppd->custom_min[0];
length = ppd->custom_min[1];
}
}
else
{
width = ppd->custom_min[0];
length = ppd->custom_min[1];
}
minimum->width = width;
minimum->length = length;
@@ -301,6 +299,9 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
* Figure out the current maximum width and length...
*/
width = ppd->custom_max[0];
length = ppd->custom_max[1];
if (qualifier2)
{
/*
@@ -335,11 +336,6 @@ ppdPageSizeLimits(ppd_file_t *ppd, /* I - PPD file record */
length = ppd->custom_max[1];
}
}
else
{
width = ppd->custom_max[0];
length = ppd->custom_max[1];
}
maximum->width = width;
maximum->length = length;
+35 -2
Ver Arquivo
@@ -352,11 +352,13 @@ ppdErrorString(ppd_status_t status) /* I - PPD status */
_("Illegal option keyword string"),
_("Illegal translation string"),
_("Illegal whitespace character"),
_("Bad custom parameter")
_("Bad custom parameter"),
_("Missing option keyword"),
_("Bad value string")
};
if (status < PPD_OK || status > PPD_ILLEGAL_WHITESPACE)
if (status < PPD_OK || status >= PPD_MAX_STATUS)
return (_cupsLangString(cupsLangDefault(), _("Unknown")));
else
return (_cupsLangString(cupsLangDefault(), messages[status]));
@@ -1177,6 +1179,37 @@ ppdOpen2(cups_file_t *fp) /* I - File to read from */
}
else if (!strcmp(keyword, "JobPatchFile"))
{
/*
* CUPS STR #3421: Check for "*JobPatchFile: int: string"
*/
if (isdigit(*string & 255))
{
for (sptr = string + 1; isdigit(*sptr & 255); sptr ++);
if (*sptr == ':')
{
/*
* Found "*JobPatchFile: int: string"...
*/
cg->ppd_status = PPD_BAD_VALUE;
goto error;
}
}
if (!name[0])
{
/*
* Found "*JobPatchFile: string"...
*/
cg->ppd_status = PPD_MISSING_OPTION_KEYWORD;
goto error;
}
if (ppd->patches == NULL)
ppd->patches = strdup(string);
else
+4 -1
Ver Arquivo
@@ -115,7 +115,10 @@ typedef enum ppd_status_e /**** Status Codes @since CUPS 1.1.19/Mac OS X 10.3@
PPD_ILLEGAL_OPTION_KEYWORD, /* Illegal option keyword string */
PPD_ILLEGAL_TRANSLATION, /* Illegal translation string */
PPD_ILLEGAL_WHITESPACE, /* Illegal whitespace character */
PPD_BAD_CUSTOM_PARAM /* Bad custom parameter */
PPD_BAD_CUSTOM_PARAM, /* Bad custom parameter */
PPD_MISSING_OPTION_KEYWORD, /* Missing option keyword */
PPD_BAD_VALUE, /* Bad value string */
PPD_MAX_STATUS /* @private@ */
} ppd_status_t;
enum ppd_conform_e /**** Conformance Levels @since CUPS 1.1.19/Mac OS X 10.3@ ****/
+39 -26
Ver Arquivo
@@ -116,6 +116,7 @@ cupsSideChannelRead(
char buffer[16388]; /* Message buffer */
int bytes; /* Bytes read */
int templen; /* Data length from message */
int nfds; /* Number of file descriptors */
#ifdef HAVE_POLL
struct pollfd pfd; /* Poll structure for poll() */
#else /* select() */
@@ -143,39 +144,31 @@ cupsSideChannelRead(
pfd.fd = CUPS_SC_FD;
pfd.events = POLLIN;
if (timeout < 0.0)
{
if (poll(&pfd, 1, -1) < 1)
return (-1);
}
else if (poll(&pfd, 1, (long)(timeout * 1000)) < 1)
return (-1);
while ((nfds = poll(&pfd, 1,
timeout < 0.0 ? -1 : (long)(timeout * 1000))) < 0 &&
(errno == EINTR || errno == EAGAIN))
;
#else /* select() */
FD_ZERO(&input_set);
FD_SET(CUPS_SC_FD, &input_set);
if (timeout < 0.0)
{
if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, NULL) < 1)
{
DEBUG_printf(("1cupsSideChannelRead: Select error: %s", strerror(errno)));
return (-1);
}
}
else
{
stimeout.tv_sec = (int)timeout;
stimeout.tv_usec = (int)(timeout * 1000000) % 1000000;
stimeout.tv_sec = (int)timeout;
stimeout.tv_usec = (int)(timeout * 1000000) % 1000000;
while ((nfds = select(CUPS_SC_FD + 1, &input_set, NULL, NULL,
timeout < 0.0 ? NULL : &stimeout)) < 0 &&
(errno == EINTR || errno == EAGAIN))
;
if (select(CUPS_SC_FD + 1, &input_set, NULL, NULL, &stimeout) < 1)
{
DEBUG_puts("1cupsSideChannelRead: Select timeout");
return (-1);
}
}
#endif /* HAVE_POLL */
if (nfds < 1)
{
*status = nfds==0 ? CUPS_SC_STATUS_TIMEOUT : CUPS_SC_STATUS_IO_ERROR;
return (-1);
}
/*
* Read a side-channel message for the format:
*
@@ -191,9 +184,23 @@ cupsSideChannelRead(
if (errno != EINTR && errno != EAGAIN)
{
DEBUG_printf(("1cupsSideChannelRead: Read error: %s", strerror(errno)));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_IO_ERROR;
return (-1);
}
/*
* Watch for EOF or too few bytes...
*/
if (bytes < 4)
{
DEBUG_printf(("1cupsSideChannelRead: Short read of %d bytes", bytes));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_BAD_MESSAGE;
return (-1);
}
/*
* Validate the command code in the message...
*/
@@ -202,6 +209,8 @@ cupsSideChannelRead(
buffer[0] > CUPS_SC_CMD_SNMP_GET_NEXT)
{
DEBUG_printf(("1cupsSideChannelRead: Bad command %d!", buffer[0]));
*command = CUPS_SC_CMD_NONE;
*status = CUPS_SC_STATUS_BAD_MESSAGE;
return (-1);
}
@@ -379,6 +388,7 @@ cupsSideChannelSNMPWalk(
real_oidlen, /* Length of returned OID string */
oidlen; /* Length of first OID */
const char *current_oid; /* Current OID */
char last_oid[2048]; /* Last OID */
DEBUG_printf(("cupsSideChannelSNMPWalk(oid=\"%s\", timeout=%.3f, cb=%p, "
@@ -397,6 +407,7 @@ cupsSideChannelSNMPWalk(
current_oid = oid;
oidlen = (int)strlen(oid);
last_oid[0] = '\0';
do
{
@@ -422,7 +433,8 @@ cupsSideChannelSNMPWalk(
* Parse the response of the form "oid\0value"...
*/
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.')
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.' ||
!strcmp(real_data, last_oid))
{
/*
* Done with this set of OIDs...
@@ -448,6 +460,7 @@ cupsSideChannelSNMPWalk(
*/
current_oid = real_data;
strlcpy(last_oid, current_oid, sizeof(last_oid));
}
}
while (status == CUPS_SC_STATUS_OK);
+1
Ver Arquivo
@@ -55,6 +55,7 @@ typedef enum cups_sc_bidi_e cups_sc_bidi_t;
enum cups_sc_command_e /**** Request command codes ****/
{
CUPS_SC_CMD_NONE = 0, /* No command @private@ */
CUPS_SC_CMD_SOFT_RESET = 1, /* Do a soft reset */
CUPS_SC_CMD_DRAIN_OUTPUT = 2, /* Drain all pending output */
CUPS_SC_CMD_GET_BIDI = 3, /* Return bidirectional capabilities */
+36 -10
Ver Arquivo
@@ -3,7 +3,7 @@
*
* SNMP functions for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 2006-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -89,14 +89,14 @@ static char *asn1_get_string(unsigned char **buffer,
unsigned char *bufend,
int length, char *string,
int strsize);
static int asn1_get_length(unsigned char **buffer,
static unsigned asn1_get_length(unsigned char **buffer,
unsigned char *bufend);
static int asn1_get_type(unsigned char **buffer,
unsigned char *bufend);
static void asn1_set_integer(unsigned char **buffer,
int integer);
static void asn1_set_length(unsigned char **buffer,
int length);
unsigned length);
static void asn1_set_oid(unsigned char **buffer,
const int *oid);
static void asn1_set_packed(unsigned char **buffer,
@@ -608,6 +608,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
int count = 0; /* Number of OIDs found */
int request_id = 0; /* Current request ID */
cups_snmp_t packet; /* Current response packet */
int lastoid[CUPS_SNMP_MAX_OID];
/* Last OID we got */
/*
@@ -631,14 +633,15 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
*/
_cupsSNMPCopyOID(packet.object_name, prefix, CUPS_SNMP_MAX_OID);
lastoid[0] = -1;
for (;;)
{
request_id ++;
if (!_cupsSNMPWrite(fd, address, version, community,
CUPS_ASN1_GET_NEXT_REQUEST, request_id,
packet.object_name))
CUPS_ASN1_GET_NEXT_REQUEST, request_id,
packet.object_name))
{
DEBUG_puts("5_cupsSNMPWalk: Returning -1");
@@ -652,7 +655,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (-1);
}
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix))
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix) ||
_cupsSNMPIsOID(&packet, lastoid))
{
DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count));
@@ -666,6 +670,8 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (count > 0 ? count : -1);
}
_cupsSNMPCopyOID(lastoid, packet.object_name, CUPS_SNMP_MAX_OID);
count ++;
(*cb)(&packet, data);
@@ -1280,6 +1286,12 @@ asn1_get_integer(
int value; /* Integer value */
if (length > sizeof(int))
{
(*buffer) += length;
return (0);
}
for (value = (**buffer & 0x80) ? -1 : 0;
length > 0 && *buffer < bufend;
length --, (*buffer) ++)
@@ -1293,18 +1305,32 @@ asn1_get_integer(
* 'asn1_get_length()' - Get a value length.
*/
static int /* O - Length */
static unsigned /* O - Length */
asn1_get_length(unsigned char **buffer, /* IO - Pointer in buffer */
unsigned char *bufend) /* I - End of buffer */
{
int length; /* Length */
unsigned length; /* Length */
length = **buffer;
(*buffer) ++;
if (length & 128)
length = asn1_get_integer(buffer, bufend, length & 127);
{
int count; /* Number of bytes for length */
if ((count = length & 127) > sizeof(unsigned))
{
(*buffer) += count;
return (0);
}
for (length = 0;
count > 0 && *buffer < bufend;
count --, (*buffer) ++)
length = (length << 8) | **buffer;
}
return (length);
}
@@ -1523,7 +1549,7 @@ asn1_set_integer(unsigned char **buffer,/* IO - Pointer in buffer */
static void
asn1_set_length(unsigned char **buffer, /* IO - Pointer in buffer */
int length) /* I - Length value */
unsigned length) /* I - Length value */
{
if (length > 255)
{
+2 -2
Ver Arquivo
@@ -118,8 +118,8 @@ cupsTempFd(char *filename, /* I - Pointer to buffer */
* Format a string using the hex time values...
*/
snprintf(filename, len - 1, "%s/%08lx%05lx", tmpdir,
(unsigned long)curtime.tv_sec, (unsigned long)curtime.tv_usec);
snprintf(filename, len - 1, "%s/%05x%08x", tmpdir, (unsigned)getpid(),
(unsigned)(curtime.tv_sec + curtime.tv_usec + tries));
#endif /* WIN32 */
/*
+1 -1
Ver Arquivo
@@ -39,7 +39,7 @@
*Throughput: "1"
*LandscapeOrientation: Plus90
*TTRasterizer: Type42
*cupsFilter: "application/vnd.cups-raster - 0"
*cupsFilter: "application/vnd.cups-raster 0 -"
*RequiresPageRegion All: True
*% These constraints are used to test ppdConflicts() and cupsResolveConflicts()
+4 -8
Ver Arquivo
@@ -375,9 +375,9 @@ random_tests(void)
fputs("cupsFileSeek(), cupsFileRead(): ", stdout);
for (num_records = (pass + 1) * 256, count = (pass + 1) * 256,
record = rand() % num_records;
record = CUPS_RAND() % num_records;
count > 0;
count --, record = (record + (rand() & 31) - 16 + num_records) %
count --, record = (record + (CUPS_RAND() & 31) - 16 + num_records) %
num_records)
{
/*
@@ -471,14 +471,10 @@ read_write_tests(int compression) /* I - Use compression? */
* Initialize the write buffer with random data...
*/
#ifdef WIN32
srand((unsigned)time(NULL));
#else
srand(time(NULL));
#endif /* WIN32 */
CUPS_SRAND(time(NULL));
for (i = 0; i < (int)sizeof(writebuf); i ++)
writebuf[i] = rand();
writebuf[i] = CUPS_RAND();
/*
* cupsFileOpen(write)
+60 -15
Ver Arquivo
@@ -570,17 +570,17 @@ cupsGetJobs2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_D
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
static const char * const attrs[] = /* Requested attributes */
{
"document-format",
"job-id",
"job-priority",
"job-k-octets",
"job-name",
"job-originating-user-name",
"job-printer-uri",
"job-priority",
"job-state",
"time-at-completed",
"time-at-creation",
"time-at-processing",
"job-printer-uri",
"document-format",
"job-name",
"job-originating-user-name"
"time-at-processing"
};
@@ -1456,6 +1456,9 @@ cupsPrintFiles2(
char buffer[8192]; /* Copy buffer */
ssize_t bytes; /* Bytes in buffer */
http_status_t status; /* Status of write */
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
ipp_status_t cancel_status; /* Status code to preserve */
char *cancel_message; /* Error message to preserve */
DEBUG_printf(("cupsPrintFiles2(http=%p, name=\"%s\", num_files=%d, "
@@ -1507,16 +1510,40 @@ cupsPrintFiles2(
* Unable to open print file, cancel the job and return...
*/
cupsCancelJob2(http, name, job_id, 0);
return (0);
_cupsSetError(IPP_DOCUMENT_ACCESS_ERROR, NULL, 0);
goto cancel_job;
}
status = cupsStartDocument(http, name, job_id, docname, format,
i == (num_files - 1));
do
{
cupsFileRewind(fp);
while (status == HTTP_CONTINUE &&
(bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
status = cupsWriteRequestData(http, buffer, bytes);
status = cupsStartDocument(http, name, job_id, docname, format,
i == (num_files - 1));
while (status == HTTP_CONTINUE &&
(bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
status = cupsWriteRequestData(http, buffer, bytes);
if (status == HTTP_UNAUTHORIZED)
{
char resource[1024]; /* Printer resource */
snprintf(resource, sizeof(resource), "/printers/%s", name);
if (!cupsDoAuthentication(http, "POST", resource))
{
if (httpReconnect(http))
{
_cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
return (0);
}
}
else
status = HTTP_AUTHORIZATION_CANCELED;
}
}
while (status == HTTP_UNAUTHORIZED);
cupsFileClose(fp);
@@ -1526,12 +1553,30 @@ cupsPrintFiles2(
* Unable to queue, cancel the job and return...
*/
cupsCancelJob2(http, name, job_id, 0);
return (0);
goto cancel_job;
}
}
return (job_id);
/*
* If we get here, something happened while sending the print job so we need
* to cancel the job without setting the last error (since we need to preserve
* the current error...
*/
cancel_job:
cancel_status = cg->last_error;
cancel_message = cg->last_status_message ?
_cupsStrRetain(cg->last_status_message) : NULL;
cupsCancelJob2(http, name, job_id, 0);
cg->last_error = cancel_status;
cg->last_status_message = cancel_message;
return (0);
}
+30 -30
Ver Arquivo
@@ -7,33 +7,33 @@ Terminal=false
Type=Application
Name=Manage Printing
Comment=CUPS Web Interface
Name[de.UTF-8]=Druckerverwaltung
Comment[de.UTF-8]=CUPS Webinterface
Name[en_US.UTF-8]=Manage Printing
Comment[en_US.UTF-8]=CUPS Web Interface
Name[es.UTF-8]=Administrar impresión
Comment[es.UTF-8]=Interfaz Web de CUPS
Name[et.UTF-8]=Trükkimise haldur
Comment[et.UTF-8]=CUPS-i veebiliides
Name[eu.UTF-8]=Kudeatu inprimaketak
Comment[eu.UTF-8]=CUPSen web interfazea
Name[fr.UTF-8]=Gestionnaire d'impression
Comment[fr.UTF-8]=Interface Web de CUPS
Name[he.UTF-8]=נהל הדפסות
Comment[he.UTF-8]=ממשק דפדפן של CUPS
Name[id.UTF-8]=Manajemen Pencetakan
Comment[id.UTF-8]=Antarmuka Web CUPS
Name[it.UTF-8]=Gestione stampa
Comment[it.UTF-8]=Interfaccia web di CUPS
Name[ja.UTF-8]=印刷の管理
Comment[ja.UTF-8]=CUPS Web インタフェース
Name[pl.UTF-8]=Zarządzanie drukowaniem
Comment[pl.UTF-8]=Interfejs WWW CUPS
Name[ru.UTF-8]=Настройка печати
Comment[ru.UTF-8]=Настройка CUPS
Name[sv.UTF-8]=Hantera skrivare
Comment[sv.UTF-8]=CUPS webb-gränssnitt
Name[zh.UTF-8]=打印机管理
Comment[zh.UTF-8]=CUPS网页界面
Name[zh_TW.UTF-8]=印表管理
Comment[zh_TW.UTF-8]=CUPS 網頁介面
Name[de]=Druckerverwaltung
Comment[de]=CUPS Webinterface
Name[en_US]=Manage Printing
Comment[en_US]=CUPS Web Interface
Name[es]=Administrar impresión
Comment[es]=Interfaz Web de CUPS
Name[et]=Trükkimise haldur
Comment[et]=CUPS-i veebiliides
Name[eu]=Kudeatu inprimaketak
Comment[eu]=CUPSen web interfazea
Name[fr]=Gestionnaire d'impression
Comment[fr]=Interface Web de CUPS
Name[he]=נהל הדפסות
Comment[he]=ממשק דפדפן של CUPS
Name[id]=Manajemen Pencetakan
Comment[id]=Antarmuka Web CUPS
Name[it]=Gestione stampa
Comment[it]=Interfaccia web di CUPS
Name[ja]=印刷の管理
Comment[ja]=CUPS Web インタフェース
Name[pl]=Zarządzanie drukowaniem
Comment[pl]=Interfejs WWW CUPS
Name[ru]=Настройка печати
Comment[ru]=Настройка CUPS
Name[sv]=Hantera skrivare
Comment[sv]=CUPS webb-gränssnitt
Name[zh]=打印机管理
Comment[zh]=CUPS网页界面
Name[zh_TW]=印表管理
Comment[zh_TW]=CUPS 網頁介面
+2 -2
Ver Arquivo
@@ -190,8 +190,8 @@ install-languages:
for lang in $(LANGUAGES); do \
if test -d $$lang; then \
$(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang; \
$(INSTALL_MAN) $$lang/index.html $(DOCDIR)/$$lang; \
test -f $$lang/cups.css && $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang; \
$(INSTALL_DATA) $$lang/index.html $(DOCDIR)/$$lang; \
$(INSTALL_DATA) $$lang/cups.css $(DOCDIR)/$$lang >/dev/null 2>&1 || true; \
fi; \
done
+5 -1
Ver Arquivo
@@ -27,7 +27,7 @@ P.example {
font-style: italic;
margin-left: 36pt;
}
PRE.example {
background: white;
border: dotted thin #999999;
@@ -238,6 +238,10 @@ H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
color: white;
}
TH.conflict {
text-align: right;
}
H1.title {
display: none;
}
+3 -3
Ver Arquivo
@@ -16,8 +16,8 @@ SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
<TD CLASS="sel"><A HREF="/">&nbsp;&nbsp;Startseite&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Verwaltung&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Klassen&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;On-Line&nbsp;Hilfe&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Auftr&uuml;ge&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;Online&nbsp;Hilfe&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Auftr&auml;ge&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Drucker&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
@@ -31,7 +31,7 @@ AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
<H1>Common UNIX Printing System @CUPS_VERSION@</H1>
<P>CUPS ist das auf Standards basierte, Open-Source Drucker System, welches von
<P>CUPS ist das auf Standards basierte, Open-Source Drucker System, welches von
<A HREF="http://www.apple.com/">Apple Inc.</A> f&uuml;r Mac OS<SUP>&reg;</SUP> X und
andere UNIX<SUP>&reg;</SUP>-&auml;hnliche Betriebssysteme entwickelt wird.</P>
+2 -2
Ver Arquivo
@@ -21,8 +21,8 @@ can be modified using your favorite text editor, you should
normally use the <A HREF="man-lpadmin.html">lpadmin(8)</A>
command, web interface, or any of the available GUIs to manage
your classes instead. If you do choose to edit this file
manually, you will need to restart the scheduler to make them
active.</P>
manually, you will need to stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+4 -2
Ver Arquivo
@@ -123,7 +123,8 @@ to the access log file. The following levels are defined:</P>
Allow from nnn.nnn.nnn.nnn
Allow from nnn.nnn.nnn.nnn/mm
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
Allow from xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
Allow from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
Allow from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]/mmm
Allow from @LOCAL
Allow from @IF(name)
&lt;/Location&gt;
@@ -1071,7 +1072,8 @@ printers are shared (published) by default. The default is
Deny from nnn.nnn.nnn.nnn
Deny from nnn.nnn.nnn.nnn/mm
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
Deny from xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
Deny from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
Deny from [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]/mmm
Deny from @LOCAL
Deny from @IF(name)
&lt;/Location&gt;
+2 -2
Ver Arquivo
@@ -45,10 +45,10 @@ the page started printing. The format of this field is identical
to the <I>data-time</I> field in the <VAR>access_log</VAR>
file.</P>
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the
<P>The <I>page-number</I> and <I>num-copies</I> fields contain the
page number and number of copies being printed of that page. For
printers that cannot produce copies on their own, the
<I>num-pages</I> field will always be 1.</P>
<I>num-copies</I> field will always be 1.</P>
<P>The <I>job-billing</I> field contains a copy of the
<CODE>job-billing</CODE> attribute provided with the IPP
+86 -79
Ver Arquivo
@@ -380,10 +380,10 @@ least 100 files.</p>
inclusion in a driver. The name with optional user text defines
the name for the media size and is used with the <a
href='#MediaSize'><code>MediaSize</code></a> directive to associate
the media size with the driver. The name may only contain
letters, numbers, and the underscore and may not exceed 40
characters in length. The user text, if supplied, may not exceed
80 characters in length.</p>
the media size with the driver. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).
The user text, if supplied, may not exceed 80 bytes in length.</p>
<p>The width and length define the dimensions of the media. Each
number is optionally followed by one of the following unit
@@ -459,17 +459,15 @@ Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>Attribute</code> directive creates a PPD attribute. The
name is any combination of letters, numbers, and the underscore
and can be up to 40 characters in length.</p>
name may contain up to 40 ASCII characters within the range of decimal
33 to decimal 126 inclusive, except for the characters comma (44),
slash (47) and colon (58).</p>
<p>The selector can be the empty string (<code>""</code>), a keyword
consisting of up to 40 letters, numbers, and the underscore, or
a string composed of a keyword and user text of up to 80
characters.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</p>
<p>The value is any string or number; the string may contain
multiple lines, however no one line may exceed 255
characters.</p>
<p>The value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -495,14 +493,15 @@ Choice "False/No" "&lt;&lt;/cupsCompression 0&gt;&gt;setpagedevice"
<h3>Description</h3>
<p>The <code>Choice</code> directive adds a single choice to the
current option. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
current option. The name may contain up to 40 ASCII characters within
the range of decimal 33 to decimal 126 inclusive, except for the
characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
<p>If provided, the text can be any string up to 80 bytes
in length. If no text is provided, the name is used.</p>
<p>The code is any string and may contain multiple lines,
however no one line may exceed 255 characters.</p>
however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -568,11 +567,12 @@ ColorModel CMYK cmyk chunky 0
<p>The <code>ColorModel</code> directive is a convenience directive
which creates a ColorModel option and choice for the current
printer driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
printer driver. The name may contain up to 40 ASCII characters within
the range of decimal 33 to decimal 126 inclusive, except for the
characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The colorspace argument is one of the standard colorspace
keywords defined later in this appendix in the section titled,
@@ -698,7 +698,7 @@ MA 02111 USA"
<p>The <code>Copyright</code> directive adds text comments to the
top of a PPD file, typically for use in copyright notices. The
text argument can contain multiple lines of text, but no line
may exceed 255 characters.</p>
may exceed 255 bytes.</p>
<h2 class="title"><a name='CustomMedia'>CustomMedia</a></h2>
@@ -730,11 +730,12 @@ CustomMedia "A4/A4 - 210x297mm" 210mm 297mm 12 12 12 12
<h3>Description</h3>
<p>The <code>CustomMedia</code> directive adds a custom media size to
the driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
the driver. The name may contain up to 40 ASCII characters within the
range of decimal 33 to decimal 126 inclusive, except for the characters
comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The width and length arguments specify the dimensions of the
media as defined for the <a href="#_media"><code>#media</code></a>
@@ -747,7 +748,7 @@ printable margins of the media.</p>
PostScript commands to run for the <code>PageSize</code> and
<code>PageRegion</code> options, respectively. The commands can
contain multiple lines, however no line may be more than 255
characters in length.</p>
bytes in length.</p>
<h3>See Also</h3>
@@ -823,11 +824,12 @@ therefore the darkness of the print.</p>
the Dymo driver from 0 (lowest) to 3 (highest), with 2
representing the normal setting.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1044,14 +1046,15 @@ Finishing "Glossy/Photo Overcoat"
<h3>Description</h3>
<p>The <code>Finishing</code> directive adds a choice to the
<code>cupsFinishing</code> option. The name is any combination of
letters, numbers, and the underscore and can be up to 40
characters in length. The name is stored in the
<code>OutputType</code> attribute in the PostScript page device
dictionary.</p>
<code>cupsFinishing</code> option. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The name is stored in the <code>OutputType</code> attribute in the
PostScript page device dictionary.</p>
<h3>See Also</h3>
@@ -1091,8 +1094,7 @@ Font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
<h3>Description</h3>
<p>The <code>Font</code> directive defines a "device font" for the
current printer driver. The name is the PostScript font
name.</p>
current printer driver. The name is the PostScript font name.</p>
<p>The encoding is the default encoding of the font, usually
<code>Standard</code>, <code>Expert</code>, or <code>Special</code>, as
@@ -1139,14 +1141,16 @@ Group "Special/Vendor Options"
<h3>Description</h3>
<p>The <code>Group</code> directive specifies the group for new
<code>Option</code> directives. The name is any combination of
letters, numbers, and the underscore and can be up to 40
characters in length. The names <code>General</code> and
<code>InstallableOptions</code> are predefined for the standard
Adobe UI keywords and for installable options, respectively.</p>
<code>Option</code> directives. The name may contain up to 40 ASCII
characters within the range of decimal 33 to decimal 126 inclusive,
except for the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 40 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 40 bytes in length.
If no text is provided, the name is used.</p>
<p>The names <code>General</code> and <code>InstallableOptions</code>
are predefined for the standard Adobe UI keywords and for installable
options, respectively.</p>
<center><table width='80%' border='1' bgcolor='#cccccc' cellpadding='5' cellspacing='0'>
<tr>
@@ -1154,8 +1158,8 @@ in length. If no text is provided, the name is used.</p>
<p>Because of certain API binary compatibility issues,
CUPS limits the length of PPD group translation strings
(text) to 40 characters, while the PPD specification
allows for up to 80 characters.</p>
(text) to 40 bytes, while the PPD specification
allows for up to 80 bytes.</p>
</td>
</tr>
@@ -1229,11 +1233,12 @@ from 0 to 2<sup>32</sup>-1 specifying the value that is placed
in the <code>MediaPosition</code> attribute in the PostScript page
device dictionary.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1271,11 +1276,12 @@ Installable "Option1/Duplexer Installed"
<p>The <code>Installable</code> directive adds a new boolean option
to the <code>InstallableOptions</code> group with a default value of
<code>False</code>. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
<code>False</code>. The name may contain up to 40 ASCII characters
within the range of decimal 33 to decimal 126 inclusive, except for
the characters comma (44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h2 class="title"><a name='LocAttribute'>LocAttribute</a></h2>
@@ -1295,17 +1301,15 @@ LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>LocAttribute</code> directive creates a localized PPD
attribute. The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
attribute. The name may contain up to 40 ASCII characters within the
range of decimal 33 to decimal 126 inclusive, except for the characters
comma (44), slash (47) and colon (58).</p>
<p>The selector can be the empty string (<code>""</code>), a keyword
consisting of up to 40 letters, numbers, and the underscore, or
a string composed of a keyword and user text of up to 80
characters.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</p>
<p>The value is any string or number; the string may contain
multiple lines, however no one line may exceed 255
characters.</p>
<p>The value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 bytes.</p>
<h3>See Also</h3>
@@ -1458,13 +1462,15 @@ from 0 to 2<sup>32</sup>-1 specifying the value that is placed
in the <code>cupsMediaType</code> attribute in the PostScript page
device dictionary.</p>
<p>The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length. The name is
placed in the <code>MediaType</code> attribute in the PostScript
page device dictionary.</p>
<p>The name may contain up to 40 ASCII characters within the range of
decimal 33 to decimal 126 inclusive, except for the characters comma
(44), slash (47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The name is placed in the <code>MediaType</code> attribute in the
PostScript page device dictionary.</p>
<h3>See Also</h3>
@@ -1532,7 +1538,7 @@ name is any string of letters, numbers, spaces, and the
characters ".", "/", "-", and "+" and should not begin with the
manufacturer name since the PPD compiler will add this
automatically for you. The maximum length of the name string is
31 characters to conform to the Adobe limits on the length of
31 bytes to conform to the Adobe limits on the length of
<code>ShortNickName</code>.</p>
<h3>See Also</h3>
@@ -1598,11 +1604,12 @@ Option "fooFinish/Finishing Option" PickOne DocumentSetup 10
<p>The <code>Option</code> directive creates a new option in the
current group, by default the <code>General</code> group. The name
is any combination of letters, numbers, and the underscore and
can be up to 40 characters in length.</p>
may contain up to 40 ASCII characters within the range of decimal 33
to decimal 126 inclusive, except for the characters comma (44), slash
(47) and colon (58).</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<p>The type argument is one of the following keywords:</p>
@@ -1749,8 +1756,8 @@ for asymmetric resolutions. The <code>HHH</code> and <code>VVV</code> in
the examples represent the horizontal and vertical resolutions
which must be positive integer values.</p>
<p>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<p>If provided, the text can be any string up to 80 bytes in length.
If no text is provided, the name is used.</p>
<h3>See Also</h3>
+2 -2
Ver Arquivo
@@ -21,8 +21,8 @@ and can be modified using your favorite text editor, you should
normally use the <A HREF="man-lpadmin.html">lpadmin(8)</A>
command, web interface, or any of the available GUIs to manage
your printers instead. If you do choose to edit this file
manually, you will need to restart the scheduler to make them
active.</P>
manually, you will need to stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+13 -2
Ver Arquivo
@@ -8,7 +8,7 @@
</head>
<body>
<!--
"$Id: spec-ipp.html 8801 2009-08-29 06:05:14Z mike $"
"$Id: spec-ipp.html 8816 2009-09-14 21:41:50Z mike $"
CUPS IPP specification for the Common UNIX Printing System (CUPS).
@@ -558,7 +558,7 @@ job as well.
<h4>Cancel-Job Request</h4>
<p>The following groups of attributes are supplied as part of the
Set-Job-Attributes request:
Cancel-Job request:
<p>Group 1: Operation Attributes
@@ -632,6 +632,17 @@ Purge-Jobs request:
<dd>The client MUST supply a URI for the specified printer or
"ipp://.../printers" for all printers and classes.
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"requesting-user-name" (name(MAX)):
<dd>The client OPTIONALLY supplies this attribute to specify whose jobs
jobs are purged or canceled.
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"my-jobs" (boolean):
<dd>The client OPTIONALLY supplies this attribute to specify that only
the jobs owned by the requesting user are purged or canceled. The
default is false.
<dt><span class="info">CUPS 1.2/Mac OS X 10.5</span>"purge-jobs" (boolean):
<dd>The client OPTIONALLY supplies this attribute to specify
+13 -5
Ver Arquivo
@@ -8,7 +8,7 @@
</head>
<body>
<!--
"$Id: spec-ppd.html 8673 2009-05-22 17:34:15Z mike $"
"$Id: spec-ppd.html 8933 2009-12-16 00:08:31Z mike $"
CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
@@ -161,9 +161,8 @@ based on well-known colorspaces such as sRGB and Adobe RGB.</p>
<blockquote><b>Note:</b>
<p>At this time, none of the CUPS raster
filters support ICC profiles. This will be addressed as time
and resources permit.</p>
<p>At this time, none of the CUPS raster filters support ICC profiles. This
will be addressed as time and resources permit.</p>
</blockquote>
@@ -174,7 +173,7 @@ gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"</p>
<p>This string attribute specifies an sRGB-based color profile
consisting of gamma and density controls and a 3x3 CMY color
transform matrix.</p>
transform matrix. <em>This attribute is not supported on Mac OS X.</em></p>
<p>The <i>Resolution</i> and <i>MediaType</i> values may be "-"
to act as a wildcard. Otherwise they must match one of the
@@ -277,6 +276,15 @@ data as requested by the driver. The <tt>APCustomColorMatchingProfile</tt>
and <tt>APDefaultColorMatchingProfile</tt> attributes specify alternate
color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.</p>
<blockquote><b>Note:</b>
<p>Prior to Mac OS X 10.6, the default RGB color space was Apple's "GenericRGB".
The new default in Mac OS X 10.6 and later is "sRGB". For more information, see
<a href="http://support.apple.com/kb/HT3712">"Mac OS X v10.6: About gamma
2.2"</a> on Apple's support site.</p>
</blockquote>
<h4><span class='info'>Mac OS X 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
<p class='summary'>*APCustomColorMatchingName name/text: ""</p>
+107
Ver Arquivo
@@ -0,0 +1,107 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>Beranda - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
<LINK REL="SHORTCUT ICON" HREF="/images/cups-icon.png" TYPE="image/png">
</HEAD>
<BODY>
<TABLE CLASS="page" SUMMARY="{title}">
<TR><TD CLASS="body">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR HEIGHT="36">
<TD><A HREF="http://www.cups.org/" TARGET="_blank"><IMG
SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
<TD CLASS="sel"><A HREF="/">&nbsp;&nbsp;Beranda&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Administrasi&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Kelas&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;Bantuan&nbsp;Langsung&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Tugas&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Pencetak&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
<TD><IMG SRC="/images/right.gif" WIDTH="4" HEIGHT="36" ALT=""></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD STYLE="padding-right: 20px;">
<H1>CUPS @CUPS_VERSION@</H1>
<P>CUPS adalah sistem pencetakan berstandar dan berkode sumber terbuka, dikembangkan oleh
<A HREF="http://www.apple.com/">Apple Inc.</A> untuk Mac OS<SUP>&reg;</SUP> X dan sistem
operasi serupa UNIX<SUP>&reg;</SUP> lainnya.</P>
</TD>
<TD><A HREF="http://www.cups.org/"><IMG SRC="images/cups-icon.png" WIDTH="128"
HEIGHT="128" ALT="CUPS"></A></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-right: 20px;">
<H2>CUPS bagi Pengguna</H2>
<P><A HREF="help/overview.html">Ikhtisar CUPS</A></P>
<P><A HREF="help/options.html">Opsi dan Pencetakan dari Baris Perintah</A></P>
<P><A HREF="help/whatsnew.html">Apa yang Baru di CUPS 1.4</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Forum Pengguna</A></P>
</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
<H2>CUPS bagi Administrator</H2>
<P><A HREF="admin">Menambah Pencetak dan Kelas</A></P>
<P><A HREF="help/policies.html">Mengatur Kebijakan Operasi</A></P>
<P><A HREF="help/accounting.html">Dasar Akunting Pencetak</A></P>
<P><A HREF="help/security.html">Keamanan Server</A></P>
<P><A HREF="help/kerberos.html">Menggunakan Otentikasi Kerberos</A></P>
<P><A HREF="help/network.html">Menggunakan Pencetak di Jaringan</A></P>
<P><A HREF="help/ref-cupsd-conf.html">Referensi cupsd.conf</A></P>
<P><A HREF="http://www.cups.org/ppd.php">Mencari Penggerak Pencetak</A></P>
</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
<H2>CUPS bagi Pengembang</H2>
<P><A HREF="help/api-overview.html">Pengenalan untuk Pemrograman CUPS</A></P>
<P><A HREF="help/api-cups.html">API di CUPS</A></P>
<P><A HREF="help/api-filter.html">Penyaring dan Pemrograman Balik (<I>Backend Programming</I>)</A></P>
<P><A HREF="help/api-httpipp.html">API di HTTP dan IPP</A></P>
<P><A HREF="help/api-ppd.html">API di PPD</A></P>
<P><A HREF="help/api-raster.html">API di Raster</A></P>
<P><A HREF="help/ref-ppdcfile.html">Referensi Kompiler Berkas Penggerak PPD</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Forum Pengembang</A></P>
</TD></TR>
</TABLE>
</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR><TD CLASS="trailer">CUPS dan logo CUPS logo adalah merek dagang dari
<A HREF="http://www.apple.com">Apple Inc.</A> Hak cipta CUPS pada 2007-2009 Apple
Inc. Semua hak terpelihara.</TD></TR>
</TABLE>
</BODY>
</HTML>
+107
Ver Arquivo
@@ -0,0 +1,107 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<TITLE>Home - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
<LINK REL="SHORTCUT ICON" HREF="/images/cups-icon.png" TYPE="image/png">
</HEAD>
<BODY>
<TABLE CLASS="page" SUMMARY="{title}">
<TR><TD CLASS="body">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR HEIGHT="36">
<TD><A HREF="http://www.cups.org/" TARGET="_blank"><IMG
SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
<TD CLASS="sel"><A HREF="/">&nbsp;&nbsp;Home&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Amministrazione&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Classi&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;Guida&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Stampe&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Stampanti&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Aiuto alla ricerca"
AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
<TD><IMG SRC="/images/right.gif" WIDTH="4" HEIGHT="36" ALT=""></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD STYLE="padding-right: 20px;">
<H1>CUPS @CUPS_VERSION@</H1>
<P>CUPS è un sistema di stampa basato su standard, open source sviluppato da
<A HREF="http://www.apple.com/">Apple Inc.</A> per Mac OS<SUP>&reg;</SUP> X e
altri sistemi UNIX<SUP>&reg;</SUP> e derivati.</P>
</TD>
<TD><A HREF="http://www.cups.org/"><IMG SRC="images/cups-icon.png" WIDTH="128"
HEIGHT="128" ALT="CUPS"></A></TD>
</TR>
</TABLE>
<TABLE CLASS="indent" SUMMARY="">
<TR><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-right: 20px;">
<H2>CUPS per utenti</H2>
<P><A HREF="help/overview.html">Panoramica di CUPS</A></P>
<P><A HREF="help/options.html">Stampa e opzioni da riga di comando</A></P>
<P><A HREF="help/whatsnew.html">Cosa c'è di nuovo in CUPS 1.4</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Forum degli utenti</A></P>
</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
<H2>CUPS per amministratori</H2>
<P><A HREF="admin">Aggiungere stampanti e classi</A></P>
<P><A HREF="help/policies.html">Gestire i criteri di funzionamento</A></P>
<P><A HREF="help/accounting.html">Basi di controllo di accesso alle stampanti</A></P>
<P><A HREF="help/security.html">Sicurezza del server</A></P>
<P><A HREF="help/kerberos.html">Utilizzare l'autenticazione Kerberos</A></P>
<P><A HREF="help/network.html">Utilizzare stampanti di rete</A></P>
<P><A HREF="help/ref-cupsd-conf.html">Riferimenti al cupsd.conf</A></P>
<P><A HREF="http://www.cups.org/ppd.php">Trovare driver per le stampanti</A></P>
</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
<H2>CUPS per sviluppatori</H2>
<P><A HREF="help/api-overview.html">Introduzione alla programmazione di CUPS</A></P>
<P><A HREF="help/api-cups.html">API di CUPS</A></P>
<P><A HREF="help/api-filter.html">Programmazione di filtri e motori</A></P>
<P><A HREF="help/api-httpipp.html">API HTTP e IPP</A></P>
<P><A HREF="help/api-ppd.html">API PPD</A></P>
<P><A HREF="help/api-raster.html">API Raster</A></P>
<P><A HREF="help/ref-ppdcfile.html">Riferimenti al file del compilatore di driver PPD</A></P>
<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Forum degli sviluppatori</A></P>
</TD></TR>
</TABLE>
</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR><TD CLASS="trailer">CUPS e il logo CUPS sono marchi di
<A HREF="http://www.apple.com">Apple Inc.</A> CUPS è un copyright 2007-2009 di Apple
Inc. Tutti i diritti sono riservati.</TD></TR>
</TABLE>
</BODY>
</HTML>
+5 -19
Ver Arquivo
@@ -24,21 +24,7 @@
*/
#include "driver.h"
/*
* Random number function to use, in order of preference...
*/
#ifdef HAVE_RANDOM
# define RANDOM_FUNCTION random
#elif defined(HAVE_MRAND48)
# define RANDOM_FUNCTION mrand48
#elif defined(HAVE_LRAND48)
# define RANDOM_FUNCTION lrand48
#else
# define RANDOM_FUNCTION rand
#endif /* HAVE_RANDOM */
#include <config.h>
/*
@@ -169,8 +155,8 @@ cupsDitherLine(cups_dither_t *d, /* I - Dither data */
if (errrange > 1)
{
errbase0 = errbase + (RANDOM_FUNCTION() % errrange);
errbase1 = errbase + (RANDOM_FUNCTION() % errrange);
errbase0 = errbase + (CUPS_RAND() % errrange);
errbase1 = errbase + (CUPS_RAND() % errrange);
}
else
errbase0 = errbase1 = errbase;
@@ -263,8 +249,8 @@ cupsDitherLine(cups_dither_t *d, /* I - Dither data */
if (errrange > 1)
{
errbase0 = errbase + (RANDOM_FUNCTION() % errrange);
errbase1 = errbase + (RANDOM_FUNCTION() % errrange);
errbase0 = errbase + (CUPS_RAND() % errrange);
errbase1 = errbase + (CUPS_RAND() % errrange);
}
else
errbase0 = errbase1 = errbase;
+1 -1
Ver Arquivo
@@ -144,7 +144,7 @@ ParseCommand(FILE *fp, /* I - File to read from */
if (!strcasecmp(name, "LB"))
{
bufptr = buf;
while ((ch = getc(fp)) != StringTerminator)
while ((ch = getc(fp)) != StringTerminator && ch != EOF)
if (bufptr < (buf + sizeof(buf) - 1))
*bufptr++ = ch;
*bufptr = '\0';
+3 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* BMP image routines for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2008 by Apple Inc.
* Copyright 2007-2009 by Apple Inc.
* Copyright 1993-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -170,6 +170,8 @@ _cupsImageReadBMP(
if (colors_used > 0)
fread(colormap, colors_used, 4, fp);
else
memset(colormap, 0, sizeof(colormap));
/*
* Setup image and buffers...
+6 -5
Ver Arquivo
@@ -26,6 +26,7 @@
* Include necessary headers...
*/
#include <config.h>
#include <cups/raster.h>
#include <stdlib.h>
#include <sys/time.h>
@@ -275,26 +276,26 @@ write_test(int fd, /* I - File descriptor to write to */
* text with some whitespace.
*/
srand(time(NULL));
CUPS_SRAND(time(NULL));
memset(data, 0, sizeof(data));
for (y = 0; y < 28; y ++)
{
for (x = rand() & 127, count = (rand() & 15) + 1;
for (x = CUPS_RAND() & 127, count = (CUPS_RAND() & 15) + 1;
x < sizeof(data[0]);
x ++, count --)
{
if (count <= 0)
{
x += (rand() & 15) + 1;
count = (rand() & 15) + 1;
x += (CUPS_RAND() & 15) + 1;
count = (CUPS_RAND() & 15) + 1;
if (x >= sizeof(data[0]))
break;
}
data[y][x] = rand();
data[y][x] = CUPS_RAND();
}
}
+7095
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+215 -373
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+3
Ver Arquivo
@@ -168,6 +168,9 @@ ppdcCatalog::find_message(
ppdcMessage *m; // Current message
if (!*id)
return (id);
for (m = (ppdcMessage *)messages->first();
m;
m = (ppdcMessage *)messages->next())
+10 -13
Ver Arquivo
@@ -690,7 +690,7 @@ ppdcDriver::write_ppd_file(
for (int i = 0; i < 9; i ++)
_cupsStrFormatd(profile[i], profile[i] + sizeof(profile[0]),
p->profile[i], loc);
cupsFilePrintf(fp,
"*cupsColorProfile %s/%s: \"%s %s %s %s %s %s %s %s %s %s "
"%s\"%s", p->resolution->value, p->media_type->value,
@@ -1026,7 +1026,7 @@ ppdcDriver::write_ppd_file(
if (!o->choices->count)
continue;
if (!o->text->value || !strcmp(o->name->value, o->text->value))
if (!o->text->value)
cupsFilePrintf(fp, "*OpenUI *%s/%s: ", o->name->value,
catalog->find_message(o->name->value));
else
@@ -1093,9 +1093,9 @@ ppdcDriver::write_ppd_file(
c = (ppdcChoice *)o->choices->next())
{
// Write this choice...
if (!c->text->value || !strcmp(c->name->value, c->text->value))
cupsFilePrintf(fp, "*%s %s: \"%s\"%s", o->name->value,
catalog->find_message(c->name->value),
if (!c->text->value)
cupsFilePrintf(fp, "*%s %s/%s: \"%s\"%s", o->name->value,
c->name->value, catalog->find_message(c->name->value),
c->code->value, lf);
else
cupsFilePrintf(fp, "*%s %s/%s: \"%s\"%s", o->name->value,
@@ -1138,10 +1138,11 @@ ppdcDriver::write_ppd_file(
if (!a->selector->value || !a->selector->value[0])
cupsFilePrintf(fp, "*%s", a->name->value);
else if (!a->text->value || !a->text->value[0])
cupsFilePrintf(fp, "*%s %s", a->name->value, a->selector->value);
cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value,
catalog->find_message(a->selector->value));
else
cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value,
a->text->value);
catalog->find_message(a->text->value));
cupsFilePrintf(fp, ": %s%s", a->value->value, lf);
}
@@ -1278,12 +1279,8 @@ ppdcDriver::write_ppd_file(
// Finally the localizable attributes...
for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next())
{
if ((!a->text || !a->text->value || !a->text->value[0]) &&
strncmp(a->name->value, "Custom", 6) &&
strncmp(a->name->value, "ParamCustom", 11))
continue;
if (!a->localizable &&
(!a->text || !a->text->value || !a->text->value[0]) &&
strcmp(a->name->value, "APCustomColorMatchingName") &&
strcmp(a->name->value, "APPrinterPreset") &&
strcmp(a->name->value, "cupsICCProfile") &&
@@ -1291,7 +1288,7 @@ ppdcDriver::write_ppd_file(
strcmp(a->name->value, "cupsMarkerName") &&
strncmp(a->name->value, "Custom", 6) &&
strncmp(a->name->value, "ParamCustom", 11))
continue;
continue;
cupsFilePrintf(fp, "*%s.%s %s/%s: \"%s\"%s", locale->value,
a->name->value, a->selector->value,
+3 -2
Ver Arquivo
@@ -3,7 +3,7 @@
//
// Source class for the CUPS PPD Compiler.
//
// Copyright 2007-2009 by Apple Inc.
// Copyright 2007-2010 by Apple Inc.
// Copyright 2002-2007 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -3514,7 +3514,8 @@ ppdcSource::write_file(const char *f) // I - File to write
for (d = (ppdcDriver *)drivers->first(); d; d = (ppdcDriver *)drivers->next())
{
// Start the driver...
cupsFilePrintf(fp, "\n// %s %s\n", d->manufacturer->value, d->model_name->value);
cupsFilePrintf(fp, "\n// %s %s\n", d->manufacturer->value,
d->model_name->value);
cupsFilePuts(fp, "{\n");
// Write the copyright stings...
+18 -2
Ver Arquivo
@@ -3,7 +3,7 @@
//
// PPD file compiler main entry for the CUPS PPD Compiler.
//
// Copyright 2007-2008 by Apple Inc.
// Copyright 2007-2010 by Apple Inc.
// Copyright 2002-2007 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -52,6 +52,8 @@ main(int argc, // I - Number of command-line arguments
char *opt, // Current option
*value, // Value in option
*outname, // Output filename
make_model[1024],
// Make and model
pcfilename[1024],
// Lowercase pcfilename
filename[1024]; // PPD filename
@@ -311,7 +313,21 @@ main(int argc, // I - Number of command-line arguments
{
// Write the PPD file for this driver...
if (use_model_name)
outname = d->model_name->value;
{
if (!strncasecmp(d->model_name->value, d->manufacturer->value,
strlen(d->manufacturer->value)))
{
// Model name already starts with the manufacturer...
outname = d->model_name->value;
}
else
{
// Add manufacturer to the front of the model name...
snprintf(make_model, sizeof(make_model), "%s %s",
d->manufacturer->value, d->model_name->value);
outname = make_model;
}
}
else if (d->file_name)
outname = d->file_name->value;
else
+10 -8
Ver Arquivo
@@ -4,7 +4,7 @@
* Authentication certificate routines for the Common UNIX
* Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2010 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -71,7 +71,7 @@ cupsdAddCert(int pid, /* I - Process ID */
strlcpy(cert->username, username, sizeof(cert->username));
for (i = 0; i < 32; i ++)
cert->certificate[i] = hex[random() & 15];
cert->certificate[i] = hex[CUPS_RAND() & 15];
/*
* Save the certificate to a file readable only by the User and Group
@@ -390,9 +390,8 @@ cupsdFindCert(const char *certificate) /* I - Certificate */
void
cupsdInitCerts(void)
{
#ifndef HAVE_ARC4RANDOM
cups_file_t *fp; /* /dev/random file */
unsigned seed; /* Seed for random number generator */
struct timeval tod; /* Time of day */
/*
@@ -402,16 +401,20 @@ cupsdInitCerts(void)
if ((fp = cupsFileOpen("/dev/urandom", "rb")) == NULL)
{
struct timeval tod; /* Time of day */
/*
* Get the time in usecs and use it as the initial seed...
*/
gettimeofday(&tod, NULL);
seed = (unsigned)(tod.tv_sec + tod.tv_usec);
CUPS_SRAND((unsigned)(tod.tv_sec + tod.tv_usec));
}
else
{
unsigned seed; /* Seed for random number generator */
/*
* Read 4 random characters from the random device and use
* them as the seed...
@@ -420,12 +423,11 @@ cupsdInitCerts(void)
seed = cupsFileGetChar(fp);
seed = (seed << 8) | cupsFileGetChar(fp);
seed = (seed << 8) | cupsFileGetChar(fp);
seed = (seed << 8) | cupsFileGetChar(fp);
CUPS_SRAND((seed << 8) | cupsFileGetChar(fp));
cupsFileClose(fp);
}
srandom(seed);
#endif /* !HVE_ARC4RANDOM */
/*
* Create a root certificate and return...
+1
Ver Arquivo
@@ -728,6 +728,7 @@ cupsdSaveAllClasses(void)
cupsFilePuts(fp, "# Class configuration file for " CUPS_SVERSION "\n");
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
/*
* Write each local class known to the system...
+14 -14
Ver Arquivo
@@ -631,7 +631,7 @@ cupsdReadConfiguration(void)
MaxClients = 100;
MaxClientsPerHost = 0;
MaxLogSize = 1024 * 1024;
MaxPrinterHistory = 10;
MaxPrinterHistory = 0;
MaxRequestSize = 0;
MultipleOperationTimeout = DEFAULT_TIMEOUT;
ReloadTimeout = DEFAULT_KEEPALIVE;
@@ -969,7 +969,7 @@ cupsdReadConfiguration(void)
Group, 1, 1) < 0 ||
cupsdCheckPermissions(StateDir, "certs", RunUser ? 0711 : 0511, User,
SystemGroupIDs[0], 1, 1) < 0 ||
cupsdCheckPermissions(ServerRoot, NULL, 0755, RunUser,
cupsdCheckPermissions(ServerRoot, NULL, 0755, RunUser,
Group, 1, 0) < 0 ||
cupsdCheckPermissions(ServerRoot, "ppd", 0755, RunUser,
Group, 1, 1) < 0 ||
@@ -1896,7 +1896,7 @@ parse_aaa(cupsd_location_t *loc, /* I - Location */
cupsdDenyIP(loc, ones, zeros);
}
#ifdef AF_INET6
else if (value[0] == '*' || value[0] == '.' ||
else if (value[0] == '*' || value[0] == '.' ||
(!isdigit(value[0] & 255) && value[0] != '['))
#else
else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
@@ -2666,7 +2666,7 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
for (addr = addrlist; addr; addr = addr->next)
if (addr->addr.addr.sa_family == AF_INET)
break;
break;
if (addr)
{
@@ -2676,7 +2676,7 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
cupsdLogMessage(CUPSD_LOG_INFO,
"Sending browsing info to %s:%d (IPv4)",
temp, ntohs(dira->to.ipv4.sin_port));
NumBrowsers ++;
}
else
@@ -2816,7 +2816,7 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
cupsdDenyIP(location, ones, zeros);
}
#ifdef AF_INET6
else if (value[0] == '*' || value[0] == '.' ||
else if (value[0] == '*' || value[0] == '.' ||
(!isdigit(value[0] & 255) && value[0] != '['))
#else
else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
@@ -2912,7 +2912,7 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
*/
#ifdef AF_INET6
if (value[0] == '*' || value[0] == '.' ||
if (value[0] == '*' || value[0] == '.' ||
(!isdigit(value[0] & 255) && value[0] != '['))
#else
if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
@@ -2996,14 +2996,14 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
for (addr = addrlist; addr; addr = addr->next)
if (addr->addr.addr.sa_family == AF_INET)
break;
break;
if (addr)
{
memcpy(&(relay->to), &(addrlist->addr), sizeof(relay->to));
httpAddrString(&(relay->to), temp, sizeof(temp));
if (relay->from.type == CUPSD_AUTH_IP)
snprintf(temp2, sizeof(temp2), "%u.%u.%u.%u/%u.%u.%u.%u",
relay->from.mask.ip.address[0] >> 24,
@@ -3016,10 +3016,10 @@ read_configuration(cups_file_t *fp) /* I - File to read from */
relay->from.mask.ip.netmask[0] & 255);
else
strlcpy(temp2, relay->from.mask.name.name, sizeof(temp2));
cupsdLogMessage(CUPSD_LOG_INFO, "Relaying from %s to %s:%d (IPv4)",
temp2, temp, ntohs(relay->to.ipv4.sin_port));
NumRelays ++;
}
else
@@ -3580,7 +3580,7 @@ read_location(cups_file_t *fp, /* I - Configuration file */
else
continue;
}
if ((loc = cupsdCopyLocation(&parent)) == NULL)
return (0);
@@ -3722,7 +3722,7 @@ read_policy(cups_file_t *fp, /* I - Configuration file */
else
continue;
}
/*
* Scan for IPP operation names...
*/
+2 -1
Ver Arquivo
@@ -1991,7 +1991,8 @@ load_drv(const char *filename, /* I - Actual filename */
type = PPD_TYPE_PDF;
}
for (product = (ppdcAttr *)d->attrs->first(), products_found = 0;
for (product = (ppdcAttr *)d->attrs->first(), products_found = 0,
ppd = NULL;
product;
product = (ppdcAttr *)d->attrs->next())
if (!strcmp(product->name->value, "Product"))
+172 -173
Ver Arquivo
@@ -50,6 +50,7 @@
* printer or update the broadcast contents.
* dnssdStop() - Stop all DNS-SD registrations.
* dnssdUpdate() - Handle DNS-SD queries.
* get_auth_info_required() - Get the auth-info-required value to advertise.
* get_hostconfig() - Get an /etc/hostconfig service setting.
* is_local_queue() - Determine whether the URI points at a local
* queue.
@@ -63,6 +64,7 @@
* send_ldap_ou() - Send LDAP ou registrations.
* send_ldap_browse() - Send LDAP printer registrations.
* ldap_dereg_printer() - Delete printer from directory
* ldap_dereg_ou() - Remove the organizational unit.
* send_slp_browse() - Register the specified printer with SLP.
* slp_attr_callback() - SLP attribute callback
* slp_dereg_printer() - SLPDereg() the specified printer
@@ -996,93 +998,91 @@ cupsdSendBrowseList(void)
* 'ldap_rebind_proc()' - Callback function for LDAP rebind
*/
static int
ldap_rebind_proc (LDAP *RebindLDAPHandle,
LDAP_CONST char *refsp,
ber_tag_t request,
ber_int_t msgid,
void *params)
static int /* O - Result code */
ldap_rebind_proc(
LDAP *RebindLDAPHandle, /* I - LDAP handle */
LDAP_CONST char *refsp, /* I - ??? */
ber_tag_t request, /* I - ??? */
ber_int_t msgid, /* I - ??? */
void *params) /* I - ??? */
{
int rc;
int rc; /* Result code */
# if LDAP_API_VERSION > 3000
struct berval bval; /* Bind value */
# endif /* LDAP_API_VERSION > 3000 */
/*
* Bind to new LDAP server...
*/
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"ldap_rebind_proc: Rebind to %s", refsp);
cupsdLogMessage(CUPSD_LOG_DEBUG2, "ldap_rebind_proc: Rebind to %s", refsp);
# if LDAP_API_VERSION > 3000
struct berval bval;
bval.bv_val = BrowseLDAPPassword;
bval.bv_len = (BrowseLDAPPassword == NULL) ? 0 : strlen(BrowseLDAPPassword);
rc = ldap_sasl_bind_s(RebindLDAPHandle, BrowseLDAPBindDN, LDAP_SASL_SIMPLE, &bval, NULL, NULL, NULL);
rc = ldap_sasl_bind_s(RebindLDAPHandle, BrowseLDAPBindDN, LDAP_SASL_SIMPLE,
&bval, NULL, NULL, NULL);
# else
rc = ldap_bind_s(RebindLDAPHandle, BrowseLDAPBindDN,
BrowseLDAPPassword, LDAP_AUTH_SIMPLE);
rc = ldap_bind_s(RebindLDAPHandle, BrowseLDAPBindDN, BrowseLDAPPassword,
LDAP_AUTH_SIMPLE);
# endif /* LDAP_API_VERSION > 3000 */
return (rc);
}
# else /* defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) */
# else /* defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) */
/*
* 'ldap_rebind_proc()' - Callback function for LDAP rebind
*/
static int
ldap_rebind_proc (LDAP *RebindLDAPHandle,
char **dnp,
char **passwdp,
int *authmethodp,
int freeit,
void *arg)
static int /* O - Result code */
ldap_rebind_proc(
LDAP *RebindLDAPHandle, /* I - LDAP handle */
char **dnp, /* I - ??? */
char **passwdp, /* I - ??? */
int *authmethodp, /* I - ??? */
int freeit, /* I - ??? */
void *arg) /* I - ??? */
{
switch ( freeit ) {
switch (freeit)
{
case 1:
/*
* Free current values...
*/
case 1:
cupsdLogMessage(CUPSD_LOG_DEBUG2, "ldap_rebind_proc: Free values...");
/*
* Free current values...
*/
if (dnp && *dnp)
free(*dnp);
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"ldap_rebind_proc: Free values...");
if (passwdp && *passwdp)
free(*passwdp);
break;
if ( dnp && *dnp ) {
free( *dnp );
}
if ( passwdp && *passwdp ) {
free( *passwdp );
}
break;
case 0:
/*
* Return credentials for LDAP referal...
*/
case 0:
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"ldap_rebind_proc: Return necessary values...");
/*
* Return credentials for LDAP referal...
*/
*dnp = strdup(BrowseLDAPBindDN);
*passwdp = strdup(BrowseLDAPPassword);
*authmethodp = LDAP_AUTH_SIMPLE;
break;
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"ldap_rebind_proc: Return necessary values...");
*dnp = strdup(BrowseLDAPBindDN);
*passwdp = strdup(BrowseLDAPPassword);
*authmethodp = LDAP_AUTH_SIMPLE;
break;
default:
/*
* Should never happen...
*/
cupsdLogMessage(CUPSD_LOG_ERROR,
"LDAP rebind has been called with wrong freeit value!");
break;
default:
/*
* Should never happen...
*/
cupsdLogMessage(CUPSD_LOG_ERROR,
"LDAP rebind has been called with wrong freeit value!");
break;
}
return (LDAP_SUCCESS);
@@ -1096,25 +1096,22 @@ ldap_rebind_proc (LDAP *RebindLDAPHandle,
* 'ldap_connect()' - Start new LDAP connection
*/
static LDAP *
static LDAP * /* O - LDAP handle */
ldap_connect(void)
{
/*
* Open LDAP handle...
*/
int rc; /* LDAP API status */
int version = 3; /* LDAP version */
struct berval bv = {0, ""}; /* SASL bind value */
LDAP *TempBrowseLDAPHandle=NULL; /* Temporary LDAP Handle */
int rc; /* LDAP API status */
int version = 3; /* LDAP version */
struct berval bv = {0, ""}; /* SASL bind value */
LDAP *TempBrowseLDAPHandle=NULL;
/* Temporary LDAP Handle */
# if defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP)
int ldap_ssl = 0; /* LDAP SSL indicator */
int ssl_err = 0; /* LDAP SSL error value */
int ldap_ssl = 0; /* LDAP SSL indicator */
int ssl_err = 0; /* LDAP SSL error value */
# endif /* defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP) */
# ifdef HAVE_OPENLDAP
# ifdef HAVE_LDAP_SSL
/*
* Set the certificate file to use for encrypted LDAP sessions...
*/
@@ -1122,7 +1119,7 @@ ldap_connect(void)
if (BrowseLDAPCACertFile)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"cupsdStartBrowsing: Setting CA certificate file \"%s\"",
"ldap_connect: Setting CA certificate file \"%s\"",
BrowseLDAPCACertFile);
if ((rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE,
@@ -1131,8 +1128,8 @@ ldap_connect(void)
"Unable to set CA certificate file for LDAP "
"connections: %d - %s", rc, ldap_err2string(rc));
}
# endif /* HAVE_LDAP_SSL */
/*
* Initialize OPENLDAP connection...
* LDAP stuff currently only supports ldapi EXTERNAL SASL binds...
@@ -1153,26 +1150,27 @@ ldap_connect(void)
* Split LDAP URI into its components...
*/
if (! BrowseLDAPServer)
if (!BrowseLDAPServer)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"BrowseLDAPServer not configured! Disable LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
cupsdLogMessage(CUPSD_LOG_ERROR, "BrowseLDAPServer not configured!");
cupsdLogMessage(CUPSD_LOG_ERROR, "Disabling LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
BrowseRemoteProtocols &= ~BROWSE_LDAP;
return (NULL);
}
sscanf(BrowseLDAPServer, "%10[^:]://%254[^:/]:%d", ldap_protocol, ldap_host, &ldap_port);
sscanf(BrowseLDAPServer, "%10[^:]://%254[^:/]:%d", ldap_protocol, ldap_host,
&ldap_port);
if (strcmp(ldap_protocol, "ldap") == 0) {
if (!strcmp(ldap_protocol, "ldap"))
ldap_ssl = 0;
} else if (strcmp(ldap_protocol, "ldaps") == 0) {
else if (!strcmp(ldap_protocol, "ldaps"))
ldap_ssl = 1;
} else {
cupsdLogMessage(CUPSD_LOG_ERROR,
"unrecognised ldap protocol (%s)!", ldap_protocol);
cupsdLogMessage(CUPSD_LOG_ERROR,
"Disable LDAP browsing!");
else
{
cupsdLogMessage(CUPSD_LOG_ERROR, "Unrecognized LDAP protocol (%s)!",
ldap_protocol);
cupsdLogMessage(CUPSD_LOG_ERROR, "Disabling LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
BrowseRemoteProtocols &= ~BROWSE_LDAP;
return (NULL);
@@ -1186,15 +1184,14 @@ ldap_connect(void)
ldap_port = LDAP_PORT;
}
cupsdLogMessage(CUPSD_LOG_DEBUG,
"LDAP Connection Details: PROT:%s HOST:%s PORT:%d",
cupsdLogMessage(CUPSD_LOG_DEBUG, "ldap_connect: PROT:%s HOST:%s PORT:%d",
ldap_protocol, ldap_host, ldap_port);
/*
* Initialize LDAP connection...
*/
if (! ldap_ssl)
if (!ldap_ssl)
{
if ((TempBrowseLDAPHandle = ldap_init(ldap_host, ldap_port)) == NULL)
rc = LDAP_OPERATIONS_ERROR;
@@ -1205,19 +1202,23 @@ ldap_connect(void)
}
else
{
/*
* Initialize SSL LDAP connection...
*/
if (BrowseLDAPCACertFile)
{
rc = ldapssl_client_init(BrowseLDAPCACertFile, (void *)NULL);
if (rc != LDAP_SUCCESS) {
if (rc != LDAP_SUCCESS)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"Failed to initialize LDAP SSL client!");
rc = LDAP_OPERATIONS_ERROR;
} else {
if ((TempBrowseLDAPHandle = ldapssl_init(ldap_host, ldap_port, 1)) == NULL)
}
else
{
if ((TempBrowseLDAPHandle = ldapssl_init(ldap_host, ldap_port,
1)) == NULL)
rc = LDAP_OPERATIONS_ERROR;
else
rc = LDAP_SUCCESS;
@@ -1237,7 +1238,7 @@ ldap_connect(void)
*/
cupsdLogMessage(CUPSD_LOG_ERROR,
"LDAP client libraries does not support TLS");
"LDAP client libraries do not support SSL");
rc = LDAP_OPERATIONS_ERROR;
# endif /* HAVE_LDAP_SSL */
@@ -1250,105 +1251,104 @@ ldap_connect(void)
if (rc != LDAP_SUCCESS)
{
if ((rc == LDAP_SERVER_DOWN) || (rc == LDAP_CONNECT_ERROR))
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to initialize LDAP! Temporary disable LDAP browsing...");
}
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize LDAP!");
if (rc == LDAP_SERVER_DOWN || rc == LDAP_CONNECT_ERROR)
cupsdLogMessage(CUPSD_LOG_ERROR, "Temporarily disabling LDAP browsing...");
else
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to initialize LDAP! Disable LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
cupsdLogMessage(CUPSD_LOG_ERROR, "Disabling LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
BrowseRemoteProtocols &= ~BROWSE_LDAP;
}
ldap_disconnect(TempBrowseLDAPHandle);
TempBrowseLDAPHandle = NULL;
return (NULL);
}
/*
* Upgrade LDAP version...
*/
else if (ldap_set_option(TempBrowseLDAPHandle, LDAP_OPT_PROTOCOL_VERSION,
if (ldap_set_option(TempBrowseLDAPHandle, LDAP_OPT_PROTOCOL_VERSION,
(const void *)&version) != LDAP_SUCCESS)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to set LDAP protocol version %d! Disable LDAP browsing!",
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to set LDAP protocol version %d!",
version);
BrowseLocalProtocols &= ~BROWSE_LDAP;
cupsdLogMessage(CUPSD_LOG_ERROR, "Disabling LDAP browsing!");
BrowseLocalProtocols &= ~BROWSE_LDAP;
BrowseRemoteProtocols &= ~BROWSE_LDAP;
ldap_disconnect(TempBrowseLDAPHandle);
TempBrowseLDAPHandle = NULL;
}
else
{
/*
* Register LDAP rebind procedure...
*/
return (NULL);
}
/*
* Register LDAP rebind procedure...
*/
# ifdef HAVE_LDAP_REBIND_PROC
# if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)
rc = ldap_set_rebind_proc(TempBrowseLDAPHandle, &ldap_rebind_proc, (void *)NULL);
if ( rc != LDAP_SUCCESS )
cupsdLogMessage(CUPSD_LOG_ERROR,
"Setting LDAP rebind function failed with status %d: %s",
rc, ldap_err2string(rc));
rc = ldap_set_rebind_proc(TempBrowseLDAPHandle, &ldap_rebind_proc,
(void *)NULL);
if (rc != LDAP_SUCCESS)
cupsdLogMessage(CUPSD_LOG_ERROR,
"Setting LDAP rebind function failed with status %d: %s",
rc, ldap_err2string(rc));
# else
ldap_set_rebind_proc(TempBrowseLDAPHandle, &ldap_rebind_proc, (void *)NULL);
ldap_set_rebind_proc(TempBrowseLDAPHandle, &ldap_rebind_proc, (void *)NULL);
# endif /* defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) */
# endif /* HAVE_LDAP_REBIND_PROC */
/*
* Start LDAP bind...
*/
/*
* Start LDAP bind...
*/
# if LDAP_API_VERSION > 3000
struct berval bval;
bval.bv_val = BrowseLDAPPassword;
bval.bv_len = (BrowseLDAPPassword == NULL) ? 0 : strlen(BrowseLDAPPassword);
struct berval bval;
bval.bv_val = BrowseLDAPPassword;
bval.bv_len = (BrowseLDAPPassword == NULL) ? 0 : strlen(BrowseLDAPPassword);
if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost"))
rc = ldap_sasl_bind_s(TempBrowseLDAPHandle, NULL, "EXTERNAL", &bv, NULL,
NULL, NULL);
else
rc = ldap_sasl_bind_s(TempBrowseLDAPHandle, BrowseLDAPBindDN, LDAP_SASL_SIMPLE, &bval, NULL, NULL, NULL);
if (!BrowseLDAPServer || !strcasecmp(BrowseLDAPServer, "localhost"))
rc = ldap_sasl_bind_s(TempBrowseLDAPHandle, NULL, "EXTERNAL", &bv, NULL,
NULL, NULL);
else
rc = ldap_sasl_bind_s(TempBrowseLDAPHandle, BrowseLDAPBindDN, LDAP_SASL_SIMPLE, &bval, NULL, NULL, NULL);
# else
rc = ldap_bind_s(TempBrowseLDAPHandle, BrowseLDAPBindDN,
BrowseLDAPPassword, LDAP_AUTH_SIMPLE);
rc = ldap_bind_s(TempBrowseLDAPHandle, BrowseLDAPBindDN,
BrowseLDAPPassword, LDAP_AUTH_SIMPLE);
# endif /* LDAP_API_VERSION > 3000 */
if (rc != LDAP_SUCCESS)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"LDAP bind failed with error %d: %s",
rc, ldap_err2string(rc));
# if defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP)
if (ldap_ssl && ((rc == LDAP_SERVER_DOWN) || (rc == LDAP_CONNECT_ERROR)))
{
ssl_err = PORT_GetError();
if (ssl_err != 0)
cupsdLogMessage(CUPSD_LOG_ERROR,
"LDAP SSL error %d: %s",
ssl_err, ldapssl_err2string(ssl_err));
}
# endif /* defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP) */
ldap_disconnect(TempBrowseLDAPHandle);
TempBrowseLDAPHandle = NULL;
}
else
{
cupsdLogMessage(CUPSD_LOG_INFO,
"LDAP connection established");
}
if (rc != LDAP_SUCCESS)
{
cupsdLogMessage(CUPSD_LOG_ERROR, "LDAP bind failed with error %d: %s",
rc, ldap_err2string(rc));
# if defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP)
if (ldap_ssl && (rc == LDAP_SERVER_DOWN || rc == LDAP_CONNECT_ERROR))
{
ssl_err = PORT_GetError();
if (ssl_err != 0)
cupsdLogMessage(CUPSD_LOG_ERROR, "LDAP SSL error %d: %s", ssl_err,
ldapssl_err2string(ssl_err));
}
# endif /* defined(HAVE_LDAP_SSL) && defined (HAVE_MOZILLA_LDAP) */
ldap_disconnect(TempBrowseLDAPHandle);
return (NULL);
}
cupsdLogMessage(CUPSD_LOG_INFO, "LDAP connection established");
return (TempBrowseLDAPHandle);
}
@@ -1360,24 +1360,23 @@ ldap_connect(void)
static void
ldap_reconnect(void)
{
LDAP *TempBrowseLDAPHandle = NULL; /* Temp Handle to LDAP server */
LDAP *TempBrowseLDAPHandle = NULL; /* Temp Handle to LDAP server */
cupsdLogMessage(CUPSD_LOG_INFO,
"Try LDAP reconnect...");
/*
* Get a new LDAP Handle and replace the global Handle
* if the new connection was successful
*/
cupsdLogMessage(CUPSD_LOG_INFO, "Try LDAP reconnect...");
TempBrowseLDAPHandle = ldap_connect();
if (TempBrowseLDAPHandle != NULL)
{
if (BrowseLDAPHandle != NULL)
{
ldap_disconnect(BrowseLDAPHandle);
}
BrowseLDAPHandle = TempBrowseLDAPHandle;
}
}
@@ -1388,9 +1387,10 @@ ldap_reconnect(void)
*/
static void
ldap_disconnect(LDAP *ld) /* I - LDAP handle */
ldap_disconnect(LDAP *ld) /* I - LDAP handle */
{
int rc; /* return code */
int rc; /* Return code */
/*
* Close LDAP handle...
@@ -1401,6 +1401,7 @@ ldap_disconnect(LDAP *ld) /* I - LDAP handle */
# else
rc = ldap_unbind_s(ld);
# endif /* defined(HAVE_OPENLDAP) && LDAP_API_VERSION > 3000 */
if (rc != LDAP_SUCCESS)
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unbind from LDAP server failed with status %d: %s",
@@ -3971,7 +3972,7 @@ send_cups_browse(cupsd_printer_t *p) /* I - Printer to send */
* 'ldap_search_rec()' - LDAP Search with reconnect
*/
static int
static int /* O - Return code */
ldap_search_rec(LDAP *ld, /* I - LDAP handler */
char *base, /* I - Base dn */
int scope, /* I - LDAP search scope */
@@ -4040,11 +4041,9 @@ ldap_freeres(LDAPMessage *entry) /* I - LDAP handler */
rc = ldap_msgfree(entry);
if (rc == -1)
cupsdLogMessage(CUPSD_LOG_WARN,
"Can't free LDAPMessage!");
cupsdLogMessage(CUPSD_LOG_WARN, "Can't free LDAPMessage!");
else if (rc == 0)
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"Freeing LDAPMessage was unnecessary");
cupsdLogMessage(CUPSD_LOG_DEBUG2, "Freeing LDAPMessage was unnecessary");
}
@@ -4052,7 +4051,7 @@ ldap_freeres(LDAPMessage *entry) /* I - LDAP handler */
* 'ldap_getval_char()' - Get first LDAP value and convert to string
*/
static int
static int /* O - Return code */
ldap_getval_firststring(
LDAP *ld, /* I - LDAP handler */
LDAPMessage *entry, /* I - LDAP message or search result */
@@ -4082,7 +4081,6 @@ ldap_getval_firststring(
}
else
{
/*
* Check size and copy value into our string...
*/
@@ -4104,7 +4102,7 @@ ldap_getval_firststring(
ldap_value_free_len(bval);
}
# else
char **value; /* LDAP value */
char **value; /* LDAP value */
/*
* Get value from LDAPMessage...
@@ -4114,8 +4112,7 @@ ldap_getval_firststring(
{
rc = -1;
dn = ldap_get_dn(ld, entry);
cupsdLogMessage(CUPSD_LOG_WARN,
"Failed to get LDAP value %s for %s!",
cupsdLogMessage(CUPSD_LOG_WARN, "Failed to get LDAP value %s for %s!",
attr, dn);
ldap_memfree(dn);
}
@@ -4168,11 +4165,10 @@ send_ldap_ou(char *ou, /* I - Servername/ou to register */
* Reconnect if LDAP Handle is invalid...
*/
if (! BrowseLDAPHandle)
if (!BrowseLDAPHandle)
{
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"send_ldap_ou: LDAP Handle is invalid. Try "
"reconnecting...");
"send_ldap_ou: LDAP Handle is invalid. Try reconnecting...");
ldap_reconnect();
return;
}
@@ -4630,6 +4626,10 @@ ldap_dereg_printer(cupsd_printer_t *p) /* I - Printer to deregister */
}
/*
* 'ldap_dereg_ou()' - Remove the organizational unit.
*/
static void
ldap_dereg_ou(char *ou, /* I - Organizational unit (servername) */
char *basedn) /* I - Dase dn */
@@ -4688,7 +4688,6 @@ ldap_dereg_ou(char *ou, /* I - Organizational unit (servername) */
"LDAP delete for %s failed with status %d: %s",
ou, rc, ldap_err2string(rc));
}
}
}
#endif /* HAVE_LDAP */
+69 -41
Ver Arquivo
@@ -1332,7 +1332,6 @@ add_job(cupsd_client_t *con, /* I - Client connection */
*auth_info; /* auth-info attribute */
const char *val; /* Default option value */
int priority; /* Job priority */
char *title; /* Job name/title */
cupsd_job_t *job; /* Current job */
char job_uri[HTTP_MAX_URI]; /* Job URI */
int kbytes; /* Size of print file */
@@ -1547,12 +1546,9 @@ add_job(cupsd_client_t *con, /* I - Client connection */
priority);
}
if ((attr = ippFindAttribute(con->request, "job-name",
IPP_TAG_NAME)) != NULL)
title = attr->values[0].string.text;
else
if (!ippFindAttribute(con->request, "job-name", IPP_TAG_NAME))
ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL,
title = "Untitled");
"Untitled");
if ((job = cupsdAddJob(priority, printer->name)) == NULL)
{
@@ -1706,8 +1702,6 @@ add_job(cupsd_client_t *con, /* I - Client connection */
"job-media-sheets-completed", 0);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL,
printer->uri);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL,
title);
if ((attr = ippFindAttribute(job->attrs, "job-k-octets",
IPP_TAG_INTEGER)) != NULL)
@@ -2324,8 +2318,9 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
dstfile[1024]; /* Destination Script/PPD file */
int modify; /* Non-zero if we are modifying */
char newname[IPP_MAX_NAME]; /* New printer name */
int need_restart_job; /* Need to restart job? */
int set_device_uri, /* Did we set the device URI? */
int changed_driver, /* Changed the PPD/interface script? */
need_restart_job, /* Need to restart job? */
set_device_uri, /* Did we set the device URI? */
set_port_monitor; /* Did we set the port monitor? */
@@ -2469,6 +2464,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
* Look for attributes and copy them over as needed...
*/
changed_driver = 0;
need_restart_job = 0;
if ((attr = ippFindAttribute(con->request, "printer-location",
@@ -2722,6 +2718,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
if (con->filename)
{
need_restart_job = 1;
changed_driver = 1;
strlcpy(srcfile, con->filename, sizeof(srcfile));
@@ -2792,18 +2789,6 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Copied PPD file successfully!");
chmod(dstfile, 0644);
#ifdef __APPLE__
/*
* (Re)register color profiles...
*/
if (!RunUser)
{
apple_unregister_profiles(printer);
apple_register_profiles(printer);
}
#endif /* __APPLE__ */
}
else
{
@@ -2820,6 +2805,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
IPP_TAG_NAME)) != NULL)
{
need_restart_job = 1;
changed_driver = 1;
if (!strcmp(attr->values[0].string.text, "raw"))
{
@@ -2857,19 +2843,33 @@ add_printer(cupsd_client_t *con, /* I - Client connection */
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Copied PPD file successfully!");
chmod(dstfile, 0644);
}
}
if (changed_driver)
{
/*
* If we changed the PPD/interface script, then remove the printer's cache
* file...
*/
char cache_name[1024]; /* Cache filename for printer attrs */
snprintf(cache_name, sizeof(cache_name), "%s/%s.ipp", CacheDir,
printer->name);
unlink(cache_name);
#ifdef __APPLE__
/*
* (Re)register color profiles...
*/
/*
* (Re)register color profiles...
*/
if (!RunUser)
{
apple_unregister_profiles(printer);
apple_register_profiles(printer);
}
#endif /* __APPLE__ */
if (!RunUser)
{
apple_unregister_profiles(printer);
apple_register_profiles(printer);
}
#endif /* __APPLE__ */
}
/*
@@ -3193,7 +3193,7 @@ apple_register_profiles(
num_profiles ++;
}
/*
* If we have profiles, add them...
*/
@@ -3239,7 +3239,7 @@ apple_register_profiles(
snprintf(q_keyword, sizeof(q_keyword), "Default%s", attr->value);
q2_attr = ppdFindAttr(ppd, q_keyword, NULL);
}
else
else
q2_attr = ppdFindAttr(ppd, "DefaultMediaType", NULL);
if (q2_attr && q2_attr->value && q2_attr->value[0])
@@ -3253,7 +3253,7 @@ apple_register_profiles(
snprintf(q_keyword, sizeof(q_keyword), "Default%s", attr->value);
q3_attr = ppdFindAttr(ppd, q_keyword, NULL);
}
else
else
q3_attr = ppdFindAttr(ppd, "DefaultResolution", NULL);
if (q3_attr && q3_attr->value && q3_attr->value[0])
@@ -3422,7 +3422,7 @@ apple_register_profiles(
attr = ppdFindAttr(ppd, "DefaultColorSpace", NULL);
num_profiles = (attr && ppd->colorspace == PPD_CS_GRAY) ? 1 : 2;
if ((profiles = calloc(num_profiles, sizeof(CMDeviceProfileArray))) == NULL)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
@@ -4420,7 +4420,7 @@ check_quotas(cupsd_client_t *con, /* I - Client connection */
if (q->page_count == -4) /* special case: unlimited user */
{
cupsdLogMessage(CUPSD_LOG_INFO,
"User \"%s\" request approved for printer %s (%s): "
"User \"%s\" request approved for printer %s (%s): "
"unlimited quota.",
username, p->name, p->info);
q->page_count = 0; /* allow user to print */
@@ -6740,6 +6740,7 @@ get_job_attrs(cupsd_client_t *con, /* I - Client connection */
ipp_attribute_t *attr; /* Current attribute */
int jobid; /* Job ID */
cupsd_job_t *job; /* Current job */
cupsd_printer_t *printer; /* Current printer */
char scheme[HTTP_MAX_URI], /* Method portion of URI */
username[HTTP_MAX_URI], /* Username portion of URI */
host[HTTP_MAX_URI], /* Host portion of URI */
@@ -6814,7 +6815,19 @@ get_job_attrs(cupsd_client_t *con, /* I - Client connection */
* Check policy...
*/
if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK)
if ((printer = job->printer) == NULL)
printer = cupsdFindDest(job->dest);
if (printer)
{
if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con,
NULL)) != HTTP_OK)
{
send_http_error(con, status, printer);
return;
}
}
else if ((status = cupsdCheckPolicy(DefaultPolicyPtr, con, NULL)) != HTTP_OK)
{
send_http_error(con, status, NULL);
return;
@@ -6990,7 +7003,18 @@ get_jobs(cupsd_client_t *con, /* I - Client connection */
else
username[0] = '\0';
ra = create_requested_array(con->request);
if ((ra = create_requested_array(con->request)) == NULL &&
!ippFindAttribute(con->request, "requested-attributes", IPP_TAG_KEYWORD))
{
/*
* IPP conformance - Get-Jobs has a default requested-attributes value of
* "job-id" and "job-uri".
*/
ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
cupsArrayAdd(ra, "job-id");
cupsArrayAdd(ra, "job-uri");
}
/*
* OK, build a list of jobs for this printer...
@@ -8470,7 +8494,9 @@ ppd_parse_line(const char *line, /* I - Line */
* Read the option name...
*/
for (line += 8, olen --; isalnum(*line & 255); line ++)
for (line += 8, olen --;
*line > ' ' && *line < 0x7f && *line != ':' && *line != '/';
line ++)
if (olen > 0)
{
*option++ = *line;
@@ -8498,7 +8524,9 @@ ppd_parse_line(const char *line, /* I - Line */
while (isspace(*line & 255))
line ++;
for (clen --; isalnum(*line & 255); line ++)
for (clen --;
*line > ' ' && *line < 0x7f && *line != ':' && *line != '/';
line ++)
if (clen > 0)
{
*choice++ = *line;
@@ -9607,7 +9635,7 @@ save_auth_info(
* Write a random number of newlines to the end of the file...
*/
for (i = (rand() % 1024); i >= 0; i --)
for (i = (CUPS_RAND() % 1024); i >= 0; i --)
cupsFilePutChar(fp, '\n');
/*
+76 -18
Ver Arquivo
@@ -168,7 +168,7 @@ static mime_filter_t gziptoany_filter =
static int compare_active_jobs(void *first, void *second, void *data);
static int compare_jobs(void *first, void *second, void *data);
static void dump_job_history(cupsd_job_t *job);
static void finalize_job(cupsd_job_t *job);
static void finalize_job(cupsd_job_t *job, int set_job_state);
static void free_job_history(cupsd_job_t *job);
static char *get_options(cupsd_job_t *job, int banner_page, char *copies,
size_t copies_size, char *title,
@@ -253,7 +253,7 @@ cupsdCancelJobs(const char *dest, /* I - Destination to cancel */
if (purge)
cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_PURGE,
"Job purged by user.");
else
else if (job->state_value < IPP_JOB_CANCELED)
cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_DEFAULT,
"Job canceled by user.");
}
@@ -433,11 +433,11 @@ cupsdCleanJobs(void)
cupsd_job_t *job; /* Current job */
if (MaxJobs <= 0)
if (MaxJobs <= 0 && JobHistory)
return;
for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
job && cupsArrayCount(Jobs) >= MaxJobs;
job && (cupsArrayCount(Jobs) >= MaxJobs || !JobHistory);
job = (cupsd_job_t *)cupsArrayNext(Jobs))
if (job->state_value >= IPP_JOB_CANCELED && !job->printer)
cupsdDeleteJob(job, CUPSD_JOB_PURGE);
@@ -1233,7 +1233,7 @@ cupsdDeleteJob(cupsd_job_t *job, /* I - Job */
cupsd_jobaction_t action)/* I - Action */
{
if (job->printer)
finalize_job(job);
finalize_job(job, 1);
if (action == CUPSD_JOB_PURGE)
{
@@ -1657,7 +1657,30 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
cupsdLogMessage(CUPSD_LOG_ERROR,
"[Job %d] Ran out of memory for job file types!",
job->id);
return (1);
ippDelete(job->attrs);
job->attrs = NULL;
if (compressions)
free(compressions);
if (filetypes)
free(filetypes);
if (job->compressions)
{
free(job->compressions);
job->compressions = NULL;
}
if (job->filetypes)
{
free(job->filetypes);
job->filetypes = NULL;
}
job->num_files = 0;
return (0);
}
job->compressions = compressions;
@@ -1725,6 +1748,21 @@ cupsdLoadJob(cupsd_job_t *job) /* I - Job */
ippDelete(job->attrs);
job->attrs = NULL;
if (job->compressions)
{
free(job->compressions);
job->compressions = NULL;
}
if (job->filetypes)
{
free(job->filetypes);
job->filetypes = NULL;
}
job->num_files = 0;
unlink(jobfile);
return (0);
@@ -2196,7 +2234,7 @@ cupsdSetJobState(
*/
if (oldstate == IPP_JOB_PROCESSING)
stop_job(job, action != CUPSD_JOB_DEFAULT);
stop_job(job, action);
/*
* Set the new job state...
@@ -2396,8 +2434,6 @@ cupsdSetJobState(
job->dirty = 1;
cupsdMarkDirty(CUPSD_DIRTY_JOBS);
}
else if (!job->printer)
cupsdDeleteJob(job, CUPSD_JOB_PURGE);
break;
}
@@ -2405,8 +2441,8 @@ cupsdSetJobState(
* Finalize the job immediately if we forced things...
*/
if (action == CUPSD_JOB_FORCE)
finalize_job(job);
if (action >= CUPSD_JOB_FORCE && job->printer)
finalize_job(job, 0);
/*
* Update the server "busy" state...
@@ -2641,7 +2677,8 @@ free_job_history(cupsd_job_t *job) /* I - Job */
*/
static void
finalize_job(cupsd_job_t *job) /* I - Job */
finalize_job(cupsd_job_t *job, /* I - Job */
int set_job_state) /* I - 1 = set the job state */
{
ipp_pstate_t printer_state; /* New printer state value */
ipp_jstate_t job_state; /* New job state value */
@@ -2927,7 +2964,9 @@ finalize_job(cupsd_job_t *job) /* I - Job */
* Update the printer and job state.
*/
cupsdSetJobState(job, job_state, CUPSD_JOB_DEFAULT, "%s", message);
if (job_state != job->state_value)
cupsdSetJobState(job, job_state, CUPSD_JOB_DEFAULT, "%s", message);
cupsdSetPrinterState(job->printer, printer_state,
printer_state == IPP_PRINTER_STOPPED);
update_job_attrs(job, 0);
@@ -3895,15 +3934,34 @@ stop_job(cupsd_job_t *job, /* I - Job */
if (action == CUPSD_JOB_DEFAULT && !job->kill_time)
job->kill_time = time(NULL) + JobKillDelay;
else if (action == CUPSD_JOB_FORCE)
else if (action >= CUPSD_JOB_FORCE)
job->kill_time = 0;
for (i = 0; job->filters[i]; i ++)
if (job->filters[i] > 0)
cupsdEndProcess(job->filters[i], action == CUPSD_JOB_FORCE);
{
cupsdEndProcess(job->filters[i], action >= CUPSD_JOB_FORCE);
if (action >= CUPSD_JOB_FORCE)
job->filters[i] = -job->filters[i];
}
if (job->backend > 0)
cupsdEndProcess(job->backend, action == CUPSD_JOB_FORCE);
{
cupsdEndProcess(job->backend, action >= CUPSD_JOB_FORCE);
if (action >= CUPSD_JOB_FORCE)
job->backend = -job->backend;
}
if (action >= CUPSD_JOB_FORCE)
{
/*
* Clear job status...
*/
job->status = 0;
}
}
@@ -4293,7 +4351,7 @@ update_job(cupsd_job_t *job) /* I - Job to check */
* Handle the end of job stuff...
*/
finalize_job(job);
finalize_job(job, 1);
/*
* Check for new jobs...
@@ -4347,7 +4405,7 @@ update_job_attrs(cupsd_job_t *job, /* I - Job to update */
else if (job->printer->state_message[0] && do_message)
cupsdSetString(&(job->printer_message->values[0].string.text),
job->printer->state_message);
/*
* ... and the printer-state-reasons value...
*/
+29 -22
Ver Arquivo
@@ -134,7 +134,7 @@ main(int argc, /* I - Number of command-line args */
senddoc_time, /* Send-Document time */
expire_time, /* Subscription expire time */
report_time, /* Malloc/client/job report time */
event_time; /* Last time an event notification was done */
event_time; /* Last event notification time */
long timeout; /* Timeout for cupsdDoSelect() */
struct rlimit limit; /* Runtime limit */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
@@ -270,19 +270,22 @@ main(int argc, /* I - Number of command-line args */
break;
case 'p' : /* Stop immediately for profiling */
puts("Warning: -p (startup profiling) is for internal testing use only!");
fputs("cupsd: -p (startup profiling) is for internal testing "
"use only!\n", stderr);
stop_scheduler = 1;
fg = 1;
break;
case 'P' : /* Disable security profiles */
puts("Warning: -P (disable security profiles) is for internal testing use only!");
fputs("cupsd: -P (disable security profiles) is for internal "
"testing use only!\n", stderr);
UseProfiles = 0;
break;
#ifdef __APPLE__
case 'S' : /* Disable system management functions */
puts("Warning: -S (disable system management) for internal testing use only!");
fputs("cupsd: -S (disable system management) for internal "
"testing use only!\n", stderr);
use_sysman = 0;
break;
#endif /* __APPLE__ */
@@ -379,7 +382,7 @@ main(int argc, /* I - Number of command-line args */
* parent's file descriptors to be blocking. This is a workaround for a
* limitation of userland libpthread on OpenBSD.
*/
_thread_sys_closefrom(0);
#endif /* __OpenBSD__ */
@@ -763,7 +766,8 @@ main(int argc, /* I - Number of command-line args */
if (Launchd)
{
/*
* If we were started by launchd get the listen sockets file descriptors...
* If we were started by launchd, get the listen socket file
* descriptors...
*/
launchd_checkin();
@@ -807,8 +811,8 @@ main(int argc, /* I - Number of command-line args */
if (timeout == 86400 && Launchd && LaunchdTimeout && !NumPolled &&
!cupsArrayCount(ActiveJobs) &&
(!Browsing ||
(!BrowseRemoteProtocols &&
(!Browsing ||
(!BrowseRemoteProtocols &&
(!NumBrowsers || !BrowseLocalProtocols ||
cupsArrayCount(Printers) == 0))))
{
@@ -1036,6 +1040,7 @@ main(int argc, /* I - Number of command-line args */
if ((current_time - senddoc_time) >= 10)
{
cupsdCheckJobs();
cupsdCleanJobs();
senddoc_time = current_time;
}
@@ -1194,8 +1199,8 @@ main(int argc, /* I - Number of command-line args */
#endif /* HAVE_GSSAPI */
#if defined(__APPLE__) && defined(HAVE_DLFCN_H)
/*
* Unload Print Service quota enforcement library (X Server only)
/*
* Unload Print Service quota enforcement library (X Server only)
*/
PSQUpdateQuotaProc = NULL;
@@ -1552,21 +1557,21 @@ launchd_checkin(void)
if (lis)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
cupsdLogMessage(CUPSD_LOG_DEBUG,
"launchd_checkin: Matched existing listener %s with fd %d...",
httpAddrString(&(lis->address), s, sizeof(s)), fd);
}
else
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
cupsdLogMessage(CUPSD_LOG_DEBUG,
"launchd_checkin: Adding new listener %s with fd %d...",
httpAddrString(&addr, s, sizeof(s)), fd);
if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"launchd_checkin: Unable to allocate listener - %s.",
strerror(errno));
"launchd_checkin: Unable to allocate listener - "
"%s.", strerror(errno));
exit(EXIT_FAILURE);
}
@@ -1612,17 +1617,18 @@ launchd_checkout(void)
/*
* Create or remove the launchd KeepAlive file based on whether
* there are active jobs, polling, browsing for remote printers or
* there are active jobs, polling, browsing for remote printers or
* shared printers to advertise...
*/
if ((cupsArrayCount(ActiveJobs) || NumPolled ||
(Browsing &&
if ((cupsArrayCount(ActiveJobs) || NumPolled ||
(Browsing &&
(BrowseRemoteProtocols ||
(BrowseLocalProtocols && NumBrowsers && cupsArrayCount(Printers))))))
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Creating launchd keepalive file \"" CUPS_KEEPALIVE "\"...");
"Creating launchd keepalive file \"" CUPS_KEEPALIVE
"\"...");
if ((fd = open(CUPS_KEEPALIVE, O_RDONLY | O_CREAT | O_EXCL, S_IRUSR)) >= 0)
close(fd);
@@ -1630,7 +1636,8 @@ launchd_checkout(void)
else
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Removing launchd keepalive file \"" CUPS_KEEPALIVE "\"...");
"Removing launchd keepalive file \"" CUPS_KEEPALIVE
"\"...");
unlink(CUPS_KEEPALIVE);
}
@@ -1766,7 +1773,7 @@ process_children(void)
job->printer_message = ippAddString(job->attrs, IPP_TAG_JOB,
IPP_TAG_TEXT,
"job-printer-state-message",
NULL, "");
NULL, NULL);
}
if (job->printer_message)
@@ -1780,7 +1787,7 @@ process_children(void)
* filters are done, and if so move to the next file.
*/
if (job->current_file < job->num_files)
if (job->current_file < job->num_files && job->printer)
{
for (i = 0; job->filters[i] < 0; i ++);
@@ -1793,7 +1800,7 @@ process_children(void)
cupsdContinueJob(job);
}
}
else if (job->state_value == IPP_JOB_CANCELED)
else if (job->state_value >= IPP_JOB_CANCELED)
{
/*
* Remove the job from the active list if there are no processes still
+6 -2
Ver Arquivo
@@ -649,7 +649,10 @@ cupsdDeleteAllPrinters(void)
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
{
p->op_policy_ptr = DefaultPolicyPtr;
cupsdDeletePrinter(p, 0);
}
}
@@ -1518,6 +1521,7 @@ cupsdSaveAllPrinters(void)
cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n");
cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
/*
* Write each local printer known to the system...
@@ -3754,7 +3758,7 @@ add_printer_formats(cupsd_printer_t *p) /* I - Printer */
filter;
filter = (mime_filter_t *)cupsArrayNext(MimeDatabase->filters))
{
if (filter->dst == p->filetype && filter->filter &&
if (filter->dst == p->filetype && filter->filter &&
strstr(filter->filter, "PrintJobMgr"))
break;
}
@@ -3834,7 +3838,7 @@ delete_printer_filters(
for (filter = mimeFirstFilter(MimeDatabase);
filter;
filter = mimeNextFilter(MimeDatabase))
if (filter->dst == p->filetype)
if (filter->dst == p->filetype || filter->dst == p->prefiltertype)
{
/*
* Delete the current filter...
+8 -2
Ver Arquivo
@@ -488,8 +488,11 @@ cupsdStartProcess(
* Reset group membership to just the main one we belong to.
*/
setgid(Group);
setgroups(1, &Group);
if (setgid(Group) && !RunUser)
exit(errno);
if (setgroups(1, &Group) && !RunUser)
exit(errno);
}
/*
@@ -505,6 +508,7 @@ cupsdStartProcess(
#ifdef HAVE_SIGSET
sigset(SIGTERM, SIG_DFL);
sigset(SIGCHLD, SIG_DFL);
sigset(SIGPIPE, SIG_DFL);
#elif defined(HAVE_SIGACTION)
memset(&action, 0, sizeof(action));
@@ -513,9 +517,11 @@ cupsdStartProcess(
sigaction(SIGTERM, &action, NULL);
sigaction(SIGCHLD, &action, NULL);
sigaction(SIGPIPE, &action, NULL);
#else
signal(SIGTERM, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
signal(SIGPIPE, SIG_DFL);
#endif /* HAVE_SIGSET */
cupsdReleaseSignals();
+9 -6
Ver Arquivo
@@ -136,7 +136,7 @@
*
* 4. kqueue() - O(n)
* b. cupsdStartSelect() creates kqueue file descriptor
* using kqyeue() function and allocates a global event
* using kqueue() function and allocates a global event
* buffer.
* c. cupsdAdd/RemoveSelect() uses EV_SET and kevent() to
* register the changes. The event user data field is a
@@ -144,7 +144,7 @@
* d. cupsdDoSelect() uses kevent() to poll for events and
* loops through the events, using the user data field to
* find the callback record.
* e. cupsdStopSelect() closes the kqyeye() file descriptor
* e. cupsdStopSelect() closes the kqueue() file descriptor
* and frees all of the memory used by the event buffer.
*
* 5. /dev/poll - O(n log n) - NOT YET IMPLEMENTED
@@ -454,7 +454,7 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
if (fdptr->read_cb && event->filter == EVFILT_READ)
(*(fdptr->read_cb))(fdptr->data);
if (fdptr->write_cb && event->filter == EVFILT_WRITE)
if (fdptr->use > 1 && fdptr->write_cb && event->filter == EVFILT_WRITE)
(*(fdptr->write_cb))(fdptr->data);
release_fd(fdptr);
@@ -499,7 +499,8 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
if (fdptr->read_cb && (event->events & (EPOLLIN | EPOLLERR | EPOLLHUP)))
(*(fdptr->read_cb))(fdptr->data);
if (fdptr->write_cb && (event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP)))
if (fdptr->use > 1 && fdptr->write_cb &&
(event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP)))
(*(fdptr->write_cb))(fdptr->data);
release_fd(fdptr);
@@ -590,7 +591,8 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
if (fdptr->read_cb && (pfd->revents & (POLLIN | POLLERR | POLLHUP)))
(*(fdptr->read_cb))(fdptr->data);
if (fdptr->write_cb && (pfd->revents & (POLLOUT | POLLERR | POLLHUP)))
if (fdptr->use > 1 && fdptr->write_cb &&
(pfd->revents & (POLLOUT | POLLERR | POLLHUP)))
(*(fdptr->write_cb))(fdptr->data);
release_fd(fdptr);
@@ -645,7 +647,8 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
if (fdptr->read_cb && FD_ISSET(fdptr->fd, &cupsd_current_input))
(*(fdptr->read_cb))(fdptr->data);
if (fdptr->write_cb && FD_ISSET(fdptr->fd, &cupsd_current_output))
if (fdptr->use > 1 && fdptr->write_cb &&
FD_ISSET(fdptr->fd, &cupsd_current_output))
(*(fdptr->write_cb))(fdptr->data);
release_fd(fdptr);
+169 -25
Ver Arquivo
@@ -100,6 +100,17 @@ enum
};
/*
* File permissions...
*/
#define MODE_WRITE 0002 /* Other write */
#define MODE_MASK 0555 /* Owner/group/other read+exec/search */
#define MODE_DATAFILE 0444 /* Owner/group/other read */
#define MODE_DIRECTORY 0555 /* Owner/group/other read+search */
#define MODE_PROGRAM 0555 /* Owner/group/other read+exec */
/*
* Standard Adobe media keywords (must remain sorted)...
*/
@@ -357,7 +368,7 @@ main(int argc, /* I - Number of command-line args */
root = argv[i];
break;
case 'W' : /* Turn errors into warnings */
case 'W' : /* Turn errors into warnings */
i ++;
if (i >= argc)
@@ -1387,18 +1398,18 @@ main(int argc, /* I - Number of command-line args */
{
check_basics(argv[i]);
if (warn & WARN_CONSTRAINTS)
errors = check_constraints(ppd, errors, verbose, 1);
if (warn & WARN_DEFAULTS)
errors = check_defaults(ppd, errors, verbose, 1);
if (warn & WARN_PROFILES)
errors = check_profiles(ppd, root, errors, verbose, 1);
if (warn & WARN_CONSTRAINTS)
errors = check_constraints(ppd, errors, verbose, 1);
if (warn & WARN_FILTERS)
errors = check_filters(ppd, root, errors, verbose, 1);
if (warn & WARN_PROFILES)
errors = check_profiles(ppd, root, errors, verbose, 1);
if (warn & WARN_SIZES)
errors = check_sizes(ppd, errors, verbose, 1);
else
@@ -2411,6 +2422,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
pathprog[1024]; /* Complete path to program/filter */
int cost; /* Cost of filter */
const char *prefix; /* WARN/FAIL prefix */
struct stat fileinfo; /* File information */
prefix = warn ? " WARN " : "**FAIL**";
@@ -2452,14 +2464,28 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
program);
}
if (access(pathprog, X_OK))
if (stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsFilter "
"file \"%s\"\n"), prefix, program);
"file \"%s\"\n"), prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_PROGRAM)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on cupsFilter "
"file \"%s\"\n"), prefix, pathprog);
if (!warn)
errors ++;
@@ -2523,18 +2549,33 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
program);
}
if (access(pathprog, X_OK))
if (stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsPreFilter "
"file \"%s\"\n"), prefix, program);
"file \"%s\"\n"), prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_PROGRAM)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"cupsPreFilter file \"%s\"\n"), prefix,
pathprog);
if (!warn)
errors ++;
}
else
errors = valid_path("cupsPreFilter", pathprog, errors, verbose, warn);
}
@@ -2562,8 +2603,11 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (!warn)
errors ++;
}
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || access(attr->value, 0))
if (!attr->value || stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2571,13 +2615,28 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APDialogExtension file \"%s\"\n"),
prefix, attr->value ? attr->value : "<NULL>");
prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APDialogExtension file \"%s\"\n"), prefix,
pathprog);
if (!warn)
errors ++;
}
else
errors = valid_path("APDialogExtension", attr->value, errors, verbose,
errors = valid_path("APDialogExtension", pathprog, errors, verbose,
warn);
}
@@ -2601,7 +2660,10 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
if (!attr->value || access(attr->value, 0))
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2609,13 +2671,28 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterIconPath file \"%s\"\n"),
prefix, attr->value ? attr->value : "<NULL>");
prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DATAFILE)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterIconPath file \"%s\"\n"), prefix,
pathprog);
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterIconPath", attr->value, errors, verbose,
errors = valid_path("APPrinterIconPath", pathprog, errors, verbose,
warn);
}
@@ -2639,7 +2716,10 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
if (!attr->value || access(attr->value, 0))
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2647,13 +2727,28 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterLowInkTool file \"%s\"\n"),
prefix, attr->value ? attr->value : "<NULL>");
prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterLowInkTool file \"%s\"\n"), prefix,
pathprog);
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterLowInkTool", attr->value, errors, verbose,
errors = valid_path("APPrinterLowInkTool", pathprog, errors, verbose,
warn);
}
@@ -2677,7 +2772,10 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
if (!attr->value || access(attr->value, 0))
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2685,13 +2783,28 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterUtilityPath file \"%s\"\n"),
prefix, attr->value ? attr->value : "<NULL>");
prefix, pathprog);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterUtilityPath file \"%s\"\n"), prefix,
pathprog);
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterUtilityPath", attr->value, errors, verbose,
errors = valid_path("APPrinterUtilityPath", pathprog, errors, verbose,
warn);
}
@@ -2715,7 +2828,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
if (!attr->value || access(attr->value, 0))
if (!attr->value || stat(attr->value, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2728,6 +2841,21 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APScanAppPath file \"%s\"\n"), prefix,
attr->value);
if (!warn)
errors ++;
}
else
errors = valid_path("APScanAppPath", attr->value, errors, verbose,
warn);
@@ -2768,6 +2896,7 @@ check_profiles(ppd_file_t *ppd, /* I - PPD file */
const char *ptr; /* Pointer into string */
const char *prefix; /* WARN/FAIL prefix */
char filename[1024]; /* Profile filename */
struct stat fileinfo; /* File information */
int num_profiles = 0; /* Number of profiles */
unsigned hash, /* Current hash value */
hashes[1000]; /* Hash values of profile names */
@@ -2822,14 +2951,29 @@ check_profiles(ppd_file_t *ppd, /* I - PPD file */
attr->value);
}
if (access(filename, 0))
if (stat(filename, &fileinfo))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsICCProfile "
"file \"%s\"!\n"), prefix, attr->value);
"file \"%s\"!\n"), prefix, filename);
if (!warn)
errors ++;
}
else if (fileinfo.st_uid != 0 ||
(fileinfo.st_mode & MODE_WRITE) ||
(fileinfo.st_mode & MODE_MASK) != MODE_DATAFILE)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"cupsICCProfile file \"%s\"\n"), prefix,
filename);
if (!warn)
errors ++;
+5 -14
Ver Arquivo
@@ -31,9 +31,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <cups/string.h>
#include <cups/cups.h>
#include <cups/i18n.h>
#include <cups/globals.h>
#include <cups/md5.h>
#ifndef WIN32
@@ -79,7 +77,6 @@ main(int argc, /* I - Number of command-line arguments */
groupline[17], /* Group from line */
md5line[33], /* MD5-sum from line */
md5new[33]; /* New MD5 sum */
const char *root; /* CUPS server root directory */
char passwdmd5[1024], /* passwd.md5 file */
passwdold[1024], /* passwd.old file */
passwdnew[1024]; /* passwd.tmp file */
@@ -88,6 +85,7 @@ main(int argc, /* I - Number of command-line arguments */
int flag; /* Password check flags... */
int fd; /* Password file descriptor */
int error; /* Write error */
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Signal action */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/
@@ -113,18 +111,11 @@ main(int argc, /* I - Number of command-line arguments */
/*
* Find the server directory...
*
* We use the CUPS_SERVERROOT environment variable when we are running
* as root or when lppasswd is not setuid...
*/
if ((root = getenv("CUPS_SERVERROOT")) == NULL ||
(getuid() != geteuid() && getuid()))
root = CUPS_SERVERROOT;
snprintf(passwdmd5, sizeof(passwdmd5), "%s/passwd.md5", root);
snprintf(passwdold, sizeof(passwdold), "%s/passwd.old", root);
snprintf(passwdnew, sizeof(passwdnew), "%s/passwd.new", root);
snprintf(passwdmd5, sizeof(passwdmd5), "%s/passwd.md5", cg->cups_serverroot);
snprintf(passwdold, sizeof(passwdold), "%s/passwd.old", cg->cups_serverroot);
snprintf(passwdnew, sizeof(passwdnew), "%s/passwd.new", cg->cups_serverroot);
/*
* Find the default system group...
+3 -3
Ver Arquivo
@@ -1287,10 +1287,10 @@ show_jobs(const char *dests, /* I - Destinations */
"job-id",
"job-k-octets",
"job-name",
"time-at-creation",
"job-printer-uri",
"job-originating-user-name",
"job-state-reasons"
"job-printer-uri",
"job-state-reasons",
"time-at-creation"
};
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Template makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 2007-2008 by Apple Inc.
# Copyright 2007-2009 by Apple Inc.
# Copyright 1993-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -149,7 +149,7 @@ install-languages:
if test -d $$lang; then \
$(INSTALL_DIR) -m 755 $(DATADIR)/templates/$$lang; \
for file in $(FILES); do \
$(INSTALL_DATA) $$lang/$$file $(DATADIR)/templates/$$lang 2>/dev/null || true; \
$(INSTALL_DATA) $$lang/$$file $(DATADIR)/templates/$$lang >/dev/null 2>&1 || true; \
done \
fi \
done
+4
Ver Arquivo
@@ -4,6 +4,10 @@
<FORM METHOD="POST" ACTION="/admin">
<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
{?current_make!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE" VALUE="{current_make}">:}
{?current_make_and_model!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{current_make_and_model}">:}
+1 -1
Ver Arquivo
@@ -20,7 +20,7 @@
<H2 CLASS="title">Jobs</H2>
<P>
<FORM ACTION="/jobs/" METHDO="GET"><INPUT TYPE="SUBMIT" VALUE="Manage Jobs"></FORM>
<FORM ACTION="/jobs/" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Manage Jobs"></FORM>
</P>
</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD VALIGN="TOP">
+9 -10
Ver Arquivo
@@ -2,21 +2,18 @@
<H2 CLASS="title">{op=modify-printer?Modify {printer_name}:Add Printer}</H2>
{CUPS_GET_DEVICES_DONE?:<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
ALT="Busy Indicator"> Looking for printers...</P>}
<FORM METHOD="POST" ACTION="/admin">
{CUPS_GET_DEVICES_DONE?<FORM METHOD="POST" ACTION="/admin">
<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
<TABLE>
{op=add-printer?:<TR>
<TH CLASS="label">Current Connection:</TH>
<TH CLASS="label">Current Connection\:</TH>
<TD><INPUT TYPE="RADIO" NAME="DEVICE_URI" VALUE="{current_device_uri}" CHECKED>
{current_device_uri}</TD>
</TR>}
<TR>
<TH CLASS="label">Local Printers:</TH>
<TH CLASS="label">Local Printers\:</TH>
<TD>
{[device_uri]{device_class!network?<INPUT TYPE="RADIO" NAME="DEVICE_URI"
VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
@@ -25,7 +22,7 @@ VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
</TD>
</TR>
<TR>
<TH CLASS="label">Discovered Network Printers:</TH>
<TH CLASS="label">Discovered Network Printers\:</TH>
<TD>
{[device_uri]{device_class=network?{device_uri~[a-z]+://?<INPUT TYPE="RADIO" NAME="DEVICE_URI"
VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
@@ -35,7 +32,7 @@ VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
</TR>
<TR>
<TR>
<TH CLASS="label">Other Network Printers:</TH>
<TH CLASS="label">Other Network Printers\:</TH>
<TD>
{[device_uri]{device_class=network?{device_uri~[a-z]+://?:<INPUT TYPE="RADIO" NAME="DEVICE_URI"
VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
@@ -49,5 +46,7 @@ VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
</TR>
</TABLE>
</FORM>
</DIV>
</FORM>:<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
ALT="Busy Indicator"> Looking for printers...</P>}
</DIV>
+4
Ver Arquivo
@@ -4,6 +4,10 @@
<FORM METHOD="POST" ACTION="/admin">
<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
{?current_make!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE" VALUE="{current_make}">:}
{?current_make_and_model!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{current_make_and_model}">:}
+1 -1
Ver Arquivo
@@ -20,7 +20,7 @@
<H2 CLASS="title">Druckauftr&auml;ge</H2>
<P>
<FORM ACTION="/jobs/" METHDO="GET"><INPUT TYPE="SUBMIT" VALUE="Auftr&auml;ge verwalten"></FORM>
<FORM ACTION="/jobs/" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Auftr&auml;ge verwalten"></FORM>
</P>
</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD VALIGN="TOP">
+1 -1
Ver Arquivo
@@ -45,7 +45,7 @@ Diesen Drucker {?printer_is_shared=?nicht:{?printer_is_shared=0?nicht:}} freigeb
</TD>
</TR>
<TR>
<TH CLASS="label">>Oder stellen Sie eine PPD Datei bereit:</TH>
<TH CLASS="label">Oder stellen Sie eine PPD Datei bereit:</TH>
<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
TYPE="FILE" NAME="PPD_FILE"></TD>
</TR>
+2 -2
Ver Arquivo
@@ -2,8 +2,8 @@
<H2 CLASS="title">Klasse {printer_name} l&ouml;schen</H2>
<P><B>Warning:</B> Sind Sie sicher Sie wollen die Klasse
{printer_name} l&ouml;schen?</P>
<P><B>Warnung:</B> Sind Sie sicher, dass Sie die Klasse
{printer_name} l&ouml;schen wollen?</P>
<P ALIGN="CENTER"><FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="op" VALUE="delete-class"><INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}"><INPUT TYPE="SUBMIT" NAME="confirm" VALUE="Klasse l&ouml;schen"></FORM></P>

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais