diff options
author | Didier Raboud <odyx@debian.org> | 2018-11-19 17:13:06 +0100 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2018-11-19 21:52:39 +0100 |
commit | 0d57b30e1b83c6b68f0760c664571cc503351dd9 (patch) | |
tree | 7cc3f1a8c43cd3fc18742ef7577178d9827fd08a | |
parent | af8570596246e5dca8f44ead3b78eacbdb49d667 (diff) | |
parent | 4bffceb42f2a9bc3b38a38258b3a8e0f98918ce4 (diff) |
merge patched-debian/master into debian/master
-rw-r--r-- | debian/.git-dpm | 4 | ||||
-rw-r--r-- | debian/patches/0040-Revert-Fix-regression-in-lpadmin-fix-Issue-5305.patch | 192 | ||||
-rw-r--r-- | debian/patches/0041-Revert-Use-Enable-Printer-and-Resume-Printer-operati.patch | 77 | ||||
-rw-r--r-- | debian/patches/series | 2 | ||||
-rw-r--r-- | systemv/lpadmin.c | 57 | ||||
-rw-r--r-- | test/5.1-lpadmin.sh | 4 | ||||
-rwxr-xr-x | test/run-stp-tests.sh | 37 |
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 |