summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2018-11-19 17:13:06 +0100
committerDidier Raboud <odyx@debian.org>2018-11-19 21:52:39 +0100
commit0d57b30e1b83c6b68f0760c664571cc503351dd9 (patch)
tree7cc3f1a8c43cd3fc18742ef7577178d9827fd08a
parentaf8570596246e5dca8f44ead3b78eacbdb49d667 (diff)
parent4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 (diff)
merge patched-debian/master into debian/master
-rw-r--r--debian/.git-dpm4
-rw-r--r--debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch192
-rw-r--r--debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch77
-rw-r--r--debian/patches/series2
-rw-r--r--systemv/lpadmin.c57
-rw-r--r--test/5.1-lpadmin.sh4
-rwxr-xr-xtest/run-stp-tests.sh37
7 files changed, 328 insertions, 45 deletions
diff --git a/debian/.git-dpm b/debian/.git-dpm
index 9eb2d7111..ff70f1017 100644
--- a/debian/.git-dpm
+++ b/debian/.git-dpm
@@ -1,6 +1,6 @@
# see git-dpm(1) from git-dpm package
-eb30fc494fc279375c45da1acf2a8eefb017e1dd
-eb30fc494fc279375c45da1acf2a8eefb017e1dd
+4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4
+4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4
8b4e44a9626844bc5ee50279ead7b312fb263a12
8b4e44a9626844bc5ee50279ead7b312fb263a12
cups_2.2.9.orig.tar.gz
diff --git a/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch b/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch
new file mode 100644
index 000000000..2e388ca22
--- /dev/null
+++ b/debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch
@@ -0,0 +1,192 @@
+From 8d088ceb015d4dbf74232dcd47a9d15b4af8024b Mon Sep 17 00:00:00 2001
+From: Didier Raboud <odyx@debian.org>
+Date: Mon, 19 Nov 2018 21:51:44 +0100
+Subject: Revert "Fix regression in lpadmin fix (Issue #5305)"
+
+This reverts commit a83658fac59537cf1caf99791fa7edb0deb95c6f.
+---
+ systemv/lpadmin.c | 19 +++++--------------
+ test/5.1-lpadmin.sh | 4 ++--
+ test/run-stp-tests.sh | 37 +++++++++++++++++++++++++++++--------
+ 3 files changed, 36 insertions(+), 24 deletions(-)
+
+diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
+index 6828f8a1d..8ea9f3f7b 100644
+--- a/systemv/lpadmin.c
++++ b/systemv/lpadmin.c
+@@ -38,7 +38,7 @@ static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
+ size_t urisize);
+ static int set_printer_options(http_t *http, char *printer,
+ int num_options, cups_option_t *options,
+- char *file, int enable);
++ char *file);
+ static int validate_name(const char *name);
+
+
+@@ -56,7 +56,6 @@ main(int argc, /* I - Number of command-line arguments */
+ *pclass, /* Printer class name */
+ *opt, /* Option pointer */
+ *val; /* Pointer to allow/deny value */
+- int enable = 0; /* Enable/resume printer? */
+ int num_options; /* Number of options */
+ cups_option_t *options; /* Options */
+ char *file, /* New PPD file */
+@@ -266,7 +265,8 @@ main(int argc, /* I - Number of command-line arguments */
+ }
+ }
+
+- enable = 1;
++ if (enable_printer(http, printer))
++ return (1);
+ break;
+
+ case 'm' : /* Use the specified standard script/PPD file */
+@@ -649,11 +649,9 @@ main(int argc, /* I - Number of command-line arguments */
+ }
+ }
+
+- if (set_printer_options(http, printer, num_options, options, file, enable))
++ if (set_printer_options(http, printer, num_options, options, file))
+ return (1);
+ }
+- else if (enable && enable_printer(http, printer))
+- return (1);
+
+ if (evefile[0])
+ unlink(evefile);
+@@ -1340,8 +1338,7 @@ set_printer_options(
+ char *printer, /* I - Printer */
+ int num_options, /* I - Number of options */
+ cups_option_t *options, /* I - Options */
+- char *file, /* I - PPD file */
+- int enable) /* I - Enable printer? */
++ char *file) /* I - PPD file/interface script */
+ {
+ ipp_t *request; /* IPP Request */
+ const char *ppdfile; /* PPD filename */
+@@ -1387,12 +1384,6 @@ set_printer_options(
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+
+- if (enable)
+- {
+- ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE);
+- ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
+- }
+-
+ /*
+ * Add the options...
+ */
+diff --git a/test/5.1-lpadmin.sh b/test/5.1-lpadmin.sh
+index 08b8c508f..efcfce482 100644
+--- a/test/5.1-lpadmin.sh
++++ b/test/5.1-lpadmin.sh
+@@ -52,8 +52,8 @@ echo ""
+
+ echo "Add Shared Printer Test"
+ echo ""
+-echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere"
+-$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere 2>&1
++echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw"
++$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw 2>&1
+ if test $? != 0; then
+ echo " FAILED"
+ exit 1
+diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
+index 1176ded56..e704a4eed 100755
+--- a/test/run-stp-tests.sh
++++ b/test/run-stp-tests.sh
+@@ -94,35 +94,40 @@ echo ""
+ case "$testtype" in
+ 0)
+ echo "Running in test mode (0)"
+- nprinters=0
++ nprinters1=0
++ nprinters2=0
+ pjobs=0
+ pprinters=0
+ loglevel="debug2"
+ ;;
+ 2)
+ echo "Running the medium tests (2)"
+- nprinters=20
++ nprinters1=10
++ nprinters2=20
+ pjobs=20
+ pprinters=10
+ loglevel="debug"
+ ;;
+ 3)
+ echo "Running the extreme tests (3)"
+- nprinters=1000
++ nprinters1=500
++ nprinters2=1000
+ pjobs=100
+ pprinters=50
+ loglevel="debug"
+ ;;
+ 4)
+ echo "Running the torture tests (4)"
+- nprinters=20000
++ nprinters1=10000
++ nprinters2=20000
+ pjobs=200
+ pprinters=100
+ loglevel="debug"
+ ;;
+ *)
+ echo "Running the timid tests (1)"
+- nprinters=0
++ nprinters1=0
++ nprinters2=0
+ pjobs=10
+ pprinters=0
+ loglevel="debug2"
+@@ -534,13 +539,13 @@ if test $ssltype != 0 -a `uname` = Darwin; then
+ fi
+
+ #
+-# Setup lots of test queues with PPD files...
++# Setup lots of test queues - half with PPD files, half without...
+ #
+
+ echo "Creating printers.conf for test..."
+
+ i=1
+-while test $i -le $nprinters; do
++while test $i -le $nprinters1; do
+ cat >>$BASE/printers.conf <<EOF
+ <Printer test-$i>
+ Accepting Yes
+@@ -558,6 +563,22 @@ EOF
+ i=`expr $i + 1`
+ done
+
++while test $i -le $nprinters2; do
++ cat >>$BASE/printers.conf <<EOF
++<Printer test-$i>
++Accepting Yes
++DeviceURI file:/dev/null
++Info Test raw printer $i
++JobSheets none none
++Location CUPS test suite
++State Idle
++StateMessage Printer $1 is idle.
++</Printer>
++EOF
++
++ i=`expr $i + 1`
++done
++
+ if test -f $BASE/printers.conf; then
+ cp $BASE/printers.conf $BASE/printers.conf.orig
+ else
+@@ -901,7 +922,7 @@ fi
+
+ # Requests logged
+ count=`wc -l $BASE/log/access_log | awk '{print $1}'`
+-expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
++expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
+ if test $count != $expected; then
+ echo "FAIL: $count requests logged, expected $expected."
+ echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
diff --git a/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch b/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch
new file mode 100644
index 000000000..ee195744b
--- /dev/null
+++ b/debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch
@@ -0,0 +1,77 @@
+From 4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 Mon Sep 17 00:00:00 2001
+From: Didier Raboud <odyx@debian.org>
+Date: Mon, 19 Nov 2018 21:52:11 +0100
+Subject: Revert "Use Enable-Printer and Resume-Printer operations so we don't
+ create a bogus printer (Issue #5305)"
+
+This reverts commit 2b4e4ed7d80b47f9aaf6b98aaa85cf2c0e9273a9.
+---
+ systemv/lpadmin.c | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
+index 8ea9f3f7b..5b78eb57b 100644
+--- a/systemv/lpadmin.c
++++ b/systemv/lpadmin.c
+@@ -1127,33 +1127,33 @@ enable_printer(http_t *http, /* I - Server connection */
+ DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer));
+
+ /*
+- * Send IPP_OP_ENABLE_PRINTER and IPP_OP_RESUME_PRINTER requests, which
++ * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
+ * require the following attributes:
+ *
+ * attributes-charset
+ * attributes-natural-language
+ * printer-uri
+ * requesting-user-name
++ * printer-state
++ * printer-is-accepting-jobs
+ */
+
+- request = ippNewRequest(IPP_OP_ENABLE_PRINTER);
+-
+- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+-
+- ippDelete(cupsDoRequest(http, request, "/admin/"));
+-
+- if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
+- {
+- _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
+-
+- return (1);
+- }
++ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
++ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
++ else
++ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
+
+- request = ippNewRequest(IPP_OP_RESUME_PRINTER);
++ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
++ "printer-uri", NULL, uri);
++ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
++ "requesting-user-name", NULL, cupsUser());
++ ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
++ IPP_PSTATE_IDLE);
++ ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
+
+- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
++ /*
++ * Do the request and get back a response...
++ */
+
+ ippDelete(cupsDoRequest(http, request, "/admin/"));
+
+@@ -1163,8 +1163,8 @@ enable_printer(http_t *http, /* I - Server connection */
+
+ return (1);
+ }
+-
+- return (0);
++ else
++ return (0);
+ }
+
+
diff --git a/debian/patches/series b/debian/patches/series
index 8f91b4288..42f0cff6b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -37,3 +37,5 @@ debianize_cups-config.patch
0037-Build-mantohtml-with-the-build-architecture-compiler.patch
0038-The-lp-and-lpr-commands-now-provide-better-error-mes.patch
manpage-translations.patch
+0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch
+0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
index 6828f8a1d..5b78eb57b 100644
--- a/systemv/lpadmin.c
+++ b/systemv/lpadmin.c
@@ -38,7 +38,7 @@ static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri,
size_t urisize);
static int set_printer_options(http_t *http, char *printer,
int num_options, cups_option_t *options,
- char *file, int enable);
+ char *file);
static int validate_name(const char *name);
@@ -56,7 +56,6 @@ main(int argc, /* I - Number of command-line arguments */
*pclass, /* Printer class name */
*opt, /* Option pointer */
*val; /* Pointer to allow/deny value */
- int enable = 0; /* Enable/resume printer? */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
char *file, /* New PPD file */
@@ -266,7 +265,8 @@ main(int argc, /* I - Number of command-line arguments */
}
}
- enable = 1;
+ if (enable_printer(http, printer))
+ return (1);
break;
case 'm' : /* Use the specified standard script/PPD file */
@@ -649,11 +649,9 @@ main(int argc, /* I - Number of command-line arguments */
}
}
- if (set_printer_options(http, printer, num_options, options, file, enable))
+ if (set_printer_options(http, printer, num_options, options, file))
return (1);
}
- else if (enable && enable_printer(http, printer))
- return (1);
if (evefile[0])
unlink(evefile);
@@ -1129,33 +1127,33 @@ enable_printer(http_t *http, /* I - Server connection */
DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer));
/*
- * Send IPP_OP_ENABLE_PRINTER and IPP_OP_RESUME_PRINTER requests, which
+ * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
* require the following attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
* requesting-user-name
+ * printer-state
+ * printer-is-accepting-jobs
*/
- request = ippNewRequest(IPP_OP_ENABLE_PRINTER);
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
-
- ippDelete(cupsDoRequest(http, request, "/admin/"));
-
- if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
- {
- _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
-
- return (1);
- }
+ if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
+ else
+ request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
- request = ippNewRequest(IPP_OP_RESUME_PRINTER);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
+ "printer-uri", NULL, uri);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ "requesting-user-name", NULL, cupsUser());
+ ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
+ IPP_PSTATE_IDLE);
+ ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+ /*
+ * Do the request and get back a response...
+ */
ippDelete(cupsDoRequest(http, request, "/admin/"));
@@ -1165,8 +1163,8 @@ enable_printer(http_t *http, /* I - Server connection */
return (1);
}
-
- return (0);
+ else
+ return (0);
}
@@ -1340,8 +1338,7 @@ set_printer_options(
char *printer, /* I - Printer */
int num_options, /* I - Number of options */
cups_option_t *options, /* I - Options */
- char *file, /* I - PPD file */
- int enable) /* I - Enable printer? */
+ char *file) /* I - PPD file/interface script */
{
ipp_t *request; /* IPP Request */
const char *ppdfile; /* PPD filename */
@@ -1387,12 +1384,6 @@ set_printer_options(
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
- if (enable)
- {
- ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PSTATE_IDLE);
- ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
- }
-
/*
* Add the options...
*/
diff --git a/test/5.1-lpadmin.sh b/test/5.1-lpadmin.sh
index 08b8c508f..efcfce482 100644
--- a/test/5.1-lpadmin.sh
+++ b/test/5.1-lpadmin.sh
@@ -52,8 +52,8 @@ echo ""
echo "Add Shared Printer Test"
echo ""
-echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere"
-$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m everywhere 2>&1
+echo " lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw"
+$runcups $VALGRIND ../systemv/lpadmin -p Test3 -E -v ipp://127.0.0.1:$IPP_PORT/printers/Test2 -m raw 2>&1
if test $? != 0; then
echo " FAILED"
exit 1
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index 1176ded56..e704a4eed 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -94,35 +94,40 @@ echo ""
case "$testtype" in
0)
echo "Running in test mode (0)"
- nprinters=0
+ nprinters1=0
+ nprinters2=0
pjobs=0
pprinters=0
loglevel="debug2"
;;
2)
echo "Running the medium tests (2)"
- nprinters=20
+ nprinters1=10
+ nprinters2=20
pjobs=20
pprinters=10
loglevel="debug"
;;
3)
echo "Running the extreme tests (3)"
- nprinters=1000
+ nprinters1=500
+ nprinters2=1000
pjobs=100
pprinters=50
loglevel="debug"
;;
4)
echo "Running the torture tests (4)"
- nprinters=20000
+ nprinters1=10000
+ nprinters2=20000
pjobs=200
pprinters=100
loglevel="debug"
;;
*)
echo "Running the timid tests (1)"
- nprinters=0
+ nprinters1=0
+ nprinters2=0
pjobs=10
pprinters=0
loglevel="debug2"
@@ -534,13 +539,13 @@ if test $ssltype != 0 -a `uname` = Darwin; then
fi
#
-# Setup lots of test queues with PPD files...
+# Setup lots of test queues - half with PPD files, half without...
#
echo "Creating printers.conf for test..."
i=1
-while test $i -le $nprinters; do
+while test $i -le $nprinters1; do
cat >>$BASE/printers.conf <<EOF
<Printer test-$i>
Accepting Yes
@@ -558,6 +563,22 @@ EOF
i=`expr $i + 1`
done
+while test $i -le $nprinters2; do
+ cat >>$BASE/printers.conf <<EOF
+<Printer test-$i>
+Accepting Yes
+DeviceURI file:/dev/null
+Info Test raw printer $i
+JobSheets none none
+Location CUPS test suite
+State Idle
+StateMessage Printer $1 is idle.
+</Printer>
+EOF
+
+ i=`expr $i + 1`
+done
+
if test -f $BASE/printers.conf; then
cp $BASE/printers.conf $BASE/printers.conf.orig
else
@@ -901,7 +922,7 @@ fi
# Requests logged
count=`wc -l $BASE/log/access_log | awk '{print $1}'`
-expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
+expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
if test $count != $expected; then
echo "FAIL: $count requests logged, expected $expected."
echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile