Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet 92d0e90813 Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.4.1@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
42 arquivos alterados com 269 adições e 619 exclusões
+1 -33
Ver Arquivo
@@ -1,38 +1,6 @@
CHANGES.txt - 2009-11-09
CHANGES.txt - 2009-09-11
------------------------
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)
+20 -13
Ver Arquivo
@@ -292,8 +292,9 @@ 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 */
static void sigterm_handler(int sig); /* SIGTERM handler */
#endif /* __i386__ || __x86_64__ */
static int job_canceled = 0; /* Was the job canceled? */
static void sigterm_handler(int sig); /* SIGTERM handler */
#ifdef PARSE_PS_ERRORS
static const char *next_line (const char *buffer);
@@ -460,9 +461,9 @@ print_device(const char *uri, /* I - Device URI */
fputs("STATE: -connecting-to-device\n", stderr);
/*
* Now that we are "connected" to the port, ignore SIGTERM so that we
* Now that we are "connected" to the port, catch SIGTERM so that we
* can finish out any page data the driver sends (e.g. to eject the
* current page... Only ignore SIGTERM if we are printing data from
* current page... Only catch SIGTERM if we are printing data from
* stdin (otherwise you can't cancel raw jobs...)
*/
@@ -474,7 +475,7 @@ print_device(const char *uri, /* I - Device URI */
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
action.sa_handler = SIG_IGN;
action.sa_handler = sigterm_handler;
sigaction(SIGTERM, &action, NULL);
}
@@ -697,7 +698,7 @@ print_device(const char *uri, /* I - Device URI */
else if (iostatus == kIOReturnAborted)
{
fputs("DEBUG: Got USB return aborted during write!\n", stderr);
fputs("DEBUG: Got return aborted during write!\n", stderr);
IOReturn err = (*g.classdriver)->Abort(g.classdriver);
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n", err);
@@ -724,7 +725,7 @@ print_device(const char *uri, /* I - Device URI */
fprintf(stderr, "DEBUG: USB class driver Abort returned %x\n",
err);
status = CUPS_BACKEND_FAILED;
status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
break;
}
else if (bytes > 0)
@@ -897,11 +898,11 @@ static void *read_thread(void *reference)
#endif
}
else if (readstatus == kIOUSBTransactionTimeout)
fputs("DEBUG: Got USB transaction timeout during read!\n", stderr);
fputs("DEBUG: Got USB transaction timeout during write!\n", stderr);
else if (readstatus == kIOUSBPipeStalled)
fputs("DEBUG: Got USB pipe stalled during read!\n", stderr);
else if (readstatus == kIOReturnAborted)
fputs("DEBUG: Got USB return aborted during read!\n", stderr);
fputs("DEBUG: Got return aborted during read!\n", stderr);
/*
* Make sure this loop executes no more than once every 250 miliseconds...
@@ -943,7 +944,7 @@ sidechannel_thread(void *reference)
datalen = sizeof(data);
if (cupsSideChannelRead(&command, &status, data, &datalen, 1.0))
break;
continue;
switch (command)
{
@@ -2019,6 +2020,8 @@ static void run_legacy_backend(int argc,
exit(exitstatus);
}
#endif /* __i386__ || __x86_64__ */
/*
* 'sigterm_handler()' - SIGTERM handler.
@@ -2027,8 +2030,7 @@ static void run_legacy_backend(int argc,
static void
sigterm_handler(int sig) /* I - Signal */
{
/* If we started a child process pass the signal on to it...
*/
#if defined(__i386__) || defined(__x86_64__)
if (child_pid)
{
/*
@@ -2050,10 +2052,15 @@ sigterm_handler(int sig) /* I - Signal */
exit(CUPS_BACKEND_STOP);
}
}
}
#endif /* __i386__ || __x86_64__ */
/*
* Otherwise just flag that the job has been canceled...
*/
job_canceled = 1;
}
#ifdef PARSE_PS_ERRORS
/*
+1 -1
Ver Arquivo
@@ -560,7 +560,7 @@ open_device(const char *uri, /* I - Device URI */
* 'side_cb()' - Handle side-channel requests...
*/
static int /* O - 0 on success, -1 on error */
static void
side_cb(int print_fd, /* I - Print file */
int device_fd, /* I - Device file */
int snmp_fd, /* I - SNMP socket (unused) */
+2 -81
Ver Arquivo
@@ -122,7 +122,6 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "admin");
cgiSetVariable("REFRESH_PAGE", "");
/*
* See if we have form data...
@@ -192,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 */
@@ -206,50 +205,7 @@ main(int argc, /* I - Number of command-line arguments */
fprintf(stderr, "DEBUG: redirecting with prefix %s!\n", prefix);
if ((url = cgiGetVariable("URL")) != NULL)
{
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);
}
}
printf("Location: %s%s\n\n", prefix, url);
else
printf("Location: %s/admin\n\n", prefix);
}
@@ -389,31 +345,6 @@ 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, "/");
@@ -536,7 +467,6 @@ 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 */
@@ -548,7 +478,6 @@ 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)
@@ -573,12 +502,6 @@ 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)
{
/*
@@ -2698,9 +2621,7 @@ 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");
-1
Ver Arquivo
@@ -54,7 +54,6 @@ 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);
-1
Ver Arquivo
@@ -72,7 +72,6 @@ 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...
+2 -9
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Online help CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 2007-2009 by Apple Inc.
* Copyright 2007-2008 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -63,7 +63,6 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "help");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Load the help index...
@@ -103,7 +102,7 @@ main(int argc, /* I - Number of command-line arguments */
*/
for (i = 0; i < argc; i ++)
fprintf(stderr, "DEBUG: argv[%d]=\"%s\"\n", i, argv[i]);
fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
if ((helpfile = getenv("PATH_INFO")) != NULL)
{
@@ -183,12 +182,6 @@ 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)");
+11 -27
Ver Arquivo
@@ -1398,9 +1398,7 @@ 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 */
*query, /* Query string */
*section; /* Section in web interface */
const char *var; /* Form variable */
void *search; /* Search data */
char url[1024], /* Printer URI */
val[1024]; /* Form variable */
@@ -1444,14 +1442,11 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
* Get a list of matching job objects.
*/
if ((query = cgiGetVariable("QUERY")) != NULL &&
if ((var = cgiGetVariable("QUERY")) != NULL &&
!cgiGetVariable("CLEAR"))
search = cgiCompileSearch(query);
search = cgiCompileSearch(var);
else
{
query = NULL;
search = NULL;
}
jobs = cgiGetIPPObjects(response, search);
count = cupsArrayCount(jobs);
@@ -1476,27 +1471,16 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
if (first < 0)
first = 0;
if ((var = cgiGetVariable("ORDER")) != NULL)
ascending = !strcasecmp(var, "asc");
else
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
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 ((var = cgiGetVariable("ORDER")) != NULL)
ascending = !strcasecmp(var, "asc");
else
{
ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
cgiSetVariable("ORDER", ascending ? "asc" : "dec");
}
if (ascending)
{
@@ -1518,7 +1502,7 @@ cgiShowJobs(http_t *http, /* I - Connection to server */
*/
if (dest)
snprintf(val, sizeof(val), "/%s/%s", section, dest);
snprintf(val, sizeof(val), "/%s/%s", cgiGetVariable("SECTION"), dest);
else
strlcpy(val, "/jobs/", sizeof(val));
-1
Ver Arquivo
@@ -57,7 +57,6 @@ main(int argc, /* I - Number of command-line arguments */
*/
cgiSetVariable("SECTION", "jobs");
cgiSetVariable("REFRESH_PAGE", "");
/*
* Connect to the HTTP server...
-1
Ver Arquivo
@@ -1,5 +1,4 @@
_cgiCheckVariables
_cgiClearVariables
_cgiCompileSearch
_cgiCopyTemplateFile
_cgiCopyTemplateLang
-1
Ver Arquivo
@@ -73,7 +73,6 @@ 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...
+1 -3
Ver Arquivo
@@ -675,8 +675,6 @@ 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
@@ -697,7 +695,7 @@ cgi_puturi(const char *s, /* I - String to output */
{
while (*s)
{
if (strchr("%@&+ <>#=", *s) || *s < ' ' || *s & 128)
if (strchr("%&+ <>#=", *s) || *s & 128)
fprintf(out, "%%%02X", *s & 255);
else
putc(*s, out);
+9 -35
Ver Arquivo
@@ -15,7 +15,6 @@
* 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.
@@ -135,31 +134,6 @@ 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...
*/
@@ -177,7 +151,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */
if (element < 0 || element >= var->nvalues)
return (NULL);
return (_cupsStrRetain(var->values[element]));
return (var->values[element]);
}
@@ -232,7 +206,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */
var->values[var->nvalues - 1]));
#endif /* DEBUG */
return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1]));
return ((var == NULL) ? NULL : var->values[var->nvalues - 1]);
}
@@ -363,9 +337,9 @@ cgiSetArray(const char *name, /* I - Name of variable */
var->nvalues = element + 1;
}
else if (var->values[element])
_cupsStrFree((char *)var->values[element]);
free((char *)var->values[element]);
var->values[element] = _cupsStrAlloc(value);
var->values[element] = strdup(value);
}
}
@@ -410,7 +384,7 @@ cgiSetSize(const char *name, /* I - Name of variable */
{
for (i = size; i < var->nvalues; i ++)
if (var->values[i])
_cupsStrFree((void *)(var->values[i]));
free((void *)(var->values[i]));
}
var->nvalues = size;
@@ -443,9 +417,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */
{
for (i = 0; i < var->nvalues; i ++)
if (var->values[i])
_cupsStrFree((char *)var->values[i]);
free((char *)var->values[i]);
var->values[0] = _cupsStrAlloc(value);
var->values[0] = strdup(value);
var->nvalues = 1;
}
}
@@ -491,10 +465,10 @@ cgi_add_variable(const char *name, /* I - Variable name */
if ((var->values = calloc(element + 1, sizeof(char *))) == NULL)
return;
var->name = _cupsStrAlloc(name);
var->name = strdup(name);
var->nvalues = element + 1;
var->avalues = element + 1;
var->values[element] = _cupsStrAlloc(value);
var->values[element] = strdup(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 ; then \
if test -r $(BUILDROOT)$(PAMDIR)/cups/$(PAMFILE) ; then \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
else \
$(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
+3
Ver Arquivo
@@ -0,0 +1,3 @@
#%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 @PAMMODAUTH@
auth required @PAMMOD@ nullok shadow
account required @PAMMOD@
+9 -3
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-common.m4 8841 2009-10-07 16:24:25Z mike $"
dnl "$Id: cups-common.m4 8783 2009-08-28 17:51:05Z 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.2"
CUPS_VERSION="1.4.1"
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'`"
@@ -266,6 +266,11 @@ if test "x$enable_dbus" != xno; then
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
@@ -284,6 +289,7 @@ 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"
@@ -349,5 +355,5 @@ AC_SUBST(FONTS)
AC_SUBST(LEGACY_BACKENDS)
dnl
dnl End of "$Id: cups-common.m4 8841 2009-10-07 16:24:25Z mike $".
dnl End of "$Id: cups-common.m4 8783 2009-08-28 17:51:05Z mike $".
dnl
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-defaults.m4 8841 2009-10-07 16:24:25Z mike $"
dnl "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
@@ -325,8 +325,8 @@ if test x$default_lpdconfigfile != xno; then
CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist"
;;
*)
if test "x$XINETD" != x; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd://$XINETD/cups-lpd"
if test -d /etc/xinetd.d; then
CUPS_DEFAULT_LPD_CONFIG_FILE="xinetd:///etc/xinetd.d/cups-lpd"
else
CUPS_DEFAULT_LPD_CONFIG_FILE=""
fi
@@ -435,5 +435,5 @@ AC_SUBST(BANNERTOPS)
AC_SUBST(TEXTTOPS)
dnl
dnl End of "$Id: cups-defaults.m4 8841 2009-10-07 16:24:25Z mike $".
dnl End of "$Id: cups-defaults.m4 8344 2009-02-10 17:05:35Z mike $".
dnl
+17 -15
Ver Arquivo
@@ -1,5 +1,5 @@
dnl
dnl "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $"
dnl "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $"
dnl
dnl PAM stuff for the Common UNIX Printing System (CUPS).
dnl
@@ -22,10 +22,9 @@ if test $uname = AIX; then
fi
PAMDIR=""
PAMFILE="pam.std"
PAMFILE=""
PAMLIBS=""
PAMMOD="pam_unknown.so"
PAMMODAUTH="pam_unknown.so"
if test x$enable_pam != xno; then
SAVELIBS="$LIBS"
@@ -61,7 +60,7 @@ if test x$enable_pam != xno; then
case "$uname" in
Darwin*)
# Darwin/Mac OS X
# Darwin, MacOS 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
@@ -71,22 +70,26 @@ 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"
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"
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
fi
if test "x$PAMMOD" = xpam_unix.so; then
PAMMODAUTH="$PAMMOD shadow nodelay"
else
PAMMODAUTH="$PAMMOD nodelay"
fi
PAMFILE="pam.std"
;;
esac
fi
@@ -95,8 +98,7 @@ AC_SUBST(PAMDIR)
AC_SUBST(PAMFILE)
AC_SUBST(PAMLIBS)
AC_SUBST(PAMMOD)
AC_SUBST(PAMMODAUTH)
dnl
dnl End of "$Id: cups-pam.m4 8825 2009-09-22 21:53:31Z mike $".
dnl End of "$Id: cups-pam.m4 8344 2009-02-10 17:05:35Z mike $".
dnl
+2 -2
Ver Arquivo
@@ -59,10 +59,10 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0402
# define CUPS_VERSION 1.0401
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 4
# define CUPS_VERSION_PATCH 2
# define CUPS_VERSION_PATCH 1
# define CUPS_BC_FD 3 /* Back-channel file descriptor for select/poll */
# define CUPS_DATE_ANY (time_t)-1
+1 -21
Ver Arquivo
@@ -191,23 +191,9 @@ 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...
*/
@@ -216,8 +202,6 @@ 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);
}
@@ -395,7 +379,6 @@ 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, "
@@ -414,7 +397,6 @@ cupsSideChannelSNMPWalk(
current_oid = oid;
oidlen = (int)strlen(oid);
last_oid[0] = '\0';
do
{
@@ -440,8 +422,7 @@ cupsSideChannelSNMPWalk(
* Parse the response of the form "oid\0value"...
*/
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.' ||
!strcmp(real_data, last_oid))
if (strncmp(real_data, oid, oidlen) || real_data[oidlen] != '.')
{
/*
* Done with this set of OIDs...
@@ -467,7 +448,6 @@ cupsSideChannelSNMPWalk(
*/
current_oid = real_data;
strlcpy(last_oid, current_oid, sizeof(last_oid));
}
}
while (status == CUPS_SC_STATUS_OK);
-1
Ver Arquivo
@@ -55,7 +55,6 @@ 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 */
+3 -9
Ver Arquivo
@@ -608,8 +608,6 @@ _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 */
/*
@@ -633,15 +631,14 @@ _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");
@@ -655,8 +652,7 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (-1);
}
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix) ||
_cupsSNMPIsOID(&packet, lastoid))
if (!_cupsSNMPIsOIDPrefixed(&packet, prefix))
{
DEBUG_printf(("5_cupsSNMPWalk: Returning %d", count));
@@ -670,8 +666,6 @@ _cupsSNMPWalk(int fd, /* I - SNMP socket */
return (count > 0 ? count : -1);
}
_cupsSNMPCopyOID(lastoid, packet.object_name, CUPS_SNMP_MAX_OID);
count ++;
(*cb)(&packet, data);
+30 -30
Ver Arquivo
@@ -7,33 +7,33 @@ Terminal=false
Type=Application
Name=Manage Printing
Comment=CUPS Web Interface
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 網頁介面
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 網頁介面
+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_DATA) $$lang/index.html $(DOCDIR)/$$lang; \
$(INSTALL_DATA) $$lang/cups.css $(DOCDIR)/$$lang >/dev/null 2>&1 || true; \
$(INSTALL_MAN) $$lang/index.html $(DOCDIR)/$$lang; \
test -f $$lang/cups.css && $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang; \
fi; \
done
+1 -1
Ver Arquivo
@@ -17,7 +17,7 @@ SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></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&auml;ge&nbsp;&nbsp;</A></TD>
<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Auftr&uuml;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"
+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 stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
manually, you will need to restart the scheduler to make them
active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+79 -86
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 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>
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>
<p>The width and length define the dimensions of the media. Each
number is optionally followed by one of the following unit
@@ -459,15 +459,17 @@ Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>Attribute</code> directive creates a PPD 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>
name is any combination of letters, numbers, and the underscore
and can be up to 40 characters in length.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</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 value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 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>
<h3>See Also</h3>
@@ -493,15 +495,14 @@ 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 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>
current option. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</p>
<p>If provided, the text can be any string up to 80 bytes
<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>The code is any string and may contain multiple lines,
however no one line may exceed 255 bytes.</p>
however no one line may exceed 255 characters.</p>
<h3>See Also</h3>
@@ -567,12 +568,11 @@ 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 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>
printer driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</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>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>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 bytes.</p>
may exceed 255 characters.</p>
<h2 class="title"><a name='CustomMedia'>CustomMedia</a></h2>
@@ -730,12 +730,11 @@ 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 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>
the driver. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</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>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>The width and length arguments specify the dimensions of the
media as defined for the <a href="#_media"><code>#media</code></a>
@@ -748,7 +747,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
bytes in length.</p>
characters in length.</p>
<h3>See Also</h3>
@@ -824,12 +823,11 @@ 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 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 name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1046,15 +1044,14 @@ Finishing "Glossy/Photo Overcoat"
<h3>Description</h3>
<p>The <code>Finishing</code> directive adds a choice to the
<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>
<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>
<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>
<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>
<h3>See Also</h3>
@@ -1094,7 +1091,8 @@ 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
@@ -1141,16 +1139,14 @@ Group "Special/Vendor Options"
<h3>Description</h3>
<p>The <code>Group</code> directive specifies the group for new
<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>
<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>
<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>
<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>
<center><table width='80%' border='1' bgcolor='#cccccc' cellpadding='5' cellspacing='0'>
<tr>
@@ -1158,8 +1154,8 @@ options, respectively.</p>
<p>Because of certain API binary compatibility issues,
CUPS limits the length of PPD group translation strings
(text) to 40 bytes, while the PPD specification
allows for up to 80 bytes.</p>
(text) to 40 characters, while the PPD specification
allows for up to 80 characters.</p>
</td>
</tr>
@@ -1233,12 +1229,11 @@ 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 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 name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<h3>See Also</h3>
@@ -1276,12 +1271,11 @@ 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 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>
<code>False</code>. The name is any combination of letters, numbers,
and the underscore and can be up to 40 characters in length.</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>If provided, the text can be any string up to 80 characters
in length. If no text is provided, the name is used.</p>
<h2 class="title"><a name='LocAttribute'>LocAttribute</a></h2>
@@ -1301,15 +1295,17 @@ LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
<h3>Description</h3>
<p>The <code>LocAttribute</code> directive creates a localized PPD
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>
attribute. The name is any combination of letters, numbers, and the
underscore and can be up to 40 characters in length.</p>
<p>The selector can be the empty string (<code>""</code>) or text of up
to 80 bytes.</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 value is any string or number; the string may contain multiple
lines, however no one line may exceed 255 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>
<h3>See Also</h3>
@@ -1462,15 +1458,13 @@ 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 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 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>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>
<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>
<h3>See Also</h3>
@@ -1538,7 +1532,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 bytes to conform to the Adobe limits on the length of
31 characters to conform to the Adobe limits on the length of
<code>ShortNickName</code>.</p>
<h3>See Also</h3>
@@ -1604,12 +1598,11 @@ 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
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>
is any combination of letters, numbers, and the underscore and
can be up to 40 characters in length.</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>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>The type argument is one of the following keywords:</p>
@@ -1756,8 +1749,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 bytes in length.
If no text is provided, the name is used.</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>
<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 stop the scheduler first, make your
changes, and then start the scheduler to make them active.</P>
manually, you will need to restart the scheduler to make them
active.</P>
<H2 CLASS="title"><A NAME="Accepting">Accepting</A></H2>
+2 -13
Ver Arquivo
@@ -8,7 +8,7 @@
</head>
<body>
<!--
"$Id: spec-ipp.html 8816 2009-09-14 21:41:50Z mike $"
"$Id: spec-ipp.html 8801 2009-08-29 06:05:14Z 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
Cancel-Job request:
Set-Job-Attributes request:
<p>Group 1: Operation Attributes
@@ -632,17 +632,6 @@ 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
+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 && ch != EOF)
while ((ch = getc(fp)) != StringTerminator)
if (bufptr < (buf + sizeof(buf) - 1))
*bufptr++ = ch;
*bufptr = '\0';
-1
Ver Arquivo
@@ -728,7 +728,6 @@ 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...
+25 -35
Ver Arquivo
@@ -2324,9 +2324,8 @@ 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 changed_driver, /* Changed the PPD/interface script? */
need_restart_job, /* Need to restart job? */
set_device_uri, /* Did we set the device URI? */
int need_restart_job; /* Need to restart job? */
int set_device_uri, /* Did we set the device URI? */
set_port_monitor; /* Did we set the port monitor? */
@@ -2470,7 +2469,6 @@ 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",
@@ -2724,7 +2722,6 @@ 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));
@@ -2795,6 +2792,18 @@ 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
{
@@ -2811,7 +2820,6 @@ 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"))
{
@@ -2849,33 +2857,19 @@ 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);
}
if (!RunUser)
{
apple_unregister_profiles(printer);
apple_register_profiles(printer);
}
#endif /* __APPLE__ */
}
}
/*
@@ -8476,9 +8470,7 @@ ppd_parse_line(const char *line, /* I - Line */
* Read the option name...
*/
for (line += 8, olen --;
*line > ' ' && *line < 0x7f && *line != ':' && *line != '/';
line ++)
for (line += 8, olen --; isalnum(*line & 255); line ++)
if (olen > 0)
{
*option++ = *line;
@@ -8506,9 +8498,7 @@ ppd_parse_line(const char *line, /* I - Line */
while (isspace(*line & 255))
line ++;
for (clen --;
*line > ' ' && *line < 0x7f && *line != ':' && *line != '/';
line ++)
for (clen --; isalnum(*line & 255); line ++)
if (clen > 0)
{
*choice++ = *line;
+1 -2
Ver Arquivo
@@ -1518,7 +1518,6 @@ 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...
@@ -3835,7 +3834,7 @@ delete_printer_filters(
for (filter = mimeFirstFilter(MimeDatabase);
filter;
filter = mimeNextFilter(MimeDatabase))
if (filter->dst == p->filetype || filter->dst == p->prefiltertype)
if (filter->dst == p->filetype)
{
/*
* Delete the current filter...
+25 -169
Ver Arquivo
@@ -100,17 +100,6 @@ 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)...
*/
@@ -368,7 +357,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)
@@ -1398,18 +1387,18 @@ main(int argc, /* I - Number of command-line args */
{
check_basics(argv[i]);
if (warn & WARN_DEFAULTS)
errors = check_defaults(ppd, 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_DEFAULTS)
errors = check_defaults(ppd, errors, verbose, 1);
if (warn & WARN_PROFILES)
errors = check_profiles(ppd, root, errors, verbose, 1);
if (warn & WARN_FILTERS)
errors = check_filters(ppd, root, errors, verbose, 1);
if (warn & WARN_SIZES)
errors = check_sizes(ppd, errors, verbose, 1);
else
@@ -2422,7 +2411,6 @@ 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**";
@@ -2464,28 +2452,14 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
program);
}
if (stat(pathprog, &fileinfo))
if (access(pathprog, X_OK))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsFilter "
"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);
"file \"%s\"\n"), prefix, program);
if (!warn)
errors ++;
@@ -2549,33 +2523,18 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
program);
}
if (stat(pathprog, &fileinfo))
if (access(pathprog, X_OK))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsPreFilter "
"file \"%s\"\n"), prefix, pathprog);
"file \"%s\"\n"), prefix, program);
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);
}
@@ -2603,11 +2562,8 @@ 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 || stat(pathprog, &fileinfo))
if (!attr->value || access(attr->value, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2615,28 +2571,13 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APDialogExtension 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_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APDialogExtension file \"%s\"\n"), prefix,
pathprog);
prefix, attr->value ? attr->value : "<NULL>");
if (!warn)
errors ++;
}
else
errors = valid_path("APDialogExtension", pathprog, errors, verbose,
errors = valid_path("APDialogExtension", attr->value, errors, verbose,
warn);
}
@@ -2660,10 +2601,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
if (!attr->value || access(attr->value, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2671,28 +2609,13 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterIconPath 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_DATAFILE)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterIconPath file \"%s\"\n"), prefix,
pathprog);
prefix, attr->value ? attr->value : "<NULL>");
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterIconPath", pathprog, errors, verbose,
errors = valid_path("APPrinterIconPath", attr->value, errors, verbose,
warn);
}
@@ -2716,10 +2639,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
if (!attr->value || access(attr->value, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2727,28 +2647,13 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterLowInkTool 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_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterLowInkTool file \"%s\"\n"), prefix,
pathprog);
prefix, attr->value ? attr->value : "<NULL>");
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterLowInkTool", pathprog, errors, verbose,
errors = valid_path("APPrinterLowInkTool", attr->value, errors, verbose,
warn);
}
@@ -2772,10 +2677,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
snprintf(pathprog, sizeof(pathprog), "%s%s", root,
attr->value ? attr->value : "(null)");
if (!attr->value || stat(pathprog, &fileinfo))
if (!attr->value || access(attr->value, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2783,28 +2685,13 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing "
"APPrinterUtilityPath 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_DIRECTORY)
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Bad permissions on "
"APPrinterUtilityPath file \"%s\"\n"), prefix,
pathprog);
prefix, attr->value ? attr->value : "<NULL>");
if (!warn)
errors ++;
}
else
errors = valid_path("APPrinterUtilityPath", pathprog, errors, verbose,
errors = valid_path("APPrinterUtilityPath", attr->value, errors, verbose,
warn);
}
@@ -2828,7 +2715,7 @@ check_filters(ppd_file_t *ppd, /* I - PPD file */
errors ++;
}
if (!attr->value || stat(attr->value, &fileinfo))
if (!attr->value || access(attr->value, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
@@ -2841,21 +2728,6 @@ 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);
@@ -2896,7 +2768,6 @@ 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 */
@@ -2951,29 +2822,14 @@ check_profiles(ppd_file_t *ppd, /* I - PPD file */
attr->value);
}
if (stat(filename, &fileinfo))
if (access(filename, 0))
{
if (!warn && !errors && !verbose)
_cupsLangPuts(stdout, _(" FAIL\n"));
if (verbose >= 0)
_cupsLangPrintf(stdout, _(" %s Missing cupsICCProfile "
"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);
"file \"%s\"!\n"), prefix, attr->value);
if (!warn)
errors ++;
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Template makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 2007-2009 by Apple Inc.
# Copyright 2007-2008 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 >/dev/null 2>&1 || true; \
$(INSTALL_DATA) $$lang/$$file $(DATADIR)/templates/$$lang 2>/dev/null || true; \
done \
fi \
done
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
<DIV CLASS="indent">
<H2 CLASS="title">Standardeinstellungen f&uuml;r {printer_name} festlegen</H2>
<H2 CLASS="title">Standardeinstellungen f%uuml;r {printer_name} festlegen</H2>
<FORM METHOD="POST" ACTION="/admin">
<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+1 -1
Ver Arquivo
@@ -31,7 +31,7 @@
<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server"><INPUT TYPE="SUBMIT" VALUE="Редактировать конфигурационный файл"></FORM>
<FORM ACTION="/admin/log/access_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Показать журнал заданий"></FORM>
<FORM ACTION="/admin/log/error_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Показать журнал ошибок"></FORM>
<FORM ACTION="/admin/log/page_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Показать журнал страниц"></FORM>
<FORM ACTION="/admin/log/page_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Показать журнал страниц">
</P>
{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
<H2 CLASS="title">Очистка всех заданий для {is_class?группы:принтера} {printer_name}</H2>
<P>Все задания для {is_class?группы:принтера} «<A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>»
HREF="/{is_class?группы:принтеры}/{printer_name}">{printer_name}</A>»
очищены.</P>
</DIV>
</DIV>
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
<H2 CLASS="title">Отмена заданий для {is_class?группы:принтера} {printer_name}</H2>
<P>{is_class?Группа:Принтер} «<A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>»
HREF="/{is_class?группы:принтеры}/{printer_name}">{printer_name}</A>»
больше не принимает задания.</P>
</DIV>
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
<H2 CLASS="title">Возобновить работу {is_class?группы:принтера} {printer_name}</H2>
<P>{is_class?Группа:Принтер} «<A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>»
HREF="/{is_class?группы:принтеры}/{printer_name}">{printer_name}</A>»
теперь принимают задания.</P>
</DIV>
</DIV>
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
<H2 CLASS="title">Приостановить {is_class?группу:принтер} {printer_name}</H2>
<P>{is_class?Группа:Принтер} «<A
HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>»
HREF="/{is_class?группы:принтеры}/{printer_name}">{printer_name}</A>»
{is_class?была приостановлена:был приостановлен}.</P>
</DIV>
</DIV>